core/playlists/generic: Add a playlist_generic_set_flag() function

The history playlist uses a noop function, since changing random or
repeat settings doesn't make sense for this playlist.  The collection
playlist uses a custom function to save changes after setting a flag.

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2016-05-24 07:48:11 -04:00 committed by Anna Schumaker
parent a80a84a955
commit 8f7e8be39d
6 changed files with 40 additions and 17 deletions

View File

@ -72,8 +72,8 @@ static void pl_artist_update(const gchar *name)
static void pl_artist_set_flag(const gchar *name, enum queue_flags flag,
bool enabled)
{
struct queue *queue = pl_artist_get_queue(name);
(enabled ? queue_set_flag : queue_unset_flag)(queue, flag);
struct playlist *playlist = __artist_pl_lookup(name);
playlist_generic_set_flag(playlist, flag, enabled);
}
static void pl_artist_sort(const gchar *name, enum compare_t sort, bool reset)

View File

@ -7,6 +7,11 @@
/*
* Noop playlist operations.
*/
void playlist_noop_set_flag(struct playlist *playlist,
enum queue_flags flag, bool enabled)
{
}
void playlist_noop_sort(struct playlist *playlist,
enum compare_t sort, bool reset)
{
@ -16,6 +21,14 @@ void playlist_noop_sort(struct playlist *playlist,
/*
* Generic playlist operations.
*/
void playlist_generic_set_flag(struct playlist *playlist,
enum queue_flags flag, bool enabled)
{
if (enabled)
return queue_set_flag(&playlist->pl_queue, flag);
return queue_unset_flag(&playlist->pl_queue, flag);
}
void playlist_generic_sort(struct playlist *playlist,
enum compare_t sort, bool reset)
{

View File

@ -195,11 +195,7 @@ static void pl_library_set_flag(const gchar *name, enum queue_flags flag,
bool enabled)
{
struct playlist *playlist = __lib_pl_lookup(name);
if (enabled)
queue_set_flag(&playlist->pl_queue, flag);
else
queue_unset_flag(&playlist->pl_queue, flag);
playlist_generic_set_flag(playlist, flag, enabled);
}
static void pl_library_sort(const gchar *name, enum compare_t sort, bool reset)

View File

@ -15,6 +15,13 @@ static struct file sys_collection = FILE_INIT("library.q", 0, 0);
/*
* Collection playlist operations.
*/
static void sys_pl_collection_set_flag(struct playlist *playlist,
enum queue_flags flag, bool enabled)
{
playlist_generic_set_flag(playlist, flag, enabled);
__sys_pl_save_collection();
}
static void sys_pl_collection_sort(struct playlist *playlist,
enum compare_t sort, bool reset)
{
@ -26,30 +33,37 @@ static void sys_pl_collection_sort(struct playlist *playlist,
static struct sys_playlist sys_playlists[SYS_PL_NUM_PLAYLISTS] = {
[SYS_PL_FAVORITES] = {
.spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "Favorites"),
.spl_set_flag = playlist_generic_set_flag,
.spl_sort = playlist_generic_sort,
},
[SYS_PL_HIDDEN] = {
.spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "Hidden"),
.spl_set_flag = playlist_generic_set_flag,
.spl_sort = playlist_generic_sort,
},
[SYS_PL_COLLECTION] = {
.spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "Collection"),
.spl_set_flag = sys_pl_collection_set_flag,
.spl_sort = sys_pl_collection_sort,
},
[SYS_PL_HISTORY] = {
.spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "History"),
.spl_set_flag = playlist_noop_set_flag,
.spl_sort = playlist_noop_sort,
},
[SYS_PL_UNPLAYED] = {
.spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "Unplayed"),
.spl_set_flag = playlist_generic_set_flag,
.spl_sort = playlist_generic_sort,
},
[SYS_PL_MOST_PLAYED] = {
.spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "Most Played"),
.spl_set_flag = playlist_generic_set_flag,
.spl_sort = playlist_generic_sort,
},
[SYS_PL_LEAST_PLAYED] = {
.spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "Least Played"),
.spl_set_flag = playlist_generic_set_flag,
.spl_sort = playlist_generic_sort,
},
};
@ -278,16 +292,9 @@ static void pl_system_update(const gchar *name)
static void pl_system_set_flag(const gchar *name, enum queue_flags flag,
bool enabled)
{
enum sys_playlist_t plist = __sys_pl_convert(name);
if (plist == SYS_PL_HISTORY || plist == SYS_PL_NUM_PLAYLISTS)
return;
if (enabled)
queue_set_flag(__sys_pl_queue(plist), flag);
else
queue_unset_flag(__sys_pl_queue(plist), flag);
if (plist == SYS_PL_COLLECTION)
__sys_pl_save_collection();
struct sys_playlist *sys_pl = __sys_pl_lookup(name);
if (sys_pl)
sys_pl->spl_set_flag(&sys_pl->spl_playlist, flag, enabled);
}
static void pl_system_sort(const gchar *name, enum compare_t sort, bool reset)

View File

@ -20,6 +20,7 @@ enum sys_playlist_t {
struct sys_playlist {
struct playlist spl_playlist;
void (*spl_set_flag)(struct playlist *, enum queue_flags, bool);
void (*spl_sort)(struct playlist *, enum compare_t, bool);
};

View File

@ -54,10 +54,16 @@ struct playlist_type {
};
/* Noop playlist set_flag operation. */
void playlist_noop_set_flag(struct playlist *, enum queue_flags, bool);
/* Noop playlist sorting operation. */
void playlist_noop_sort(struct playlist *, enum compare_t, bool);
/* Generic playlist set_flag operation. */
void playlist_generic_set_flag(struct playlist *, enum queue_flags, bool);
/* Generic playlist sorting operation. */
void playlist_generic_sort(struct playlist *, enum compare_t, bool);