Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6293331e76 | ||
|
|
6f1c496230 | ||
|
|
6cdf8cecfc | ||
|
|
e2198faa24 | ||
|
|
f005269a49 | ||
|
|
3fcccecf37 | ||
|
|
7fa4fc154a | ||
|
|
00c41387ba | ||
|
|
3efa69eeb9 | ||
|
|
f89aea6470 | ||
|
|
918fc21594 | ||
|
|
376b922d6d | ||
|
|
56d7b6f652 | ||
|
|
31bcaeca9a | ||
|
|
394e52f00f |
2
go.mod
2
go.mod
|
|
@ -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
4
go.sum
|
|
@ -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=
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
|
|
@ -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
|
||||
)
|
||||
|
|
@ -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=
|
||||
|
|
@ -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)
|
||||
}
|
||||
Loading…
Reference in New Issue