summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Soffke <christian.soffke@gmail.com>2022-10-21 05:57:24 +0200
committerChristian Soffke <christian.soffke@gmail.com>2022-10-22 09:33:50 +0200
commit498988d34a50bb5fe32cf1092f11e3c10a0ac821 (patch)
treeb0ad6b0b7a3d05bae278cbe6d14fdc581619a26c
parent653082ad1d7a5d55cdaf0a1e8071ebecc5aaa5fc (diff)
downloadrockbox-498988d34a.tar.gz
rockbox-498988d34a.zip
PictureFlow: Minor fixes & changed defaults
- Fix FPS counter overlapping the artist string when "Show album title" was set to "Show album and artist at the top" - Fix disappearance of center album if certain Settings menus had been accessed while list of tracks was showing and you then returned to the list of albums - Fix disappearing album artwork after cache had been created until you started scrolling - Enable context menu even if WPS integration is disabled - Make splash screen appear only on first launch and for database updates, when it is actually on screen for long enough - Eliminate 'Loading' splash if tagcache is in RAM - Show both album and artist by default on displays whose height > 100px Change-Id: Ie70c0d9093789294d288a4f88338ee4a588bf4a5
-rw-r--r--apps/plugin.c5
-rw-r--r--apps/plugin.h7
-rw-r--r--apps/plugins/pictureflow/pictureflow.c71
-rw-r--r--apps/tagcache.c8
-rw-r--r--apps/tagcache.h1
-rw-r--r--apps/tagtree.c6
6 files changed, 66 insertions, 32 deletions
diff --git a/apps/plugin.c b/apps/plugin.c
index 4016040c5a..128b52ea2d 100644
--- a/apps/plugin.c
+++ b/apps/plugin.c
@@ -820,6 +820,11 @@ static const struct plugin_api rockbox_api = {
/* new stuff at the end, sort into place next time
the API gets incompatible */
+#ifdef HAVE_TAGCACHE
+#ifdef HAVE_TC_RAMCACHE
+ tagcache_is_in_ram,
+#endif
+#endif
};
static int plugin_buffer_handle;
diff --git a/apps/plugin.h b/apps/plugin.h
index 2ac333a19f..e2a821bb57 100644
--- a/apps/plugin.h
+++ b/apps/plugin.h
@@ -157,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 255
+#define PLUGIN_API_VERSION 256
/* update this to latest version if a change to the api struct breaks
backwards compatibility (and please take the opportunity to sort in any
@@ -946,6 +946,11 @@ struct plugin_api {
#endif
/* new stuff at the end, sort into place next time
the API gets incompatible */
+#ifdef HAVE_TAGCACHE
+#ifdef HAVE_TC_RAMCACHE
+ bool (*tagcache_is_in_ram)(void);
+#endif
+#endif
};
/* plugin header */
diff --git a/apps/plugins/pictureflow/pictureflow.c b/apps/plugins/pictureflow/pictureflow.c
index eec8313485..e8c2e070eb 100644
--- a/apps/plugins/pictureflow/pictureflow.c
+++ b/apps/plugins/pictureflow/pictureflow.c
@@ -689,7 +689,7 @@ static void config_set_defaults(struct pf_config_t *cfg)
cfg->resize = true;
cfg->cache_version = CACHE_REBUILD;
cfg->show_album_name = (LCD_HEIGHT > 100)
- ? ALBUM_NAME_TOP : ALBUM_NAME_BOTTOM;
+ ? ALBUM_AND_ARTIST_BOTTOM : ALBUM_NAME_BOTTOM;
cfg->sort_albums_by = SORT_BY_ARTIST_AND_NAME;
cfg->year_sort_order = ASCENDING;
cfg->show_year = false;
@@ -2321,6 +2321,8 @@ aa_success:
configfile_save(CONFIG_FILE, config, CONFIG_NUM_ITEMS,
CONFIG_VERSION);
free_all_slide_prio(0);
+ if (pf_state == pf_idle)
+ rb->queue_post(&thread_q, EV_WAKEUP, 0);
}
if(verbose)/* direct interaction with user */
@@ -3492,6 +3494,20 @@ static void cleanup(void)
#endif
}
+static void interrupt_cover_in_animation(void);
+static void adjust_album_display_for_setting(int old_val, int new_val)
+{
+ if (old_val == new_val)
+ return;
+
+ reset_track_list();
+ recalc_offsets();
+ reset_slides();
+
+ if (pf_state == pf_show_tracks)
+ interrupt_cover_in_animation();
+}
+
/**
Shows the settings menu
*/
@@ -3547,11 +3563,10 @@ static int settings_menu(void)
selection=rb->do_menu(&settings_menu,&selection, NULL, false);
switch(selection) {
case 0:
+ old_val = pf_cfg.show_album_name;
rb->set_option(rb->str(LANG_SHOW_ALBUM_TITLE),
&pf_cfg.show_album_name, INT, album_name_options, 5, NULL);
- reset_track_list();
- recalc_offsets();
- reset_slides();
+ adjust_album_display_for_setting(old_val, pf_cfg.show_album_name);
break;
case 1:
rb->set_bool(rb->str(LANG_SHOW_YEAR_IN_ALBUM_TITLE), &pf_cfg.show_year);
@@ -3573,38 +3588,40 @@ static int settings_menu(void)
pf_cfg.year_sort_order = old_val;
break;
case 4:
+ old_val = pf_cfg.show_fps;
rb->set_bool(rb->str(LANG_DISPLAY_FPS), &pf_cfg.show_fps);
- reset_track_list();
+ if (old_val != pf_cfg.show_fps)
+ reset_track_list();
break;
case 5:
+ old_val = pf_cfg.slide_spacing;
rb->set_int(rb->str(LANG_SPACING), "", 1,
&pf_cfg.slide_spacing,
NULL, 1, 0, 100, NULL );
- recalc_offsets();
- reset_slides();
+ adjust_album_display_for_setting(old_val, pf_cfg.slide_spacing);
break;
case 6:
+ old_val = pf_cfg.center_margin;
rb->set_int(rb->str(LANG_CENTRE_MARGIN), "", 1,
&pf_cfg.center_margin,
NULL, 1, 0, 80, NULL );
- recalc_offsets();
- reset_slides();
+ adjust_album_display_for_setting(old_val, pf_cfg.center_margin);
break;
case 7:
+ old_val = pf_cfg.num_slides;
rb->set_int(rb->str(LANG_NUMBER_OF_SLIDES), "", 1,
&pf_cfg.num_slides, NULL, 1, 1, MAX_SLIDES_COUNT, NULL );
- recalc_offsets();
- reset_slides();
+ adjust_album_display_for_setting(old_val, pf_cfg.num_slides);
break;
case 8:
+ old_val = pf_cfg.zoom;
rb->set_int(rb->str(LANG_ZOOM), "", 1, &pf_cfg.zoom,
NULL, 1, 10, 300, NULL );
- recalc_offsets();
- reset_slides();
+ adjust_album_display_for_setting(old_val, pf_cfg.zoom);
break;
case 9:
@@ -3895,7 +3912,10 @@ static void show_track_list(void)
{
mylcd_clear_display();
if ( center_slide.slide_index != pf_tracks.cur_idx ) {
- show_track_list_loading();
+#ifdef HAVE_TC_RAMCACHE
+ if (!rb->tagcache_is_in_ram())
+#endif
+ show_track_list_loading();
create_track_index(center_slide.slide_index);
if (pf_tracks.count == 0)
{
@@ -4019,7 +4039,10 @@ static bool track_list_ready(void)
{
if (pf_state != pf_show_tracks)
{
- rb->splash(0, ID2P(LANG_WAIT));
+#ifdef HAVE_TC_RAMCACHE
+ if (!rb->tagcache_is_in_ram())
+#endif
+ rb->splash(0, ID2P(LANG_WAIT));
create_track_index(center_slide.slide_index);
if (pf_tracks.count == 0)
{
@@ -4271,14 +4294,11 @@ static int pictureflow_main(const char* selected_file)
config_set_defaults(&pf_cfg);
configfile_load(CONFIG_FILE, config, CONFIG_NUM_ITEMS, CONFIG_VERSION);
- if(pf_cfg.auto_wps == 0)
- draw_splashscreen(pf_idx.buf, pf_idx.buf_sz);
- if(pf_cfg.backlight_mode == 0) {
- /* Turn off backlight timeout */
+
#ifdef HAVE_BACKLIGHT
+ if(pf_cfg.backlight_mode == 0)
backlight_ignore_timeout();
#endif
- }
rb->mutex_init(&buf_ctx_mutex);
@@ -4454,7 +4474,8 @@ static int pictureflow_main(const char* selected_file)
rb->snprintf(fpstxt, sizeof(fpstxt), "%d %%", progress_pct);
}
- if (pf_cfg.show_album_name == ALBUM_NAME_TOP)
+ if (pf_cfg.show_album_name == ALBUM_NAME_TOP ||
+ pf_cfg.show_album_name == ALBUM_AND_ARTIST_TOP)
fpstxt_y = LCD_HEIGHT -
rb->screens[SCREEN_MAIN]->getcharheight();
else
@@ -4572,15 +4593,15 @@ static int pictureflow_main(const char* selected_file)
break;
#if PF_PLAYBACK_CAPABLE
case PF_CONTEXT:
- if (pf_cfg.auto_wps != 0 &&
- (pf_state == pf_idle || pf_state == pf_scrolling ||
- pf_state == pf_show_tracks || pf_state == pf_cover_out)) {
+ if (pf_state == pf_idle || pf_state == pf_scrolling ||
+ pf_state == pf_show_tracks || pf_state == pf_cover_out) {
if ( pf_state == pf_scrolling)
{
set_current_slide(target);
pf_state = pf_idle;
- } else if (pf_state == pf_cover_out)
+ }
+ else if (pf_state == pf_cover_out)
interrupt_cover_out_animation();
show_current_playlist_menu();
diff --git a/apps/tagcache.c b/apps/tagcache.c
index b6c86d7ddb..253e48a6dd 100644
--- a/apps/tagcache.c
+++ b/apps/tagcache.c
@@ -170,7 +170,7 @@ static const char * const tag_type_str[] = {
#endif /* ndef LOGF_ENABLE */
/* Status information of the tagcache. */
-struct tagcache_stat tc_stat;
+static struct tagcache_stat tc_stat;
/* Queue commands. */
enum tagcache_queue {
@@ -5079,6 +5079,12 @@ bool tagcache_is_usable(void)
{
return tc_stat.initialized && tc_stat.ready;
}
+#ifdef HAVE_TC_RAMCACHE
+bool tagcache_is_in_ram(void)
+{
+ return tc_stat.ramcache;
+}
+#endif
int tagcache_get_commit_step(void)
{
return tc_stat.commit_step;
diff --git a/apps/tagcache.h b/apps/tagcache.h
index 1218e42b42..690506b308 100644
--- a/apps/tagcache.h
+++ b/apps/tagcache.h
@@ -246,6 +246,7 @@ void tagcache_screensync_event(void);
void tagcache_screensync_enable(bool state);
#ifdef HAVE_TC_RAMCACHE
+bool tagcache_is_in_ram(void);
#ifdef HAVE_DIRCACHE
bool tagcache_fill_tags(struct mp3entry *id3, const char *filename);
#endif
diff --git a/apps/tagtree.c b/apps/tagtree.c
index 0506dd2edd..b6d0c8ac06 100644
--- a/apps/tagtree.c
+++ b/apps/tagtree.c
@@ -1411,10 +1411,6 @@ static struct tagentry* get_entries(struct tree_context *tc)
return core_get_data(tc->cache.entries_handle);
}
-#ifdef HAVE_TC_RAMCACHE
-extern struct tagcache_stat tc_stat;
-#endif
-
static int retrieve_entries(struct tree_context *c, int offset, bool init)
{
struct tagcache_search tcs;
@@ -1434,7 +1430,7 @@ static int retrieve_entries(struct tree_context *c, int offset, bool init)
show_search_progress(
#ifdef HAVE_DISK_STORAGE
#ifdef HAVE_TC_RAMCACHE
- tc_stat.ramcache ? true :
+ tagcache_is_in_ram() ? true :
#endif
storage_disk_is_active()
#else