summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Soffke <christian.soffke@gmail.com>2021-12-28 08:56:16 +0100
committerAidan MacDonald <amachronic@protonmail.com>2021-12-28 11:15:57 -0500
commit7dffbd84af8d4857f357ac33bd74fda3608c7ebd (patch)
treecef86518c43e92fb74658356bad1919ee868acbc
parente8b912320561c1178d45eb12cf753be62e40ee73 (diff)
downloadrockbox-7dffbd84af.tar.gz
rockbox-7dffbd84af.zip
Playlist Viewer: Add Track Info
Adds a command for showing track info to the Playlist Viewer's context menu, which brings up the same screen used by the WPS for currently playing tracks. Change-Id: I17d99671935934dad565d290a0d6fb3b0dfd8b01
-rw-r--r--apps/gui/wps.c4
-rw-r--r--apps/onplay.c6
-rw-r--r--apps/playlist_viewer.c35
-rw-r--r--apps/screens.c14
-rw-r--r--apps/screens.h3
5 files changed, 49 insertions, 13 deletions
diff --git a/apps/gui/wps.c b/apps/gui/wps.c
index cdb34ab447..7554892451 100644
--- a/apps/gui/wps.c
+++ b/apps/gui/wps.c
@@ -903,7 +903,9 @@ long gui_wps_show(void)
case ACTION_WPS_ID3SCREEN:
{
gwps_leave_wps();
- if (browse_id3())
+ if (browse_id3(audio_current_track(),
+ playlist_get_display_index(),
+ playlist_amount()))
return GO_TO_ROOT;
restore = true;
}
diff --git a/apps/onplay.c b/apps/onplay.c
index aeda39ba14..93c7c93624 100644
--- a/apps/onplay.c
+++ b/apps/onplay.c
@@ -1529,7 +1529,9 @@ MENUITEM_FUNCTION(view_cue_item, 0, ID2P(LANG_BROWSE_CUESHEET),
static int browse_id3_wrapper(void)
{
- if (browse_id3())
+ if (browse_id3(audio_current_track(),
+ playlist_get_display_index(),
+ playlist_amount()))
return GO_TO_ROOT;
return GO_TO_PREVIOUS;
}
@@ -1854,7 +1856,7 @@ static struct hotkey_assignment hotkey_items[] = {
HOTKEY_FUNC(NULL, NULL),
ONPLAY_PLAYLIST },
{ HOTKEY_SHOW_TRACK_INFO, LANG_MENU_SHOW_ID3_INFO,
- HOTKEY_FUNC(browse_id3, NULL),
+ HOTKEY_FUNC(browse_id3_wrapper, NULL),
ONPLAY_RELOAD_DIR },
#ifdef HAVE_PITCHCONTROL
{ HOTKEY_PITCHSCREEN, LANG_PITCH,
diff --git a/apps/playlist_viewer.c b/apps/playlist_viewer.c
index 21b61d4a67..63d8697ee8 100644
--- a/apps/playlist_viewer.c
+++ b/apps/playlist_viewer.c
@@ -479,6 +479,31 @@ static bool update_playlist(bool force)
return true;
}
+static int show_track_info(struct playlist_entry *current_track)
+{
+ struct mp3entry id3;
+ bool id3_retrieval_successful = false;
+
+#if defined(HAVE_TC_RAMCACHE) && defined(HAVE_DIRCACHE)
+ if (tagcache_fill_tags(&id3, current_track->name))
+ id3_retrieval_successful = true;
+ else
+#endif
+ {
+ int fd = open(current_track->name, O_RDONLY);
+ if (fd >= 0)
+ {
+ if (get_metadata(&id3, fd, current_track->name))
+ id3_retrieval_successful = true;
+ close(fd);
+ }
+ }
+
+ return id3_retrieval_successful &&
+ browse_id3(&id3, current_track->index + 1,
+ viewer.num_tracks) ? -1 : 0;
+}
+
/* Menu of playlist commands. Invoked via ON+PLAY on main viewer screen.
Returns -1 if USB attached, 0 if no playlist change, 1 if playlist
changed, 2 if a track was removed from the playlist */
@@ -489,7 +514,8 @@ static int onplay_menu(int index)
playlist_buffer_get_track(&viewer.buffer, index);
MENUITEM_STRINGLIST(menu_items, ID2P(LANG_PLAYLIST), NULL,
ID2P(LANG_CURRENT_PLAYLIST), ID2P(LANG_CATALOG),
- ID2P(LANG_REMOVE), ID2P(LANG_MOVE), ID2P(LANG_SHUFFLE),
+ ID2P(LANG_REMOVE), ID2P(LANG_MOVE), ID2P(LANG_MENU_SHOW_ID3_INFO),
+ ID2P(LANG_SHUFFLE),
ID2P(LANG_SAVE),
ID2P(LANG_PLAYLISTVIEWER_SETTINGS));
bool current = (current_track->index == viewer.current_playing_track);
@@ -547,16 +573,19 @@ static int onplay_menu(int index)
ret = 0;
break;
case 4:
+ ret = show_track_info(current_track);
+ break;
+ case 5:
/* shuffle */
playlist_randomise(viewer.playlist, current_tick, false);
ret = 1;
break;
- case 5:
+ case 6:
/* save playlist */
save_playlist_screen(viewer.playlist);
ret = 0;
break;
- case 6:
+ case 7:
/* playlist viewer settings */
result = do_menu(&viewer_settings_menu, NULL, NULL, false);
ret = (result == MENU_ATTACHED_USB) ? -1 : 0;
diff --git a/apps/screens.c b/apps/screens.c
index fa2f9f9927..f3a969a838 100644
--- a/apps/screens.c
+++ b/apps/screens.c
@@ -40,7 +40,6 @@
#include "powermgmt.h"
#include "talk.h"
#include "misc.h"
-#include "metadata.h"
#include "screens.h"
#include "debug.h"
#include "led.h"
@@ -389,6 +388,8 @@ static const int id3_headers[]=
struct id3view_info {
struct mp3entry* id3;
int count;
+ int playlist_display_index;
+ int playlist_amount;
int info_id[ARRAYLEN(id3_headers)];
};
@@ -589,13 +590,13 @@ static const char * id3_get_or_speak_info(int selected_item, void* data,
break;
case LANG_ID3_PLAYLIST:
snprintf(buffer, buffer_len, "%d/%d",
- playlist_get_display_index(), playlist_amount());
+ info->playlist_display_index, info->playlist_amount);
val=buffer;
if(say_it)
{
- talk_number(playlist_get_display_index(), true);
+ talk_number(info->playlist_display_index, true);
talk_id(VOICE_OF, true);
- talk_number(playlist_amount(), true);
+ talk_number(info->playlist_amount, true);
}
break;
case LANG_ID3_BITRATE:
@@ -669,15 +670,16 @@ static int id3_speak_item(int selected_item, void* data)
return 0;
}
-bool browse_id3(void)
+bool browse_id3(struct mp3entry *id3, int playlist_display_index, int playlist_amount)
{
struct gui_synclist id3_lists;
- struct mp3entry* id3 = audio_current_track();
int key;
unsigned int i;
struct id3view_info info;
info.count = 0;
info.id3 = id3;
+ info.playlist_display_index = playlist_display_index;
+ info.playlist_amount = playlist_amount;
bool ret = false;
push_current_activity(ACTIVITY_ID3SCREEN);
for (i = 0; i < ARRAYLEN(id3_headers); i++)
diff --git a/apps/screens.h b/apps/screens.h
index 2201f679bd..92b00062cb 100644
--- a/apps/screens.h
+++ b/apps/screens.h
@@ -23,6 +23,7 @@
#include "config.h"
#include "timefuncs.h"
+#include "metadata.h"
struct screen;
@@ -39,7 +40,7 @@ bool set_time_screen(const char* title, struct tm *tm);
#endif
bool shutdown_screen(void);
-bool browse_id3(void);
+bool browse_id3(struct mp3entry *id3, int playlist_display_index, int playlist_amount);
int view_runtime(void);
#ifdef HAVE_TOUCHSCREEN