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.
This commit is contained in:
ESurge
2022-10-26 14:55:45 -07:00
parent 64228bf3f8
commit 5736c5b3b3
2 changed files with 50 additions and 5 deletions
@@ -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) {
+26 -2
View File
@@ -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);