1
0
Fork 0
mirror of synced 2024-05-21 04:52:51 +12:00

Rare: Import platform specific modules only on the relevant platforms

This commit is contained in:
loathingKernel 2023-12-23 22:21:13 +02:00
parent 0ea29bc941
commit 8bde2c2c6d
7 changed files with 112 additions and 59 deletions

View file

@ -8,17 +8,22 @@ from PyQt5.QtGui import QShowEvent
from PyQt5.QtWidgets import QFileDialog, QComboBox, QLineEdit
from legendary.models.game import Game, InstalledGame
from rare.components.tabs.settings.widgets.wrappers import WrapperSettings
from rare.components.tabs.settings.widgets.game import GameSettingsBase
from rare.components.tabs.settings.widgets.env_vars import EnvVars
from rare.components.tabs.settings.widgets.game import GameSettingsBase
from rare.components.tabs.settings.widgets.launch import LaunchSettingsBase
from rare.components.tabs.settings.widgets.overlay import MangoHudSettings, DxvkSettings
from rare.components.tabs.settings.widgets.proton import ProtonSettings
from rare.components.tabs.settings.widgets.wine import WineSettings
from rare.components.tabs.settings.widgets.overlay import DxvkSettings
from rare.components.tabs.settings.widgets.wrappers import WrapperSettings
from rare.models.game import RareGame
from rare.utils import config_helper as config
from rare.widgets.indicator_edit import PathEdit, IndicatorReasonsCommon
if pf.system() != "Windows":
from rare.components.tabs.settings.widgets.wine import WineSettings
if pf.system() not in {"Windows", "Darwin"}:
from rare.components.tabs.settings.widgets.proton import ProtonSettings
from rare.components.tabs.settings.widgets.overlay import MangoHudSettings
logger = getLogger("GameSettings")
@ -131,14 +136,22 @@ class GameLaunchSettings(LaunchSettingsBase):
self.wrappers_widget.load_settings(rgame.app_name)
class GameWineSettings(WineSettings):
def load_settings(self, app_name):
self.app_name = app_name
if pf.system() != "Windows":
class GameWineSettings(WineSettings):
def load_settings(self, app_name):
self.app_name = app_name
class GameProtonSettings(ProtonSettings):
def load_settings(self, app_name: str):
self.app_name = app_name
if pf.system() not in {"Windows", "Darwin"}:
class GameProtonSettings(ProtonSettings):
def load_settings(self, app_name: str):
self.app_name = app_name
class GameMangoHudSettings(MangoHudSettings):
def load_settings(self, app_name: str):
self.app_name = app_name
class GameDxvkSettings(DxvkSettings):
@ -146,11 +159,6 @@ class GameDxvkSettings(DxvkSettings):
self.app_name = app_name
class GameMangoHudSettings(MangoHudSettings):
def load_settings(self, app_name: str):
self.app_name = app_name
class GameEnvVars(EnvVars):
def load_settings(self, app_name):
self.app_name = app_name
@ -158,11 +166,23 @@ class GameEnvVars(EnvVars):
class GameSettings(GameSettingsBase):
def __init__(self, parent=None):
super(GameSettings, self).__init__(
GameLaunchSettings, GameWineSettings, GameProtonSettings,
GameDxvkSettings, GameMangoHudSettings, GameEnvVars,
parent=parent
)
if pf.system() not in {"Windows", "Darwin"}:
super(GameSettings, self).__init__(
GameLaunchSettings, GameDxvkSettings, GameEnvVars,
GameWineSettings, GameProtonSettings, GameMangoHudSettings,
parent=parent
)
elif pf.system() != "Windows":
super(GameSettings, self).__init__(
GameLaunchSettings, GameDxvkSettings, GameEnvVars,
GameWineSettings,
parent=parent
)
else:
super(GameSettings, self).__init__(
GameLaunchSettings, GameDxvkSettings, GameEnvVars,
parent=parent
)
def load_settings(self, rgame: RareGame):
self.set_title.emit(rgame.app_title)
@ -170,7 +190,7 @@ class GameSettings(GameSettingsBase):
self.launch.load_settings(rgame)
if pf.system() != "Windows":
self.wine.load_settings(rgame.app_name)
if pf.system() == "Linux":
if pf.system() not in {"Windows", "Darwin"}:
self.proton_tool.load_settings(rgame.app_name)
self.mangohud.load_settings(rgame.app_name)
self.dxvk.load_settings(rgame.app_name)

