Add back API mismatch ignore dialog

This commit is contained in:
Willy-JL
2023-06-26 00:54:53 +01:00
parent 5a38c821ef
commit 24c73c9460
+27 -6
View File
@@ -328,7 +328,10 @@ static LoaderStatus loader_start_external_app(
FlipperApplicationPreloadStatus preload_res =
flipper_application_preload(loader->app.fap, path);
if(preload_res != FlipperApplicationPreloadStatusSuccess) {
bool api_mismatch = false;
if(preload_res == FlipperApplicationPreloadStatusApiMismatch) {
api_mismatch = true;
} else if(preload_res != FlipperApplicationPreloadStatusSuccess) {
const char* err_msg = flipper_application_preload_status_to_string(preload_res);
status = loader_make_status_error(
LoaderStatusErrorInternal, error_message, "Preload failed %s: %s", path, err_msg);
@@ -338,14 +341,32 @@ static LoaderStatus loader_start_external_app(
FURI_LOG_I(TAG, "Mapping");
FlipperApplicationLoadStatus load_status =
flipper_application_map_to_memory(loader->app.fap);
FURI_LOG_I(TAG, "Loaded in %zums", (size_t)(furi_get_tick() - start));
if(load_status != FlipperApplicationLoadStatusSuccess) {
const char* err_msg = flipper_application_load_status_to_string(load_status);
status = loader_make_status_error(
LoaderStatusErrorInternal, error_message, "Load failed %s: %s", path, err_msg);
break;
} else if(api_mismatch) {
// Successful map, but found api mismatch -> warn user
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);
DialogMessageButton res = dialog_message_show(furi_record_open(RECORD_DIALOGS), message);
dialog_message_free(message);
furi_record_close(RECORD_DIALOGS);
if(res != DialogMessageButtonRight) {
break;
}
}
FURI_LOG_I(TAG, "Loaded in %zums", (size_t)(furi_get_tick() - start));
FURI_LOG_I(TAG, "Starting app");
loader->app.thread = flipper_application_alloc_thread(loader->app.fap, args);
@@ -363,12 +384,12 @@ static LoaderStatus loader_start_external_app(
}
loader_start_app_thread(loader, FlipperInternalApplicationFlagDefault);
return status;
} while(0);
if(status != LoaderStatusOk) {
flipper_application_free(loader->app.fap);
loader->app.fap = NULL;
}
flipper_application_free(loader->app.fap);
loader->app.fap = NULL;
return status;
}