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; }