diff --git a/firmware/application/ui_navigation.cpp b/firmware/application/ui_navigation.cpp index c98a0f2fc..42e4ffaf0 100644 --- a/firmware/application/ui_navigation.cpp +++ b/firmware/application/ui_navigation.cpp @@ -725,20 +725,31 @@ void NavigationView::handle_autostart() { {{"autostart_app"sv, &autostart_app}}}; if (!autostart_app.empty()) { bool app_started = false; - - // try innerapp + // inner app if (StartAppByName(autostart_app.c_str())) { app_started = true; - } else { - // try outside app - auto external_items = ExternalItemsMenuLoader::load_external_items(app_location_t::HOME, *this); - for (const auto& item : external_items) { - if (item.text == autostart_app) { - item.on_select(); - app_started = true; - break; - } + return; + } + + // lambda + auto execute_app = [=](const std::string& extension) { // TODO: capture ref aka [&] would also lagging th GUI, no idea why + std::string appwithpath = "/" + apps_dir.string() + "/" + autostart_app + extension; + std::wstring_convert, char16_t> conv; + std::filesystem::path pth = conv.from_bytes(appwithpath.c_str()); + if (ui::ExternalItemsMenuLoader::run_external_app(*this, pth)) { + return true; } + return false; + }; + + // outside app + if (!app_started) { + app_started = execute_app(".ppma"); + } + + // standalone app + if (!app_started) { + app_started = execute_app(".ppmp"); } if (!app_started) {