diff --git a/src/screen_file.c b/src/screen_file.c
index b2ca1b6cd9c6c5acd0bf72f9935f116ce9e55a82..4a4bdf70c1bcb0b65b5842cf5ba1c2d13a71bbbd 100644 (file)
--- a/src/screen_file.c
+++ b/src/screen_file.c
#include "screen.h"
#include "screen_utils.h"
#include "screen_browse.h"
-
+#include "screen_play.h"
#define USE_OLD_LAYOUT
#undef USE_OLD_ADD
g_free(filename);
return buf;
}
- return "Error: Unknow entry!";
+ return "Error: Unknown entry!";
}
/* chdir */
static int
-change_directory(screen_t *screen, mpdclient_t *c, filelist_entry_t *entry)
+change_directory(screen_t *screen, mpdclient_t *c, filelist_entry_t *entry, char *new_path)
{
- mpd_InfoEntity *entity = entry->entity;
+ mpd_InfoEntity *entity = NULL;
gchar *path = NULL;
+ if( entry!=NULL )
+ entity = entry->entity;
+ else if( new_path==NULL )
+ return -1;
+
if( entity==NULL )
{
- /* return to parent */
- char *parent = g_path_get_dirname(filelist->path);
- if( strcmp(parent, ".") == 0 )
+ if( entry || 0==strcmp(new_path, "..") )
{
- parent[0] = '\0';
+ /* return to parent */
+ char *parent = g_path_get_dirname(filelist->path);
+ if( strcmp(parent, ".") == 0 )
+ {
+ parent[0] = '\0';
+ }
+ path = g_strdup(parent);
+ }
+ else
+ {
+ /* entry==NULL, then new_path ("" is root) */
+ path = g_strdup(new_path);
}
- path = g_strdup(parent);
list_window_reset(lw);
/* restore previous list window state */
list_window_pop_state(lw_state,lw);
entity = entry->entity;
if( entity==NULL || entity->type==MPD_INFO_ENTITY_TYPE_DIRECTORY )
- return change_directory(screen, c, entry);
+ return change_directory(screen, c, entry, NULL);
else if( entity->type==MPD_INFO_ENTITY_TYPE_PLAYLISTFILE )
return load_playlist(screen, c, entry);
else if( entity->type==MPD_INFO_ENTITY_TYPE_SONG )
static char *
browse_title(char *str, size_t size)
{
- g_snprintf(str, size, _("Browse: %s"), basename(filelist->path));
+ char *pathcopy;
+ char *parentdir;
+ pathcopy = strdup(filelist->path);
+ parentdir = dirname(pathcopy);
+ parentdir = basename(parentdir);
+ if( parentdir[0] == '.' && strlen(parentdir) == 1 )
+ {
+ parentdir = NULL;
+ }
+ g_snprintf(str, size, _("Browse: %s%s%s"),
+ parentdir ? parentdir : "",
+ parentdir ? "/" : "",
+ basename(filelist->path));
+ free(pathcopy);
return str;
}
case CMD_PLAY:
browse_handle_enter(screen, c, lw, filelist);
return 1;
+ case CMD_GO_ROOT_DIRECTORY:
+ return change_directory(screen, c, NULL, "");
+ break;
+ case CMD_GO_PARENT_DIRECTORY:
+ return change_directory(screen, c, NULL, "..");
+ break;
case CMD_SELECT:
if( browse_handle_select(screen, c, lw, filelist) == 0 )
{
{
if( mpdclient_cmd_db_update_utf8(c,filelist->path)==0 )
{
- screen_status_printf(_("Database update of %s started!"),
+ if(strcmp(filelist->path,"")) {
+ screen_status_printf(_("Database update of %s started!"),
filelist->path);
+ } else {
+ screen_status_printf(_("Database update started!"));
+ }
/* set updatingDb to make shure the browse callback gets called
* even if the updated has finished before status is updated */
c->status->updatingDb = 1;