Code

screen_artist: added reload_lists()
authorMax Kellermann <max@duempel.org>
Wed, 1 Oct 2008 07:38:25 +0000 (09:38 +0200)
committerMax Kellermann <max@duempel.org>
Wed, 1 Oct 2008 07:38:25 +0000 (09:38 +0200)
Some callers of update_metalist() want to reload the list contents.
Add an optimized function reload_lists() which does not modify the
global variables "mode", "artist", "album".

src/screen_artist.c

index 5dbb2c03b55f960837e72c5c082d902d30d057fc..340d8f22a3f698a6f0c7e4f460323d122145cbd0 100644 (file)
@@ -258,6 +258,26 @@ update_metalist(mpdclient_t *c, char *m_artist, char *m_album)
        }
 }
 
+static void
+reload_lists(struct mpdclient *c)
+{
+       free_lists(c);
+
+       switch (mode) {
+       case LIST_ARTISTS:
+               load_artist_list(c);
+               break;
+
+       case LIST_ALBUMS:
+               load_album_list(c);
+               break;
+
+       case LIST_SONGS:
+               load_song_list(c);
+               break;
+       }
+}
+
 /* db updated */
 static void
 browse_callback(mpdclient_t *c, int event, mpd_unused gpointer data)
@@ -265,7 +285,7 @@ browse_callback(mpdclient_t *c, int event, mpd_unused gpointer data)
        switch(event) {
        case BROWSE_DB_UPDATED:
                D("screen_artist.c> browse_callback() [BROWSE_DB_UPDATED]\n");
-               update_metalist(c, g_strdup(artist), g_strdup(album));
+               reload_lists(c);
                break;
        default:
                break;
@@ -301,7 +321,7 @@ open(mpd_unused screen_t *screen, mpdclient_t *c)
        static gboolean callback_installed = FALSE;
 
        if (metalist == NULL && browser.filelist == NULL)
-               update_metalist(c, NULL, NULL);
+               reload_lists(c);
        if (!callback_installed) {
                mpdclient_install_browse_callback(c, browse_callback);
                callback_installed = TRUE;
@@ -544,7 +564,7 @@ artist_cmd(screen_t *screen, mpdclient_t *c, command_t cmd)
 
                /* continue and update... */
        case CMD_SCREEN_UPDATE:
-               update_metalist(c, g_strdup(artist), g_strdup(album));
+               reload_lists(c);
                screen_status_printf(_("Screen updated!"));
                return 0;