makes head, tail live

This commit is contained in:
pyed 2016-07-10 16:28:19 +03:00
parent 27939d4503
commit 06907617d6

View File

@ -320,7 +320,32 @@ func head(ud tgbotapi.Update, tokens []string) {
send("head: No torrents", ud.Message.Chat.ID, false) send("head: No torrents", ud.Message.Chat.ID, false)
return return
} }
send(buf.String(), ud.Message.Chat.ID, true)
msgID := send(buf.String(), ud.Message.Chat.ID, true)
// keep the info live
for i := 0; i < duration; i++ {
time.Sleep(time.Second * interval)
buf.Reset()
torrents, err := Client.GetTorrents()
if err != nil {
continue // try again if some error heppened
}
for i := range torrents[:n] {
torrentName := mdReplacer.Replace(torrents[i].Name) // escape markdown
buf.WriteString(fmt.Sprintf("`<%d>` *%s*\n%s *%s* of *%s* (*%.1f%%*) ↓ *%s* ↑ *%s* R: *%s*\n\n",
torrents[i].ID, torrentName, torrents[i].TorrentStatus(), humanize.Bytes(torrents[i].Have()),
humanize.Bytes(torrents[i].SizeWhenDone), torrents[i].PercentDone*100, humanize.Bytes(torrents[i].RateDownload),
humanize.Bytes(torrents[i].RateUpload), torrents[i].Ratio()))
}
// no need to check if it is empty, as if the buffer is empty telegram won't change the message
editConf := tgbotapi.NewEditMessageText(ud.Message.Chat.ID, msgID, buf.String())
editConf.ParseMode = tgbotapi.ModeMarkdown
Bot.Send(editConf)
}
} }
@ -363,7 +388,33 @@ func tail(ud tgbotapi.Update, tokens []string) {
send("tail: No torrents", ud.Message.Chat.ID, false) send("tail: No torrents", ud.Message.Chat.ID, false)
return return
} }
send(buf.String(), ud.Message.Chat.ID, true)
msgID := send(buf.String(), ud.Message.Chat.ID, true)
// keep the info live
for i := 0; i < duration; i++ {
time.Sleep(time.Second * interval)
buf.Reset()
torrents, err := Client.GetTorrents()
if err != nil {
continue // try again if some error heppened
}
for _, torrent := range torrents[len(torrents)-n:] {
torrentName := mdReplacer.Replace(torrent.Name) // escape markdown
buf.WriteString(fmt.Sprintf("`<%d>` *%s*\n%s *%s* of *%s* (*%.1f%%*) ↓ *%s* ↑ *%s* R: *%s*\n\n",
torrent.ID, torrentName, torrent.TorrentStatus(), humanize.Bytes(torrent.Have()),
humanize.Bytes(torrent.SizeWhenDone), torrent.PercentDone*100, humanize.Bytes(torrent.RateDownload),
humanize.Bytes(torrent.RateUpload), torrent.Ratio()))
}
// no need to check if it is empty, as if the buffer is empty telegram won't change the message
editConf := tgbotapi.NewEditMessageText(ud.Message.Chat.ID, msgID, buf.String())
editConf.ParseMode = tgbotapi.ModeMarkdown
Bot.Send(editConf)
}
} }
// downs will send the names of torrents with status 'Downloading' or in queue to // downs will send the names of torrents with status 'Downloading' or in queue to
@ -496,8 +547,8 @@ func active(ud tgbotapi.Update) {
msgID := send(buf.String(), ud.Message.Chat.ID, true) msgID := send(buf.String(), ud.Message.Chat.ID, true)
// keep the active list live for 'duration * interval' // keep the active list live for 'duration * interval'
time.Sleep(time.Second * interval)
for i := 0; i < duration; i++ { for i := 0; i < duration; i++ {
time.Sleep(time.Second * interval)
// reset the buffer to reuse it // reset the buffer to reuse it
buf.Reset() buf.Reset()
@ -511,8 +562,7 @@ func active(ud tgbotapi.Update) {
for i := range torrents { for i := range torrents {
if torrents[i].RateDownload > 0 || if torrents[i].RateDownload > 0 ||
torrents[i].RateUpload > 0 { torrents[i].RateUpload > 0 {
// escape markdown torrentName := mdReplacer.Replace(torrents[i].Name) // replace markdown chars
torrentName := mdReplacer.Replace(torrents[i].Name)
buf.WriteString(fmt.Sprintf("`<%d>` *%s*\n%s *%s* of *%s* (*%.1f%%*) ↓ *%s* ↑ *%s* R: *%s*\n\n", buf.WriteString(fmt.Sprintf("`<%d>` *%s*\n%s *%s* of *%s* (*%.1f%%*) ↓ *%s* ↑ *%s* R: *%s*\n\n",
torrents[i].ID, torrentName, torrents[i].TorrentStatus(), humanize.Bytes(torrents[i].Have()), torrents[i].ID, torrentName, torrents[i].TorrentStatus(), humanize.Bytes(torrents[i].Have()),
humanize.Bytes(torrents[i].SizeWhenDone), torrents[i].PercentDone*100, humanize.Bytes(torrents[i].RateDownload), humanize.Bytes(torrents[i].SizeWhenDone), torrents[i].PercentDone*100, humanize.Bytes(torrents[i].RateDownload),
@ -524,7 +574,6 @@ func active(ud tgbotapi.Update) {
editConf := tgbotapi.NewEditMessageText(ud.Message.Chat.ID, msgID, buf.String()) editConf := tgbotapi.NewEditMessageText(ud.Message.Chat.ID, msgID, buf.String())
editConf.ParseMode = tgbotapi.ModeMarkdown editConf.ParseMode = tgbotapi.ModeMarkdown
Bot.Send(editConf) Bot.Send(editConf)
time.Sleep(time.Second * interval)
} }
// replace the speed with dashes to indicate that we are done being live // replace the speed with dashes to indicate that we are done being live
@ -859,8 +908,8 @@ func info(ud tgbotapi.Update, tokens []string) {
// this go-routine will make the info live for 'duration * interval' // this go-routine will make the info live for 'duration * interval'
// takes trackers so we don't have to regex them over and over. // takes trackers so we don't have to regex them over and over.
go func(trackers string, torrentID, msgID int) { go func(trackers string, torrentID, msgID int) {
time.Sleep(time.Second * interval)
for i := 0; i < duration; i++ { for i := 0; i < duration; i++ {
time.Sleep(time.Second * interval)
torrent, err := Client.GetTorrent(torrentID) torrent, err := Client.GetTorrent(torrentID)
if err != nil { if err != nil {
continue // skip this iteration if there's an error retrieving the torrent's info continue // skip this iteration if there's an error retrieving the torrent's info
@ -877,7 +926,6 @@ func info(ud tgbotapi.Update, tokens []string) {
editConf := tgbotapi.NewEditMessageText(ud.Message.Chat.ID, msgID, info) editConf := tgbotapi.NewEditMessageText(ud.Message.Chat.ID, msgID, info)
editConf.ParseMode = tgbotapi.ModeMarkdown editConf.ParseMode = tgbotapi.ModeMarkdown
Bot.Send(editConf) Bot.Send(editConf)
time.Sleep(time.Second * interval)
} }