Code

screen: simplified CMD_SCREEN_UPDATE handlers
[ncmpc.git] / src / screen_artist.c
index 61f05cc51d26f2a85eec56a8f352688888065b73..dd7e0175a180e0f6eb8d4d3bb796bab9d2100990 100644 (file)
@@ -108,8 +108,6 @@ update_metalist(mpdclient_t *c, char *m_artist, char *m_album)
 
        if (m_album) {
                /* retreive songs... */
-               filelist_entry_t *entry;
-
                artist = m_artist;
                album = m_album;
                if (album[0] == 0) {
@@ -123,12 +121,12 @@ update_metalist(mpdclient_t *c, char *m_artist, char *m_album)
                                mpdclient_filelist_search_utf8(c, TRUE,
                                                               MPD_TABLE_ALBUM,
                                                               album);
+               if (browser.filelist == NULL)
+                       browser.filelist = filelist_new(NULL);
+
                /* add a dummy entry for ".." */
-               entry = g_malloc0(sizeof(filelist_entry_t));
-               entry->entity = NULL;
-               browser.filelist->list = g_list_insert(browser.filelist->list,
-                                                     entry, 0);
-               browser.filelist->length++;
+               filelist_prepend(browser.filelist, NULL);
+
                /* install playlist callback and fix highlights */
                sync_highlights(c, browser.filelist);
                mpdclient_install_playlist_callback(c, playlist_changed_callback);
@@ -165,7 +163,6 @@ browse_callback(mpdclient_t *c, int event, mpd_unused gpointer data)
        case BROWSE_DB_UPDATED:
                D("screen_artist.c> browse_callback() [BROWSE_DB_UPDATED]\n");
                browser.lw->clear = 1;
-               browser.lw->repaint = 1;
                update_metalist(c, g_strdup(artist), g_strdup(album));
                break;
        default:
@@ -277,6 +274,8 @@ add_query(mpdclient_t *c, int table, char *_filter)
        char *str;
        mpdclient_filelist_t *addlist;
 
+       assert(filter != NULL);
+
        str = utf8_to_locale(_filter);
        if (table== MPD_TABLE_ALBUM)
                screen_status_printf("Adding album %s...", str);
@@ -386,6 +385,9 @@ artist_cmd(screen_t *screen, mpdclient_t *c, command_t cmd)
                case LIST_ARTISTS:
                        selected = g_list_nth_data(metalist,
                                                   browser.lw->selected);
+                       if (selected == NULL)
+                               return 1;
+
                        add_query(c, MPD_TABLE_ARTIST, selected);
                        cmd = CMD_LIST_NEXT; /* continue and select next item... */
                        break;
@@ -397,6 +399,9 @@ artist_cmd(screen_t *screen, mpdclient_t *c, command_t cmd)
                        else if (browser.lw->selected > 0) {
                                selected = g_list_nth_data(metalist,
                                                           browser.lw->selected);
+                               if (selected == NULL)
+                                       return 1;
+
                                add_query(c, MPD_TABLE_ALBUM, selected);
                                cmd = CMD_LIST_NEXT; /* continue and select next item... */
                        }
@@ -412,9 +417,6 @@ artist_cmd(screen_t *screen, mpdclient_t *c, command_t cmd)
 
                /* continue and update... */
        case CMD_SCREEN_UPDATE:
-               screen->painted = 0;
-               browser.lw->clear = 1;
-               browser.lw->repaint = 1;
                update_metalist(c, g_strdup(artist), g_strdup(album));
                screen_status_printf(_("Screen updated!"));
                return 0;
@@ -425,7 +427,7 @@ artist_cmd(screen_t *screen, mpdclient_t *c, command_t cmd)
        case CMD_LIST_RFIND_NEXT:
                if (browser.filelist)
                        return screen_find(screen,
-                                          browser.lw, browser.filelist->length,
+                                          browser.lw, filelist_length(browser.filelist),
                                           cmd, browser_lw_callback,
                                           browser.filelist);
                else if (metalist)
@@ -443,7 +445,7 @@ artist_cmd(screen_t *screen, mpdclient_t *c, command_t cmd)
        }
 
        if (browser.filelist)
-               return list_window_cmd(browser.lw, browser.filelist->length, cmd);
+               return list_window_cmd(browser.lw, filelist_length(browser.filelist), cmd);
        else if (metalist)
                return list_window_cmd(browser.lw, metalist_length, cmd);