1
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:
MX
2023-03-22 23:13:48 +03:00
committed by GitHub

View File

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