feat: add 'Ask' quality option, language auto-select, and m4a audio remux
All checks were successful
CI / build (push) Successful in 47s
All checks were successful
CI / build (push) Successful in 47s
- Add 'ask' option to audio/video quality settings (stored as '' in DB) - Auto-select when both media type AND quality are set; show filtered format picker when quality is Ask - Auto-skip language picker when user has a matching language preference - Remux audio-only downloads to m4a instead of webm for Telegram compat - Update README to document the new flow and m4a audio output
This commit is contained in:
@@ -14,11 +14,11 @@ import (
|
||||
func (h *Handler) buildSettingsKeyboard(userID int64, prefs *domain.UserPreferences) (string, models.InlineKeyboardMarkup) {
|
||||
audioFmt := prefs.DefaultAudioFormat
|
||||
if audioFmt == "" {
|
||||
audioFmt = "best"
|
||||
audioFmt = "ask"
|
||||
}
|
||||
videoFmt := prefs.DefaultVideoFormat
|
||||
if videoFmt == "" {
|
||||
videoFmt = "best"
|
||||
videoFmt = "ask"
|
||||
}
|
||||
langLabel := prefs.DefaultLanguage
|
||||
if langLabel == "" {
|
||||
@@ -101,11 +101,13 @@ func (h *Handler) buildQualityAudioVideoPicker(prefs *domain.UserPreferences) (s
|
||||
}
|
||||
|
||||
func (h *Handler) buildAudioQualityPicker(prefs *domain.UserPreferences) (string, models.InlineKeyboardMarkup) {
|
||||
bitrates := []string{"best", "128k", "192k", "256k", "320k"}
|
||||
bitrates := []string{"ask", "best", "128k", "192k", "256k", "320k"}
|
||||
rows := [][]models.InlineKeyboardButton{}
|
||||
for _, b := range bitrates {
|
||||
label := b
|
||||
if b == prefs.DefaultAudioFormat {
|
||||
if b == "ask" && prefs.DefaultAudioFormat == "" {
|
||||
label = "> " + label
|
||||
} else if b != "ask" && b == prefs.DefaultAudioFormat {
|
||||
label = "> " + label
|
||||
}
|
||||
rows = append(rows, []models.InlineKeyboardButton{
|
||||
@@ -119,12 +121,14 @@ func (h *Handler) buildAudioQualityPicker(prefs *domain.UserPreferences) (string
|
||||
}
|
||||
|
||||
func (h *Handler) buildVideoQualityPicker(prefs *domain.UserPreferences) (string, models.InlineKeyboardMarkup) {
|
||||
resolutions := []string{"best", "2160p", "1440p", "1080p", "720p", "480p", "360p"}
|
||||
resolutions := []string{"ask", "best", "2160p", "1440p", "1080p", "720p", "480p", "360p"}
|
||||
rows := [][]models.InlineKeyboardButton{}
|
||||
row := []models.InlineKeyboardButton{}
|
||||
for i, r := range resolutions {
|
||||
label := r
|
||||
if r == prefs.DefaultVideoFormat {
|
||||
if r == "ask" && prefs.DefaultVideoFormat == "" {
|
||||
label = "> " + label
|
||||
} else if r != "ask" && r == prefs.DefaultVideoFormat {
|
||||
label = "> " + label
|
||||
}
|
||||
row = append(row, models.InlineKeyboardButton{
|
||||
@@ -220,9 +224,15 @@ func (h *Handler) handleSettingsSet(ctx context.Context, chatID int64, msgID int
|
||||
}
|
||||
changed = true
|
||||
case "audioquality":
|
||||
if value == "ask" {
|
||||
value = ""
|
||||
}
|
||||
prefs.DefaultAudioFormat = value
|
||||
changed = true
|
||||
case "videoquality":
|
||||
if value == "ask" {
|
||||
value = ""
|
||||
}
|
||||
prefs.DefaultVideoFormat = value
|
||||
changed = true
|
||||
case "language":
|
||||
|
||||
Reference in New Issue
Block a user