From cd3a936795bc2bd643becbc814c5782c946eab1c Mon Sep 17 00:00:00 2001 From: Zack Scholl Date: Sat, 22 Sep 2018 06:20:25 -0700 Subject: [PATCH] add recipient finish line --- main.go | 3 --- src/recipient/recipient.go | 18 +++++++++++++++++- src/sender/sender.go | 8 ++++++-- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/main.go b/main.go index c86811f..8c62edf 100644 --- a/main.go +++ b/main.go @@ -141,9 +141,6 @@ func send(c *cli.Context) error { codePhrase, ) err = cr.Send(fname, codePhrase) - if err == nil { - fmt.Fprintf(os.Stderr, "\nTransfer complete") - } return err } diff --git a/src/recipient/recipient.go b/src/recipient/recipient.go index c92d7e5..bd7e6f2 100644 --- a/src/recipient/recipient.go +++ b/src/recipient/recipient.go @@ -43,6 +43,7 @@ func Receive(done chan struct{}, c *websocket.Conn, codephrase string) { func receive(c *websocket.Conn, codephrase string) (err error) { var fstats models.FileStats var sessionKey []byte + var transferTime time.Duration // start a spinner spin := spinner.New(spinner.CharSets[9], 100*time.Millisecond) @@ -128,7 +129,7 @@ func receive(c *websocket.Conn, codephrase string) (err error) { return err } bytesWritten := 0 - fmt.Fprintf(os.Stderr, "Receiving...\n") + fmt.Fprintf(os.Stderr, "\nReceiving...\n") bar := progressbar.NewOptions( int(fstats.Size), progressbar.OptionSetRenderBlankState(true), @@ -136,6 +137,7 @@ func receive(c *websocket.Conn, codephrase string) (err error) { progressbar.OptionSetWriter(os.Stderr), ) c.WriteMessage(websocket.BinaryMessage, []byte("ready")) + startTime := time.Now() for { messageType, message, err := c.ReadMessage() if err != nil { @@ -174,6 +176,7 @@ func receive(c *websocket.Conn, codephrase string) (err error) { bar.Add(n) } else { // we are finished + transferTime = time.Since(startTime) // close file err = f.Close() @@ -204,6 +207,19 @@ func receive(c *websocket.Conn, codephrase string) (err error) { } else { err = nil } + if err == nil { + transferRate := float64(fstats.Size) / 1000000.0 / transferTime.Seconds() + transferType := "MB/s" + if transferRate < 1 { + transferRate = float64(fstats.Size) / 1000.0 / transferTime.Seconds() + transferType = "kB/s" + } + folderOrFile := "file" + if fstats.IsDir { + folderOrFile = "folder" + } + fmt.Fprintf(os.Stderr, "\nReceived %s written to %s (%2.1f %s)\n", folderOrFile, fstats.Name, transferRate, transferType) + } return err } else { c.WriteMessage(websocket.BinaryMessage, []byte("not")) diff --git a/src/sender/sender.go b/src/sender/sender.go index db06970..7094d0f 100644 --- a/src/sender/sender.go +++ b/src/sender/sender.go @@ -35,9 +35,13 @@ func Send(done chan struct{}, c *websocket.Conn, fname string, codephrase string err := send(c, fname, codephrase) if err != nil { if strings.HasPrefix(err.Error(), "websocket: close 100") { - return + err = nil + } + if err == nil { + fmt.Fprintf(os.Stderr, "Transfer complete") + } else { + fmt.Fprintf(os.Stderr, err.Error()) } - log.Error(err) } done <- struct{}{} }