summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2021-10-29 23:11:15 -0400
committerWilliam Wilgus <me.theuser@yahoo.com>2021-10-31 21:49:31 -0400
commit2731144094c8ba324a2936a1f8969d52d3a18713 (patch)
tree7b36f75616f52e84f03229c5bb517c1a2c529dff
parent684565b8f34d0f2bb9012b5a20499ed64db38812 (diff)
downloadrockbox-2731144094.tar.gz
rockbox-2731144094.zip
exit file browser before running plugins
now that the plugin browser is resumable exit it before running plugins this causes a problem with the open plugin shortcuts that call other plugins but its now handled in count limited loop so plugins can run plugins in a chain and overall with less overhead too.. the problem remaining -- the plugin exits on USB, returns to ROOT the browser resumes the directory next time you select plugins making for an unwanted auto return Change-Id: If401f698207cbae824e95d69a378f13456a5dee4
-rw-r--r--apps/filetree.c13
-rw-r--r--apps/root_menu.c57
2 files changed, 38 insertions, 32 deletions
diff --git a/apps/filetree.c b/apps/filetree.c
index efe5e80a0f..75a32a9e42 100644
--- a/apps/filetree.c
+++ b/apps/filetree.c
@@ -435,7 +435,7 @@ static void ft_load_font(char *file)
int ft_enter(struct tree_context* c)
{
int rc = GO_TO_PREVIOUS;
- static char buf[MAX_PATH];
+ char buf[MAX_PATH];
struct entry* file = tree_get_entry_at(c, c->selected_item);
if (!file)
@@ -641,6 +641,8 @@ int ft_enter(struct tree_context* c)
splash(HZ, ID2P(LANG_PARTY_MODE));
break;
}
+
+#ifdef PLUGINS_RUN_IN_BROWSER /* Stay in the filetree to run a plugin */
switch (plugin_load(plugin, argument))
{
case PLUGIN_GOTO_WPS:
@@ -664,6 +666,10 @@ int ft_enter(struct tree_context* c)
default:
break;
}
+#else /* Exit the filetree to run a plugin */
+ plugin_open(plugin, argument);
+ rc = GO_TO_PLUGIN;
+#endif
break;
}
@@ -687,6 +693,7 @@ int ft_enter(struct tree_context* c)
plugin = filetype_get_plugin(file, plugin_path, sizeof(plugin_path));
if (plugin)
{
+#ifdef PLUGINS_RUN_IN_BROWSER /* Stay in the filetree to run a plugin */
switch (plugin_load(plugin, argument))
{
case PLUGIN_USB_CONNECTED:
@@ -705,6 +712,10 @@ int ft_enter(struct tree_context* c)
default:
break;
}
+#else /* Exit the filetree to run a plugin */
+ plugin_open(plugin, argument);
+ rc = GO_TO_PLUGIN;
+#endif
}
break;
}
diff --git a/apps/root_menu.c b/apps/root_menu.c
index ed6bdfdcca..f731531e16 100644
--- a/apps/root_menu.c
+++ b/apps/root_menu.c
@@ -709,47 +709,41 @@ static int load_context_screen(int selection)
static int load_plugin_screen(char *key)
{
- int ret_val;
+ int ret_val = PLUGIN_ERROR;
+ int loops = 100;
int old_previous = last_screen;
int old_global = global_status.last_screen;
last_screen = next_screen;
global_status.last_screen = (char)next_screen;
status_save();
- int opret = open_plugin_get_entry(key, &open_plugin_entry);
- char *path = open_plugin_entry.path;
- char *param = open_plugin_entry.param;
- if (param[0] == '\0')
- param = NULL;
-
- switch (plugin_load(path, param))
+ while(loops-- > 0) /* just to keep things from getting out of hand */
{
- case PLUGIN_USB_CONNECTED:
- ret_val = GO_TO_ROOT;
- break;
- case PLUGIN_GOTO_WPS:
- ret_val = GO_TO_WPS;
- break;
- case PLUGIN_GOTO_PLUGIN:
- ret_val = GO_TO_PLUGIN;
- break;
- case PLUGIN_OK:
- /* Prevents infinite loop with WPS & Plugins*/
- if (old_global == GO_TO_WPS && !audio_status())
- {
+ int opret = open_plugin_get_entry(key, &open_plugin_entry);
+ char *path = open_plugin_entry.path;
+ char *param = open_plugin_entry.param;
+ if (param[0] == '\0')
+ param = NULL;
+
+ int ret = plugin_load(path, param);
+
+ if (ret == PLUGIN_USB_CONNECTED)
ret_val = GO_TO_ROOT;
- break;
+ else if (ret == PLUGIN_GOTO_WPS)
+ ret_val = GO_TO_WPS;
+ else if (ret == PLUGIN_GOTO_PLUGIN)
+ continue;
+ else
+ {
+ /* Prevents infinite loop with WPS & Plugins*/
+ if (ret == PLUGIN_OK && old_global == GO_TO_WPS && !audio_status())
+ ret_val = GO_TO_ROOT;
+ ret_val = GO_TO_PREVIOUS;
+ last_screen = (old_previous == next_screen) ? GO_TO_ROOT : old_previous;
}
- /*fallthrough*/
- default:
- ret_val = GO_TO_PREVIOUS;
- last_screen = (old_previous == next_screen) ? GO_TO_ROOT : old_previous;
- break;
- }
+ /* ret_val != GO_TO_PLUGIN */
- if (ret_val != GO_TO_PLUGIN)
- {
if (opret != OPEN_PLUGIN_NEEDS_FLUSHED || last_screen != GO_TO_WPS)
{
/* Keep the entry in case of GO_TO_PREVIOUS */
@@ -757,7 +751,8 @@ static int load_plugin_screen(char *key)
open_plugin_entry.lang_id = LANG_PREVIOUS_SCREEN;
/*open_plugin_add_path(NULL, NULL, NULL);// clear entry */
}
- }
+ break;
+ } /*while */
return ret_val;
}