refactor: rename Format to Quality, add container Audio/Video sub-pickers
- Rename 'Format' button to 'Quality' in settings (audio_quality/video_quality) - Add DefaultAudioContainer and DefaultVideoContainer to UserPreferences - Container settings now has Audio/Video sub-pickers (mp3/m4a/opus vs mp4/mkv/webm) - Add migration 003 for new container columns - Update repo layer and playlist flow for new fields - Update back routing: back_quality, back_container
This commit is contained in:
7
internal/repo/migrations/003_preferences_container.sql
Normal file
7
internal/repo/migrations/003_preferences_container.sql
Normal file
@@ -0,0 +1,7 @@
|
||||
-- +goose Up
|
||||
ALTER TABLE user_preferences ADD COLUMN default_audio_container TEXT NOT NULL DEFAULT 'mp3';
|
||||
ALTER TABLE user_preferences ADD COLUMN default_video_container TEXT NOT NULL DEFAULT 'mp4';
|
||||
|
||||
-- +goose Down
|
||||
ALTER TABLE user_preferences DROP COLUMN default_audio_container;
|
||||
ALTER TABLE user_preferences DROP COLUMN default_video_container;
|
||||
@@ -76,13 +76,13 @@ 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_audio_format, default_video_format,
|
||||
default_container, default_language
|
||||
default_audio_container, default_video_container, default_language
|
||||
FROM user_preferences WHERE user_id = ?
|
||||
`, userID)
|
||||
var p domain.UserPreferences
|
||||
var mediaType string
|
||||
if err := row.Scan(&mediaType, &p.DefaultAudioFormat, &p.DefaultVideoFormat,
|
||||
&p.DefaultContainer, &p.DefaultLanguage); err != nil {
|
||||
&p.DefaultAudioContainer, &p.DefaultVideoContainer, &p.DefaultLanguage); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
switch mediaType {
|
||||
@@ -110,10 +110,12 @@ 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_audio_format=?,
|
||||
default_video_format=?, default_container=?, default_language=?
|
||||
default_video_format=?, default_audio_container=?,
|
||||
default_video_container=?, default_language=?
|
||||
WHERE user_id=?
|
||||
`, mediaTypeToString(prefs.DefaultMediaType), prefs.DefaultAudioFormat,
|
||||
prefs.DefaultVideoFormat, prefs.DefaultContainer, prefs.DefaultLanguage, userID)
|
||||
prefs.DefaultVideoFormat, prefs.DefaultAudioContainer,
|
||||
prefs.DefaultVideoContainer, prefs.DefaultLanguage, userID)
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
@@ -66,7 +66,8 @@ func TestPreferences(t *testing.T) {
|
||||
prefs.DefaultMediaType = domain.MediaTypeAudio
|
||||
prefs.DefaultAudioFormat = "best"
|
||||
prefs.DefaultVideoFormat = "1080p"
|
||||
prefs.DefaultContainer = "mp3"
|
||||
prefs.DefaultAudioContainer = "mp3"
|
||||
prefs.DefaultVideoContainer = "mp4"
|
||||
prefs.DefaultLanguage = "en"
|
||||
if err := s.UpdatePreferences(userID, prefs); err != nil {
|
||||
t.Fatalf("UpdatePreferences() failed: %v", err)
|
||||
@@ -85,8 +86,11 @@ func TestPreferences(t *testing.T) {
|
||||
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)
|
||||
if got.DefaultAudioContainer != "mp3" {
|
||||
t.Errorf("audio container = %q, want mp3", got.DefaultAudioContainer)
|
||||
}
|
||||
if got.DefaultVideoContainer != "mp4" {
|
||||
t.Errorf("video container = %q, want mp4", got.DefaultVideoContainer)
|
||||
}
|
||||
if got.DefaultLanguage != "en" {
|
||||
t.Errorf("language = %q, want en", got.DefaultLanguage)
|
||||
|
||||
Reference in New Issue
Block a user