Compare commits

...

15 Commits
main ... win

Author SHA1 Message Date
Zack Scholl 6293331e76 add receive 2019-10-23 13:34:44 -07:00
Zack Scholl 6f1c496230 add image 2019-10-09 14:43:40 -07:00
Zack Scholl 6cdf8cecfc send file looks better 2019-10-09 08:50:22 -07:00
Zack Scholl e2198faa24 add go get ot makefile 2019-10-08 17:30:06 -07:00
Zack Scholl f005269a49 works for sending 2019-10-08 17:28:41 -07:00
Zack Scholl 3fcccecf37 add bar to public api 2019-10-08 17:21:22 -07:00
Zack Scholl 7fa4fc154a improve ui 2019-10-08 16:56:16 -07:00
Zack Scholl 00c41387ba add makeifle 2019-10-08 16:30:57 -07:00
Zack Scholl 3efa69eeb9 improved 2019-10-08 16:27:22 -07:00
Zack Scholl f89aea6470 improved 2019-10-08 16:25:16 -07:00
Zack Scholl 918fc21594 simplify app 2019-10-08 16:09:40 -07:00
Zack Scholl 376b922d6d slightly better 2019-10-08 15:50:56 -07:00
Zack Scholl 56d7b6f652 add separate gomod 2019-10-08 15:09:35 -07:00
Zack Scholl 31bcaeca9a split deps 2019-10-08 15:04:33 -07:00
Zack Scholl 394e52f00f update 2019-10-08 13:46:21 -07:00
8 changed files with 444 additions and 13 deletions

2
go.mod
View File

