trackers work

This commit is contained in:
pyed 2016-07-01 18:41:03 +03:00
parent 2d32550a1c
commit 5e75c72f12

View File

@ -133,8 +133,7 @@ func main() {
switch command { switch command {
case "list", "/list": case "list", "/list":
// list torrents // list torrents
// TODO take argument as tracker and list those only go list(&update, tokens[1:])
go list(&update)
case "head", "/head": case "head", "/head":
// list the first 5 or n torrents // list the first 5 or n torrents
@ -243,7 +242,7 @@ func main() {
} }
// list will form and send a list of all the torrents // list will form and send a list of all the torrents
func list(ud *tgbotapi.Update) { func list(ud *tgbotapi.Update, tokens []string) {
torrents, err := Client.GetTorrents() torrents, err := Client.GetTorrents()
if err != nil { if err != nil {
send("list: "+err.Error(), ud.Message.Chat.ID) send("list: "+err.Error(), ud.Message.Chat.ID)
@ -251,12 +250,28 @@ func list(ud *tgbotapi.Update) {
} }
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
// if it gets a query, it will list torrents that has trackers that match the query
if len(tokens) != 0 {
// (?i) for case insensitivity
regx, err := regexp.Compile("(?i)" + tokens[0])
if err != nil {
send("list: "+err.Error(), ud.Message.Chat.ID)
return
}
for i := range torrents {
if regx.MatchString(torrents[i].GetTrackers()) {
buf.WriteString(fmt.Sprintf("<%d> %s\n", torrents[i].ID, torrents[i].Name))
}
}
} else { // if we did not get a query, list all torrents
for i := range torrents { for i := range torrents {
buf.WriteString(fmt.Sprintf("<%d> %s\n", torrents[i].ID, torrents[i].Name)) buf.WriteString(fmt.Sprintf("<%d> %s\n", torrents[i].ID, torrents[i].Name))
} }
}
if buf.Len() == 0 { if buf.Len() == 0 {
send("No torrents exist!", ud.Message.Chat.ID) send("list: No torrents", ud.Message.Chat.ID)
return return
} }
@ -569,7 +584,7 @@ func sort(ud *tgbotapi.Update, tokens []string) {
send("sort: "+tokens[0], ud.Message.Chat.ID) send("sort: "+tokens[0], ud.Message.Chat.ID)
} }
var trackerRegex = regexp.MustCompile(`https?://([^:/]*)`) var trackerRegex = regexp.MustCompile(`[https?|udp]://([^:/]*)`)
// trackers will send a list of trackers and how many torrents each one has // trackers will send a list of trackers and how many torrents each one has
func trackers(ud *tgbotapi.Update) { func trackers(ud *tgbotapi.Update) {
@ -749,12 +764,11 @@ func info(ud *tgbotapi.Update, tokens []string) {
} }
// format the info // format the info
info := fmt.Sprintf("<%d> %s\n%s\t%s of %s (%.1f%%)\t↓ %s ↑ %s R:%s\nUP: %s DL: %s Added: %s ETA: %s\nTracker: %s", info := fmt.Sprintf("<%d> %s\n%s\t%s of %s (%.1f%%)\t↓ %s ↑ %s R:%s\nUP: %s DL: %s Added: %s ETA: %s\nTrackers: %s",
torrent.ID, torrent.Name, torrent.TorrentStatus(), humanize.Bytes(torrent.DownloadedEver), humanize.Bytes(torrent.SizeWhenDone), torrent.ID, torrent.Name, torrent.TorrentStatus(), humanize.Bytes(torrent.DownloadedEver), humanize.Bytes(torrent.SizeWhenDone),
torrent.PercentDone*100, humanize.Bytes(torrent.RateDownload), humanize.Bytes(torrent.RateUpload), torrent.Ratio(), torrent.PercentDone*100, humanize.Bytes(torrent.RateDownload), humanize.Bytes(torrent.RateUpload), torrent.Ratio(),
humanize.Bytes(torrent.UploadedEver), humanize.Bytes(torrent.DownloadedEver), time.Unix(torrent.AddedDate, 0).Format(time.Stamp), humanize.Bytes(torrent.UploadedEver), humanize.Bytes(torrent.DownloadedEver), time.Unix(torrent.AddedDate, 0).Format(time.Stamp),
torrent.ETA(), torrent.Trackers[0].Announce) torrent.ETA(), torrent.GetTrackers())
// trackers should be fixed
// send it // send it
send(info, ud.Message.Chat.ID) send(info, ud.Message.Chat.ID)
@ -929,7 +943,7 @@ func speed(ud *tgbotapi.Update) {
return return
} }
msg := fmt.Sprintf("⬇ %s ⬆ %s", humanize.Bytes(stats.DownloadSpeed), humanize.Bytes(stats.UploadSpeed)) msg := fmt.Sprintf("↓ %s ↑ %s", humanize.Bytes(stats.DownloadSpeed), humanize.Bytes(stats.UploadSpeed))
send(msg, ud.Message.Chat.ID) send(msg, ud.Message.Chat.ID)
} }