feat(updater): tie in updater part 1
Signed-off-by: Rachel Powers <508861+Ryex@users.noreply.github.com>
This commit is contained in:
		| @@ -41,6 +41,7 @@ | ||||
|  | ||||
| #include <QProgressDialog> | ||||
| #include <sys.h> | ||||
| #include <winbase.h> | ||||
|  | ||||
| #if defined Q_OS_WIN32 | ||||
| #ifndef WIN32_LEAN_AND_MEAN | ||||
| @@ -202,11 +203,17 @@ void BindCrtHandlesToStdHandles(bool bindStdIn, bool bindStdOut, bool bindStdErr | ||||
| PrismUpdaterApp::PrismUpdaterApp(int& argc, char** argv) : QApplication(argc, argv) | ||||
| { | ||||
| #if defined Q_OS_WIN32 | ||||
|     // attach the parent console | ||||
|     if (AttachConsole(ATTACH_PARENT_PROCESS)) { | ||||
|     // attach the parent console if stdout not already captured | ||||
|     auto stdout_type = GetFileType(GetStdHandle(STD_OUTPUT_HANDLE)); | ||||
|     if (stdout_type == FILE_TYPE_CHAR || stdout_type == FILE_TYPE_UNKNOWN) { | ||||
|         if (AttachConsole(ATTACH_PARENT_PROCESS)) { | ||||
|             BindCrtHandlesToStdHandles(true, true, true); | ||||
|             consoleAttached = true; | ||||
|         } | ||||
|     } else if (stdout_type == FILE_TYPE_DISK || stdout_type == FILE_TYPE_PIPE ) { | ||||
|         BindCrtHandlesToStdHandles(true, true, true); | ||||
|         consoleAttached = true; | ||||
|     } | ||||
|      | ||||
| #endif | ||||
|     setOrganizationName(BuildConfig.LAUNCHER_NAME); | ||||
|     setOrganizationDomain(BuildConfig.LAUNCHER_DOMAIN); | ||||
| @@ -226,6 +233,7 @@ PrismUpdaterApp::PrismUpdaterApp(int& argc, char** argv) : QApplication(argc, ar | ||||
|           { { "U", "update-url" }, tr("Update from the specified repo."), tr("github repo url") }, | ||||
|           { { "c", "check-only" }, | ||||
|             tr("Only check if an update is needed. Exit status 100 if true, 0 if false (or non 0 if there was an error).") }, | ||||
|           { { "p", "pre-release" }, tr("Allow updating to pre-release releases") }, | ||||
|           { { "F", "force" }, tr("Force an update, even if one is not needed.") }, | ||||
|           { { "l", "list" }, tr("List available releases.") }, | ||||
|           { "debug", tr("Log debug to console.") }, | ||||
| @@ -297,6 +305,8 @@ PrismUpdaterApp::PrismUpdaterApp(int& argc, char** argv) : QApplication(argc, ar | ||||
|         m_prismVersionMinor = version_parts.takeFirst().toInt(); | ||||
|     } | ||||
|  | ||||
|     m_allowPreRelease = parser.isSet("pre-release"); | ||||
|  | ||||
|     QString origCwdPath = QDir::currentPath(); | ||||
|     QString binPath = applicationDirPath(); | ||||
|  | ||||
| @@ -542,10 +552,19 @@ void PrismUpdaterApp::run() | ||||
|     auto need_update = needUpdate(latest); | ||||
|  | ||||
|     if (m_checkOnly) { | ||||
|         if (need_update) | ||||
|         if (need_update) { | ||||
|             QTextStream stdOutStream(stdout); | ||||
|             stdOutStream << "Name: " << latest.name << "\n"; | ||||
|             stdOutStream << "Version: " << latest.tag_name << "\n"; | ||||
|             stdOutStream << "TimeStamp: " << latest.created_at.toString(Qt::ISODate) << "\n"; | ||||
|             stdOutStream << latest.body << "\n"; | ||||
|             stdOutStream.flush(); | ||||
|  | ||||
|             return exit(100); | ||||
|         else | ||||
|         } | ||||
|         else { | ||||
|             return exit(0); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if (m_isFlatpak) { | ||||
| @@ -958,10 +977,11 @@ void PrismUpdaterApp::unpackAndInstall(QFileInfo archive) | ||||
|     if (auto loc = unpackArchive(archive)) { | ||||
|         auto marker_file_path = loc.value().absoluteFilePath(".prism_launcher_updater_unpack.marker"); | ||||
|         FS::write(marker_file_path, applicationDirPath().toUtf8()); | ||||
|         auto new_updater_path = loc.value().absoluteFilePath("prismlauncher_updater"); | ||||
|         auto exe_name = QStringLiteral("%1_updater").arg(BuildConfig.LAUNCHER_APP_BINARY_NAME); | ||||
| #if defined Q_OS_WIN32 | ||||
|         new_updater_path.append(".exe"); | ||||
|         exe_name.append(".exe"); | ||||
| #endif | ||||
|         auto new_updater_path = loc.value().absoluteFilePath(exe_name); | ||||
|         logUpdate(tr("Starting new updater at '%1'").arg(new_updater_path)); | ||||
|         QProcess proc = QProcess(); | ||||
|         if (!proc.startDetached(new_updater_path, { "-d", m_dataPath }, loc.value().absolutePath())) { | ||||
| @@ -1110,7 +1130,7 @@ bool PrismUpdaterApp::loadPrismVersionFromExe(const QString& exe_path) | ||||
|     QProcess proc = QProcess(); | ||||
|     proc.setProcessChannelMode(QProcess::MergedChannels); | ||||
|     proc.setReadChannel(QProcess::StandardOutput); | ||||
|     proc.start(exe_path, { "-v" }); | ||||
|     proc.start(exe_path, { "--version" }); | ||||
|     if (!proc.waitForStarted(5000)) { | ||||
|         showFatalErrorMessage(tr("Failed to Check Version"), tr("Failed to launcher child launcher process to read version.")); | ||||
|         return false; | ||||
| @@ -1119,7 +1139,7 @@ bool PrismUpdaterApp::loadPrismVersionFromExe(const QString& exe_path) | ||||
|         showFatalErrorMessage(tr("Failed to Check Version"), tr("Child launcher process failed.")); | ||||
|         return false; | ||||
|     } | ||||
|     auto out = proc.readAll(); | ||||
|     auto out = proc.readAllStandardOutput(); | ||||
|     auto lines = out.split('\n'); | ||||
|     if (lines.length() < 2) | ||||
|         return false; | ||||
| @@ -1250,7 +1270,11 @@ GitHubRelease PrismUpdaterApp::getLatestRelease() | ||||
| { | ||||
|     GitHubRelease latest; | ||||
|     for (auto release : m_releases) { | ||||
|         if (!latest.isValid() || (!release.draft && release.version > latest.version)) { | ||||
|         if (release.draft) | ||||
|             continue; | ||||
|         if (release.prerelease && !m_allowPreRelease) | ||||
|             continue; | ||||
|         if (!latest.isValid() || (release.version > latest.version)) { | ||||
|             latest = release; | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -113,6 +113,7 @@ class PrismUpdaterApp : public QApplication { | ||||
|     bool m_printOnly; | ||||
|     bool m_selectUI; | ||||
|     bool m_allowDowngrade; | ||||
|     bool m_allowPreRelease; | ||||
|  | ||||
|     QString m_updateLogPath; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Rachel Powers
					Rachel Powers