refactor: settings format picker redesign with Audio/Video sub-pickers, fix delete routing
All checks were successful
CI / build (push) Successful in 48s
All checks were successful
CI / build (push) Successful in 48s
- Replace Type/Quality settings with single Format button -> Audio/Video sub-pickers - Each sub-picker shows format options (bitrates for audio, resolutions for video) - Replace DefaultQuality with DefaultAudioFormat/DefaultVideoFormat in UserPreferences - Add DB migration 002 for new preference columns - Update repo layer SQL queries for new schema - Update playlist flow to use new preference fields - Fix missing deleteaccount and delaccount_ callback routing - Add back_format routing for format picker navigation
This commit is contained in:
7
internal/repo/migrations/002_preferences_format.sql
Normal file
7
internal/repo/migrations/002_preferences_format.sql
Normal file
@@ -0,0 +1,7 @@
|
||||
-- +goose Up
|
||||
ALTER TABLE user_preferences ADD COLUMN default_audio_format TEXT NOT NULL DEFAULT 'best';
|
||||
ALTER TABLE user_preferences ADD COLUMN default_video_format TEXT NOT NULL DEFAULT 'best';
|
||||
|
||||
-- +goose Down
|
||||
ALTER TABLE user_preferences DROP COLUMN default_audio_format;
|
||||
ALTER TABLE user_preferences DROP COLUMN default_video_format;
|
||||
@@ -75,12 +75,14 @@ func (s *Store) GetOrCreatePreferences(userID int64) (*domain.UserPreferences, e
|
||||
|
||||
func (s *Store) getPreferences(userID int64) (*domain.UserPreferences, error) {
|
||||
row := s.db.QueryRow(`
|
||||
SELECT default_media_type, default_quality, default_container, default_language
|
||||
SELECT default_media_type, default_audio_format, default_video_format,
|
||||
default_container, default_language
|
||||
FROM user_preferences WHERE user_id = ?
|
||||
`, userID)
|
||||
var p domain.UserPreferences
|
||||
var mediaType string
|
||||
if err := row.Scan(&mediaType, &p.DefaultQuality, &p.DefaultContainer, &p.DefaultLanguage); err != nil {
|
||||
if err := row.Scan(&mediaType, &p.DefaultAudioFormat, &p.DefaultVideoFormat,
|
||||
&p.DefaultContainer, &p.DefaultLanguage); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
switch mediaType {
|
||||
@@ -107,11 +109,11 @@ func mediaTypeToString(mt domain.MediaType) string {
|
||||
|
||||
func (s *Store) UpdatePreferences(userID int64, prefs *domain.UserPreferences) error {
|
||||
_, err := s.db.Exec(`
|
||||
UPDATE user_preferences SET default_media_type=?, default_quality=?,
|
||||
default_container=?, default_language=?
|
||||
UPDATE user_preferences SET default_media_type=?, default_audio_format=?,
|
||||
default_video_format=?, default_container=?, default_language=?
|
||||
WHERE user_id=?
|
||||
`, mediaTypeToString(prefs.DefaultMediaType), prefs.DefaultQuality,
|
||||
prefs.DefaultContainer, prefs.DefaultLanguage, userID)
|
||||
`, mediaTypeToString(prefs.DefaultMediaType), prefs.DefaultAudioFormat,
|
||||
prefs.DefaultVideoFormat, prefs.DefaultContainer, prefs.DefaultLanguage, userID)
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@@ -64,7 +64,8 @@ func TestPreferences(t *testing.T) {
|
||||
}
|
||||
|
||||
prefs.DefaultMediaType = domain.MediaTypeAudio
|
||||
prefs.DefaultQuality = "best"
|
||||
prefs.DefaultAudioFormat = "best"
|
||||
prefs.DefaultVideoFormat = "1080p"
|
||||
prefs.DefaultContainer = "mp3"
|
||||
prefs.DefaultLanguage = "en"
|
||||
if err := s.UpdatePreferences(userID, prefs); err != nil {
|
||||
@@ -78,8 +79,11 @@ func TestPreferences(t *testing.T) {
|
||||
if got.DefaultMediaType != domain.MediaTypeAudio {
|
||||
t.Errorf("media type = %v, want Audio", got.DefaultMediaType)
|
||||
}
|
||||
if got.DefaultQuality != "best" {
|
||||
t.Errorf("quality = %q, want best", got.DefaultQuality)
|
||||
if got.DefaultAudioFormat != "best" {
|
||||
t.Errorf("audio format = %q, want best", got.DefaultAudioFormat)
|
||||
}
|
||||
if got.DefaultVideoFormat != "1080p" {
|
||||
t.Errorf("video format = %q, want 1080p", got.DefaultVideoFormat)
|
||||
}
|
||||
if got.DefaultContainer != "mp3" {
|
||||
t.Errorf("container = %q, want mp3", got.DefaultContainer)
|
||||
|
||||
Reference in New Issue
Block a user