package tgbot import ( "strconv" "strings" "github.com/dustin/go-humanize" tele "gopkg.in/telebot.v4" "server/log" sets "server/settings" ) const dbPageSize = 10 func cmdDb(c tele.Context) error { return sendDbPage(c, 0) } func sendDbPage(c tele.Context, page int) error { uid := c.Sender().ID dbList := sets.ListTorrent() if len(dbList) == 0 { return c.Send(tr(uid, "db_empty")) } totalPages := (len(dbList) + dbPageSize - 1) / dbPageSize if page < 0 { page = 0 } if page >= totalPages { page = totalPages - 1 } start := page * dbPageSize end := start + dbPageSize if end > len(dbList) { end = len(dbList) } pageList := dbList[start:end] var sb strings.Builder sb.WriteString("📁 " + tr(uid, "db_title") + " (" + strconv.Itoa(len(dbList)) + ")\n\n") for i, t := range pageList { hash := t.InfoHash.HexString() sb.WriteString(strconv.Itoa(start+i+1) + ". " + escapeHtml(t.Title) + "") if t.Size > 0 { sb.WriteString(" " + humanize.IBytes(uint64(t.Size)) + "") } sb.WriteString("\n" + hash + "\n\n") } msg := strings.TrimSuffix(sb.String(), "\n\n") navRow := []tele.InlineButton{} if totalPages > 1 { if page > 0 { navRow = append(navRow, tele.InlineButton{Text: "◀️", Unique: "fdb", Data: strconv.Itoa(page - 1)}) } navRow = append(navRow, tele.InlineButton{Text: strconv.Itoa(page+1) + "/" + strconv.Itoa(totalPages), Unique: "fnop", Data: ""}) if page < totalPages-1 { navRow = append(navRow, tele.InlineButton{Text: "▶️", Unique: "fdb", Data: strconv.Itoa(page + 1)}) } } navRow = append(navRow, tele.InlineButton{Text: "🔄", Unique: "fdbrefresh", Data: strconv.Itoa(page)}) kbd := &tele.ReplyMarkup{InlineKeyboard: [][]tele.InlineButton{navRow}} if err := c.Send(msg, kbd); err != nil { log.TLogln("tg db send err", err) return err } return nil } func callbackDbPage(c tele.Context, data string) error { page := 0 if data != "" { if p, err := strconv.Atoi(data); err == nil { page = p } } _ = c.Respond(&tele.CallbackResponse{}) if c.Callback().Message != nil { _ = c.Bot().Delete(c.Callback().Message) } return sendDbPage(c, page) } func callbackDbRefresh(c tele.Context, data string) error { page := 0 if data != "" { if p, err := strconv.Atoi(data); err == nil { page = p } } _ = c.Respond(&tele.CallbackResponse{Text: "🔄"}) if c.Callback().Message != nil { _ = c.Bot().Delete(c.Callback().Message) } return sendDbPage(c, page) }