From e8b912320561c1178d45eb12cf753be62e40ee73 Mon Sep 17 00:00:00 2001 From: Christian Soffke Date: Mon, 27 Dec 2021 03:36:31 +0100 Subject: Database: show song's album in PictureFlow Adds a 'PictureFlow' command to database context menus for quickly bringing up the album for a song in PictureFlow. Change-Id: I88cd89e93d9418558c698a15fc7fb5d9a90fb262 --- apps/onplay.c | 11 ++++++++- apps/plugins/pictureflow/pictureflow.c | 41 +++++++++++++++++++++++++++++----- apps/plugins/viewers.config | 3 +++ 3 files changed, 48 insertions(+), 7 deletions(-) diff --git a/apps/onplay.c b/apps/onplay.c index c3e1ebec54..aeda39ba14 100644 --- a/apps/onplay.c +++ b/apps/onplay.c @@ -1586,6 +1586,11 @@ 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); +#ifdef HAVE_TAGCACHE +MENUITEM_FUNCTION(pictureflow_item, MENU_FUNC_USEPARAM, ID2P(LANG_ONPLAY_PICTUREFLOW), + onplay_load_plugin, (void *)"pictureflow", + clipboard_callback, Icon_NOICON); +#endif static bool onplay_add_to_shortcuts(void) { shortcuts_add(SHORTCUT_BROWSER, selected_file); @@ -1652,7 +1657,8 @@ static int clipboard_callback(int action, { if (((selected_file_attr & FILE_ATTR_MASK) == FILE_ATTR_AUDIO) && - this_item == &properties_item) + (this_item == &properties_item || + this_item == &pictureflow_item)) return action; return ACTION_EXIT_MENUITEM; } @@ -1751,6 +1757,9 @@ MAKE_ONPLAYMENU( tree_onplay_menu, ID2P(LANG_ONPLAY_MENU_TITLE), &set_backdrop_item, #endif &list_viewers_item, &create_dir_item, &properties_item, +#ifdef HAVE_TAGCACHE + &pictureflow_item, +#endif #ifdef HAVE_RECORDING &set_recdir_item, #endif diff --git a/apps/plugins/pictureflow/pictureflow.c b/apps/plugins/pictureflow/pictureflow.c index 35afdaf7e4..ec6e51c34d 100644 --- a/apps/plugins/pictureflow/pictureflow.c +++ b/apps/plugins/pictureflow/pictureflow.c @@ -1613,11 +1613,10 @@ static int get_album_artist_alpha_next_index(void) return pf_idx.album_ct - 1; } -static int get_wps_current_index(void) +static int id3_get_index(struct mp3entry *id3) { char* current_artist = UNTAGGED; char* current_album = UNTAGGED; - struct mp3entry *id3 = rb->audio_current_track(); if(id3) { @@ -3752,6 +3751,35 @@ static void rb_splash_added_to_playlist(void) } #endif + +static void set_initial_slide(const char* selected_file) +{ + if (selected_file == NULL) + set_current_slide(id3_get_index(rb->audio_current_track())); + else + { + struct mp3entry id3; +#if defined(HAVE_TC_RAMCACHE) && defined(HAVE_DIRCACHE) + if (rb->tagcache_fill_tags(&id3, selected_file)) + set_current_slide(id3_get_index(&id3)); + else +#endif + { + int fd = rb->open(selected_file, O_RDONLY); + if (fd >= 0) + { + if (rb->get_metadata(&id3, fd, selected_file)) + set_current_slide(id3_get_index(&id3)); + else + set_current_slide(pf_cfg.last_album); + rb->close(fd); + } + else + set_current_slide(pf_cfg.last_album); + } + } +} + /** Display an error message and wait for input. */ @@ -3767,7 +3795,7 @@ static void error_wait(const char *message) Main function that also contain the main plasma algorithm. */ -static int pictureflow_main(void) +static int pictureflow_main(const char* selected_file) { int ret = SUCCESS; @@ -3888,7 +3916,7 @@ static int pictureflow_main(void) recalc_offsets(); reset_slides(); - set_current_slide(get_wps_current_index()); + set_initial_slide(selected_file); char fpstxt[10]; int button; @@ -4137,11 +4165,12 @@ enum plugin_status plugin_start(const void *parameter) lcd_fb = vp_main->buffer->fb_ptr; int ret; - (void) parameter; + const char *file = parameter; void * buf; size_t buf_size; bool prompt = (parameter && (((char *) parameter)[0] == ACTIVITY_MAINMENU)); + bool file_id3 = (parameter && (((char *) parameter)[0] == '/')); if (!check_database(prompt)) { @@ -4188,7 +4217,7 @@ enum plugin_status plugin_start(const void *parameter) pf_idx.buf = buf; pf_idx.buf_sz = buf_size; - ret = pictureflow_main(); + ret = file_id3 ? pictureflow_main(file) : pictureflow_main(NULL); if ( ret == PLUGIN_OK || ret == PLUGIN_GOTO_WPS) { if (configfile_save(CONFIG_FILE, config, CONFIG_NUM_ITEMS, CONFIG_VERSION)) diff --git a/apps/plugins/viewers.config b/apps/plugins/viewers.config index 2bf052bb20..8aa0ac370a 100644 --- a/apps/plugins/viewers.config +++ b/apps/plugins/viewers.config @@ -103,3 +103,6 @@ z7,viewers/frotz,- z8,viewers/frotz,- shopper,viewers/shopper,1 lnk,viewers/windows_lnk,- +#ifdef HAVE_TAGCACHE +*,demos/pictureflow,- +#endif \ No newline at end of file -- cgit v1.2.3