mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2025-12-12 12:42:30 +04:00
Merge pull request #395 from Willy-JL/ignore-api-mismatch
Fap loader add option to ignore api mismatch
This commit is contained in:
@@ -63,7 +63,7 @@ static bool fap_loader_item_callback(
|
|||||||
return fap_loader_load_name_and_icon(path, fap_loader->storage, icon_ptr, item_name);
|
return fap_loader_load_name_and_icon(path, fap_loader->storage, icon_ptr, item_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool fap_loader_run_selected_app(FapLoader* loader) {
|
static bool fap_loader_run_selected_app(FapLoader* loader, bool ignore_mismatch) {
|
||||||
furi_assert(loader);
|
furi_assert(loader);
|
||||||
|
|
||||||
FuriString* error_message;
|
FuriString* error_message;
|
||||||
@@ -72,6 +72,7 @@ static bool fap_loader_run_selected_app(FapLoader* loader) {
|
|||||||
|
|
||||||
bool file_selected = false;
|
bool file_selected = false;
|
||||||
bool show_error = true;
|
bool show_error = true;
|
||||||
|
bool retry = false;
|
||||||
do {
|
do {
|
||||||
file_selected = true;
|
file_selected = true;
|
||||||
loader->app = flipper_application_alloc(loader->storage, firmware_api_interface);
|
loader->app = flipper_application_alloc(loader->storage, firmware_api_interface);
|
||||||
@@ -82,6 +83,20 @@ static bool fap_loader_run_selected_app(FapLoader* loader) {
|
|||||||
FlipperApplicationPreloadStatus preload_res =
|
FlipperApplicationPreloadStatus preload_res =
|
||||||
flipper_application_preload(loader->app, furi_string_get_cstr(loader->fap_path));
|
flipper_application_preload(loader->app, furi_string_get_cstr(loader->fap_path));
|
||||||
if(preload_res != FlipperApplicationPreloadStatusSuccess) {
|
if(preload_res != FlipperApplicationPreloadStatusSuccess) {
|
||||||
|
if(preload_res == FlipperApplicationPreloadStatusApiMismatch) {
|
||||||
|
if(!ignore_mismatch) {
|
||||||
|
DialogMessage* message = dialog_message_alloc();
|
||||||
|
dialog_message_set_header(message, "API Mismatch", 64, 0, AlignCenter, AlignTop);
|
||||||
|
dialog_message_set_buttons(message, "Cancel", NULL, "Continue");
|
||||||
|
dialog_message_set_text(message, "This app might not\nwork correctly\nContinue anyways?", 64, 32, AlignCenter, AlignCenter);
|
||||||
|
if(dialog_message_show(loader->dialogs, message) == DialogMessageButtonRight) {
|
||||||
|
retry = true;
|
||||||
|
}
|
||||||
|
dialog_message_free(message);
|
||||||
|
show_error = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
const char* err_msg = flipper_application_preload_status_to_string(preload_res);
|
const char* err_msg = flipper_application_preload_status_to_string(preload_res);
|
||||||
furi_string_printf(error_message, "Preload failed: %s", err_msg);
|
furi_string_printf(error_message, "Preload failed: %s", err_msg);
|
||||||
FURI_LOG_E(
|
FURI_LOG_E(
|
||||||
@@ -91,6 +106,7 @@ static bool fap_loader_run_selected_app(FapLoader* loader) {
|
|||||||
err_msg);
|
err_msg);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FURI_LOG_I(TAG, "FAP Loader is mapping");
|
FURI_LOG_I(TAG, "FAP Loader is mapping");
|
||||||
FlipperApplicationLoadStatus load_status = flipper_application_map_to_memory(loader->app);
|
FlipperApplicationLoadStatus load_status = flipper_application_map_to_memory(loader->app);
|
||||||
@@ -155,7 +171,7 @@ static bool fap_loader_run_selected_app(FapLoader* loader) {
|
|||||||
flipper_application_free(loader->app);
|
flipper_application_free(loader->app);
|
||||||
}
|
}
|
||||||
|
|
||||||
return file_selected;
|
return retry;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool fap_loader_select_app(FapLoader* loader) {
|
static bool fap_loader_select_app(FapLoader* loader) {
|
||||||
@@ -203,12 +219,16 @@ int32_t fap_loader_app(void* p) {
|
|||||||
if(p) {
|
if(p) {
|
||||||
loader = fap_loader_alloc((const char*)p);
|
loader = fap_loader_alloc((const char*)p);
|
||||||
view_dispatcher_switch_to_view(loader->view_dispatcher, 0);
|
view_dispatcher_switch_to_view(loader->view_dispatcher, 0);
|
||||||
fap_loader_run_selected_app(loader);
|
if(fap_loader_run_selected_app(loader, false)) {
|
||||||
|
fap_loader_run_selected_app(loader, true);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
loader = fap_loader_alloc(EXT_PATH("apps"));
|
loader = fap_loader_alloc(EXT_PATH("apps"));
|
||||||
while(fap_loader_select_app(loader)) {
|
while(fap_loader_select_app(loader)) {
|
||||||
view_dispatcher_switch_to_view(loader->view_dispatcher, 0);
|
view_dispatcher_switch_to_view(loader->view_dispatcher, 0);
|
||||||
fap_loader_run_selected_app(loader);
|
if(fap_loader_run_selected_app(loader, false)) {
|
||||||
|
fap_loader_run_selected_app(loader, true);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user