View file

@ -1,13 +1,19 @@
import platform as pf
from logging import getLogger
from .widgets.env_vars import EnvVars
from .widgets.game import GameSettingsBase
from .widgets.launch import LaunchSettingsBase
from .widgets.overlay import MangoHudSettings, DxvkSettings
from .widgets.proton import ProtonSettings
from .widgets.wine import WineSettings
from .widgets.overlay import DxvkSettings
from .widgets.wrappers import WrapperSettings
if pf.system() != "Windows":
from .widgets.wine import WineSettings
if pf.system() not in {"Windows", "Darwin"}:
from .widgets.proton import ProtonSettings
from .widgets.overlay import MangoHudSettings
logger = getLogger("GameSettings")
@ -18,7 +24,20 @@ class LaunchSettings(LaunchSettingsBase):
class GameSettings(GameSettingsBase):
def __init__(self, parent=None):
super(GameSettings, self).__init__(
LaunchSettings, WineSettings, ProtonSettings, DxvkSettings, MangoHudSettings, EnvVars,
parent=parent
)
if pf.system() not in {"Windows", "Darwin"}:
super(GameSettings, self).__init__(
LaunchSettings, DxvkSettings, EnvVars,
WineSettings, ProtonSettings, MangoHudSettings,
parent=parent
)
elif pf.system() != "Windows":
super(GameSettings, self).__init__(
LaunchSettings, DxvkSettings, EnvVars,
WineSettings,
parent=parent
)
else:
super(GameSettings, self).__init__(
LaunchSettings, DxvkSettings, EnvVars,
parent=parent
)

View file

@ -12,9 +12,9 @@ from rare.utils.misc import icon
if platform.system() != "Windows":
from rare.utils.runners.wine import get_wine_environment
if platform.system() != "Darwin":
from rare.utils.runners.proton import get_steam_environment
if platform.system() not in {"Windows", "Darwin"}:
from rare.utils.runners.proton import get_steam_environment
class EnvVarsTableModel(QAbstractTableModel):
@ -34,8 +34,8 @@ class EnvVarsTableModel(QAbstractTableModel):
]
if platform.system() != "Windows":
self.__readonly.extend(get_wine_environment().keys())
if platform.system() != "Darwin":
self.__readonly.extend(get_steam_environment().keys())
if platform.system() not in {"Windows", "Darwin"}:
self.__readonly.extend(get_steam_environment().keys())
self.__default: str = "default"
self.__appname: str = None

View file

