diff --git a/src/client/subsonic.go b/src/client/subsonic.go index 8f2685b..71b4edc 100644 --- a/src/client/subsonic.go +++ b/src/client/subsonic.go @@ -240,12 +240,20 @@ func (c *Subsonic) CheckRefreshState() bool { } func (c *Subsonic) CreatePlaylist(tracks []*models.Track) error { + c.Cfg.PlaylistID = "" + _ = c.SearchPlaylist() + var trackIDs strings.Builder for _, track := range tracks { // build songID parameters fmt.Fprintf(&trackIDs, "&songId=%s", track.ID) } - reqParam := fmt.Sprintf("createPlaylist?name=%s%s&f=json", url.QueryEscape(c.Cfg.PlaylistName), trackIDs.String()) + var reqParam string + if c.Cfg.PlaylistID != "" { + reqParam = fmt.Sprintf("createPlaylist?playlistId=%s&name=%s%s&f=json", url.QueryEscape(c.Cfg.PlaylistID), url.QueryEscape(c.Cfg.PlaylistName), trackIDs.String()) + } else { + reqParam = fmt.Sprintf("createPlaylist?name=%s%s&f=json", url.QueryEscape(c.Cfg.PlaylistName), trackIDs.String()) + } body, err := c.subsonicRequest(reqParam) if err != nil { diff --git a/src/config/config.go b/src/config/config.go index 874e56a..1abc9aa 100644 --- a/src/config/config.go +++ b/src/config/config.go @@ -38,6 +38,7 @@ type Flags struct { ExcludeLocal bool PersistSet bool ReplacePlaylist bool + ReplacePlaylistSet bool SearchMBID string RefreshOnly bool CleanDownloads bool diff --git a/src/config/flags.go b/src/config/flags.go index 6e5d6b3..0aba13b 100644 --- a/src/config/flags.go +++ b/src/config/flags.go @@ -47,9 +47,13 @@ func (cfg *Config) GetFlags() error { persistSet := flag.Lookup("persist").Changed cfgSet := flag.Lookup("config").Changed playlistSet := flag.Lookup("playlist").Changed + replaceSet := flag.Lookup("replace-playlist").Changed + + if persistSet && !replaceSet { // for backward compatibility + replace = persist + replaceSet = true + } - - if searchMBID == "" { if !contains(validPlaylists, playlist) && !strings.HasPrefix(playlist, "custom-") { return fmt.Errorf("flag validation error: invalid playlist %s (must be one of: %s, or a custom-* id)", @@ -61,6 +65,7 @@ func (cfg *Config) GetFlags() error { } } + cfg.Flags.CfgPath = configPath cfg.Flags.CfgSet = cfgSet cfg.Flags.Playlist = playlist @@ -68,6 +73,7 @@ func (cfg *Config) GetFlags() error { cfg.Flags.DownloadMode = downloadMode cfg.Flags.ExcludeLocal = excludeLocal cfg.Flags.ReplacePlaylist = replace + cfg.Flags.ReplacePlaylistSet = replaceSet cfg.Flags.SearchMBID = searchMBID cfg.Flags.RefreshOnly = refreshOnly cfg.Flags.CleanDownloads = cleanDownloads @@ -86,7 +92,9 @@ func (cfg *Config) MergeFlags() { cfg.ServerCfg.WebEnvPath = cfg.Flags.CfgPath } - cfg.ReplacePlaylist = cfg.Flags.ReplacePlaylist + if cfg.Flags.ReplacePlaylistSet { + cfg.ReplacePlaylist = cfg.Flags.ReplacePlaylist + } } func contains(valid []string, val string) bool {