Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
9b58e45
ConfigHelper: refactor save functions
loathingKernel Mar 10, 2025
220e9a5
Compatibility: Add basic `DXVK_NVAPI_DRS_SETTINGS` configurator
loathingKernel Mar 10, 2025
ea08328
RareGame: export some env variables related to umu before launching
loathingKernel Mar 10, 2025
618c9a6
EnvVarsTableModel: __readonly attribute to an empty set for Windows
loathingKernel Mar 19, 2025
2869618
Wrappers: add checkbox to enable/disable wrappers per game
loathingKernel Jan 14, 2025
154a40b
Wrappers: refactor method names
loathingKernel Jan 24, 2025
090ec07
WrapperSettings: add no-wrapper label later to force container to resize
loathingKernel Mar 6, 2025
db2ab44
ui: fix ui python files with ruff after generating them
loathingKernel Mar 14, 2025
b02be9e
workflows: add ruff buildtime dependency
loathingKernel Mar 14, 2025
3a9da68
SelectiveWidget: rename TagCheckBox to InstallTagCheckBox
loathingKernel Mar 22, 2025
be236b2
CloudSaves: use single information label
loathingKernel Mar 23, 2025
11d04b8
IndicatorEdit: move two column completer to `widgets/indicator_edit.py`
loathingKernel Mar 23, 2025
a3a8c1b
chore: various fixes using `ruff check`
loathingKernel Mar 23, 2025
8d35fd1
GameDetails: update game tags infrastructure
loathingKernel Mar 23, 2025
50d04ee
chore: more ruff fixes
loathingKernel Mar 24, 2025
fc5bc22
Compat: add Steam AppID selector
loathingKernel Mar 25, 2025
5809fe8
SteamGrades: download compressed json file for steam appids
loathingKernel Mar 26, 2025
de02baa
RareGame: do not use `pending` as a value for steam_grade
loathingKernel Mar 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/_job_cx-freeze-appimage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
run: |
sudo apt update
sudo apt install patchelf fakeroot
pip3 install --upgrade cx_freeze
pip3 install --upgrade cx_freeze ruff
- name: Install target dependencies
run: |
pip3 install -r misc/requirements.in
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/_job_cx-freeze-dmg.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:
architecture: ${{ matrix.pyarch }}
- name: Install build dependencies
run: |
pip3 install --upgrade cx_freeze
pip3 install --upgrade cx_freeze ruff
- name: Install target dependencies
run: |
pip3 install -r misc/requirements.in
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/_job_cx-freeze-msi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
architecture: x64
- name: Install build dependencies
run: |
pip3 install --upgrade cx_freeze
pip3 install --upgrade cx_freeze ruff
- name: Install target dependencies
run: |
pip3 install -r misc/requirements.in
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/_job_nuitka-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
architecture: x64
- name: Install build dependencies
run: |
pip3 install nuitka
pip3 install nuitka ruff
- name: Install target dependencies
run: |
pip3 install -r misc/requirements.in
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/_job_nuitka-macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
architecture: ${{ matrix.pyarch }}
- name: Install build dependencies
run: |
pip3 install nuitka
pip3 install nuitka ruff
- name: Install target dependencies
run: |
pip3 install -r misc/requirements.in
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/_job_nuitka-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
architecture: x64
- name: Install build dependencies
run: |
pip3 install nuitka
pip3 install nuitka ruff
- name: Install target dependencies
run: |
pip3 install -r misc/requirements.in
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/_job_pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
- name: Install build dependencies
run: |
pip3 install --upgrade pip
pip3 install twine setuptools setuptools-scm PySide6-Essentials
pip3 install twine setuptools setuptools-scm ruff PySide6-Essentials
- name: Prepare
shell: bash
env:
Expand Down
15 changes: 2 additions & 13 deletions rare/components/dialogs/install_dialog.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import os
import platform as pf
import shutil
from typing import Tuple, List, Union, Optional
from typing import Tuple, Optional

from PySide6.QtCore import QThreadPool, QSettings
from PySide6.QtCore import Signal, Slot
from PySide6.QtGui import QShowEvent
from PySide6.QtWidgets import QFileDialog, QCheckBox, QWidget, QFormLayout
from PySide6.QtWidgets import QFileDialog, QWidget, QFormLayout

from rare.models.game import RareGame
from rare.models.install import InstallDownloadModel, InstallQueueItemModel, InstallOptionsModel
Expand Down Expand Up @@ -368,14 +368,3 @@ def accept_handler(self):

def reject_handler(self):
self.__queue_item = InstallQueueItemModel(options=self.__options, download=None)


class TagCheckBox(QCheckBox):
def __init__(self, text, desc, tags: List[str], parent=None):
super(TagCheckBox, self).__init__(parent)
self.setText(text)
self.setToolTip(desc)
self.tags = tags

