func torrentBar(t *torrent.Torrent) { bar := uiprogress.AddBar(1) bar.AppendCompleted() bar.AppendFunc(func(*uiprogress.Bar) (ret string) { select { case <-t.GotInfo(): default: return "getting info" } if t.Seeding() { return "seeding" } else if t.BytesCompleted() == t.Info().TotalLength() { return "completed" } else { return fmt.Sprintf("downloading (%s/%s)", humanize.Bytes(uint64(t.BytesCompleted())), humanize.Bytes(uint64(t.Info().TotalLength()))) } }) bar.PrependFunc(func(*uiprogress.Bar) string { return t.Name() }) go func() { <-t.GotInfo() bar.Total = int(t.Info().TotalLength()) for { bc := t.BytesCompleted() bar.Set(int(bc)) time.Sleep(time.Second) } }() }