@ -22,7 +22,7 @@ require (
github.com/stretchr/testify v1.4.0
github.com/urfave/cli v1.22.1
golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc
golang.org/x/net v0.0.0-20191003171128-d98b1b443823 // indirect
golang.org/x/net v0.0.0-20191007182048-72f939374954 // indirect
golang.org/x/sys v0.0.0-20191002091554-b397fe3ad8ed // indirect
golang.org/x/text v0.3.2 // indirect
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect

4
go.sum
View File

@ -72,8 +72,8 @@ golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191003171128-d98b1b443823 h1:Ypyv6BNJh07T1pUSrehkLemqPKXhus2MkfktJ91kRh4=
golang.org/x/net v0.0.0-20191003171128-d98b1b443823/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191007182048-72f939374954 h1:JGZucVF/L/TotR719NbujzadOZ2AgnYlqphQGHDCKaU=
golang.org/x/net v0.0.0-20191007182048-72f939374954/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI=

View File

@ -89,7 +89,7 @@ type Client struct {
// tcp connections
conn []*comm.Comm
bar *progressbar.ProgressBar
Bar *progressbar.ProgressBar
spinner *spinner.Spinner
longestFilename int
firstSend bool
@ -667,7 +667,7 @@ func (c *Client) processMessage(payload []byte) (done bool, err error) {
}
c.Step3RecipientRequestFile = true
case "close-sender":
c.bar.Finish()
c.Bar.Finish()
log.Debug("close-sender received...")
c.Step4FileTransfer = false
c.Step3RecipientRequestFile = false
@ -829,7 +829,7 @@ func (c *Client) createEmptyFileAndFinish(fileInfo FileInfo, i int) (err error)
if len(c.FilesToTransfer) == 1 {
description = c.FilesToTransfer[i].Name
}
c.bar = progressbar.NewOptions64(1,
c.Bar = progressbar.NewOptions64(1,
progressbar.OptionOnCompletion(func() {
fmt.Fprintf(os.Stderr, " ✔️\n")
}),
@ -839,7 +839,7 @@ func (c *Client) createEmptyFileAndFinish(fileInfo FileInfo, i int) (err error)
progressbar.OptionSetBytes64(1),
progressbar.OptionSetWriter(os.Stderr),
)
c.bar.Finish()
c.Bar.Finish()
return
}
@ -912,7 +912,7 @@ func (c *Client) updateState() (err error) {
if len(c.FilesToTransfer) == 1 {
description = c.FilesToTransfer[i].Name
}
c.bar = progressbar.NewOptions64(1,
c.Bar = progressbar.NewOptions64(1,
progressbar.OptionOnCompletion(func() {
fmt.Fprintf(os.Stderr, " ✔️\n")
}),
@ -922,7 +922,7 @@ func (c *Client) updateState() (err error) {
progressbar.OptionSetBytes64(1),
progressbar.OptionSetWriter(os.Stderr),
)
c.bar.Finish()
c.Bar.Finish()
}
}
}
@ -954,7 +954,7 @@ func (c *Client) setBar() {
if len(c.FilesToTransfer) == 1 {
description = c.FilesToTransfer[c.FilesToTransferCurrentNum].Name
}
c.bar = progressbar.NewOptions64(
c.Bar = progressbar.NewOptions64(
c.FilesToTransfer[c.FilesToTransferCurrentNum].Size,
progressbar.OptionOnCompletion(func() {
fmt.Fprintf(os.Stderr, " ✔️\n")
@ -973,7 +973,7 @@ func (c *Client) setBar() {
log.Debug(c.FilesToTransfer[c.FilesToTransferCurrentNum].Size)
log.Debug(bytesDone)
if bytesDone > 0 {
c.bar.Add64(bytesDone)
c.Bar.Add64(bytesDone)
}
}
}
@ -1007,7 +1007,7 @@ func (c *Client) receiveData(i int) {
if err != nil {
panic(err)
}
c.bar.Add(len(data[8:]))
c.Bar.Add(len(data[8:]))
c.TotalSent += int64(len(data[8:]))
c.TotalChunksTransfered++
if c.TotalChunksTransfered == len(c.CurrentFileChunks) || c.TotalSent == c.FilesToTransfer[c.FilesToTransferCurrentNum].Size {
@ -1085,7 +1085,7 @@ func (c *Client) sendData(i int) {
if err != nil {
panic(err)
}
c.bar.Add(n)
c.Bar.Add(n)
c.TotalSent += int64(n)
// time.Sleep(100 * time.Millisecond)
} else {

15
src/win/Makefile Normal file
View File

@ -0,0 +1,15 @@
windows:
go get github.com/schollz/croc/v6@win
go build -v -ldflags -H=windowsgui -o croc.exe
linux:
go get github.com/schollz/croc/v6@win
go build -v -o croc
linuxprereqs:
sudo apt-get install libgl1-mesa-dev xorg-dev
sudo apt-get install libglib2.0-dev
sudo apt-get install libgtk-3-dev

BIN
src/win/croc.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

10
src/win/go.mod Normal file
View File

@ -0,0 +1,10 @@
module github.com/schollz/croc/src/win
go 1.13
require (
fyne.io/fyne v1.1.1
github.com/gotk3/gotk3 v0.0.0-20190930052053-f6994e9a1558 // indirect
github.com/schollz/croc/v6 v6.1.6-0.20191009214340-6f1c49623059
github.com/sqweek/dialog v0.0.0-20190728103509-6254ed5b0d3c
)

135
src/win/go.sum Normal file
View File

@ -0,0 +1,135 @@
fyne.io/fyne v1.1.1 h1:vmeT7lqdho+Upt/PWuDInj8xAkNAaZC/rbtr3goJczY=
fyne.io/fyne v1.1.1/go.mod h1:mz0CvQX1ACEjiDGpSH3D8Qf9yHq8dfYA039kG7p8ZhQ=
github.com/BurntSushi/freetype-go v0.0.0-20160129220410-b763ddbfe298/go.mod h1:D+QujdIlUNfa0igpNMk6UIvlb6C252URs4yupRUV4lQ=
github.com/BurntSushi/graphics-go v0.0.0-20160129215708-b43f31a4a966/go.mod h1:Mid70uvE93zn9wgF92A/r5ixgnvX8Lh68fxp9KQBaI0=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/BurntSushi/xgbutil v0.0.0-20160919175755-f7c97cef3b4e/go.mod h1:uw9h2sd4WWHOPdJ13MQpwK5qYWKYDumDqxWWIknEQ+k=
github.com/Kodeworks/golang-image-ico v0.0.0-20141118225523-73f0f4cfade9/go.mod h1:7uhhqiBaR4CpN0k9rMjOtjpcfGd6DG2m04zQxKnWQ0I=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q=
github.com/TheTitanrain/w32 v0.0.0-20180517000239-4f5cfb03fabf h1:FPsprx82rdrX2jiKyS17BH6IrTmUBYqZa/CXT4uvb+I=
github.com/TheTitanrain/w32 v0.0.0-20180517000239-4f5cfb03fabf/go.mod h1:peYoMncQljjNS6tZwI9WVyQB3qZS6u79/N3mBOcnd3I=
github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c=
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/go-gl/gl v0.0.0-20181026044259-55b76b7df9d2 h1:78Hza2KHn2PX1jdydQnffaU2A/xM0g3Nx1xmMdep9Gk=
github.com/go-gl/gl v0.0.0-20181026044259-55b76b7df9d2/go.mod h1:482civXOzJJCPzJ4ZOX/pwvXBWSnzD4OKMdH4ClKGbk=
github.com/go-gl/glfw v0.0.0-20181213070059-819e8ce5125f h1:7MsFMbSn8Lcw0blK4+NEOf8DuHoOBDhJsHz04yh13pM=
github.com/go-gl/glfw v0.0.0-20181213070059-819e8ce5125f/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/goki/freetype v0.0.0-20181231101311-fa8a33aabaff h1:W71vTCKoxtdXgnm1ECDFkfQnpdqAO00zzGXLA5yaEX8=
github.com/goki/freetype v0.0.0-20181231101311-fa8a33aabaff/go.mod h1:wfqRWLHRBsRgkp5dmbG56SA0DmVtwrF5N3oPdI8t+Aw=
github.com/gotk3/gotk3 v0.0.0-20190930052053-f6994e9a1558 h1:2u8Q078ei+2Uy9F8X3QH3BorSm1OhToj17PvggETsV8=
github.com/gotk3/gotk3 v0.0.0-20190930052053-f6994e9a1558/go.mod h1:Eew3QBwAOBTrfFFDmsDE5wZWbcagBL1NUslj1GhRveo=
github.com/jackmordaunt/icns v0.0.0-20181231085925-4f16af745526/go.mod h1:UQkeMHVoNcyXYq9otUupF7/h/2tmHlhrS2zw7ZVvUqc=
github.com/josephspurrier/goversioninfo v0.0.0-20190124120936-8611f5a5ff3f/go.mod h1:eJTEwMjXb7kZ633hO3Ln9mBUCOjX2+FlTljvpl9SYdE=
github.com/kalafut/imohash v1.0.0 h1:LgCJ+p/BwM2HKpOxFopkeddpzVCfm15EtXMroXD1SYE=
github.com/kalafut/imohash v1.0.0/go.mod h1:c3RHT80ZAp5C/aYgQI92ZlrOymqkZnRDprU87kg75HI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA=
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
github.com/mattn/go-gtk v0.0.0-20180216084204-5a311a1830ab/go.mod h1:PwzwfeB5syFHXORC3MtPylVcjIoTDT/9cvkKpEndGVI=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
github.com/mattn/go-isatty v0.0.9 h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg=
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
github.com/mattn/go-pointer v0.0.0-20171114154726-1d30dc4b6f28/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc=
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ=
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/schollz/croc v3.0.6+incompatible h1:rCfc8MGgcGjNW2/qSoulPh8CRGH+Ej4i3RWYOwhX9pE=
github.com/schollz/croc/v6 v6.1.5 h1:+qBtJXDb5uSoGpFELvfjofkSTrGc1g4YkNjF8XgEXwY=
github.com/schollz/croc/v6 v6.1.5/go.mod h1:tri46MTpgVh2pPQ9IJJsJDQKHK63VfMW4+lvJAKqVlE=
github.com/schollz/croc/v6 v6.1.6-0.20191009002122-3fcccecf3750 h1:LkqHUcYqFzWi1xWV1Mtz23yUTrgKKOgTpY72IuaTi/Y=
github.com/schollz/croc/v6 v6.1.6-0.20191009002122-3fcccecf3750/go.mod h1:Wd/ZHrsZlxT21hRqbxaEWl8ww1uCHGR6xACaZQQV/wk=
github.com/schollz/croc/v6 v6.1.6-0.20191009003006-e2198faa24d0 h1:UH27BGqcbGDIog19qzaOGp6yYOwKNRZM1FgnKGpJ3PQ=
github.com/schollz/croc/v6 v6.1.6-0.20191009003006-e2198faa24d0/go.mod h1:Wd/ZHrsZlxT21hRqbxaEWl8ww1uCHGR6xACaZQQV/wk=
github.com/schollz/croc/v6 v6.1.6-0.20191009155022-6cdf8cecfc0a h1:yVOlp4bFxCFSLMQZq4aTmAe4xJx6uXTVV5J4rBxZiwY=
github.com/schollz/croc/v6 v6.1.6-0.20191009155022-6cdf8cecfc0a/go.mod h1:Wd/ZHrsZlxT21hRqbxaEWl8ww1uCHGR6xACaZQQV/wk=
github.com/schollz/croc/v6 v6.1.6-0.20191009214340-6f1c49623059 h1:zjVHFer4w5VAXCNGEhvD7zSBQPWafHZj797siKoRZPM=
github.com/schollz/croc/v6 v6.1.6-0.20191009214340-6f1c49623059/go.mod h1:Wd/ZHrsZlxT21hRqbxaEWl8ww1uCHGR6xACaZQQV/wk=
github.com/schollz/logger v1.0.1 h1:BuBAU+euqphM0Ny9qFVScl4RSxatis4nCHIkOxO2cUU=
github.com/schollz/logger v1.0.1/go.mod h1:P6F4/dGMGcx8wh+kG1zrNEd4vnNpEBY/mwEMd/vn6AM=
github.com/schollz/mnemonicode v1.0.1 h1:LiH5hwADZwjwnfXsaD4xgnMyTAtaKHN+e5AyjRU6WSU=
github.com/schollz/mnemonicode v1.0.1/go.mod h1:cl4UAOhUV0mkdjMj/QYaUZbZZdF8BnOqoz8rHMzwboY=
github.com/schollz/pake v1.1.1 h1:QKeojDWzdAdtRC4m89b6HAxw/8gjqrVu7r4SAOxOFg8=
github.com/schollz/pake v1.1.1/go.mod h1:aWMxQ1jwqZRwk3StflHcdyzPR+CyW5W7+WIZD6Y3dEY=
github.com/schollz/peerdiscovery v1.4.1 h1:xtZ/D8/4eq9O6UEhRupZZiJm4BA8+u1IVUgeHo5VPm4=
github.com/schollz/peerdiscovery v1.4.1/go.mod h1:WDdk0/JVyVHVIA/bmhzTkUg32dhJ20O4tExNqV1u6sk=
github.com/schollz/progressbar/v2 v2.13.2/go.mod h1:6YZjqdthH6SCZKv2rqGryrxPtfmRB/DWZxSMfCXPyD8=
github.com/schollz/progressbar/v2 v2.14.0 h1:vo7bdkI9E4/CIk9DnL5uVIaybLQiVtiCC2vO+u9j5IM=
github.com/schollz/progressbar/v2 v2.14.0/go.mod h1:6YZjqdthH6SCZKv2rqGryrxPtfmRB/DWZxSMfCXPyD8=
github.com/schollz/spinner v0.0.0-20180925172146-6bbc5f7804f9 h1:y08o5oQ/slxXE/F0uh5dd8mdVvb+w4NLcNSDSq4c2F0=
github.com/schollz/spinner v0.0.0-20180925172146-6bbc5f7804f9/go.mod h1:kCMoQsqzx4MzGJWaALr6tKyCnlrY0kILGLkA1FOiLF4=
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/skelterjohn/go.wde v0.0.0-20180104102407-a0324cbf3ffe/go.mod h1:zXxNsJHeUYIqpg890APBNEn9GoCbA4Cdnvuv3mx4fBk=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/sqweek/dialog v0.0.0-20190728103509-6254ed5b0d3c h1:nQyaARR8WzWW4/AoxpyPA82gJcvuZUxLxnMqVbmW50A=
github.com/sqweek/dialog v0.0.0-20190728103509-6254ed5b0d3c/go.mod h1:QSrNdZLZB8VoFPGlZ2vDuA2oNaVdhld3g0PZLc7soX8=
github.com/srwiley/oksvg v0.0.0-20190105194046-ccbc7673cdf3 h1:8REQ/vZZIZFaZedUSHd7TVkK0CF4heqGtmyz30gCxm8=
github.com/srwiley/oksvg v0.0.0-20190105194046-ccbc7673cdf3/go.mod h1:afMbS0qvv1m5tfENCwnOdZGOF8RGR/FsZ7bvBxQGZG4=
github.com/srwiley/rasterx v0.0.0-20181219215540-696f7edb7a7e h1:FFotfUvew9Eg02LYRl8YybAnm0HCwjjfY5JlOI1oB00=
github.com/srwiley/rasterx v0.0.0-20181219215540-696f7edb7a7e/go.mod h1:mvWM0+15UqyrFKqdRjY6LuAVJR0HOVhJlEgZ5JWtSWU=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.3.1-0.20190311161405-34c6fa2dc709 h1:Ko2LQMrRU+Oy/+EDBwX7eZ2jp3C47eDBB8EIhKTun+I=
github.com/stretchr/testify v1.3.1-0.20190311161405-34c6fa2dc709/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/tscholl2/siec v0.0.0-20180721101609-21667da05937 h1:lhssCpSe3TjKcbvUoPzFMuv9oUyZDgI3Cmgolfw2C90=
github.com/tscholl2/siec v0.0.0-20180721101609-21667da05937/go.mod h1:KL9+ubr1JZdaKjgAaHr+tCytEncXBa1pR6FjbTsOJnw=
github.com/urfave/cli v1.22.1 h1:+mkCCcOFKPnCmVYVcURKps1Xe+3zP90gSYGNfRkjoIY=
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc h1:c0o/qxkaO2LF5t6fQrT4b5hzyggAkLLlCUjqfRxd8Q4=
golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/image v0.0.0-20181116024801-cd38e8056d9b h1:VHyIDlv3XkfCa5/a81uzaoDkHH4rr81Z62g+xlnO8uM=
golang.org/x/image v0.0.0-20181116024801-cd38e8056d9b/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
golang.org/x/net v0.0.0-20181220203305-927f97764cc3 h1:eH6Eip3UpmR+yM/qI9Ijluzb1bNv/cAU/n+6l8tRSis=
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191003171128-d98b1b443823 h1:Ypyv6BNJh07T1pUSrehkLemqPKXhus2MkfktJ91kRh4=
golang.org/x/net v0.0.0-20191003171128-d98b1b443823/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191007182048-72f939374954 h1:JGZucVF/L/TotR719NbujzadOZ2AgnYlqphQGHDCKaU=
golang.org/x/net v0.0.0-20191007182048-72f939374954/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191002091554-b397fe3ad8ed h1:5TJcLJn2a55mJjzYk0yOoqN8X1OdvBDUnaZaKKyQtkY=
golang.org/x/sys v0.0.0-20191002091554-b397fe3ad8ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/tylerb/is.v1 v1.1.2/go.mod h1:9yQB2tyIhZ5oph6Kk5Sq7cJMd9c5Jpa1p3hr9kxzPqo=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

271
src/win/main.go Normal file
View File

@ -0,0 +1,271 @@
package main
import (
"fmt"
"image"
"net/url"
"os"
"strings"
"time"
"fyne.io/fyne"
"fyne.io/fyne/app"
"fyne.io/fyne/canvas"
"fyne.io/fyne/dialog"
"fyne.io/fyne/layout"
"fyne.io/fyne/theme"
"fyne.io/fyne/widget"
"github.com/schollz/croc/v6/src/croc"
"github.com/schollz/croc/v6/src/models"
"github.com/schollz/croc/v6/src/utils"
nativedialog "github.com/sqweek/dialog"
)
var logoImage image.Image
func init() {
infile, err := os.Open("croc.jpg")
if err != nil {
panic(err)
}
defer infile.Close()
// Decode will figure out what type of image is in the file on its own.
// We just have to be sure all the image packages we want are imported.
logoImage, _, err = image.Decode(infile)
if err != nil {
panic(err)
}
}
func welcomeScreen(a fyne.App) fyne.CanvasObject {
logo := canvas.NewImageFromImage(logoImage)
logo.SetMinSize(fyne.NewSize(256, 128))
link, err := url.Parse("https://github.com/schollz/croc")
if err != nil {
fyne.LogError("Could not parse URL", err)
}
return widget.NewVBox(
widget.NewLabelWithStyle("croc - securely send a file", fyne.TextAlignCenter, fyne.TextStyle{Bold: true}),
layout.NewSpacer(),
widget.NewHBox(layout.NewSpacer(), logo, layout.NewSpacer()),
widget.NewLabel(`Send files using a secure PAKE-encrypted
peer-to-peer connection.`),
widget.NewHyperlinkWithStyle("help", link, fyne.TextAlignCenter, fyne.TextStyle{}),
layout.NewSpacer(),
)
}
func makeCell() fyne.CanvasObject {
rect := canvas.NewRectangle(theme.BackgroundColor())
rect.SetMinSize(fyne.NewSize(30, 30))
return rect
}
func main() {
a := app.New()
a.Settings().SetTheme(theme.LightTheme())
w := a.NewWindow("croc")
w.Resize(fyne.Size{400, 200})
progress := widget.NewProgressBar()
var sendFileButton *widget.Button
pathToFile := ""
fname := ""
currentInfo := widget.NewLabel("")
sendFileButton = widget.NewButton("Choose a file to send", func() {
filename, err := nativedialog.File().Title("Select a file to send").Load()
pathToFile = filename
if err == nil {
fnames := strings.Split(filename, "\\")
fname = fnames[len(fnames)-1]
sendFileButton.SetText(fmt.Sprintf("Sending '%s'", fname))
}
for {
if len(filename) > 0 {
break
}
time.Sleep(50 * time.Millisecond)
}
codePhrase := utils.GetRandomName()
codePhrase = "zack1"
crocOptions := croc.Options{
SharedSecret: codePhrase,
IsSender: true,
Debug: false,
NoPrompt: true,
RelayAddress: models.DEFAULT_RELAY,
Stdout: false,
DisableLocal: true,
RelayPorts: strings.Split("9009,9010,9011,9012,9013", ","),
}
cr, err := croc.New(crocOptions)
if err != nil {
return
}
finfo, err := os.Stat(pathToFile)
if err != nil {
// TODO show something
return
}
currentInfo.SetText("Code phrase: " + codePhrase)
finished := false
transfering := false
prog := dialog.NewProgress("Progress", fmt.Sprintf("Transfering '%s' (%s)", fname, utils.ByteCountDecimal(finfo.Size())), w)
prog.Hide()
startTime := time.Now()
go func() {
for {
if finished || cr == nil {
mbPerSecond := float64(finfo.Size()) / time.Since(startTime).Seconds()
currentInfo.SetText(fmt.Sprintf("Finished transfer (%s/s).", utils.ByteCountDecimal(int64(mbPerSecond))))
prog.Hide()
sendFileButton.SetText("Choose a file to send")
return
}
if cr.Step1ChannelSecured {
currentInfo.SetText("Channel secured.")
}
if cr.Step4FileTransfer && !transfering {
transfering = true
currentInfo.SetText("Transfering file.")
prog.Show()
startTime = time.Now()
}
if cr.Bar != nil {
prog.SetValue(cr.Bar.State().CurrentPercent)
}
time.Sleep(100 * time.Millisecond)
}
}()
err = cr.Send(croc.TransferOptions{
PathToFiles: []string{pathToFile},
KeepPathInRemote: false,
})
if err != nil {
// TODO: do something
}
cr = nil
finished = true
fmt.Println("send")
})
sendScreen := widget.NewVBox(
widget.NewLabelWithStyle("Send a file", fyne.TextAlignCenter, fyne.TextStyle{Bold: true}),
sendFileButton,
currentInfo,
layout.NewSpacer(),
)
var codePhraseToReceive string
entry := widget.NewEntry()
entry.OnChanged = func(text string) {
fmt.Println("Entered", text)
codePhraseToReceive = text
}
entry.SetPlaceHolder("Enter code phrase")
var receiveFileButtion *widget.Button
receiveFolder := ""
receiveFileButtion = widget.NewButton("Set directory to save", func() {
filename, err := nativedialog.Directory().Title("Now find a dir").Browse()
fmt.Println(filename)
fmt.Println(err)
receiveFileButtion.SetText(filename)
receiveFolder = filename
})
receiveScreen := widget.NewVBox(
widget.NewLabelWithStyle("Receive a file", fyne.TextAlignCenter, fyne.TextStyle{Bold: true}),
receiveFileButtion,
entry,
widget.NewButton("Receive", func() {
if receiveFolder != "" {
err := os.Chdir(receiveFolder)
if err != nil {
panic(err)
}
}
crocOptions := croc.Options{
SharedSecret: codePhraseToReceive,
IsSender: false,
Debug: false,
NoPrompt: true,
RelayAddress: models.DEFAULT_RELAY,
Stdout: false,
DisableLocal: true,
RelayPorts: strings.Split("9009,9010,9011,9012,9013", ","),
}
cr, err := croc.New(crocOptions)
if err != nil {
return
}
finished := false
transfering := false
var prog *dialog.ProgressDialog
startTime := time.Now()
go func() {
for {
if finished || cr == nil {
// mbPerSecond := float64(finfo.Size()) / time.Since(startTime).Seconds()
// currentInfo.SetText(fmt.Sprintf("Finished transfer (%s/s).", utils.ByteCountDecimal(int64(mbPerSecond))))
prog.Hide()
return
}
if cr.Step1ChannelSecured {
currentInfo.SetText("Channel secured.")
}
if cr.Step4FileTransfer && !transfering {
transfering = true
currentInfo.SetText("Transfering file.")
prog = dialog.NewProgress("Progress", "Transfering", w)
startTime = time.Now()
}
if transfering && cr.Bar != nil {
prog.SetValue(cr.Bar.State().CurrentPercent)
}
time.Sleep(100 * time.Millisecond)
}
}()
err = cr.Receive()
if err != nil {
panic(err)
}
cr = nil
finished = true
}),
layout.NewSpacer(),
currentInfo,
)
progress.SetValue(0)
top := makeCell()
bottom := makeCell()
left := makeCell()
right := makeCell()
borderLayout := layout.NewBorderLayout(top, bottom, left, right)
sendScreenWrap := fyne.NewContainerWithLayout(borderLayout,
top, bottom, left, right, sendScreen)
receiveScreenWrap := fyne.NewContainerWithLayout(borderLayout,
top, bottom, left, right, receiveScreen)
welcomeScreenWrap := fyne.NewContainerWithLayout(borderLayout,
top, bottom, left, right, welcomeScreen(a))
tabs := widget.NewTabContainer(
widget.NewTabItemWithIcon("Welcome", theme.HomeIcon(), welcomeScreenWrap),
widget.NewTabItemWithIcon("Send", theme.MailSendIcon(), sendScreenWrap),
widget.NewTabItemWithIcon("Receive", theme.MailReplyIcon(), receiveScreenWrap),
)
tabs.SetTabLocation(widget.TabLocationLeading)
w.SetContent(tabs)
w.ShowAndRun()
}
func confirmCallback(response bool) {
fmt.Println("Responded with", response)
}