def isChecked(self) -> Union[bool, List[str]]:
return self.tags if super(TagCheckBox, self).isChecked() else False
2 changes: 1 addition & 1 deletion rare/components/dialogs/login/browser_login.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ def open_browser(self):
proc = QProcess(self)
proc.start(cmd[0], cmd[1:])
proc.waitForFinished(-1)
out, err = (
out, _ = (
proc.readAllStandardOutput().data().decode("utf-8", "ignore"),
proc.readAllStandardError().data().decode("utf-8", "ignore")
)
Expand Down
1 change: 0 additions & 1 deletion rare/components/tabs/downloads/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
from .download import DownloadWidget
from .groups import UpdateGroup, QueueGroup
from .thread import DlThread, DlResultModel, DlResultCode
from .widgets import UpdateWidget, QueueWidget

logger = getLogger("Download")

Expand Down
1 change: 0 additions & 1 deletion rare/components/tabs/library/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ def __init__(self, parent=None):
self.game_info_page.back_clicked.connect(lambda: self.setCurrentWidget(self.games_page))
# Update visibility of hidden games
self.game_info_page.back_clicked.connect(lambda: self.filter_games(self.head_bar.current_filter()))
self.game_info_page.back_clicked.connect(lambda: self.signals.application.update_tag_list.emit())
self.game_info_page.import_clicked.connect(self.show_import)
self.addWidget(self.game_info_page)

Expand Down
9 changes: 7 additions & 2 deletions rare/components/tabs/library/details/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from typing import Optional

from PySide6.QtCore import Qt, Signal
from PySide6.QtGui import QKeyEvent
from PySide6.QtGui import QKeyEvent, QShowEvent
from PySide6.QtWidgets import QTreeView

from rare.models.game import RareGame
Expand Down Expand Up @@ -94,12 +94,17 @@ def __init__(self, parent=None):
self.setModel(self.model)
self.rgame: Optional[RareGame] = None

def showEvent(self, event: QShowEvent):
if event.spontaneous():
return super().showEvent(event)
super().showEvent(event)

def update_game(self, rgame: RareGame, view):
self.rgame = rgame
self.set_title.emit(self.rgame.app_title)
self.model.clear()
try:
self.model.load(vars(view))
except Exception as e:
except Exception:
pass
self.resizeColumnToContents(0)
16 changes: 10 additions & 6 deletions rare/components/tabs/library/details/cloud_saves.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,6 @@ def __init__(self, parent=None):
self.sync_ui = Ui_CloudSyncWidget()
self.sync_ui.setupUi(self.sync_widget)

self.info_label = QLabel(self.tr("<b>This game doesn't support cloud saves</b>"))
self.info_label_not_installed = QLabel(self.tr("<b>Install this game to see cloud saves</b>"))

self.rcore = RareCore.instance()
self.core = RareCore.instance().core()
self.settings = QSettings()
Expand Down Expand Up @@ -83,11 +80,12 @@ def __init__(self, parent=None):

self.cloud_ui.sync_check.stateChanged.connect(self.__on_sync_check_changed)

self.info_label = QLabel(parent=self)

layout = QVBoxLayout(self)
layout.addWidget(self.sync_widget)
layout.addWidget(self.cloud_widget)
layout.addWidget(self.info_label)
layout.addWidget(self.info_label_not_installed)
layout.addSpacerItem(QSpacerItem(0, 0, QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Expanding))

@staticmethod
Expand Down Expand Up @@ -178,8 +176,14 @@ def __update_widget(self):
bool(saves_ready and self.rgame.save_path)) # and not self.rgame.is_save_up_to_date))

self.cloud_widget.setEnabled(saves_ready)
self.info_label.setVisible(not saves_ready and not supports_saves)
self.info_label_not_installed.setVisible(supports_saves and not self.rgame.is_installed)
info_text = (
self.tr("<b>This game doesn't support cloud saves</b>") if not supports_saves else (
self.tr("<b>This game supports cloud saves, but it's not installed</b>")
if self.rgame.igame is None else ""
)
)
self.info_label.setText(info_text)
self.info_label.setVisible(bool(info_text))
if not saves_ready:
self.sync_ui.date_info_local.setText("None")
self.sync_ui.age_label_local.setText("None")
Expand Down
69 changes: 59 additions & 10 deletions rare/components/tabs/library/details/compat.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,32 @@
import platform as pf
from logging import getLogger
from typing import Tuple

from PySide6.QtCore import Qt, Slot, QSignalBlocker
from PySide6.QtCore import QSignalBlocker, Qt, Slot
from PySide6.QtGui import QShowEvent
from PySide6.QtWidgets import QCheckBox, QFormLayout

from rare.components.tabs.settings.compat import CompatSettingsBase
from rare.components.tabs.settings.widgets.overlay import DxvkOverlaySettings, DxvkConfigSettings
from rare.components.tabs.settings.widgets.overlay import (
DxvkConfigSettings,
DxvkHudSettings,
DxvkNvapiDrsSettings,
)
from rare.components.tabs.settings.widgets.runner import RunnerSettingsBase
from rare.components.tabs.settings.widgets.wine import WineSettings
from rare.models.game import RareGame
from rare.utils import config_helper as config
from rare.utils import steam_grades
from rare.utils.paths import compat_shaders_dir
from rare.widgets.indicator_edit import (
ColumnCompleter,
IndicatorLineEdit,
IndicatorReasonsCommon,
)

