X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fscreen_file.c;h=25a86d1bb8f0c0ca8d75f5746818fe361b9d8d4a;hb=3a0114cd65186bbbcb6e0ff3c7eeb9c05fac0ab3;hp=8e1cf5b87f46dc6d097d0a9f3d6493ab07052c20;hpb=807add769f3b1696f8fea357af04e5d07a5cb7bb;p=ncmpc.git diff --git a/src/screen_file.c b/src/screen_file.c index 8e1cf5b..25a86d1 100644 --- a/src/screen_file.c +++ b/src/screen_file.c @@ -21,6 +21,7 @@ #include "screen_browser.h" #include "screen_interface.h" #include "screen_message.h" +#include "screen_queue.h" #include "screen.h" #include "config.h" #include "i18n.h" @@ -28,7 +29,6 @@ #include "mpdclient.h" #include "filelist.h" #include "screen_utils.h" -#include "screen_play.h" #include "screen_client.h" #include @@ -52,10 +52,26 @@ screen_file_repaint(void) } static void -screen_file_reload(struct mpdclient *c) +screen_file_load_list(struct mpdclient *c, struct filelist *filelist) { struct mpd_connection *connection; + connection = mpdclient_get_connection(c); + if (connection == NULL) + return; + + mpd_send_list_meta(connection, current_path); + filelist_recv(filelist, connection); + + if (mpd_response_finish(connection)) + filelist_sort_dir_play(filelist, compare_filelist_entry_path); + else + mpdclient_handle_error(c); +} + +static void +screen_file_reload(struct mpdclient *c) +{ if (browser.filelist != NULL) filelist_free(browser.filelist); @@ -64,19 +80,7 @@ screen_file_reload(struct mpdclient *c) /* add a dummy entry for ./.. */ filelist_append(browser.filelist, NULL); - if (!mpdclient_is_connected(c)) - return; - - connection = mpdclient_get_connection(c); - - mpd_send_list_meta(connection, current_path); - filelist_recv(browser.filelist, connection); - - if (mpd_response_finish(connection)) - filelist_sort_dir_play(browser.filelist, - compare_filelist_entry_path); - else - mpdclient_handle_error(c); + screen_file_load_list(c, browser.filelist); list_window_set_length(browser.lw, filelist_length(browser.filelist)); @@ -93,9 +97,7 @@ change_directory(struct mpdclient *c, const char *new_path) screen_file_reload(c); -#ifndef NCMPC_MINI screen_browser_sync_highlights(browser.filelist, &c->playlist); -#endif list_window_reset(browser.lw); @@ -164,21 +166,20 @@ screen_file_handle_enter(struct mpdclient *c) return change_to_entry(c, entry); } -static int +static void handle_save(struct mpdclient *c) { - struct filelist_entry *entry; + struct list_window_range range; const char *defaultname = NULL; char *defaultname_utf8 = NULL; - int ret; - unsigned selected; - if (browser.lw->selected >= filelist_length(browser.filelist)) - return -1; + list_window_get_range(browser.lw, &range); + if (range.start == range.end) + return; - for(selected = browser.lw->selected_start; selected <= browser.lw->selected_end; ++selected) - { - entry = filelist_get(browser.filelist, selected); + for (unsigned i = range.start; i < range.end; ++i) { + struct filelist_entry *entry = + filelist_get(browser.filelist, i); if( entry && entry->entity ) { struct mpd_entity *entity = entry->entity; if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_PLAYLIST) { @@ -191,29 +192,27 @@ handle_save(struct mpdclient *c) if(defaultname) defaultname_utf8 = utf8_to_locale(defaultname); - ret = playlist_save(c, NULL, defaultname_utf8); + playlist_save(c, NULL, defaultname_utf8); g_free(defaultname_utf8); - - return ret; } -static int +static void handle_delete(struct mpdclient *c) { struct mpd_connection *connection = mpdclient_get_connection(c); - struct filelist_entry *entry; + struct list_window_range range; struct mpd_entity *entity; const struct mpd_playlist *playlist; char *str, *buf; int key; - unsigned selected; - for(selected = browser.lw->selected_start; selected <= browser.lw->selected_end; ++selected) - { - if (selected >= filelist_length(browser.filelist)) - return -1; + if (connection == NULL) + return; - entry = filelist_get(browser.filelist, selected); + list_window_get_range(browser.lw, &range); + for (unsigned i = range.start; i < range.end; ++i) { + struct filelist_entry *entry = + filelist_get(browser.filelist, i); if( entry==NULL || entry->entity==NULL ) continue; @@ -237,7 +236,7 @@ handle_delete(struct mpdclient *c) if( key != YES[0] ) { /* translators: a dialog was aborted by the user */ screen_status_printf(_("Aborted")); - return 0; + return; } if (!mpd_run_rm(connection, mpd_playlist_get_path(playlist))) { @@ -251,7 +250,6 @@ handle_delete(struct mpdclient *c) user */ screen_status_printf(_("Playlist deleted")); } - return 0; } static void @@ -265,8 +263,7 @@ screen_file_init(WINDOW *w, int cols, int rows) static void screen_file_resize(int cols, int rows) { - browser.lw->cols = cols; - browser.lw->rows = rows; + list_window_resize(browser.lw, cols, rows); } static void @@ -283,6 +280,7 @@ static void screen_file_open(struct mpdclient *c) { screen_file_reload(c); + screen_browser_sync_highlights(browser.filelist, &c->playlist); } static const char * @@ -312,7 +310,7 @@ screen_file_get_title(char *str, size_t size) static void screen_file_paint(void) { - list_window_paint(browser.lw, browser_lw_callback, browser.filelist); + screen_browser_paint(&browser); } static void @@ -323,18 +321,14 @@ screen_file_update(struct mpdclient *c) screen_file_reload(c); } -#ifndef NCMPC_MINI - if (c->events & (MPD_IDLE_DATABASE | MPD_IDLE_STORED_PLAYLIST | - MPD_IDLE_PLAYLIST)) - screen_browser_sync_highlights(browser.filelist, &c->playlist); -#endif - if (c->events & (MPD_IDLE_DATABASE | MPD_IDLE_STORED_PLAYLIST #ifndef NCMPC_MINI | MPD_IDLE_PLAYLIST #endif - )) + )) { + screen_browser_sync_highlights(browser.filelist, &c->playlist); screen_file_repaint(); + } } static bool @@ -366,9 +360,7 @@ screen_file_cmd(struct mpdclient *c, command_t cmd) case CMD_SCREEN_UPDATE: screen_file_reload(c); -#ifndef NCMPC_MINI screen_browser_sync_highlights(browser.filelist, &c->playlist); -#endif screen_file_repaint(); return false;