diff --git a/queue/queue.go b/queue/queue.go index 7ea786a..e4b88cb 100644 --- a/queue/queue.go +++ b/queue/queue.go @@ -11,6 +11,7 @@ import ( "log" "os" "path/filepath" + "strconv" "strings" "sync" "time" @@ -49,6 +50,42 @@ type Queue struct { lock sync.RWMutex } +var prettyBytesValues = []int64{ + 1024, + 1024 * 1024, + 1024 * 1024 * 1024, + 1024 * 1024 * 1024 * 1024, + 1024 * 1024 * 1024 * 1024 * 1024, + 1024 * 1024 * 1024 * 1024 * 1024 * 1024, +} + +var prettyBytesNames = []string{ + "KiB", + "MiB", + "GiB", + "TiB", + "PiB", + "EiB", +} + +func prettyBytes(bytes int64) string { + output := strconv.FormatInt(bytes, 10) + "B" + for i, divisor := range prettyBytesValues { + newBytes := bytes / divisor + if newBytes > 1024 { + continue + } + + if newBytes < 1 { + break + } + + output = strconv.FormatInt(newBytes, 10) + prettyBytesNames[i] + } + + return output +} + // NewQueue establishes all connections and watchers func NewQueue(config *Config, logger *log.Logger) (*Queue, error) { if config.WatchDownloadPaths == nil || len(config.WatchDownloadPaths) == 0 { @@ -235,7 +272,7 @@ func (q *Queue) downloadTorrents(torrents []rtorrent.Torrent) { } go func(torrentFilePath string, downloadPath string, torrent rtorrent.Torrent) { - q.logger.Printf("Downloading '%s' (%s) to '%s' (%s)", torrent.Name, torrentFilePath, downloadPath, destDownloadPath) + q.logger.Printf("Downloading '%s' (%s) to '%s' (%s) %s", torrent.Name, torrentFilePath, downloadPath, destDownloadPath, prettyBytes(int64(torrent.Size))) err := q.sftpClient.Mirror(torrent.Path, downloadPath) if err != nil { q.logger.Printf("Failed to download '%s' to '%s' error '%s'", torrent.Path, downloadPath, err)