if pf.system() in {"Linux", "FreeBSD"}:
from rare.components.tabs.settings.widgets.proton import ProtonSettings
from rare.components.tabs.settings.widgets.overlay import MangoHudSettings
from rare.components.tabs.settings.widgets.proton import ProtonSettings

logger = getLogger("LocalCompatSettings")

Expand Down Expand Up @@ -51,23 +62,54 @@ def __init__(self, parent=None):
self.shader_cache_check.setFont(font)
self.shader_cache_check.checkStateChanged.connect(self.__shader_cache_check_changed)

self.steam_appid_edit = IndicatorLineEdit(
placeholder=self.tr("Use in case the SteamAppID was not found automatically"),
edit_func=self.__steam_appid_edit_callback,
save_func=self.__steam_appid_save_callback,
parent=self,
)
self.__steam_appids, self.__steam_titles = steam_grades.load_steam_appids()
self.steam_appid_edit.setCompleter(ColumnCompleter(items=self.__steam_appids.items()))

form_layout = QFormLayout()
form_layout.addRow(self.tr("Shader cache"), self.shader_cache_check)
form_layout.addRow(self.tr("Steam AppID"), self.steam_appid_edit)

self.main_layout.addLayout(form_layout)

def showEvent(self, a0: QShowEvent):
if a0.spontaneous():
return super().showEvent(a0)

_ = QSignalBlocker(self.shader_cache_check)
caches = all((config.get_envvar(self.app_name, envvar, False) for envvar in {
"__GL_SHADER_DISK_CACHE_PATH", "MESA_SHADER_CACHE_DIR", "DXVK_STATE_CACHE_PATH", "VKD3D_SHADER_CACHE_PATH"
}))
_ = QSignalBlocker(self.shader_cache_check)
self.shader_cache_check.setChecked(caches)

_ = QSignalBlocker(self.steam_appid_edit)
self.steam_appid_edit.setText(str(self.rgame.steam_appid))
self.steam_appid_edit.setInfo(
self.__steam_titles[self.rgame.steam_appid] if self.rgame.steam_appid else ""
)
return super().showEvent(a0)

def __steam_appid_edit_callback(self, text: str) -> Tuple[bool, str, int]:
self.steam_appid_edit.setInfo("")
if not text:
return True, text, IndicatorReasonsCommon.UNDEFINED
if text in self.__steam_appids.keys():
return True, self.__steam_appids[text], IndicatorReasonsCommon.VALID
if text in self.__steam_titles.keys():
return True, text, IndicatorReasonsCommon.VALID
else:
return False, text, IndicatorReasonsCommon.GAME_NOT_EXISTS

def __steam_appid_save_callback(self, text: str) -> None:
self.steam_appid_edit.setInfo(self.__steam_titles[text] if text else "")
if text == self.rgame.steam_appid:
return
self.rgame.steam_appid = text
self.rgame.reset_steam_date()

@Slot(Qt.CheckState)
def __shader_cache_check_changed(self, state: Qt.CheckState):
for envvar in {
Expand All @@ -87,7 +129,7 @@ def load_settings(self, rgame: RareGame):
self.ctool.load_settings(rgame.app_name)


class LocalDxvkOverlaySettings(DxvkOverlaySettings):
class LocalDxvkHudSettings(DxvkHudSettings):
def load_settings(self, app_name: str):
self.app_name = app_name

Expand All @@ -96,21 +138,27 @@ class LocalDxvkConfigSettings(DxvkConfigSettings):
def load_settings(self, app_name: str):
self.app_name = app_name

class LocalDxvkNvapiDrsSettings(DxvkNvapiDrsSettings):
def load_settings(self, app_name: str):
self.app_name = app_name


class LocalCompatSettings(CompatSettingsBase):
def __init__(self, parent=None):
if pf.system() in {"Linux", "FreeBSD"}:
super(LocalCompatSettings, self).__init__(
dxvk_overlay_widget=LocalDxvkOverlaySettings,
dxvk_hud_widget=LocalDxvkHudSettings,
dxvk_config_widget=LocalDxvkConfigSettings,
dxvk_nvapi_drs_widget=LocalDxvkNvapiDrsSettings,
runner_widget=LocalRunnerSettings,
mangohud_widget=LocalMangoHudSettings,
parent=parent
)
else:
super(LocalCompatSettings, self).__init__(
dxvk_overlay_widget=LocalDxvkOverlaySettings,
dxvk_hud_widget=LocalDxvkHudSettings,
dxvk_config_widget=LocalDxvkConfigSettings,
dxvk_nvapi_drs_widget=LocalDxvkNvapiDrsSettings,
runner_widget=LocalRunnerSettings,
parent=parent
)
Expand All @@ -122,5 +170,6 @@ def load_settings(self, rgame: RareGame):
self.runner.load_settings(rgame)
if self.mangohud:
self.mangohud.load_settings(rgame.app_name)
self.dxvk_overlay.load_settings(rgame.app_name)
self.dxvk_hud.load_settings(rgame.app_name)
self.dxvk_config.load_settings(rgame.app_name)
self.dxvk_nvapi_drs.load_settings(rgame.app_name)
Loading