@ -9,13 +9,18 @@ from PyQt5.QtWidgets import (
)
from rare.shared import LegendaryCoreSingleton
from rare.widgets.side_tab import SideTabContents
from rare.utils import config_helper as config
from rare.widgets.side_tab import SideTabContents
from .env_vars import EnvVars
from .launch import LaunchSettingsType
from .overlay import MangoHudSettings, DxvkSettings
from .proton import ProtonSettings
from .wine import WineSettings
from .overlay import DxvkSettings
if pf.system() != "Windows":
from .wine import WineSettings
if pf.system() not in {"Windows", "Darwin"}:
from .proton import ProtonSettings
from .overlay import MangoHudSettings
class GameSettingsBase(QWidget, SideTabContents):
@ -23,11 +28,11 @@ class GameSettingsBase(QWidget, SideTabContents):
def __init__(
self,
launch_widget: Type[LaunchSettingsType],
wine_widget: Type[WineSettings],
proton_widget: Type[ProtonSettings],
dxvk_widget: Type[DxvkSettings],
mangohud_widget: Type[MangoHudSettings],
envvar_widget: Type[EnvVars],
wine_widget: Type['WineSettings'] = None,
proton_widget: Type['ProtonSettings'] = None,
mangohud_widget: Type['MangoHudSettings'] = None,
parent=None
):
super(GameSettingsBase, self).__init__(parent=parent)
@ -43,27 +48,27 @@ class GameSettingsBase(QWidget, SideTabContents):
self.wine = wine_widget(self)
self.wine.environ_changed.connect(self.env_vars.reset_model)
if pf.system() == "Linux":
if pf.system() not in {"Windows", "Darwin"}:
self.proton_tool = proton_widget(self)
self.proton_tool.environ_changed.connect(self.env_vars.reset_model)
self.proton_tool.tool_enabled.connect(self.wine.tool_enabled)
self.proton_tool.tool_enabled.connect(self.launch.tool_enabled)
self.mangohud = mangohud_widget(self)
self.mangohud.environ_changed.connect(self.env_vars.reset_model)
self.dxvk = dxvk_widget(self)
self.dxvk.environ_changed.connect(self.env_vars.reset_model)
if pf.system() not in {"Windows", "Darwin"}:
self.mangohud = mangohud_widget(self)
self.mangohud.environ_changed.connect(self.env_vars.reset_model)
self.main_layout = QVBoxLayout(self)
self.main_layout.addWidget(self.launch)
if pf.system() != "Windows":
self.main_layout.addWidget(self.wine)
if pf.system() == "Linux":
if pf.system() not in {"Windows", "Darwin"}:
self.main_layout.addWidget(self.proton_tool)
self.main_layout.addWidget(self.mangohud)
self.main_layout.addWidget(self.dxvk)
if pf.system() == "Linux":
if pf.system() not in {"Windows", "Darwin"}:
self.main_layout.addWidget(self.mangohud)
self.main_layout.addWidget(self.env_vars)

View file

@ -1,3 +1,4 @@
import platform as pf
import shlex
import shutil
from logging import getLogger
@ -22,7 +23,9 @@ from PyQt5.QtWidgets import (
from rare.models.wrapper import Wrapper
from rare.shared import RareCore
from rare.utils.misc import icon
from rare.utils.runners import proton
if pf.system() not in {"Windows", "Darwin"}:
from rare.utils.runners import proton
logger = getLogger("WrapperSettings")
@ -233,14 +236,15 @@ class WrapperSettings(QWidget):
if not wrapper:
return
compat_cmds = [tool.command() for tool in proton.find_tools()]
if wrapper.command in compat_cmds:
QMessageBox.warning(
self,
self.tr("Warning"),
self.tr("Do not insert compatibility tools manually. Add them through Proton settings"),
)
return
if pf.system() not in {"Windows", "Darwin"}:
compat_cmds = [tool.command() for tool in proton.find_tools()]
if wrapper.command in compat_cmds:
QMessageBox.warning(
self,
self.tr("Warning"),
self.tr("Do not insert compatibility tools manually. Add them through Proton settings"),
)
return
if wrapper.checksum in self.wrappers.get_game_md5sum_list(self.app_name):
QMessageBox.warning(

View file

@ -10,7 +10,7 @@ from PyQt5.QtCore import pyqtSignal, QObject, QRunnable
from rare.lgndr.core import LegendaryCore
from rare.models.game import RareGame
from rare.models.pathspec import PathSpec
from rare.utils import runners, config_helper as config
from rare.utils import config_helper as config
from rare.utils.misc import path_size, format_size
from .worker import Worker
@ -18,6 +18,8 @@ if platform.system() == "Windows":
# noinspection PyUnresolvedReferences
import winreg # pylint: disable=E0401
from legendary.lfs import windows_helpers
else:
from rare.utils import runners
logger = getLogger("WineResolver")

View file

@ -1,12 +1,15 @@
import os
import platform
import subprocess
from configparser import ConfigParser
from logging import getLogger
from typing import Mapping, Dict, List, Tuple, Optional
from rare.utils import config_helper as config
from . import proton
from . import wine
if platform.system() != "Windows":
from . import wine
if platform.system() != "Darwin":
from . import proton
logger = getLogger("Runners")