From 5736c5b3b383397cfbb9bee87156ad7532f7895d Mon Sep 17 00:00:00 2001 From: ESurge Date: Wed, 26 Oct 2022 14:55:45 -0700 Subject: [PATCH] Fixed issue when loading iButton keys from Archive app either from iButton section or Favorites. Fixed issue when attempting to load U2F Token from Archive app. --- .../archive/scenes/archive_scene_browser.c | 27 ++++++++++++++++-- applications/main/fap_loader/fap_loader_app.c | 28 +++++++++++++++++-- 2 files changed, 50 insertions(+), 5 deletions(-) diff --git a/applications/main/archive/scenes/archive_scene_browser.c b/applications/main/archive/scenes/archive_scene_browser.c index dbf221990..ebc5c9345 100644 --- a/applications/main/archive/scenes/archive_scene_browser.c +++ b/applications/main/archive/scenes/archive_scene_browser.c @@ -45,10 +45,31 @@ static void archive_run_in_app(ArchiveBrowserView* browser, ArchiveFile_t* selec if(param != NULL) { param++; } - status = loader_start(loader, flipper_app_name[selected->type], param); + + if(strcmp(flipper_app_name[selected->type], "U2F") == 0) { + char* tmpType = "/ext/apps/Main/U2F.fap¯"; + char* result = + malloc(strlen(tmpType) + strlen(furi_string_get_cstr(selected->path)) + 1); + + strcpy(result, tmpType); + strcat(result, furi_string_get_cstr(selected->path)); + status = loader_start(loader, "Applications", result); + } else { + status = loader_start(loader, flipper_app_name[selected->type], param); + } } else { - status = loader_start( - loader, flipper_app_name[selected->type], furi_string_get_cstr(selected->path)); + if(strcmp(flipper_app_name[selected->type], "iButton") == 0) { + char* tmpType = "/ext/apps/Main/ibutton.fap¯"; + char* result = + malloc(strlen(tmpType) + strlen(furi_string_get_cstr(selected->path)) + 1); + + strcpy(result, tmpType); + strcat(result, furi_string_get_cstr(selected->path)); + status = loader_start(loader, "Applications", result); + } else { + status = loader_start( + loader, flipper_app_name[selected->type], furi_string_get_cstr(selected->path)); + } } if(status != LoaderStatusOk) { diff --git a/applications/main/fap_loader/fap_loader_app.c b/applications/main/fap_loader/fap_loader_app.c index faf8eefc8..02aa5a0be 100644 --- a/applications/main/fap_loader/fap_loader_app.c +++ b/applications/main/fap_loader/fap_loader_app.c @@ -16,6 +16,7 @@ struct FapLoader { DialogsApp* dialogs; Gui* gui; FuriString* fap_path; + FuriString* fap_args; ViewDispatcher* view_dispatcher; Loading* loading; }; @@ -103,7 +104,9 @@ static bool fap_loader_run_selected_app(FapLoader* loader) { FURI_LOG_I(TAG, "Loaded in %ums", (size_t)(furi_get_tick() - start)); FURI_LOG_I(TAG, "FAP Loader is starting app"); - FuriThread* thread = flipper_application_spawn(loader->app, NULL); + FURI_LOG_I(TAG, "loader->fap_args: %s", furi_string_get_cstr(loader->fap_args)); + FuriThread* thread = + flipper_application_spawn(loader->app, (void*)furi_string_get_cstr(loader->fap_args)); furi_thread_start(thread); furi_thread_join(thread); @@ -155,7 +158,27 @@ static bool fap_loader_select_app(FapLoader* loader) { static FapLoader* fap_loader_alloc(const char* path) { FapLoader* loader = malloc(sizeof(FapLoader)); - loader->fap_path = furi_string_alloc_set(path); + + char* tmp = malloc(strlen(path) + 1); + strcpy(tmp, path); + char* new_path; + + new_path = strtok(tmp, "¯"); + + if(new_path) { + loader->fap_path = furi_string_alloc_set(new_path); + } else { + loader->fap_path = furi_string_alloc_set(path); + } + + new_path = strtok(NULL, "¯"); + + if(new_path) { + loader->fap_args = furi_string_alloc_set(new_path); + } else { + loader->fap_args = NULL; + } + loader->storage = furi_record_open(RECORD_STORAGE); loader->dialogs = furi_record_open(RECORD_DIALOGS); loader->gui = furi_record_open(RECORD_GUI); @@ -172,6 +195,7 @@ static void fap_loader_free(FapLoader* loader) { loading_free(loader->loading); view_dispatcher_free(loader->view_dispatcher); furi_string_free(loader->fap_path); + furi_string_free(loader->fap_args); furi_record_close(RECORD_GUI); furi_record_close(RECORD_DIALOGS); furi_record_close(RECORD_STORAGE);