tagtree: Support user override config file

Allow users to create an alternative tagnavi config file named
"tagnavi_user.config" in the .rockbox directory. If present, it
will be used instead of the default tagnavi.config, allowing the
default menu to be completely redefined.

This makes it much easier to maintain customizations which remove
or modify parts of the default config -- since the default config
is shipped in the Rockbox zips, a customized tagnavi.config would
have to be saved with manual intervention on each & every update.

Change-Id: I509177fab0e01fc0db0bc4407a3a92bbff5fa481
This commit is contained in:
Aidan MacDonald 2021-12-11 12:45:59 +00:00
parent 6b5c811d1c
commit f4fbc1bceb
2 changed files with 16 additions and 4 deletions

View file

@ -2,8 +2,12 @@
# ^ Version header must be the first line of every file
# Tag Browser configuration file, do not edit as changes will be lost!
# Instead, you can modify "/.rockbox/tagnavi_custom.config" which will never
# get overwritten automatically.
# Instead, copy this file to "/.rockbox/tagnavi_user.config" and edit
# that, so your changes will not be overwritten automatically.
#
# If you only want to add menus and don't need to modify the default
# ones, you can edit "/.rockbox/tagnavi_custom.config" instead, which
# is included by this file and will not be overwritten automatically.
# Basic format declarations
%format "fmt_title" "%s - %02d:%02d (%s)" basename Lm Ls filename ? title == "<Untagged>"

View file

@ -58,7 +58,8 @@
#define str_or_empty(x) (x ? x : "(NULL)")
#define FILE_SEARCH_INSTRUCTIONS ROCKBOX_DIR "/tagnavi.config"
#define TAGNAVI_DEFAULT_CONFIG ROCKBOX_DIR "/tagnavi.config"
#define TAGNAVI_USER_CONFIG ROCKBOX_DIR "/tagnavi_user.config"
static int tagtree_play_folder(struct tree_context* c);
@ -1262,7 +1263,14 @@ void tagtree_init(void)
if (tagtree_handle < 0)
panicf("tagtree OOM");
if (!parse_menu(FILE_SEARCH_INSTRUCTIONS))
/* Use the user tagnavi config if present, otherwise use the default. */
const char* tagnavi_file;
if(file_exists(TAGNAVI_USER_CONFIG))
tagnavi_file = TAGNAVI_USER_CONFIG;
else
tagnavi_file = TAGNAVI_DEFAULT_CONFIG;
if (!parse_menu(tagnavi_file))
{
tagtree_unload(NULL);
return;