aboutsummaryrefslogtreecommitdiff
path: root/launcher/DesktopServices.cpp
diff options
context:
space:
mode:
authorTrial97 <alexandru.tripon97@gmail.com>2023-08-15 12:16:00 +0300
committerTrial97 <alexandru.tripon97@gmail.com>2023-08-15 12:16:00 +0300
commitc94ee67077076fdfb3ad04e93a0de2ae32b6a4e5 (patch)
tree437dec3be224cae5e229eeaa4ac9ebeedffd03e3 /launcher/DesktopServices.cpp
parent019e5ca3e819f5daf9933bc0fb091784b0ca561f (diff)
parent8f5bb982cd27dd9158b63d826769c168455a139b (diff)
downloadPrismLauncher-c94ee67077076fdfb3ad04e93a0de2ae32b6a4e5.tar.gz
PrismLauncher-c94ee67077076fdfb3ad04e93a0de2ae32b6a4e5.tar.bz2
PrismLauncher-c94ee67077076fdfb3ad04e93a0de2ae32b6a4e5.zip
Merge branch 'develop' of https://github.com/PrismLauncher/PrismLauncher into curseforge-url-handle3
Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
Diffstat (limited to 'launcher/DesktopServices.cpp')
-rw-r--r--launcher/DesktopServices.cpp115
1 files changed, 38 insertions, 77 deletions
diff --git a/launcher/DesktopServices.cpp b/launcher/DesktopServices.cpp
index 81362f09..004e5e08 100644
--- a/launcher/DesktopServices.cpp
+++ b/launcher/DesktopServices.cpp
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-3.0-only
/*
- * PolyMC - Minecraft Launcher
+ * Prism Launcher - Minecraft Launcher
* Copyright (C) 2022 dada513 <dada513@protonmail.com>
*
* This program is free software: you can redistribute it and/or modify
@@ -33,40 +33,37 @@
* limitations under the License.
*/
#include "DesktopServices.h"
-#include <QDir>
+#include <QDebug>
#include <QDesktopServices>
+#include <QDir>
#include <QProcess>
-#include <QDebug>
/**
* This shouldn't exist, but until QTBUG-9328 and other unreported bugs are fixed, it needs to be a thing.
*/
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
-#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h>
+#include <unistd.h>
template <typename T>
-bool IndirectOpen(T callable, qint64 *pid_forked = nullptr)
+bool IndirectOpen(T callable, qint64* pid_forked = nullptr)
{
auto pid = fork();
- if(pid_forked)
- {
- if(pid > 0)
+ if (pid_forked) {
+ if (pid > 0)
*pid_forked = pid;
else
*pid_forked = 0;
}
- if(pid == -1)
- {
+ if (pid == -1) {
qWarning() << "IndirectOpen failed to fork: " << errno;
return false;
}
// child - do the stuff
- if(pid == 0)
- {
+ if (pid == 0) {
// unset all this garbage so it doesn't get passed to the child process
qunsetenv("LD_PRELOAD");
qunsetenv("LD_LIBRARY_PATH");
@@ -82,19 +79,14 @@ bool IndirectOpen(T callable, qint64 *pid_forked = nullptr)
// die. now. do not clean up anything, it would just hang forever.
_exit(status ? 0 : 1);
- }
- else
- {
- //parent - assume it worked.
+ } else {
+ // parent - assume it worked.
int status;
- while (waitpid(pid, &status, 0))
- {
- if(WIFEXITED(status))
- {
+ while (waitpid(pid, &status, 0)) {
+ if (WIFEXITED(status)) {
return WEXITSTATUS(status) == 0;
}
- if(WIFSIGNALED(status))
- {
+ if (WIFSIGNALED(status)) {
return false;
}
}
@@ -104,26 +96,19 @@ bool IndirectOpen(T callable, qint64 *pid_forked = nullptr)
#endif
namespace DesktopServices {
-bool openDirectory(const QString &path, bool ensureExists)
+bool openDirectory(const QString& path, [[maybe_unused]] bool ensureExists)
{
qDebug() << "Opening directory" << path;
QDir parentPath;
QDir dir(path);
- if (!dir.exists())
- {
+ if (ensureExists && !dir.exists()) {
parentPath.mkpath(dir.absolutePath());
}
- auto f = [&]()
- {
- return QDesktopServices::openUrl(QUrl::fromLocalFile(dir.absolutePath()));
- };
+ auto f = [&]() { return QDesktopServices::openUrl(QUrl::fromLocalFile(dir.absolutePath())); };
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
- if(!isSandbox())
- {
+ if (!isSandbox()) {
return IndirectOpen(f);
- }
- else
- {
+ } else {
return f();
}
#else
@@ -131,20 +116,14 @@ bool openDirectory(const QString &path, bool ensureExists)
#endif
}
-bool openFile(const QString &path)
+bool openFile(const QString& path)
{
qDebug() << "Opening file" << path;
- auto f = [&]()
- {
- return QDesktopServices::openUrl(QUrl::fromLocalFile(path));
- };
+ auto f = [&]() { return QDesktopServices::openUrl(QUrl::fromLocalFile(path)); };
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
- if(!isSandbox())
- {
+ if (!isSandbox()) {
return IndirectOpen(f);
- }
- else
- {
+ } else {
return f();
}
#else
@@ -152,41 +131,29 @@ bool openFile(const QString &path)
#endif
}
-bool openFile(const QString &application, const QString &path, const QString &workingDirectory, qint64 *pid)
+bool openFile(const QString& application, const QString& path, const QString& workingDirectory, qint64* pid)
{
qDebug() << "Opening file" << path << "using" << application;
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
// FIXME: the pid here is fake. So if something depends on it, it will likely misbehave
- if(!isSandbox())
- {
- return IndirectOpen([&]()
- {
- return QProcess::startDetached(application, QStringList() << path, workingDirectory);
- }, pid);
- }
- else
- {
- return QProcess::startDetached(application, QStringList() << path, workingDirectory, pid);
+ if (!isSandbox()) {
+ return IndirectOpen([&]() { return QProcess::startDetached(application, QStringList() << path, workingDirectory); }, pid);
+ } else {
+ return QProcess::startDetached(application, QStringList() << path, workingDirectory, pid);
}
#else
return QProcess::startDetached(application, QStringList() << path, workingDirectory, pid);
#endif
}
-bool run(const QString &application, const QStringList &args, const QString &workingDirectory, qint64 *pid)
+bool run(const QString& application, const QStringList& args, const QString& workingDirectory, qint64* pid)
{
qDebug() << "Running" << application << "with args" << args.join(' ');
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
- if(!isSandbox())
- {
- // FIXME: the pid here is fake. So if something depends on it, it will likely misbehave
- return IndirectOpen([&]()
- {
- return QProcess::startDetached(application, args, workingDirectory);
- }, pid);
- }
- else
- {
+ if (!isSandbox()) {
+ // FIXME: the pid here is fake. So if something depends on it, it will likely misbehave
+ return IndirectOpen([&]() { return QProcess::startDetached(application, args, workingDirectory); }, pid);
+ } else {
return QProcess::startDetached(application, args, workingDirectory, pid);
}
#else
@@ -194,20 +161,14 @@ bool run(const QString &application, const QStringList &args, const QString &wor
#endif
}
-bool openUrl(const QUrl &url)
+bool openUrl(const QUrl& url)
{
qDebug() << "Opening URL" << url.toString();
- auto f = [&]()
- {
- return QDesktopServices::openUrl(url);
- };
+ auto f = [&]() { return QDesktopServices::openUrl(url); };
#if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
- if(!isSandbox())
- {
+ if (!isSandbox()) {
return IndirectOpen(f);
- }
- else
- {
+ } else {
return f();
}
#else
@@ -238,4 +199,4 @@ bool isSandbox()
return isSnap() || isFlatpak();
}
-}
+} // namespace DesktopServices