mirror of
https://github.com/redstrate/Astra.git
synced 2025-05-13 21:07:46 +00:00
parent
ff1d6e172d
commit
3e064e91ce
3 changed files with 38 additions and 14 deletions
|
@ -32,7 +32,12 @@ Q_SIGNALS:
|
||||||
void isInstalledChanged();
|
void isInstalledChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QDir steamDir() const;
|
enum class SteamType {
|
||||||
|
NotFound,
|
||||||
|
Native,
|
||||||
|
Flatpak,
|
||||||
|
};
|
||||||
|
std::pair<SteamType, QDir> findSteamType() const;
|
||||||
|
|
||||||
LauncherCore &m_launcher;
|
LauncherCore &m_launcher;
|
||||||
};
|
};
|
||||||
|
|
|
@ -16,13 +16,13 @@ CompatibilityToolInstaller::CompatibilityToolInstaller(LauncherCore &launcher, Q
|
||||||
|
|
||||||
void CompatibilityToolInstaller::installCompatibilityTool()
|
void CompatibilityToolInstaller::installCompatibilityTool()
|
||||||
{
|
{
|
||||||
const QDir steamSteamDir = steamDir();
|
const auto [steamType, steamDir] = findSteamType();
|
||||||
if (!steamSteamDir.exists()) {
|
if (steamType == SteamType::NotFound) {
|
||||||
Q_EMIT error(i18n("Could not find a Steam installation."));
|
Q_EMIT error(i18n("Could not find a Steam installation."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QDir compatToolDir = steamSteamDir.absoluteFilePath(QStringLiteral("compatibilitytools.d"));
|
const QDir compatToolDir = steamDir.absoluteFilePath(QStringLiteral("compatibilitytools.d"));
|
||||||
const QDir astraToolDir = compatToolDir.absoluteFilePath(QStringLiteral("astra"));
|
const QDir astraToolDir = compatToolDir.absoluteFilePath(QStringLiteral("astra"));
|
||||||
if (astraToolDir.exists()) {
|
if (astraToolDir.exists()) {
|
||||||
Q_EMIT error(i18n("Astra's Compatibility Tool is already installed."));
|
Q_EMIT error(i18n("Astra's Compatibility Tool is already installed."));
|
||||||
|
@ -97,13 +97,13 @@ void CompatibilityToolInstaller::installCompatibilityTool()
|
||||||
|
|
||||||
void CompatibilityToolInstaller::removeCompatibilityTool()
|
void CompatibilityToolInstaller::removeCompatibilityTool()
|
||||||
{
|
{
|
||||||
const QDir steamSteamDir = steamDir();
|
const auto [steamType, steamDir] = findSteamType();
|
||||||
if (!steamSteamDir.exists()) {
|
if (steamType == SteamType::NotFound) {
|
||||||
Q_EMIT error(i18n("Could not find a Steam installation."));
|
Q_EMIT error(i18n("Could not find a Steam installation."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const QDir compatToolDir = steamSteamDir.absoluteFilePath(QStringLiteral("compatibilitytools.d"));
|
const QDir compatToolDir = steamDir.absoluteFilePath(QStringLiteral("compatibilitytools.d"));
|
||||||
QDir astraToolDir = compatToolDir.absoluteFilePath(QStringLiteral("astra"));
|
QDir astraToolDir = compatToolDir.absoluteFilePath(QStringLiteral("astra"));
|
||||||
if (!astraToolDir.exists()) {
|
if (!astraToolDir.exists()) {
|
||||||
Q_EMIT error(i18n("Astra's Compatibility Tool is not installed."));
|
Q_EMIT error(i18n("Astra's Compatibility Tool is not installed."));
|
||||||
|
@ -118,21 +118,38 @@ void CompatibilityToolInstaller::removeCompatibilityTool()
|
||||||
|
|
||||||
bool CompatibilityToolInstaller::isInstalled() const
|
bool CompatibilityToolInstaller::isInstalled() const
|
||||||
{
|
{
|
||||||
const QDir compatToolDir = steamDir().absoluteFilePath(QStringLiteral("compatibilitytools.d"));
|
const QDir compatToolDir = findSteamType().second.absoluteFilePath(QStringLiteral("compatibilitytools.d"));
|
||||||
const QDir astraToolDir = compatToolDir.absoluteFilePath(QStringLiteral("astra"));
|
const QDir astraToolDir = compatToolDir.absoluteFilePath(QStringLiteral("astra"));
|
||||||
return astraToolDir.exists();
|
return astraToolDir.exists();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CompatibilityToolInstaller::hasSteam() const
|
bool CompatibilityToolInstaller::hasSteam() const
|
||||||
{
|
{
|
||||||
return steamDir().exists();
|
return findSteamType().first != SteamType::NotFound;
|
||||||
}
|
}
|
||||||
|
|
||||||
QDir CompatibilityToolInstaller::steamDir() const
|
std::pair<CompatibilityToolInstaller::SteamType, QDir> CompatibilityToolInstaller::findSteamType() const
|
||||||
{
|
{
|
||||||
const QDir appDataDir = QStandardPaths::standardLocations(QStandardPaths::StandardLocation::HomeLocation)[0];
|
// prefer flatpak
|
||||||
const QDir steamDir = appDataDir.absoluteFilePath(QStringLiteral(".steam"));
|
{
|
||||||
return steamDir.absoluteFilePath(QStringLiteral("steam"));
|
const QDir appDataDir = QStandardPaths::standardLocations(QStandardPaths::StandardLocation::HomeLocation)[0];
|
||||||
|
const QDir flatpakDataDir = appDataDir.absoluteFilePath(QStringLiteral(".var/app/com.valvesoftware.Steam/data/Steam/"));
|
||||||
|
if (flatpakDataDir.exists()) {
|
||||||
|
return {SteamType::Flatpak, flatpakDataDir};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// fallback to native
|
||||||
|
{
|
||||||
|
const QDir appDataDir = QStandardPaths::standardLocations(QStandardPaths::StandardLocation::HomeLocation)[0];
|
||||||
|
const QDir steamDir = appDataDir.absoluteFilePath(QStringLiteral(".steam"));
|
||||||
|
const QDir steamDataDir = steamDir.absoluteFilePath(QStringLiteral("steam"));
|
||||||
|
if (steamDataDir.exists()) {
|
||||||
|
return {SteamType::Native, steamDataDir};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {SteamType::NotFound, QDir()};
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "moc_compatibilitytoolinstaller.cpp"
|
#include "moc_compatibilitytoolinstaller.cpp"
|
||||||
|
|
|
@ -14,6 +14,8 @@ finish-args:
|
||||||
- --socket=fallback-x11
|
- --socket=fallback-x11
|
||||||
- --share=network
|
- --share=network
|
||||||
- --filesystem=home
|
- --filesystem=home
|
||||||
|
# We need to install compatibility tools for Flatpak Steam
|
||||||
|
- --filesystem=~/.var/app/com.valvesoftware.Steam/data/Steam/compatibilitytools.d/:rw
|
||||||
- --socket=pulseaudio
|
- --socket=pulseaudio
|
||||||
# Allow access to the GNOME secret service API and to talk to the GNOME keyring daemon
|
# Allow access to the GNOME secret service API and to talk to the GNOME keyring daemon
|
||||||
- --talk-name=org.freedesktop.secrets
|
- --talk-name=org.freedesktop.secrets
|
||||||
|
|
Loading…
Add table
Reference in a new issue