fix(updater): re-use binPath to determine launcher binary path

Previously this would use the un-adjusted value from Qt, allowing it to
fail in edge cases like self-contained AppImages

Signed-off-by: Seth Flynn <getchoo@tuta.io>
This commit is contained in:
Seth Flynn
2025-12-07 16:40:16 -05:00
parent c305ed4506
commit afe99948c2

View File

@@ -123,70 +123,6 @@ PrismUpdaterApp::PrismUpdaterApp(int& argc, char** argv) : QApplication(argc, ar
logToConsole = parser.isSet("debug");
auto updater_executable = QCoreApplication::applicationFilePath();
#ifdef Q_OS_MACOS
showFatalErrorMessage(tr("MacOS Not Supported"), tr("The updater does not support installations on MacOS"));
#endif
if (updater_executable.startsWith("/tmp/.mount_")) {
m_isAppimage = true;
m_appimagePath = QProcessEnvironment::systemEnvironment().value(QStringLiteral("APPIMAGE"));
if (m_appimagePath.isEmpty()) {
showFatalErrorMessage(tr("Unsupported Installation"),
tr("Updater is running as misconfigured AppImage? ($APPIMAGE environment variable is missing)"));
}
}
m_isFlatpak = DesktopServices::isFlatpak();
QString prism_executable = FS::PathCombine(applicationDirPath(), BuildConfig.LAUNCHER_APP_BINARY_NAME);
#if defined Q_OS_WIN32
prism_executable.append(".exe");
#endif
if (!QFileInfo(prism_executable).isFile()) {
showFatalErrorMessage(tr("Unsupported Installation"), tr("The updater can not find the main executable."));
}
m_prismExecutable = prism_executable;
auto prism_update_url = parser.value("update-url");
if (prism_update_url.isEmpty())
prism_update_url = BuildConfig.UPDATER_GITHUB_REPO;
m_prismRepoUrl = QUrl::fromUserInput(prism_update_url);
m_checkOnly = parser.isSet("check-only");
m_forceUpdate = parser.isSet("force");
m_printOnly = parser.isSet("list");
auto user_version = parser.value("install-version");
if (!user_version.isEmpty()) {
m_userSelectedVersion = Version(user_version);
}
m_selectUI = parser.isSet("select-ui");
m_allowDowngrade = parser.isSet("allow-downgrade");
auto version = parser.value("prism-version");
if (!version.isEmpty()) {
if (version.contains('-')) {
auto index = version.indexOf('-');
m_prsimVersionChannel = version.mid(index + 1);
version = version.left(index);
} else {
m_prsimVersionChannel = "stable";
}
auto version_parts = version.split('.');
m_prismVersionMajor = version_parts.takeFirst().toInt();
m_prismVersionMinor = version_parts.takeFirst().toInt();
if (!version_parts.isEmpty())
m_prismVersionPatch = version_parts.takeFirst().toInt();
else
m_prismVersionPatch = 0;
}
m_allowPreRelease = parser.isSet("pre-release");
QString origCwdPath = QDir::currentPath();
#if defined(Q_OS_LINUX)
// NOTE(@getchoo): In order for `go-appimage` to generate self-contained AppImages, it executes apps from a bundled linker at
@@ -375,6 +311,68 @@ PrismUpdaterApp::PrismUpdaterApp(int& argc, char** argv) : QApplication(argc, ar
m_network->setProxy(proxy);
}
#ifdef Q_OS_MACOS
showFatalErrorMessage(tr("MacOS Not Supported"), tr("The updater does not support installations on MacOS"));
#endif
if (binPath.startsWith("/tmp/.mount_")) {
m_isAppimage = true;
m_appimagePath = QProcessEnvironment::systemEnvironment().value(QStringLiteral("APPIMAGE"));
if (m_appimagePath.isEmpty()) {
showFatalErrorMessage(tr("Unsupported Installation"),
tr("Updater is running as misconfigured AppImage? ($APPIMAGE environment variable is missing)"));
}
}
m_isFlatpak = DesktopServices::isFlatpak();
QString prism_executable = FS::PathCombine(binPath, BuildConfig.LAUNCHER_APP_BINARY_NAME);
#if defined Q_OS_WIN32
prism_executable.append(".exe");
#endif
if (!QFileInfo(prism_executable).isFile()) {
showFatalErrorMessage(tr("Unsupported Installation"), tr("The updater can not find the main executable."));
}
m_prismExecutable = prism_executable;
auto prism_update_url = parser.value("update-url");
if (prism_update_url.isEmpty())
prism_update_url = BuildConfig.UPDATER_GITHUB_REPO;
m_prismRepoUrl = QUrl::fromUserInput(prism_update_url);
m_checkOnly = parser.isSet("check-only");
m_forceUpdate = parser.isSet("force");
m_printOnly = parser.isSet("list");
auto user_version = parser.value("install-version");
if (!user_version.isEmpty()) {
m_userSelectedVersion = Version(user_version);
}
m_selectUI = parser.isSet("select-ui");
m_allowDowngrade = parser.isSet("allow-downgrade");
auto version = parser.value("prism-version");
if (!version.isEmpty()) {
if (version.contains('-')) {
auto index = version.indexOf('-');
m_prsimVersionChannel = version.mid(index + 1);
version = version.left(index);
} else {
m_prsimVersionChannel = "stable";
}
auto version_parts = version.split('.');
m_prismVersionMajor = version_parts.takeFirst().toInt();
m_prismVersionMinor = version_parts.takeFirst().toInt();
if (!version_parts.isEmpty())
m_prismVersionPatch = version_parts.takeFirst().toInt();
else
m_prismVersionPatch = 0;
}
m_allowPreRelease = parser.isSet("pre-release");
auto marker_file_path = QDir(m_rootPath).absoluteFilePath(".prism_launcher_updater_unpack.marker");
auto marker_file = QFileInfo(marker_file_path);
if (marker_file.exists()) {