diff options
author | Christian Soffke <christian.soffke@gmail.com> | 2023-10-15 17:30:27 +0200 |
---|---|---|
committer | Christian Soffke <christian.soffke@gmail.com> | 2023-10-17 12:18:33 -0400 |
commit | e3b22935f233a2b95c1b14230bd669b8dd64a330 (patch) | |
tree | 5b8b6dee8416a56e6f483c1e6c8d477d525152fe | |
parent | f2af0711b01a5aa66a0533504bb88e142c67ef80 (diff) | |
download | rockbox-e3b22935f2.tar.gz rockbox-e3b22935f2.zip |
Properties/Tagcache Track Info Retrieval: Skip files with errors
File names exceeding the max length will not be retrievable
from the database. Skip such files, instead of cancelling
the operation at that point.
Change-Id: Ia6bc8a53be9ec181eb836956cc3d8b059b2d024f
-rw-r--r-- | apps/plugins/properties.c | 18 | ||||
-rw-r--r-- | apps/tagtree.c | 8 |
2 files changed, 17 insertions, 9 deletions
diff --git a/apps/plugins/properties.c b/apps/plugins/properties.c index 53af4c5bab..ef9dc4c7f7 100644 --- a/apps/plugins/properties.c +++ b/apps/plugins/properties.c @@ -48,6 +48,7 @@ static int props_type = PROPS_FILE; static struct mp3entry id3; #ifdef HAVE_TAGCACHE static int mul_id3_count; +static int skipped_count; #endif static char str_filename[MAX_PATH]; @@ -374,11 +375,15 @@ static bool determine_file_or_dir(void) #ifdef HAVE_TAGCACHE bool mul_id3_add(const char *file_name) { - if (rb->mp3info(&id3, file_name)) + if (!file_name) + skipped_count++; + else if (rb->mp3info(&id3, file_name)) return false; - - collect_id3(&id3, mul_id3_count == 0); - mul_id3_count++; + else + { + collect_id3(&id3, mul_id3_count == 0); + mul_id3_count++; + } return true; } @@ -406,12 +411,15 @@ enum plugin_status plugin_start(const void* parameter) if (!rb->strcmp(file, MAKE_ACT_STR(ACTIVITY_DATABASEBROWSER))) /* db table selected */ { props_type = PROPS_MUL_ID3; - mul_id3_count = 0; + mul_id3_count = skipped_count = 0; if (!rb->tagtree_subentries_do_action(&mul_id3_add) || mul_id3_count == 0) return PLUGIN_ERROR; else if (mul_id3_count > 1) /* otherwise, the retrieved id3 can be used as-is */ finalize_id3(&id3); + + if (skipped_count > 0) + rb->splashf(HZ*2, "Skipped %d", skipped_count); } else #endif diff --git a/apps/tagtree.c b/apps/tagtree.c index 542b0bb120..a85f848c13 100644 --- a/apps/tagtree.c +++ b/apps/tagtree.c @@ -2258,7 +2258,8 @@ static bool tagtree_insert_selection(int position, bool queue, /* Execute action_cb for all subentries of the current table's * selected item, handing over each entry's filename in the - * callback function parameter. + * callback function parameter. Parameter will be NULL for + * entries whose filename couldn't be retrieved. */ bool tagtree_subentries_do_action(bool (*action_cb)(const char *file_name)) { @@ -2289,9 +2290,8 @@ bool tagtree_subentries_do_action(bool (*action_cb)(const char *file_name)) last_tick = current_tick; } - if (!tagcache_retrieve(&tcs, tagtree_get_entry(tc, i)->extraseek, - tcs.type, buf, sizeof buf) - || !action_cb(buf)) + if (!action_cb(tagcache_retrieve(&tcs, tagtree_get_entry(tc, i)->extraseek, + tcs.type, buf, sizeof buf) ? buf : NULL)) { ret = false; break; |