Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 7 additions & 14 deletions src/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@ type Config struct {
NotifyCfg NotifyConfig
ServerCfg ServerConfig
Flags Flags
PersistENV bool `env:"PERSIST" env-default:"true"`
Persist bool
ReplacePlaylist bool
System string `env:"EXPLO_SYSTEM"`
Debug bool `env:"DEBUG" env-default:"false"`
LogLevel string `env:"LOG_LEVEL" env-default:"INFO"`
Expand All @@ -37,8 +36,7 @@ type Flags struct {
PlaylistSet bool
DownloadMode string
ExcludeLocal bool
Persist bool
PersistSet bool
ReplacePlaylist bool
SearchMBID string
RefreshOnly bool
CleanDownloads bool
Expand Down Expand Up @@ -258,11 +256,7 @@ func (cfg *Config) HandleDeprecation() { //
slog.Warn("'DEBUG' variable is deprecated, please use LOG_LEVEL=DEBUG instead")
cfg.LogLevel = "DEBUG"
}
if cfg.Flags.PersistSet {
slog.Warn("--persist flag now only handles playlist deletion, use toggle in UI or --clean-downloads to delete tracks")
}

if cfg.DiscoveryCfg.Listenbrainz.UserToken == "" {
if cfg.DiscoveryCfg.Listenbrainz.UserToken == "" {
slog.Warn("Provide a ListenBrainz user token via Wizard or env (LISTENBRAINZ_USER_TOKEN)")
}

Expand All @@ -274,7 +268,7 @@ func (cfg *Config) HandleDeprecation() { //
// Generate playlist name and description
func (cfg *Config) GenPlaylistDetails() {

cfg.ClientCfg.PlaylistName = getPlaylistName(cfg.Flags.Playlist, cfg.ClientCfg.PlaylistNFormat, cfg.Persist)
cfg.ClientCfg.PlaylistName = getPlaylistName(cfg.Flags.Playlist, cfg.ClientCfg.PlaylistNFormat, cfg.ReplacePlaylist)
Comment thread
LumePart marked this conversation as resolved.
cfg.ClientCfg.PlaylistDescr = fmt.Sprintf(
"Created for %s by Explo, using ListenBrainz recommendations.",
cfg.DiscoveryCfg.Listenbrainz.User)
Expand All @@ -287,14 +281,13 @@ func (cfg *Config) GenPlaylistDetails() {
}
}

func getPlaylistName(playlistType, format string, persist bool) string {

func getPlaylistName(playlistType, format string, replace bool) string {

toTitle := cases.Title(language.Und)
base := toTitle.String(playlistType)

// Non-persistent or custom playlists always use base name
if !persist || strings.HasPrefix(playlistType, "custom-") {
// When replacing or for custom playlists, always use base name
if replace || strings.HasPrefix(playlistType, "custom-") {
return base
}

Expand Down
16 changes: 4 additions & 12 deletions src/config/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ func (cfg *Config) GetFlags() error {
var playlist string
var downloadMode string
var excludeLocal bool
var persist bool
var replace bool
var showVersion bool
var searchMBID string
var refreshOnly bool
Expand All @@ -30,7 +30,7 @@ func (cfg *Config) GetFlags() error {
flag.StringVarP(&playlist, "playlist", "p", "weekly-exploration", "Playlist where to get tracks. Supported: weekly-exploration, weekly-jams, daily-jams, on-repeat")
flag.StringVarP(&downloadMode, "download-mode", "d", "normal", "Download mode: 'normal' (download only when track is not found locally), 'skip' (skip downloading, only use tracks already found locally), 'force' (always download, don't check for local tracks)")
flag.BoolVarP(&excludeLocal, "exclude-local", "e", false, "Exclude locally found tracks from the imported playlist")
flag.BoolVar(&persist, "persist", true, "Keep playlists between generations")
flag.BoolVar(&replace, "replace-playlist", true, "Replace existing playlist with the same name")
flag.BoolVarP(&showVersion, "version", "v", false, "Print version and exit")
flag.StringVar(&searchMBID, "search-mbid", "", "Test Plex search for a single recording MBID (resolves via ListenBrainz, then searches your library)")
flag.BoolVar(&refreshOnly, "refresh-only", false, "Trigger alibrary rescan and exit; skips discovery and downloads")
Expand All @@ -42,7 +42,6 @@ func (cfg *Config) GetFlags() error {
fmt.Println(Version)
os.Exit(0)
}
persistSet := flag.Lookup("persist").Changed
cfgSet := flag.Lookup("config").Changed
playlistSet := flag.Lookup("playlist").Changed

Expand All @@ -65,14 +64,11 @@ func (cfg *Config) GetFlags() error {
cfg.Flags.PlaylistSet = playlistSet
cfg.Flags.DownloadMode = downloadMode
cfg.Flags.ExcludeLocal = excludeLocal
cfg.Flags.Persist = persist
cfg.Flags.ReplacePlaylist = replace
cfg.Flags.SearchMBID = searchMBID
cfg.Flags.RefreshOnly = refreshOnly
cfg.Flags.CleanDownloads = cleanDownloads

// for deprecation purposes (can be removed at a later date)
cfg.Flags.PersistSet = persistSet

return nil
}

Expand All @@ -84,11 +80,7 @@ func (cfg *Config) MergeFlags() {
cfg.ServerCfg.WebEnvPath = cfg.Flags.CfgPath
}

if cfg.Flags.PersistSet {
cfg.Persist = cfg.Flags.Persist
} else {
cfg.Persist = cfg.PersistENV
}
cfg.ReplacePlaylist = cfg.Flags.ReplacePlaylist
}

func contains(valid []string, val string) bool {
Expand Down
2 changes: 1 addition & 1 deletion src/main/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ func main() {
slog.Error(err.Error(), "notify", true)
os.Exit(1)
}
if !cfg.Persist {
if cfg.ReplacePlaylist {
err := client.DeletePlaylist()
if err != nil {
slog.Warn(err.Error(), "notify", true)
Expand Down
2 changes: 2 additions & 0 deletions src/web/backend/routes.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ func (s *Server) registerSettingRoutes() {
s.mux.Handle("POST /api/ui/config/schedules", s.auth(s.settings.HandleSaveSchedule))
s.mux.Handle("POST /api/ui/config/path-template", s.auth(s.settings.HandleSavePathTemplate))
s.mux.Handle("POST /api/ui/config/enrich-metadata", s.auth(s.settings.HandleSaveEnrichMetadata))
s.mux.Handle("POST /api/ui/config/replace-playlist", s.auth(s.settings.HandleSaveReplacePlaylist))
s.mux.Handle("POST /api/ui/config/clean-downloads", s.auth(s.settings.HandleSaveCleanDownloads))

// Path template presets: GET list, POST add; DELETE per name under prefix
s.mux.Handle("api/ui/path-templates", s.auth(s.settings.HandlePathTemplates))
Expand Down
5 changes: 2 additions & 3 deletions src/web/backend/run/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,8 @@ func (mr *ManualRun) HandleRun(w http.ResponseWriter, r *http.Request) {
return
}

args := buildArgs(r.FormValue("playlist"), r.FormValue("download_mode"),
r.FormValue("persist") == "false", r.FormValue("exclude_local") == "true",
mr.cfg.WebEnvPath)
replacePlaylist := r.FormValue("replace_playlist") != "false"
args := buildArgs(r.FormValue("playlist"), r.FormValue("download_mode"), mr.cfg.WebEnvPath, replacePlaylist)

if err := mr.startRun(args); err != nil {
if errors.Is(err, errRunAlreadyStarted) {
Expand Down
9 changes: 3 additions & 6 deletions src/web/backend/run/manual_run.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,19 +164,16 @@ func (mr *ManualRun) finishRun(code int) {
}

// helper to build flag arguments
func buildArgs(playlist, downloadMode string, noPersist, excludeLocal bool, WebEnvPath string) []string {
func buildArgs(playlist, downloadMode, WebEnvPath string, replacePlaylist bool) []string {
args := []string{"--config", WebEnvPath}
if playlist != "" {
args = append(args, "--playlist", playlist)
}
if downloadMode != "" {
args = append(args, "--download-mode", downloadMode)
}
if noPersist {
args = append(args, "--persist=false")
}
if excludeLocal {
args = append(args, "--exclude-local")
if !replacePlaylist {
args = append(args, "--replace-playlist=false")
}
return args
}
Loading
Loading