diff --git a/config/config.go b/config/config.go index 0fbbfc9..c5ed0fa 100644 --- a/config/config.go +++ b/config/config.go @@ -300,8 +300,8 @@ func (cs *ConfigService) LoadConfig() error { Args: []string{"-o", fmt.Sprintf("%s/%%(title)s [%%(id)s].%%(ext)s", c.Destinations[i].Path)}, } c.DownloadOptions = append(c.DownloadOptions, newDownloadOption) - c.Destinations = nil } + c.Destinations = nil configMigrated = true log.Print("migrated config from version 3 => 4") } diff --git a/config/config_test.go b/config/config_test.go index 39b5743..f4a23af 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -102,6 +102,66 @@ profiles: os.Remove(cs.ConfigPath) } +func TestMigrateV3toV4CrashBug(t *testing.T) { + v3Config := `config_version: 3 +server: + port: 6123 + address: https://superaddress.here.com + download_path: /home/path/gropple + maximum_active_downloads_per_domain: 2 +ui: + popup_width: 500 + popup_height: 500 +destinations: +- name: somegifs + path: /home/path/somegifs +- name: otherstuff + path: /home/path/otherstuff +profiles: +- name: standard video + command: yt-dlp + args: + - --newline + - --write-info-json + - -f + - bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best + - --verbose + - --embed-metadata + - --embed-subs + - --embed-thumbnail +- name: standard mp3 + command: yt-dlp + args: + - --extract-audio + - --audio-format + - mp3 + - --prefer-ffmpeg +` + cs := configServiceFromString(v3Config) + err := cs.LoadConfig() + if err != nil { + t.Errorf("got error when loading config: %s", err) + } + if cs.Config.ConfigVersion != 4 { + t.Errorf("did not migrate version (it is '%d')", cs.Config.ConfigVersion) + } + if cs.Config.Server.MaximumActiveDownloads != 2 { + t.Error("did not add MaximumActiveDownloads") + } + if len(cs.Config.Destinations) != 0 { + t.Error("incorrect number of destinations from migrated file") + } + if assert.Len(t, cs.Config.DownloadOptions, 2) { + if assert.Len(t, cs.Config.DownloadOptions[0].Args, 2) { + assert.Equal(t, "-o", cs.Config.DownloadOptions[0].Args[0]) + assert.Equal(t, "/home/path/somegifs/%(title)s [%(id)s].%(ext)s", cs.Config.DownloadOptions[0].Args[1]) + assert.Equal(t, "-o", cs.Config.DownloadOptions[1].Args[0]) + assert.Equal(t, "/home/path/otherstuff/%(title)s [%(id)s].%(ext)s", cs.Config.DownloadOptions[1].Args[1]) + } + } + os.Remove(cs.ConfigPath) +} + func configServiceFromString(configString string) *ConfigService { tmpFile, _ := os.CreateTemp("", "gropple_test_*.yml") tmpFile.Write([]byte(configString))