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, static void pl_artist_set_flag(const gchar *name, enum queue_flags flag,
bool enabled) bool enabled)
{ {
struct queue *queue = pl_artist_get_queue(name); struct playlist *playlist = __artist_pl_lookup(name);
(enabled ? queue_set_flag : queue_unset_flag)(queue, flag); playlist_generic_set_flag(playlist, flag, enabled);
} }
static void pl_artist_sort(const gchar *name, enum compare_t sort, bool reset) static void pl_artist_sort(const gchar *name, enum compare_t sort, bool reset)

View File

@ -7,6 +7,11 @@
/* /*
* Noop playlist operations. * Noop playlist operations.
*/ */
void playlist_noop_set_flag(struct playlist *playlist,
enum queue_flags flag, bool enabled)
{
}
void playlist_noop_sort(struct playlist *playlist, void playlist_noop_sort(struct playlist *playlist,
enum compare_t sort, bool reset) enum compare_t sort, bool reset)
{ {
@ -16,6 +21,14 @@ void playlist_noop_sort(struct playlist *playlist,
/* /*
* Generic playlist operations. * 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, void playlist_generic_sort(struct playlist *playlist,
enum compare_t sort, bool reset) 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) bool enabled)
{ {
struct playlist *playlist = __lib_pl_lookup(name); struct playlist *playlist = __lib_pl_lookup(name);
playlist_generic_set_flag(playlist, flag, enabled);
if (enabled)
queue_set_flag(&playlist->pl_queue, flag);
else
queue_unset_flag(&playlist->pl_queue, flag);
} }
static void pl_library_sort(const gchar *name, enum compare_t sort, bool reset) 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. * 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, static void sys_pl_collection_sort(struct playlist *playlist,
enum compare_t sort, bool reset) 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] = { static struct sys_playlist sys_playlists[SYS_PL_NUM_PLAYLISTS] = {
[SYS_PL_FAVORITES] = { [SYS_PL_FAVORITES] = {
.spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "Favorites"), .spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "Favorites"),
.spl_set_flag = playlist_generic_set_flag,
.spl_sort = playlist_generic_sort, .spl_sort = playlist_generic_sort,
}, },
[SYS_PL_HIDDEN] = { [SYS_PL_HIDDEN] = {
.spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "Hidden"), .spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "Hidden"),
.spl_set_flag = playlist_generic_set_flag,
.spl_sort = playlist_generic_sort, .spl_sort = playlist_generic_sort,
}, },
[SYS_PL_COLLECTION] = { [SYS_PL_COLLECTION] = {
.spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "Collection"), .spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "Collection"),
.spl_set_flag = sys_pl_collection_set_flag,
.spl_sort = sys_pl_collection_sort, .spl_sort = sys_pl_collection_sort,
}, },
[SYS_PL_HISTORY] = { [SYS_PL_HISTORY] = {
.spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "History"), .spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "History"),
.spl_set_flag = playlist_noop_set_flag,
.spl_sort = playlist_noop_sort, .spl_sort = playlist_noop_sort,
}, },
[SYS_PL_UNPLAYED] = { [SYS_PL_UNPLAYED] = {
.spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "Unplayed"), .spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "Unplayed"),
.spl_set_flag = playlist_generic_set_flag,
.spl_sort = playlist_generic_sort, .spl_sort = playlist_generic_sort,
}, },
[SYS_PL_MOST_PLAYED] = { [SYS_PL_MOST_PLAYED] = {
.spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "Most Played"), .spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "Most Played"),
.spl_set_flag = playlist_generic_set_flag,
.spl_sort = playlist_generic_sort, .spl_sort = playlist_generic_sort,
}, },
[SYS_PL_LEAST_PLAYED] = { [SYS_PL_LEAST_PLAYED] = {
.spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "Least Played"), .spl_playlist = DEFINE_PLAYLIST(PL_SYSTEM, "Least Played"),
.spl_set_flag = playlist_generic_set_flag,
.spl_sort = playlist_generic_sort, .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, static void pl_system_set_flag(const gchar *name, enum queue_flags flag,
bool enabled) bool enabled)
{ {
enum sys_playlist_t plist = __sys_pl_convert(name); struct sys_playlist *sys_pl = __sys_pl_lookup(name);
if (plist == SYS_PL_HISTORY || plist == SYS_PL_NUM_PLAYLISTS) if (sys_pl)
return; sys_pl->spl_set_flag(&sys_pl->spl_playlist, flag, enabled);
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();
} }
static void pl_system_sort(const gchar *name, enum compare_t sort, bool reset) 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 sys_playlist {
struct playlist spl_playlist; struct playlist spl_playlist;
void (*spl_set_flag)(struct playlist *, enum queue_flags, bool);
void (*spl_sort)(struct playlist *, enum compare_t, 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. */ /* Noop playlist sorting operation. */
void playlist_noop_sort(struct playlist *, enum compare_t, bool); 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. */ /* Generic playlist sorting operation. */
void playlist_generic_sort(struct playlist *, enum compare_t, bool); void playlist_generic_sort(struct playlist *, enum compare_t, bool);