diff --git a/src/screen_browser.c b/src/screen_browser.c
index 922e4de52fe2e8d2b316a15934d3f068fb4fc74a..31c5b6525f68fca91068920679c42e56bb0aeebf 100644 (file)
--- a/src/screen_browser.c
+++ b/src/screen_browser.c
/* ncmpc (Ncurses MPD Client)
- * (c) 2004-2009 The Music Player Daemon Project
+ * (c) 2004-2010 The Music Player Daemon Project
* Project homepage: http://musicpd.org
-
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
-
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
-
+ *
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
+ */
+#include "config.h"
#include "screen_browser.h"
#include "screen_file.h"
#include "screen_song.h"
#include "screen_lyrics.h"
-#include "screen_message.h"
+#include "screen_status.h"
#include "screen_find.h"
#include "screen.h"
#include "i18n.h"
#include "filelist.h"
#include "colors.h"
#include "paint.h"
-#include "utils.h"
+#include "song_paint.h"
#include <mpd/client.h>
#define HIGHLIGHT (0x01)
#endif
-static const char playlist_format[] = "*%s*";
-
#ifndef NCMPC_MINI
/* sync highlight flags with playlist */
/* list_window callback */
static const char *
-browser_lw_callback(unsigned idx, bool *highlight, G_GNUC_UNUSED char **second_column, void *data)
+browser_lw_callback(unsigned idx, void *data)
{
const struct filelist *fl = (const struct filelist *) data;
static char buf[BUFSIZE];
assert(entry != NULL);
entity = entry->entity;
-#ifndef NCMPC_MINI
- *highlight = (entry->flags & HIGHLIGHT) != 0;
-#else
- *highlight = false;
-#endif
if( entity == NULL )
return "..";
mpd_entity_get_directory(entity);
char *directory = utf8_to_locale(g_basename(mpd_directory_get_path(dir)));
g_strlcpy(buf, directory, sizeof(buf));
+ g_free(directory);
return buf;
} else if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_SONG) {
const struct mpd_song *song = mpd_entity_get_song(entity);
@@ -115,7 +110,7 @@ browser_lw_callback(unsigned idx, bool *highlight, G_GNUC_UNUSED char **second_c
mpd_entity_get_playlist(entity);
char *filename = utf8_to_locale(g_basename(mpd_playlist_get_path(playlist)));
- g_snprintf(buf, BUFSIZE, playlist_format, filename);
+ g_strlcpy(buf, filename, sizeof(buf));
g_free(filename);
return buf;
}
load_playlist(struct mpdclient *c, const struct mpd_playlist *playlist)
{
struct mpd_connection *connection = mpdclient_get_connection(c);
- char *filename = utf8_to_locale(mpd_playlist_get_path(playlist));
+
+ if (connection == NULL)
+ return false;
if (mpd_run_load(connection, mpd_playlist_get_path(playlist))) {
+ char *filename = utf8_to_locale(mpd_playlist_get_path(playlist));
screen_status_printf(_("Loading playlist %s..."),
g_basename(filename));
+ g_free(filename);
+
c->events |= MPD_IDLE_QUEUE;
} else
mpdclient_handle_error(c);
- g_free(filename);
return true;
}
enqueue_and_play(struct mpdclient *c, struct filelist_entry *entry)
{
struct mpd_connection *connection = mpdclient_get_connection(c);
+ if (connection == NULL)
+ return false;
+
const struct mpd_song *song = mpd_entity_get_song(entry->entity);
int id;
{
struct list_window_range range;
struct filelist_entry *entry;
- bool success;
+ bool success = false;
list_window_get_range(browser->lw, &range);
for (unsigned i = range.start; i < range.end; ++i) {
{
struct list_window_range range;
struct filelist_entry *entry;
- bool success;
+ bool success = false;
list_window_get_range(browser->lw, &range);
for (unsigned i = range.start; i < range.end; ++i) {
entry = browser_get_index(browser, i);
if (entry != NULL && entry->entity != NULL)
- success = browser_select_entry(c, entry, FALSE);
+ success = browser_select_entry(c, entry, FALSE) ||
+ success;
}
return range.end == range.start + 1 && success;
return false;
}
-static void
+void
screen_browser_paint_directory(WINDOW *w, unsigned width,
bool selected, const char *name)
{
row_clear_to_eol(w, width, selected);
}
-static void
-screen_browser_paint_song(WINDOW *w, G_GNUC_UNUSED unsigned y,
- unsigned width, bool selected,
- bool highlight, const struct mpd_song *song)
-{
- char buffer[width * 4];
-
- strfsong(buffer, sizeof(buffer), options.list_format, song);
- row_paint_text(w, width, highlight ? COLOR_LIST_BOLD : COLOR_LIST,
- selected, buffer);
-
-#ifndef NCMPC_MINI
- if (mpd_song_get_duration(song) > 0) {
- char duration[32];
- format_duration_short(duration, sizeof(duration),
- mpd_song_get_duration(song));
- wmove(w, y, width - strlen(duration) - 1);
- waddch(w, ' ');
- waddstr(w, duration);
- }
-#endif
-}
-
static void
screen_browser_paint_playlist(WINDOW *w, unsigned width,
bool selected, const char *name)
highlight = false;
#endif
- if (highlight)
- colors_use(w, COLOR_LIST_BOLD);
- else
- colors_use(w, COLOR_LIST);
-
switch (mpd_entity_get_type(entity)) {
case MPD_ENTITY_TYPE_DIRECTORY:
directory = mpd_entity_get_directory(entity);
break;
case MPD_ENTITY_TYPE_SONG:
- screen_browser_paint_song(w, y, width, selected, highlight,
- mpd_entity_get_song(entity));
+ paint_song_row(w, y, width, selected, highlight,
+ mpd_entity_get_song(entity), NULL);
break;
case MPD_ENTITY_TYPE_PLAYLIST:
break;
default:
- waddstr(w, "<unknown>");
+ row_paint_text(w, width, highlight ? COLOR_LIST_BOLD : COLOR_LIST,
+ selected, "<unknown>");
}
-
- whline(w, ' ', width);
-
- if (selected)
- wattroff(w, A_REVERSE);
}
void