Properties plugin: Eliminate redundant Track Info code
When opening an audio file from the file browser or database using the Properties plugin, it will now use existing code from the Show Track Info screen for displaying metadata. The menu option has been renamed accordingly. Change-Id: I5a824865b9f980151b91aff3c3c18ec45830a12c
This commit is contained in:
parent
4b293285ea
commit
f3358eb20a
6 changed files with 156 additions and 221 deletions
|
@ -14722,58 +14722,58 @@
|
|||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PROPERTIES_ARTIST
|
||||
desc: in properties plugin
|
||||
desc: deprecated
|
||||
user: core
|
||||
<source>
|
||||
*: "[Artist]"
|
||||
*: ""
|
||||
</source>
|
||||
<dest>
|
||||
*: "[Artist]"
|
||||
*: ""
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Artist"
|
||||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PROPERTIES_TITLE
|
||||
desc: in properties plugin
|
||||
desc: deprecated
|
||||
user: core
|
||||
<source>
|
||||
*: "[Title]"
|
||||
*: ""
|
||||
</source>
|
||||
<dest>
|
||||
*: "[Title]"
|
||||
*: ""
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Title"
|
||||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PROPERTIES_ALBUM
|
||||
desc: in properties plugin
|
||||
desc: deprecated
|
||||
user: core
|
||||
<source>
|
||||
*: "[Album]"
|
||||
*: ""
|
||||
</source>
|
||||
<dest>
|
||||
*: "[Album]"
|
||||
*: ""
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Album"
|
||||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PROPERTIES_DURATION
|
||||
desc: in properties plugin
|
||||
desc: deprecated
|
||||
user: core
|
||||
<source>
|
||||
*: "[Duration]"
|
||||
*: ""
|
||||
</source>
|
||||
<dest>
|
||||
*: "[Duration]"
|
||||
*: ""
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Duration"
|
||||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
|
@ -15947,128 +15947,128 @@
|
|||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PROPERTIES_ALBUMARTIST
|
||||
desc: in properties plugin
|
||||
desc: deprecated
|
||||
user: core
|
||||
<source>
|
||||
*: "[Album Artist]"
|
||||
*: ""
|
||||
</source>
|
||||
<dest>
|
||||
*: "[Album Artist]"
|
||||
*: ""
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Album Artist"
|
||||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PROPERTIES_GENRE
|
||||
desc: in properties plugin
|
||||
desc: deprecated
|
||||
user: core
|
||||
<source>
|
||||
*: "[Genre]"
|
||||
*: ""
|
||||
</source>
|
||||
<dest>
|
||||
*: "[Genre]"
|
||||
*: ""
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Genre"
|
||||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PROPERTIES_COMMENT
|
||||
desc: in properties plugin
|
||||
desc: deprecated
|
||||
user: core
|
||||
<source>
|
||||
*: "[Comment]"
|
||||
*: ""
|
||||
</source>
|
||||
<dest>
|
||||
*: "[Comment]"
|
||||
*: ""
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Comment"
|
||||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PROPERTIES_COMPOSER
|
||||
desc: in properties plugin
|
||||
desc: deprecated
|
||||
user: core
|
||||
<source>
|
||||
*: "[Composer]"
|
||||
*: ""
|
||||
</source>
|
||||
<dest>
|
||||
*: "[Composer]"
|
||||
*: ""
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Composer"
|
||||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PROPERTIES_YEAR
|
||||
desc: in properties plugin
|
||||
desc: deprecated
|
||||
user: core
|
||||
<source>
|
||||
*: "[Year]"
|
||||
*: ""
|
||||
</source>
|
||||
<dest>
|
||||
*: "[Year]"
|
||||
*: ""
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Year"
|
||||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PROPERTIES_TRACKNUM
|
||||
desc: in properties plugin
|
||||
desc: deprecated
|
||||
user: core
|
||||
<source>
|
||||
*: "[Tracknum]"
|
||||
*: ""
|
||||
</source>
|
||||
<dest>
|
||||
*: "[Tracknum]"
|
||||
*: ""
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Track number"
|
||||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PROPERTIES_DISCNUM
|
||||
desc: in properties plugin
|
||||
desc: deprecated
|
||||
user: core
|
||||
<source>
|
||||
*: "[Discnum]"
|
||||
*: ""
|
||||
</source>
|
||||
<dest>
|
||||
*: "[Discnum]"
|
||||
*: ""
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Disc number"
|
||||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PROPERTIES_FREQUENCY
|
||||
desc: in properties plugin
|
||||
desc: deprecated
|
||||
user: core
|
||||
<source>
|
||||
*: "[Frequency]"
|
||||
*: ""
|
||||
</source>
|
||||
<dest>
|
||||
*: "[Frequency]"
|
||||
*: ""
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Frequency"
|
||||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_PROPERTIES_BITRATE
|
||||
desc: in properties plugin
|
||||
desc: deprecated
|
||||
user: core
|
||||
<source>
|
||||
*: "[Bitrate]"
|
||||
*: ""
|
||||
</source>
|
||||
<dest>
|
||||
*: "[Bitrate]"
|
||||
*: ""
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Bit rate"
|
||||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
|
@ -16312,3 +16312,17 @@
|
|||
*: "Cache needs to finish updating first!"
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_TRACK_INFO
|
||||
desc: Track Info Title
|
||||
user: core
|
||||
<source>
|
||||
*: "Track Info"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Track Info"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Track Info"
|
||||
</voice>
|
||||
</phrase>
|
||||
|
|
|
@ -1595,6 +1595,9 @@ MENUITEM_FUNCTION(list_viewers_item, 0, ID2P(LANG_ONPLAY_OPEN_WITH),
|
|||
MENUITEM_FUNCTION(properties_item, MENU_FUNC_USEPARAM, ID2P(LANG_PROPERTIES),
|
||||
onplay_load_plugin, (void *)"properties",
|
||||
clipboard_callback, Icon_NOICON);
|
||||
MENUITEM_FUNCTION(track_info_item, MENU_FUNC_USEPARAM, ID2P(LANG_MENU_SHOW_ID3_INFO),
|
||||
onplay_load_plugin, (void *)"properties",
|
||||
clipboard_callback, Icon_NOICON);
|
||||
#ifdef HAVE_TAGCACHE
|
||||
MENUITEM_FUNCTION(pictureflow_item, MENU_FUNC_USEPARAM, ID2P(LANG_ONPLAY_PICTUREFLOW),
|
||||
onplay_load_plugin, (void *)"pictureflow",
|
||||
|
@ -1666,7 +1669,7 @@ static int clipboard_callback(int action,
|
|||
{
|
||||
if (((selected_file_attr & FILE_ATTR_MASK) ==
|
||||
FILE_ATTR_AUDIO) &&
|
||||
(this_item == &properties_item ||
|
||||
(this_item == &track_info_item ||
|
||||
this_item == &pictureflow_item))
|
||||
return action;
|
||||
return ACTION_EXIT_MENUITEM;
|
||||
|
@ -1688,7 +1691,10 @@ static int clipboard_callback(int action,
|
|||
if (this_item == &rename_file_item ||
|
||||
this_item == &clipboard_cut_item ||
|
||||
this_item == &clipboard_copy_item ||
|
||||
this_item == &properties_item ||
|
||||
(this_item == &track_info_item &&
|
||||
(selected_file_attr & FILE_ATTR_MASK) == FILE_ATTR_AUDIO) ||
|
||||
(this_item == &properties_item &&
|
||||
(selected_file_attr & FILE_ATTR_MASK) != FILE_ATTR_AUDIO) ||
|
||||
this_item == &add_to_faves_item)
|
||||
{
|
||||
return action;
|
||||
|
@ -1765,7 +1771,7 @@ MAKE_ONPLAYMENU( tree_onplay_menu, ID2P(LANG_ONPLAY_MENU_TITLE),
|
|||
#if LCD_DEPTH > 1
|
||||
&set_backdrop_item,
|
||||
#endif
|
||||
&list_viewers_item, &create_dir_item, &properties_item,
|
||||
&list_viewers_item, &create_dir_item, &properties_item, &track_info_item,
|
||||
#ifdef HAVE_TAGCACHE
|
||||
&pictureflow_item,
|
||||
#endif
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2002 Björn Stenberg
|
||||
* Copyright (C) 2002 Björn Stenberg
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -815,6 +815,7 @@ static const struct plugin_api rockbox_api = {
|
|||
#endif
|
||||
sys_poweroff,
|
||||
sys_reboot,
|
||||
browse_id3,
|
||||
};
|
||||
|
||||
static int plugin_buffer_handle;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2002 Björn Stenberg
|
||||
* Copyright (C) 2002 Björn Stenberg
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -112,6 +112,7 @@ int plugin_open(const char *plugin, const char *parameter);
|
|||
#include "core_alloc.h"
|
||||
#include "screen_access.h"
|
||||
#include "onplay.h"
|
||||
#include "screens.h"
|
||||
|
||||
#ifdef HAVE_ALBUMART
|
||||
#include "albumart.h"
|
||||
|
@ -156,7 +157,7 @@ int plugin_open(const char *plugin, const char *parameter);
|
|||
#define PLUGIN_MAGIC 0x526F634B /* RocK */
|
||||
|
||||
/* increase this every time the api struct changes */
|
||||
#define PLUGIN_API_VERSION 250
|
||||
#define PLUGIN_API_VERSION 251
|
||||
|
||||
/* update this to latest version if a change to the api struct breaks
|
||||
backwards compatibility (and please take the opportunity to sort in any
|
||||
|
@ -942,6 +943,8 @@ struct plugin_api {
|
|||
#endif
|
||||
void (*sys_poweroff)(void);
|
||||
void (*sys_reboot)(void);
|
||||
bool (*browse_id3)(struct mp3entry *id3,
|
||||
int playlist_display_index, int playlist_amount);
|
||||
};
|
||||
|
||||
/* plugin header */
|
||||
|
|
|
@ -20,9 +20,19 @@
|
|||
****************************************************************************/
|
||||
#include "plugin.h"
|
||||
|
||||
#if !defined(ARRAY_SIZE)
|
||||
#define ARRAY_SIZE(x) (sizeof((x)) / sizeof((x)[0]))
|
||||
#endif
|
||||
|
||||
enum props_types {
|
||||
PROPS_FILE = 0,
|
||||
PROPS_ID3,
|
||||
PROPS_DIR
|
||||
};
|
||||
|
||||
bool its_a_dir = false;
|
||||
static int props_type = PROPS_FILE;
|
||||
|
||||
static struct mp3entry id3;
|
||||
|
||||
char str_filename[MAX_PATH];
|
||||
char str_dirname[MAX_PATH];
|
||||
|
@ -32,27 +42,12 @@ char str_filecount[64];
|
|||
char str_date[64];
|
||||
char str_time[64];
|
||||
|
||||
char str_title[MAX_PATH];
|
||||
char str_composer[MAX_PATH];
|
||||
char str_artist[MAX_PATH];
|
||||
char str_albumartist[MAX_PATH];
|
||||
char str_album[MAX_PATH];
|
||||
char str_genre[MAX_PATH];
|
||||
char str_comment[MAX_PATH];
|
||||
char str_year[MAX_PATH];
|
||||
char str_discnum[MAX_PATH];
|
||||
char str_tracknum[MAX_PATH];
|
||||
char str_duration[32];
|
||||
char str_bitrate[32];
|
||||
char str_frequency[32];
|
||||
|
||||
unsigned nseconds;
|
||||
unsigned long nsize;
|
||||
int32_t size_unit;
|
||||
struct tm tm;
|
||||
|
||||
int num_properties;
|
||||
|
||||
#define NUM_FILE_PROPERTIES 5
|
||||
static const unsigned char* const props_file[] =
|
||||
{
|
||||
ID2P(LANG_PROPERTIES_PATH), str_dirname,
|
||||
|
@ -60,20 +55,9 @@ static const unsigned char* const props_file[] =
|
|||
ID2P(LANG_PROPERTIES_SIZE), str_size,
|
||||
ID2P(LANG_PROPERTIES_DATE), str_date,
|
||||
ID2P(LANG_PROPERTIES_TIME), str_time,
|
||||
ID2P(LANG_PROPERTIES_COMPOSER), str_composer,
|
||||
ID2P(LANG_PROPERTIES_ARTIST), str_artist,
|
||||
ID2P(LANG_PROPERTIES_ALBUMARTIST), str_albumartist,
|
||||
ID2P(LANG_PROPERTIES_TITLE), str_title,
|
||||
ID2P(LANG_PROPERTIES_ALBUM), str_album,
|
||||
ID2P(LANG_PROPERTIES_GENRE), str_genre,
|
||||
ID2P(LANG_PROPERTIES_COMMENT), str_comment,
|
||||
ID2P(LANG_PROPERTIES_YEAR), str_year,
|
||||
ID2P(LANG_PROPERTIES_DISCNUM), str_discnum,
|
||||
ID2P(LANG_PROPERTIES_TRACKNUM), str_tracknum,
|
||||
ID2P(LANG_PROPERTIES_DURATION), str_duration,
|
||||
ID2P(LANG_PROPERTIES_BITRATE), str_bitrate,
|
||||
ID2P(LANG_PROPERTIES_FREQUENCY), str_frequency,
|
||||
};
|
||||
|
||||
#define NUM_DIR_PROPERTIES 4
|
||||
static const unsigned char* const props_dir[] =
|
||||
{
|
||||
ID2P(LANG_PROPERTIES_PATH), str_dirname,
|
||||
|
@ -107,7 +91,6 @@ static bool file_properties(const char* selected_file)
|
|||
bool found = false;
|
||||
DIR* dir;
|
||||
struct dirent* entry;
|
||||
static struct mp3entry id3;
|
||||
|
||||
dir = rb->opendir(str_dirname);
|
||||
if (dir)
|
||||
|
@ -128,81 +111,14 @@ static bool file_properties(const char* selected_file)
|
|||
rb->snprintf(str_time, sizeof str_time, "%02d:%02d:%02d",
|
||||
tm.tm_hour, tm.tm_min, tm.tm_sec);
|
||||
|
||||
num_properties = 5;
|
||||
|
||||
int fd = rb->open(selected_file, O_RDONLY);
|
||||
if (fd >= 0 &&
|
||||
rb->get_metadata(&id3, fd, selected_file))
|
||||
if (fd >= 0)
|
||||
{
|
||||
long dur = id3.length / 1000; /* seconds */
|
||||
rb->snprintf(str_composer, sizeof str_composer,
|
||||
"%s", id3.composer ? id3.composer : "");
|
||||
rb->snprintf(str_artist, sizeof str_artist,
|
||||
"%s", id3.artist ? id3.artist : "");
|
||||
rb->snprintf(str_albumartist, sizeof str_albumartist,
|
||||
"%s", id3.albumartist ? id3.albumartist : "");
|
||||
rb->snprintf(str_title, sizeof str_title,
|
||||
"%s", id3.title ? id3.title : "");
|
||||
rb->snprintf(str_album, sizeof str_album,
|
||||
"%s", id3.album ? id3.album : "");
|
||||
rb->snprintf(str_genre, sizeof str_genre,
|
||||
"%s", id3.genre_string ? id3.genre_string : "");
|
||||
rb->snprintf(str_comment, sizeof str_comment,
|
||||
"%s", id3.comment ? id3.comment : "");
|
||||
if (rb->get_metadata(&id3, fd, selected_file))
|
||||
props_type = PROPS_ID3;
|
||||
|
||||
if (id3.year_string)
|
||||
rb->snprintf(str_year, sizeof str_year,
|
||||
"%s", id3.year_string);
|
||||
else if (id3.year)
|
||||
rb->snprintf(str_year, sizeof str_year,
|
||||
"%d", id3.year);
|
||||
else
|
||||
rb->snprintf(str_year, sizeof str_year,
|
||||
"%s", "");
|
||||
|
||||
if (id3.disc_string)
|
||||
rb->snprintf(str_discnum, sizeof str_discnum,
|
||||
"%s", id3.disc_string);
|
||||
else if (id3.discnum)
|
||||
rb->snprintf(str_discnum, sizeof str_discnum,
|
||||
"%d", id3.discnum);
|
||||
else
|
||||
rb->snprintf(str_discnum, sizeof str_discnum,
|
||||
"%s", "");
|
||||
|
||||
if (id3.track_string)
|
||||
rb->snprintf(str_tracknum, sizeof str_tracknum,
|
||||
"%s", id3.track_string);
|
||||
else if(id3.tracknum)
|
||||
rb->snprintf(str_tracknum, sizeof str_tracknum,
|
||||
"%d", id3.tracknum);
|
||||
else
|
||||
rb->snprintf(str_tracknum, sizeof str_tracknum,
|
||||
"%s", "");
|
||||
|
||||
rb->snprintf(str_bitrate, sizeof str_bitrate,
|
||||
"%d kbps", id3.bitrate ? : 0);
|
||||
rb->snprintf(str_frequency, sizeof str_frequency,
|
||||
"%ld Hz", id3.frequency ? : 0);
|
||||
num_properties += 12;
|
||||
|
||||
if (dur > 0)
|
||||
{
|
||||
nseconds = dur;
|
||||
if (dur < 3600)
|
||||
rb->snprintf(str_duration, sizeof str_duration,
|
||||
"%d:%02d", (int)(dur / 60),
|
||||
(int)(dur % 60));
|
||||
else
|
||||
rb->snprintf(str_duration, sizeof str_duration,
|
||||
"%d:%02d:%02d",
|
||||
(int)(dur / 3600),
|
||||
(int)(dur % 3600 / 60),
|
||||
(int)(dur % 60));
|
||||
num_properties++;
|
||||
}
|
||||
}
|
||||
rb->close(fd);
|
||||
}
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
|
@ -314,7 +230,6 @@ static bool dir_properties(const char* selected_file, DPS *dps)
|
|||
nsize = (long) (dps->bc >> (log*10));
|
||||
size_unit = units[log];
|
||||
rb->snprintf(str_size, sizeof str_size, "%ld %s", nsize, rb->str(size_unit));
|
||||
num_properties = 4;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -328,35 +243,20 @@ static const char * get_props(int selected_item, void* data,
|
|||
char *buffer, size_t buffer_len)
|
||||
{
|
||||
(void)data;
|
||||
if(its_a_dir)
|
||||
{
|
||||
if(selected_item >= (int)(sizeof(props_dir) / sizeof(props_dir[0])))
|
||||
{
|
||||
rb->strlcpy(buffer, "ERROR", buffer_len);
|
||||
}
|
||||
else
|
||||
{
|
||||
rb->strlcpy(buffer, p2str(props_dir[selected_item]), buffer_len);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(selected_item >= (int)(sizeof(props_file) / sizeof(props_file[0])))
|
||||
{
|
||||
rb->strlcpy(buffer, "ERROR", buffer_len);
|
||||
}
|
||||
else
|
||||
{
|
||||
rb->strlcpy(buffer, p2str(props_file[selected_item]), buffer_len);
|
||||
}
|
||||
}
|
||||
if (PROPS_DIR == props_type)
|
||||
rb->strlcpy(buffer, selected_item >= (int)(ARRAY_SIZE(props_dir)) ? "ERROR" :
|
||||
(char *) p2str(props_dir[selected_item]), buffer_len);
|
||||
else if (PROPS_FILE == props_type)
|
||||
rb->strlcpy(buffer, selected_item >= (int)(ARRAY_SIZE(props_file)) ? "ERROR" :
|
||||
(char *) p2str(props_file[selected_item]), buffer_len);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
static int speak_property_selection(int selected_item, void *data)
|
||||
{
|
||||
DPS *dps = data;
|
||||
int32_t id = P2ID((its_a_dir ? props_dir : props_file)[selected_item]);
|
||||
int32_t id = P2ID((props_type == PROPS_DIR ? props_dir : props_file)[selected_item]);
|
||||
rb->talk_id(id, false);
|
||||
switch (id)
|
||||
{
|
||||
|
@ -394,9 +294,6 @@ static int speak_property_selection(int selected_item, void *data)
|
|||
case LANG_PROPERTIES_TIME:
|
||||
rb->talk_time(&tm, true);
|
||||
break;
|
||||
case LANG_PROPERTIES_DURATION:
|
||||
rb->talk_value_decimal(nseconds, UNIT_TIME, 0, true);
|
||||
break;
|
||||
case LANG_PROPERTIES_SUBDIRS:
|
||||
rb->talk_number(dps->dc, true);
|
||||
break;
|
||||
|
@ -446,7 +343,7 @@ enum plugin_status plugin_start(const void* parameter)
|
|||
if(!rb->strcmp(entry->d_name, str_filename))
|
||||
{
|
||||
struct dirinfo info = rb->dir_get_info(dir, entry);
|
||||
its_a_dir = info.attribute & ATTR_DIRECTORY ? true : false;
|
||||
props_type = info.attribute & ATTR_DIRECTORY ? PROPS_DIR : PROPS_FILE;
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
|
@ -464,7 +361,7 @@ enum plugin_status plugin_start(const void* parameter)
|
|||
}
|
||||
|
||||
/* get the info depending on its_a_dir */
|
||||
if(!(its_a_dir ? dir_properties(file, &dps) : file_properties(file)))
|
||||
if(!(props_type == PROPS_DIR ? dir_properties(file, &dps) : file_properties(file)))
|
||||
{
|
||||
/* something went wrong (to do: tell user what it was (nesting,...) */
|
||||
rb->splash(0, ID2P(LANG_PROPERTIES_FAIL));
|
||||
|
@ -475,12 +372,22 @@ enum plugin_status plugin_start(const void* parameter)
|
|||
FOR_NB_SCREENS(i)
|
||||
rb->viewportmanager_theme_enable(i, true, NULL);
|
||||
|
||||
if (props_type == PROPS_ID3)
|
||||
usb = rb->browse_id3(&id3, 0, 0);
|
||||
else
|
||||
{
|
||||
rb->gui_synclist_init(&properties_lists, &get_props, &dps, false, 2, NULL);
|
||||
rb->gui_synclist_set_title(&properties_lists, rb->str(its_a_dir ? LANG_PROPERTIES_DIRECTORY_PROPERTIES : LANG_PROPERTIES_FILE_PROPERTIES), NOICON);
|
||||
rb->gui_synclist_set_title(&properties_lists,
|
||||
rb->str(props_type == PROPS_DIR ?
|
||||
LANG_PROPERTIES_DIRECTORY_PROPERTIES :
|
||||
LANG_PROPERTIES_FILE_PROPERTIES),
|
||||
NOICON);
|
||||
rb->gui_synclist_set_icon_callback(&properties_lists, NULL);
|
||||
if (rb->global_settings->talk_menu)
|
||||
rb->gui_synclist_set_voice_callback(&properties_lists, speak_property_selection);
|
||||
rb->gui_synclist_set_nb_items(&properties_lists, num_properties * 2);
|
||||
rb->gui_synclist_set_nb_items(&properties_lists,
|
||||
2 * (props_type == PROPS_FILE ? NUM_FILE_PROPERTIES :
|
||||
NUM_DIR_PROPERTIES));
|
||||
rb->gui_synclist_limit_scroll(&properties_lists, true);
|
||||
rb->gui_synclist_select_item(&properties_lists, 0);
|
||||
rb->gui_synclist_draw(&properties_lists);
|
||||
|
@ -506,9 +413,10 @@ enum plugin_status plugin_start(const void* parameter)
|
|||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FOR_NB_SCREENS(i)
|
||||
rb->viewportmanager_theme_undo(i, false);
|
||||
|
||||
return usb? PLUGIN_USB_CONNECTED: PLUGIN_OK;
|
||||
return usb ? PLUGIN_USB_CONNECTED : PLUGIN_OK;
|
||||
}
|
||||
|
|
|
@ -595,6 +595,8 @@ static const char * id3_get_or_speak_info(int selected_item, void* data,
|
|||
talk_value(id3->length /1000, UNIT_TIME, true);
|
||||
break;
|
||||
case LANG_ID3_PLAYLIST:
|
||||
if (info->playlist_display_index == 0 || info->playlist_amount == 0 )
|
||||
return NULL;
|
||||
snprintf(buffer, buffer_len, "%d/%d",
|
||||
info->playlist_display_index, info->playlist_amount);
|
||||
val=buffer;
|
||||
|
@ -708,6 +710,7 @@ bool browse_id3(struct mp3entry *id3, int playlist_display_index, int playlist_a
|
|||
if(global_settings.talk_menu)
|
||||
gui_synclist_set_voice_callback(&id3_lists, id3_speak_item);
|
||||
gui_synclist_set_nb_items(&id3_lists, info.count*2);
|
||||
gui_synclist_set_title(&id3_lists, str(LANG_TRACK_INFO), NOICON);
|
||||
gui_synclist_draw(&id3_lists);
|
||||
gui_synclist_speak_item(&id3_lists);
|
||||
while (true) {
|
||||
|
|
Loading…
Reference in a new issue