diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 8b612f69..2f8626f3 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,9 +1,6 @@ --- -name: Bug report -about: Create a report to help us improve -title: '' -labels: bug -assignees: '' +name: Bug report about: Create a report to help us improve title: '' +labels: bug assignees: '' --- @@ -12,6 +9,7 @@ A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: + 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' @@ -24,8 +22,9 @@ A clear and concise description of what you expected to happen. If applicable, add screenshots to help explain your problem. **System information (please complete the following information):** - - OS (e.g. Ubuntu 20.04 or Windows 10) - - Python version + +- OS (e.g. Ubuntu 20.04 or Windows 10) +- Python version **Additional context** Add any other context about the problem here. diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 643f779e..b1f2f247 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,10 +1,9 @@ - name: New Release on: release: types: [ published ] - + jobs: pypy-deploy: @@ -53,7 +52,7 @@ jobs: - uses: actions/setup-python@v2 with: python-version: '3.8' - - name: Install python deps + - name: Install python deps run: | pip3 install cx_Freeze setuptools wheel pip3 install -r requirements.txt @@ -71,7 +70,7 @@ jobs: overwrite: true deb-package: - runs-on: ubuntu-latest + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install Deps @@ -84,10 +83,10 @@ jobs: run: | python3 setup.py sdist python3 setup.py --command-packages=stdeb.command bdist_deb - + - name: move file run: mv deb_dist/*.deb Rare.deb - + - name: Upload files to GitHub uses: svenstaro/upload-release-action@2.2.1 with: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 06ecf4f8..b5ee5c10 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -4,7 +4,8 @@ ### Add translations -1. Execute ```pylupdate5 $(find -name "*.py") -ts Rare/languages/de.ts``` in source directory. Replace *de* with your language code +1. Execute ```pylupdate5 $(find -name "*.py") -ts Rare/languages/de.ts``` in source directory. Replace *de* with your + language code 2. Modify the .ts file manually or in Qt Linguist 3. Compile the file with ```lrelease Rare/languages/{lang}.ts``` @@ -18,11 +19,12 @@ examples: ### Add features -Select one Card of the project and implement it, or if you want to add another feature ask me on Discord, or create an issue on GitHub - +Select one Card of the project and implement it, or if you want to add another feature ask me on Discord, or create an +issue on GitHub ## Git crash-course -To contribute fork the repository and clone **your** repo. Then make your changes, add it to git with `git add File.xy` and upload it to GitHub with `git commit -m "message"` and `git push`. -Some IDEs can do this automatically. + +To contribute fork the repository and clone **your** repo. Then make your changes, add it to git with `git add File.xy` +and upload it to GitHub with `git commit -m "message"` and `git push`. Some IDEs can do this automatically. If you uploaded your changes, create a pull request diff --git a/README.md b/README.md index ff0486ab..fa755c21 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ ## A frontend for legendary, the open source Epic Games Launcher alternative -Rare is a GUI for Legendary, a command line aternative to Epic Games launcher. -It is currently considered beta software. You will probably run into issues, so it is -recommend to make a backup. If you run into an issue, please report it by creating an issue on github or on Discord: https://discord.gg/YvmABK9YSk +Rare is a GUI for Legendary, a command line aternative to Epic Games launcher. It is currently considered beta software. +You will probably run into issues, so it is recommend to make a backup. If you run into an issue, please report it by +creating an issue on github or on Discord: https://discord.gg/YvmABK9YSk ![Discord Shield](https://discordapp.com/api/guilds/826881530310819914/widget.png?style=shield) @@ -12,43 +12,51 @@ recommend to make a backup. If you run into an issue, please report it by creati ### Installation via pip (recommend) -Execute `pip install Rare` for all users Or `pip install Rare --user` for only one user. Then execute `rare` in your terminal or cmd +Execute `pip install Rare` for all users Or `pip install Rare --user` for only one user. Then execute `rare` in your +terminal or cmd -**Note**: On Linux must be `/home/user/.local/bin` in PATH and on Windows must be `PythonInstallationDirectory\Scripts` in PATH. +**Note**: On Linux must be `/home/user/.local/bin` in PATH and on Windows must be `PythonInstallationDirectory\Scripts` +in PATH. ### Windows Simple -Download Rare.exe from the [releases page](https://github.com/Dummerle/Rare/releases) and execute it. +Download Rare.exe from the [releases page](https://github.com/Dummerle/Rare/releases) and execute it. **Note:** -Using the exe file could cause errors with Windows Defender or other Anti Virus. Sometimes it is not possible to download games and sometimes the app crashes. In this case please use pip +Using the exe file could cause errors with Windows Defender or other Anti Virus. Sometimes it is not possible to +download games and sometimes the app crashes. In this case please use pip ### Linux #### Arch based There are some AUR packages available: - - [rare](https://aur.archlinux.org/packages/rare) - for stable releases - - [rare-git](https://aur.archlinux.org/packages/rare-git) - for the latest features, which are not in a stable release + +- [rare](https://aur.archlinux.org/packages/rare) - for stable releases +- [rare-git](https://aur.archlinux.org/packages/rare-git) - for the latest features, which are not in a stable release #### Debian based -There is a `.deb` package available from the [releases page](https://github.com/Dummerle/Rare/releases): `sudo dpkg –i Rare.deb` +There is a `.deb` package available from +the [releases page](https://github.com/Dummerle/Rare/releases): `sudo dpkg –i Rare.deb` #### Other Install via `pip`. ## Run from source -1. Run `pip install -r requirements.txt` to get dependencies. If you use `pacman` you can run `sudo pacman --needed -S python-wheel python-setuptools python-pyqt5 python-qtawesome python-requests python-pillow` + +1. Run `pip install -r requirements.txt` to get dependencies. If you use `pacman` you can + run `sudo pacman --needed -S python-wheel python-setuptools python-pyqt5 python-qtawesome python-requests python-pillow` 2. For unix operating systems run `sh start.sh`. For windows run `set PYTHONPATH=%CD% && python rare` ## Why Rare? -- Rare only uses ~50MB of RAM which is much less than the electron based [HeroicGamesLauncher](https://github.com/Heroic-Games-Launcher/HeroicGamesLauncher) uses. -- Rare supports all major platforms (Windows, Linux, Mac) unlike the alternatives. - -**Note** Mac should work too, but I have no Mac and I can't test it. +- Rare only uses ~50MB of RAM which is much less than the electron + based [HeroicGamesLauncher](https://github.com/Heroic-Games-Launcher/HeroicGamesLauncher) uses. +- Rare supports all major platforms (Windows, Linux, Mac) unlike the alternatives. + +**Note** Mac should work too, but I have no Mac and I can't test it. ## Features @@ -60,12 +68,14 @@ Install via `pip`. - Translations (English, German and French) ## Planned Features + - More Translations (Need help) -- More Information about Games -More planned features are in [projects](https://github.com/Dummerle/Rare/projects/1) +- More Information about Games More planned features are in [projects](https://github.com/Dummerle/Rare/projects/1) ## Contributing -There are more options to contribute. + +There are more options to contribute. + - If you can Python and PyQt you can implement new Features (Some ideas are in Projects). - If you are a designer, you can add Stylesheets or create a logo or a banner - You can translate the application in your language diff --git a/freeze.py b/freeze.py index 10fe3052..46ef2c61 100644 --- a/freeze.py +++ b/freeze.py @@ -24,18 +24,18 @@ if sys.platform == 'win32': base = 'Win32GUI' name = 'Rare.exe' shortcut_table = [ - ('DesktopShortcut', # Shortcut - 'DesktopFolder', # Directory - 'Rare', # Name - 'TARGETDIR', # Component - '[TARGETDIR]'+name, # Target - None, # Arguments - 'A gui for Legendary.', # Description - None, # Hotkey - None, # Icon - None, # IconIndex - None, # ShowCmd - 'TARGETDIR' # Working Directory + ('DesktopShortcut', # Shortcut + 'DesktopFolder', # Directory + 'Rare', # Name + 'TARGETDIR', # Component + '[TARGETDIR]' + name, # Target + None, # Arguments + 'A gui for Legendary.', # Description + None, # Hotkey + None, # Icon + None, # IconIndex + None, # ShowCmd + 'TARGETDIR' # Working Directory )] msi_data = {"Shortcut": shortcut_table} bdist_msi_options = {'data': msi_data, "all_users": True} @@ -44,9 +44,9 @@ else: name = 'Rare' src_files += [ - 'LICENSE', - 'README.md', - 'rare/styles/Logo.ico', + 'LICENSE', + 'README.md', + 'rare/styles/Logo.ico', ] # Dependencies are automatically detected, but it might need fine tuning. @@ -58,17 +58,17 @@ build_exe_options["excludes"] = ["setuptools", "tkinter", "pkg_resources"] # Set options build_options["build_exe"] = build_exe_options -setup(name = 'Rare', - version = __version__, - description = 'A gui for Legendary.', - options = build_options, - executables = [ - Executable('rare/__main__.py', - targetName=name, - icon='rare/styles/Logo.ico', - base=base, - shortcutName=shortcutName, - shortcutDir=shortcutDir, - ), - ], -) +setup(name='Rare', + version=__version__, + description='A gui for Legendary.', + options=build_options, + executables=[ + Executable('rare/__main__.py', + targetName=name, + icon='rare/styles/Logo.ico', + base=base, + shortcutName=shortcutName, + shortcutDir=shortcutDir, + ), + ], + ) diff --git a/rare/components/tab_widget.py b/rare/components/tab_widget.py index 39e51a83..c575d051 100644 --- a/rare/components/tab_widget.py +++ b/rare/components/tab_widget.py @@ -3,20 +3,17 @@ import webbrowser from PyQt5.QtCore import QSize, pyqtSignal from PyQt5.QtWidgets import QMenu, QTabWidget, QWidget, QWidgetAction from qtawesome import icon -from rare.utils import legendary_utils from custom_legendary.core import LegendaryCore - from rare.components.dialogs.install_dialog import InstallDialog - from rare.components.dialogs.uninstall_dialog import UninstallDialog - from rare.components.tab_utils import TabBar, TabButtonWidget from rare.components.tabs.account import MiniWidget from rare.components.tabs.cloud_saves import SyncSaves from rare.components.tabs.downloads import DownloadTab from rare.components.tabs.games import GameTab from rare.components.tabs.settings import SettingsTab +from rare.utils import legendary_utils from rare.utils.models import InstallOptions @@ -98,7 +95,6 @@ class TabWidget(QTabWidget): self.tabBarClicked.connect(lambda x: self.games_tab.layout.setCurrentIndex(0) if x == 0 else None) self.setIconSize(QSize(25, 25)) - def install_game(self, app_name, disable_path=False): infos = InstallDialog(app_name, self.core, disable_path).get_information() @@ -141,6 +137,7 @@ class TabWidget(QTabWidget): downloads = len(self.downloadTab.dl_queue) + len(self.downloadTab.update_widgets.keys()) self.setTabText(1, "Downloads" + ((" (" + str(downloads) + ")") if downloads != 0 else "")) self.downloadTab.update_text.setVisible(len(self.downloadTab.update_widgets) == 0) + # Update gamelist and set text of Downlaods to "Downloads" def dl_finished(self, update_list): diff --git a/rare/components/tabs/downloads/__init__.py b/rare/components/tabs/downloads/__init__.py index 1cbb3ebe..5ca1a62e 100644 --- a/rare/components/tabs/downloads/__init__.py +++ b/rare/components/tabs/downloads/__init__.py @@ -75,7 +75,6 @@ class DownloadTab(QWidget): self.update_text.setVisible(len(updates) == 0) for igame in updates: - self.add_update(igame) self.layout.addStretch(1) @@ -143,12 +142,15 @@ class DownloadTab(QWidget): return if self.active_game is None: - self.start_installation(dlm, game, status_queue, igame, repair_file, options, analysis, options.download_only) + self.start_installation(dlm, game, status_queue, igame, repair_file, options, analysis, + options.download_only) else: - self.dl_queue.append((dlm, game, status_queue, igame, repair_file, options, analysis, options.download_only)) + self.dl_queue.append( + (dlm, game, status_queue, igame, repair_file, options, analysis, options.download_only)) self.queue_widget.update_queue(self.dl_queue) - def start_installation(self, dlm, game, status_queue, igame, repair_file, options: InstallOptions, analysis, dl_only): + def start_installation(self, dlm, game, status_queue, igame, repair_file, options: InstallOptions, analysis, + dl_only): if self.dl_queue: self.dl_queue.pop(0) self.queue_widget.update_queue(self.dl_queue) @@ -266,7 +268,8 @@ class DownloadTab(QWidget): def statistics(self, ui_update: UIUpdate): self.prog_bar.setValue(ui_update.progress) self.dl_speed.setText(self.tr("Download speed") + f": {get_size(ui_update.download_speed)}/s") - self.cache_used.setText(self.tr("Cache used") + f": {get_size(ui_update.cache_usage) if ui_update.cache_usage > 1023 else '0KB'}") + self.cache_used.setText( + self.tr("Cache used") + f": {get_size(ui_update.cache_usage) if ui_update.cache_usage > 1023 else '0KB'}") self.downloaded.setText( self.tr("Downloaded") + f": {get_size(ui_update.total_downloaded)} / {get_size(self.analysis.dl_size)}") self.time_left.setText(self.tr("Time left: ") + self.get_time(ui_update.estimated_time_left)) @@ -308,7 +311,9 @@ class UpdateWidget(QWidget): self.update_with_settings.clicked.connect(lambda: self.update_game(False)) self.layout.addWidget(self.update_button) self.layout.addWidget(self.update_with_settings) - self.layout.addWidget(QLabel(self.tr("Version: ") + self.game.version + " -> " + self.core.get_asset(self.game.app_name, True).build_version)) + self.layout.addWidget(QLabel( + self.tr("Version: ") + self.game.version + " -> " + self.core.get_asset(self.game.app_name, + True).build_version)) self.setLayout(self.layout) diff --git a/rare/components/tabs/downloads/download_thread.py b/rare/components/tabs/downloads/download_thread.py index 0c68c712..195ff932 100644 --- a/rare/components/tabs/downloads/download_thread.py +++ b/rare/components/tabs/downloads/download_thread.py @@ -121,7 +121,7 @@ class DownloadThread(QThread): return self.status.emit("dl_finished") end_t = time.time() - logger.info(f"Download finished in {start_time-end_t}s") + logger.info(f"Download finished in {start_time - end_t}s") game = self.core.get_game(self.igame.app_name) if not self.dl_only: diff --git a/rare/components/tabs/games/game_info/__init__.py b/rare/components/tabs/games/game_info/__init__.py index 790d5dfb..465fd8b6 100644 --- a/rare/components/tabs/games/game_info/__init__.py +++ b/rare/components/tabs/games/game_info/__init__.py @@ -8,11 +8,9 @@ from qtawesome import icon from custom_legendary.core import LegendaryCore from custom_legendary.models.game import InstalledGame, Game -from rare.components.dialogs.uninstall_dialog import UninstallDialog from rare.components.tabs.games.game_info.dlcs import DlcTab from rare.components.tabs.games.game_info.game_settings import GameSettings from rare.ui.components.tabs.games.game_info.game_info import Ui_GameInfo -from rare.utils import legendary_utils from rare.utils.extra_widgets import SideTabBar from rare.utils.legendary_utils import VerifyThread from rare.utils.utils import IMAGE_DIR, get_size diff --git a/rare/components/tabs/games/game_list.py b/rare/components/tabs/games/game_list.py index 771beeb9..36b56942 100644 --- a/rare/components/tabs/games/game_list.py +++ b/rare/components/tabs/games/game_list.py @@ -78,13 +78,13 @@ class GameList(QStackedWidget): self.icon_layout.addWidget(icon_widget) self.list_layout.addWidget(list_widget) - self.uninstalled_names = [] + self.uninstalled_games = [] installed = [i.app_name for i in self.core.get_installed_list()] # get Uninstalled games games, self.dlcs = self.core.get_game_and_dlc_list() for game in sorted(games, key=lambda x: x.app_title): if not game.app_name in installed: - self.uninstalled_names.append(game) + self.uninstalled_games.append(game) # add uninstalled games @@ -126,10 +126,10 @@ class GameList(QStackedWidget): pixmap = QPixmap(f"{self.IMAGE_DIR}/{game.app_name}/UninstalledArt.png") icon_widget = IconWidgetUninstalled(game, self.core, pixmap) - icon_widget.install_game.connect(self.install) + icon_widget.show_uninstalled_info.connect(self.show_install_info) list_widget = ListWidgetUninstalled(self.core, game, pixmap) - list_widget.install_game.connect(self.install) + list_widget.show_uninstalled_info.connect(self.show_install_info) self.widgets[game.app_name] = (icon_widget, list_widget) @@ -207,16 +207,9 @@ class GameList(QStackedWidget): return True, pid return False, 0 - def install(self, app_name): + def show_install_info(self, app_name): self.show_uninstalled_info.emit(app_name) - # icon_widget, list_widget = self.widgets[options.app_name] - # icon_widget.mousePressEvent = lambda e: None - # icon_widget.installing = True - # list_widget.install_button.setDisabled(True) - # list_widget.installing = True - # self.install_game.emit(options) - def finished(self, app_name): self.running_games.remove(app_name) self.active_game = ("", 0) @@ -284,7 +277,8 @@ class GameList(QStackedWidget): widgets[0].info_label.setText("") widgets[0].info_text = "" # new installed - elif self.core.is_installed(widgets[0].game.app_name) and not isinstance(widgets[0], BaseInstalledWidget): + elif self.core.is_installed(widgets[0].game.app_name) and not isinstance(widgets[0], + BaseInstalledWidget): self.widgets.pop(widgets[0].game.app_name) # QWidget().setLayout(self.icon_layout) @@ -337,7 +331,8 @@ class GameList(QStackedWidget): self.update() # uninstalled - elif not self.core.is_installed(widgets[0].game.app_name) and isinstance(widgets[0], BaseInstalledWidget): + elif not self.core.is_installed(widgets[0].game.app_name) and isinstance(widgets[0], + BaseInstalledWidget): self.list_layout.removeWidget(widgets[1]) self.icon_layout.removeWidget(widgets[0]) @@ -397,5 +392,3 @@ class GameList(QStackedWidget): i_widget, list_widget = self.widgets[name] self.icon_layout.addWidget(i_widget) self.list_layout.addWidget(list_widget) - - diff --git a/rare/components/tabs/games/game_widgets/base_installed_widget.py b/rare/components/tabs/games/game_widgets/base_installed_widget.py index db8f9650..b14acbf6 100644 --- a/rare/components/tabs/games/game_widgets/base_installed_widget.py +++ b/rare/components/tabs/games/game_widgets/base_installed_widget.py @@ -1,4 +1,3 @@ -import logging import os from logging import getLogger diff --git a/rare/components/tabs/games/game_widgets/base_uninstalled_widget.py b/rare/components/tabs/games/game_widgets/base_uninstalled_widget.py index 61927c44..11161cac 100644 --- a/rare/components/tabs/games/game_widgets/base_uninstalled_widget.py +++ b/rare/components/tabs/games/game_widgets/base_uninstalled_widget.py @@ -3,7 +3,6 @@ from logging import getLogger from PyQt5.QtCore import pyqtSignal from PyQt5.QtWidgets import QGroupBox - logger = getLogger("Uninstalled") diff --git a/rare/components/tabs/games/game_widgets/uninstalled_icon_widget.py b/rare/components/tabs/games/game_widgets/uninstalled_icon_widget.py index 22bdaeb6..afa5bbef 100644 --- a/rare/components/tabs/games/game_widgets/uninstalled_icon_widget.py +++ b/rare/components/tabs/games/game_widgets/uninstalled_icon_widget.py @@ -1,13 +1,11 @@ from logging import getLogger -from PyQt5.QtCore import pyqtSignal from PyQt5.QtWidgets import QVBoxLayout, QLabel from custom_legendary.core import LegendaryCore from custom_legendary.models.game import Game from rare.components.tabs.games.game_widgets.base_uninstalled_widget import BaseUninstalledWidget from rare.utils.extra_widgets import ClickableLabel -from rare.utils.models import InstallOptions logger = getLogger("Uninstalled") diff --git a/rare/components/tabs/games/import_widget.py b/rare/components/tabs/games/import_widget.py index ddb8978c..05048f02 100644 --- a/rare/components/tabs/games/import_widget.py +++ b/rare/components/tabs/games/import_widget.py @@ -1,10 +1,9 @@ import json import os -import string from logging import getLogger from PyQt5.QtCore import pyqtSignal -from PyQt5.QtWidgets import QWidget, QLabel, QHBoxLayout, QPushButton, QVBoxLayout, QFileDialog, QMessageBox, QLineEdit, \ +from PyQt5.QtWidgets import QWidget, QLabel, QHBoxLayout, QPushButton, QVBoxLayout, QFileDialog, QLineEdit, \ QGroupBox from qtawesome import icon @@ -71,7 +70,8 @@ class ImportWidget(QWidget): self.layout.addWidget(self.import_one_game) - self.auto_import = QLabel(f"

{self.tr('To import games from Epic Games Store, please enable EGL Sync in legendary settings')}

") + self.auto_import = QLabel( + f"

{self.tr('To import games from Epic Games Store, please enable EGL Sync in legendary settings')}

") self.layout.addWidget(self.auto_import) self.layout.addStretch(1) diff --git a/rare/components/tabs/settings/rare.py b/rare/components/tabs/settings/rare.py index 33d4363d..63131979 100644 --- a/rare/components/tabs/settings/rare.py +++ b/rare/components/tabs/settings/rare.py @@ -34,7 +34,7 @@ class RareSettings(QWidget, Ui_RareSettings): (self.auto_sync_cloud, "auto_sync_cloud", True), (self.notification, "notification", True), (self.save_size, "save_size", False) - ] + ] self.settings = QSettings() self.img_dir_path = self.settings.value("img_dir", os.path.expanduser("~/.cache/rare/images/"), type=str) diff --git a/rare/languages/de.ts b/rare/languages/de.ts index 3d692ad8..7341d015 100644 --- a/rare/languages/de.ts +++ b/rare/languages/de.ts @@ -79,7 +79,7 @@ Dies ist eine Betaversion, also können Bugs und andere Unschönheiten auftreten. Falls ein Bug auftritt, bitte auf <a href='https://github.com/Dummerle/Rare/issues'>Github</a> melden oder auf Discord. (Dummerle#7419). Ein Rare <a href='https://discord.gg/YvmABK9YSk'>Discord server</a> existiert ebenfalls - + <h2>About</h2> <h2>Über</h2> @@ -87,12 +87,12 @@ App - + Download finished Download abgeschlossen - + Download finished. Game is playable now Downlaod abgeschlossen. Spiel kann jetzt gespielt werden @@ -100,57 +100,57 @@ BaseInstalledWidget - + Do you want to launch {} Möchtest du {} starten - + Launch Starten - + Remove Desktop link Desktop Verknüpfung löschen - + Create Desktop link Desktopverknüpfung erstellen - + Remove start menu link Startmenüverknüpfung löschen - + Create start menu link Startmenüverknüpfung erstellen - + Uninstall Deinstallieren - + Remove Start menu link Startmenüverknüpfung löschen - + Create Start menu link Startmenüverknüpfung erstellen - + An error occurred while starting game. Maybe game files are missing Ein Fehler ist passiert. Vielleicht fehlen die Spieldateien - + Game cannot run offline. Please start game in Online mode Spiel kann nicht offline gestartet werden. Starte die App im Online Mode neu @@ -181,17 +181,17 @@ DLCWidget - + Install Installieren - + Installed. Uninstalling DLCs is not supported Installiert. Das Deinstallieren von DLCs wird nicht unterstützt - + Installing Installieren @@ -253,27 +253,27 @@ DlcTab - + Installed DLCs Installierte DLCs - + Available DLCs Verfügbare DLCs - + No DLCs are installed Keine DLCs sind installiert - + No DLCs are available Keine weiteren DLCs verfügbar - + Base Game is not installed. Please install {} first Basisspiel ist nicht installiert. Bitte installiere zuerst {} @@ -296,52 +296,52 @@ Keine Updates verfügbar - + Error preparing download Fehler beim Vorbereiten des Downloads - + Download size is 0. Game already exists Die Größe des Downloads ist 0. Spiel existiert bereits - + Installation finished Installation abgeschlossen - + Installing Game: No active download Installierendes Spiel: Kein aktiver Download - + Download speed Geschwindigkeit - + Cache used Benutzter Cache - + Downloaded Runtergeladen - + Time left: Zeit übrig: - + Finished Download of game {} Download von {} abgeschlossen - + Download finished. Reload library Download abgeschlossen. Spiele neu laden @@ -361,7 +361,7 @@ Keine - + Installing Game: Installierendes Spiel: @@ -416,7 +416,7 @@ Frame Time graph - + @@ -536,12 +536,12 @@ GameInfo - + Repair file does not exist or game does not need a repair. Please verify game first Reparationsdatei existiert nicht oder das Spiel braucht keine Reperatur. Bitte das spiel zuerst überprüfen - + Verification failed, {} file(s) corrupted, {} file(s) are missing. Do you want to repair them? Überprüfung fehlgeschlagen, {} Datei(en) fehlerhaft, {} Datei(en) fehlen. Willst du das Spiel reparieren? @@ -621,32 +621,32 @@ ProtonDB Wertung - + Platimum Platin - + Gold Gold - + Silver Silber - + Bronze Bronze - + Could not get grade from ProtonDB Konnte nicht die Wertung finden - + Error Fehler @@ -654,22 +654,22 @@ GameList - + Launch Starten - + Game running Spiel läuft - + Installed Games: {} Available Games: {} Installierte Spiele: {} Verfügbare Spiele: {} - + Sync CLoud saves Spielstand synchronisieren @@ -677,20 +677,35 @@ GameListHeadBar - + Installed only Nur Installierte - + Import Game Spiel importieren - + Search Game Spiel suchen + + + All + Alle + + + + Offline Games + Offline Spiele + + + + 32 Bit Games + 32 Bit Spiele + GameSettings @@ -851,12 +866,12 @@ Spiel installieren - + Installation running Installation läuft - + Game Info Spielinfo @@ -894,24 +909,24 @@ Keine valide Session gefunden - + Back Zurück - + Select path to game Wähle den Pfad zum Spiel - + Import Game Spiel importieren Import all games from Epic Games Launcher - Alle Spiele aus dem Epic Games Launcher importieren + Alle Spiele aus dem Epic Games Launcher importieren @@ -921,58 +936,63 @@ Override app name (Only if imported game from legendary or the app could not find the app name) - App Name überschreiben (Nur falls das Spiel von Legendary importiert wird oder der App Name nicht gefunden wird + App Name überschreiben (Nur falls das Spiel von Legendary importiert wird oder der App Name nicht gefunden wird - + Could not find app name Konnte den Appnamen nicht finden - + Successfully imported {}. Reload library Erfolgreich {} importiert. Spiele neu laden - + Failed to import {} {} Konnte nicht importiert werden Successfully imported {} Games. Reloading Library - Erfolgreich {} Spiele importiert. Spiele neu laden + Erfolgreich {} Spiele importiert. Spiele neu laden - + Import existing game from Epic Games Launcher Ein bereits existierendes Spiel aus dem Epic Games Launcher importieren No Games were found - Keine Spiele wurden gefunden + Keine Spiele wurden gefunden + + + + Override app name (Only if the app could not find the app name) + Appnamen überschreiben. (Nur wenn dieser nicht gefunden werden kann) InfoTabs - + Back Zurück - + Game Info Spielinfo - + Settings Einstellungen - + DLCs DLCs @@ -980,25 +1000,30 @@ InstallDialog - + Max workers (0: Default) Maximale Anzahl Downloadprozessen(Standard: 0) - + <h3>Install {}</h3> <h3>Installiere {}</h3> - + Force download Download erzwingen - + Ignore free space (Warning!) Freien Speicherplatz ignorieren (Achtung!) + + + Do not install game + Das Spiel nicht installieren + InstallInfoDialog @@ -1006,19 +1031,26 @@ Download size: {}GB Install size: {}GB - Downloadgröße: {}GB + Downloadgröße: {}GB Installationsgröße: {} GB - + Install Installieren - + Cancel Abbruch + + + Download size: {} +Install size: {} + Download Größe: {} +Installierte Größe: {} + InstalledListWidget @@ -1043,30 +1075,50 @@ Installationsgröße: {} GB Launching Rare - Starte Rare + Starte Rare Logging in - Einloggen + Einloggen - + Downloading Images Bilder runterladen - + Starting... Starten... + + + Dialog + Dialog + + + + <h2>Launching Rare</h2> + <h2>Starte Rare</h2> + + + + Downloading images + Bilder herunterladen + + + + Getting Steam grades + Lade Steamdaten + LaunchThread Downloading Images - Bilder runterladen + Bilder runterladen @@ -1219,17 +1271,17 @@ Installationsgröße: {} GB MangoHUD settings - MangoHUD Einstellungen + MangoHUD Einstellungen CPU temperature - CPU Temperatur + CPU Temperatur GPU temperature - GPU Temperatur + GPU Temperatur @@ -1270,12 +1322,12 @@ Installationsgröße: {} GB PathEdit - + Browse... - + Suchen... @@ -1377,7 +1429,6 @@ Installationsgröße: {} GB Ordner für Bilder - Language Sprache @@ -1515,7 +1566,7 @@ Installationsgröße: {} GB Open Log directory - Ordner für Logs öffnen + Logordner öffnen @@ -1527,10 +1578,18 @@ Installationsgröße: {} GB Behavior Optionen + + + SteamThread - - Open Log directory - + + Getting data from ProtonDB + Daten aus ProtonDB holen + + + + Checking Games for data + Daten überprüfen @@ -1672,7 +1731,7 @@ Installationsgröße: {} GB TabWidget - + Games Spiele @@ -1716,37 +1775,37 @@ Installationsgröße: {} GB UninstalledInfo - + Platinum Platin - + Gold Gold - + Silver Silber - + Bronze Bronze - + Could not get grade from ProtonDB Konnte nicht die Wertung finden - + Install Installieren - + Rating from ProtonDB: ProtonDB Wertung: @@ -1756,12 +1815,12 @@ Installationsgröße: {} GB Back - ZurückZurück + Zurück Game Info - SpielinfoSpielinfo + Spielinfo @@ -1772,17 +1831,22 @@ Installationsgröße: {} GB UpdateWidget - + Update Game Spiel updaten + + + Version: + Version: + legendary_settings StackedWidget - + diff --git a/rare/languages/fr.ts b/rare/languages/fr.ts index 2aa8f3d8..1c34efb1 100644 --- a/rare/languages/fr.ts +++ b/rare/languages/fr.ts @@ -1,818 +1,1806 @@ - - +< ? xml version = "1.0" +encoding = "utf-8" ? +> + - About - - - Developer: - Développeur - - - - Legendary developer: - Legendary Développeur - - - - This is a beta version, so you can get bugs. If you get a bug, please report it by creating a Issue on <a href='https://github.com/Dummerle/Rare/issues'>Github</a>. You can also contact me on Discord (Dummerle#7419). Or you can join the <a href='https://discord.gg/YvmABK9YSk'>Discord server</a> - Il s'agit d'une version bêta, vous pouvez donc rencontrer des bogues. Si vous rencontrez un bug, veuillez le signaler en créant un Issue sur <a href='https://github.com/Dummerle/Rare/issues'>Github</a>. Vous pouvez également me contacter sur Discord (Dummerle#7419). Ou vous pouvez rejoindre le <a href='https://discord.gg/YvmABK9YSk'>serveur Discord</a> - - - - BaseInstalledWidget - - - Do you want to launch {} - Voulez-vous lancer {} - - - - BrowserLogin - - - Opens a browser. You login and copy the json code in the field below. Click <a href='{}'>here</a> to open Browser - Ouvre un navigateur. Vous vous connectez et copiez le code json dans le champ ci-dessous. Cliquez <a href='{}'>here</a> pour ouvrir un navigateur - - - - Insert SID here - Insérer le SID ici - - - - Login - Login - - - - Loading... - charge... - - - - DownloadTab - - - No active Download - Aucun téléchargement actif - - - - Stop Download - Stop Télécharger - - - - No updates available - Aucune mise à jour disponible - - - - Error preparing download - Erreur lors de la préparation du téléchargement - - - - Download size is 0. Game already exists - La taille du téléchargement est de 0. Le jeu existe déjà - - - - Installing game: - Installation du jeu: - - - - Installation finished - Installation terminée - - - - Finished Download of game {} - Fin du téléchargement du jeu {} - - - - Installing Game: No active download - Installation du jeu: Aucun téléchargement actif - - - - Download speed - Vitesse de téléchargement - - - - Cache used - Cache utilisé - - - - Downloaded - Téléchargé - - - - Time left: - Il reste du temps: - - - - DxvkWidget - - - GPU usage - GPU Utilisation - - - - Used Memory - utilisé Memory - - - - Device info - Info sur le dispositif - - - - DXVK version - DXVK version - - - - D3D Level of application - D3D Niveau d'application - - - - Frame time graph - Graphique de temps de trame - - - - dxvk settings - dxvk paramètres - - - - GameActions - - - Uninstall game - Désinstaller le jeu - - - - Uninstall - Désinstaller - - - - Verify Game - Vérifier le jeu - - - - Verify - Vérifier - - - - Repair Game - Jeu de réparation - - - - Repair - Réparation - - - - GameInfo - - - Are you sure to uninstall {} - Etes-vous sûr de désinstaller {} - - - - Repair file does not exist or game does not need a repair. Please verify game first - Le fichier de réparation n'existe pas ou le jeu ne nécessite pas de réparation. Veuillez d'abord vérifier le jeu. - - - - Verification failed, {} file(s) corrupted, {} file(s) are missing. Do you want to repair them? - La vérification a échoué, {} fichier(s) corrompu(s), {} fichier(s) manquant(s). Voulez-vous les réparer ? - - - - Developer: - Développeur: - - - - Install size: - Taille d'installation: - - - - Install path: - Chemin d'installation: - - - - GameList - - - Installed Games: {} Available Games: {} - Jeux installés: {} Jeux disponibles: {} - - - - Launch - Lancer - - - - Game running - Jeu en cours - - - - GameListHeadBar - - - Installed only - Installé uniquement - - - - Import Game - Jeu d'importation - - - - Search Game - Rechercher un jeu - - - - GameSettings - - - Launch Game offline - Lancer le jeu hors ligne - - - - Skip update check before launching - Sauter la vérification de la mise à jour avant le lancement - - - - Save - Sauvez - - - - Wrapper (e.g. optirun) - Wrapper (p.e. optirun) - - - - Proton Wrapper - Enveloppeur de Proton - - - - Proton prefix - Préfixe du proton - - - - No permission to create folder - Pas de permission pour créer un dossier - - - - Please select path for proton prefix - Veuillez sélectionner le chemin pour le préfixe proton - - - - GameWidgetInstalled - - - Update available - Mise à jour disponible - - - - Start game without version check - Démarrer le jeu sans vérifier la version - - - - Game running - Jeu en cours - - - - IconWidgetUninstalled - - - Install Game - Installer le jeu - - - - ImportWidget - - - Import - Importer - - - - Could not find EGL program data - Impossible de trouver les données du programme EGL - - - - Found EGL program Data. Do you want to import them? - Les données du programme EGL ont été trouvées. Voulez-vous les importer ? - - - - Could not find any Epic Games login data - Impossible de trouver les données de connexion d'Epic Games - - - - Loading... - Chargement... - - - - Error: No valid session found - Erreur : Aucune session valide n'a été trouvée - - - - Back - Dos - - - - Select path to game - Sélectionnez le chemin vers le jeu - - - - Override app name (Only if imported game from legendary or the app could not find the app name) - Remplacer le nom de l'application (uniquement si le jeu a été importé depuis le légendaire ou si l'application n'a pas pu trouver le nom de l'application) - - - - Import Game - Import jeu - - - - Import all games from Epic Games Launcher - Importer tous les jeux du Epic Games Launcher - - - - Could not find app name - Impossible de trouver le nom de l'application - - - - Successfully imported {}. Reload library - Importation réussie de {}. Recharger la bibliothèque - - - - Failed to import {} - Impossible d'importer {} - - - - Successfully imported {} Games. Reloading Library - Importation réussie de {} Jeux. Bibliothèque de rechargement - - - - InfoTabs - - - Back - Dos - - - - Game Info - Info de jeu - - - - Settings - Paramètres - - - - InstallDialog - - - <h3>Install {}</h3> - <h3>Installer {}</h3> - - - - Max workers (0: Default) - Travailleurs maximum (0: Par défaut) - - - - Force download - Téléchargement forcé - - - - Ignore free space (Warning!) - Ignorer l'espace libre (Attention!) - - - - InstallInfoDialog - - - Download size: {}GB -Install size: {}GB - Taille du téléchargement: {}GB -Taille de l'installation: {}GB - - - - Install - Installer - - - - Cancel - Annuler - - - - InstalledListWidget - - - Launch - Lancer - - - - Developer: - Développeur: - - - - LaunchDialog - - - Launching Rare - Lancer Rare - - - - Logging in - Se connecter - - - - Downloading Images - Téléchargement d'images - - - - Starting... - Démarrage... - - - - LaunchThread - - - Downloading Images - Téléchargement d'images - - - - LegendarySettings - - - Legendary settings - Legendary paramètres - - - - Default installation directory - Répertoire d'installation par défaut - - - - Max workers for Download (Less: slower download)(0: Default) - Nombre maximum de travailleurs pour le téléchargement (Moins: téléchargement plus lent)(0: Défaut) - - - - Cleanup - Nettoyage - - - - Remove everything - Enlever tout - - - - Clean, but keep manifests - Nettoyer, mais garder les manifestes - - - - Cleanup complete! Successfully removed {} MB - Nettoyage terminé ! J'ai réussi à supprimer {} MB - - - - LinuxSettings - - - Linux settings - Linux paramètres - - - - Default Wine Prefix - Défaut Wine Prefix - - - - Default Wine executable - Défaut Wine exécutable - - - - ListWidgetUninstalled - - - Install - Installer - - - - LoginDialog - - - Select one option to Login - Sélectionnez une option pour vous connecter - - - - Use Browser - Utiliser le navigateur - - - - This opens your default browser. Login and copy the text - Cela ouvre votre navigateur par défaut. Connectez-vous et copiez le texte - - - - MiniWidget - - - Logged in as - Connecté en tant que - - - - Account settings - paramètres du compte - - - - Logout - Déconnexion - - - - Do you really want to logout - Voulez-vous vraiment vous déconnecter? - - - - PathEdit - - - Select Path - Sélectionner le chemin - - - - Choose Path - Choisir le chemin - - - - PathInputDialog - - - Cancel - Annuler - - - - RareSettings - - - Rare settings - Rare paramètres - - - - Save - Sauvez - - - - Image Directory - Répertoire d'images - - - - Language - Langue - - - - Confirm launch of game - Confirmation du lancement du jeu - - - - Restart Application to activate changes - Redémarrez l'application pour activer les changements - - - - SyncSaves - - - Cloud Saves - Cloud Saves - - - - Found Saves for folowing Games - Sauvegardes trouvées pour les jeux suivants - - - - Your games does not support Cloud Saves - Vos jeux ne prennent pas en charge les sauvegardes en nuage - - - - Sync all games - Sync tous les jeux - - - - Found no savepath - Pas de chemin de sauvegarde trouvé - - - - No save path was found. Please select path or skip - Aucun chemin de sauvegarde n'a été trouvé. Veuillez sélectionner le chemin ou passer - - - - SyncWidget - - - Path not found - Chemin non trouvé - - - - Local Save date: - Local Save date: - - - - No Local Save files - Pas de fichiers de sauvegarde locaux - - - - Cloud save date: - Cloud save date: - - - - No Cloud saves - Pas Cloud saves - - - - Game is up to date - Le jeu est à jour - - - - Upload anyway - Télécharger quand même - - - - Download anyway - Télécharger en tout cas - - - - Cloud save is newer - La sauvegarde en nuage est plus récente - - - - Download Cloud saves - Télécharger Cloud saves - - - - Upload Saves - Upload Saves - - - - Local save is newer - La sauvegarde locale est plus récente - - - - Upload saves - Upload Saves - - - - Download saves - Télécharger les sauvegardes - - - - Change path - Changement de trajectoire - - - - Uploading... - Téléchargement... - - - - Upload finished - Téléchargement terminé - - - - Downloading... - Téléchargement... - - - - Download finished - Téléchargement terminé - - - - TabWidget - - - Games - Jeus - - - - UpdateWidget - - - Update Game - Jeu de mise à jour - - - + About < /name> +< message > + + Developer +: + +< translation > Développeur < /translation> +< /message> +< message > + + Legendary +developer: +< translation > Legendary +Développeur < /translation> +< /message> +< message > + + This +is +a +beta +version, so +you +can +get +bugs.If +you +get +a +bug, please +report +it +by +creating +a +Issue +on < a +href = +& +apos; +https://github.com/Dummerle/Rare/issues'>Github</a>. You can also contact me on Discord (Dummerle#7419). Or you can join the <a href='https://discord.gg/YvmABK9YSk'>Discord server</a> + Il +s +'agit d' +une +version +bêta, vous +pouvez +donc +rencontrer +des +bogues.Si +vous +rencontrez +un +bug, veuillez +le +signaler +en +créant +un +Issue +sur < a +href = +& +apos; +https://github.com/Dummerle/Rare/issues'>Github</a>. Vous pouvez également me contacter sur Discord (Dummerle#7419). Ou vous pouvez rejoindre le <a href='https://discord.gg/YvmABK9YSk'>serveur Discord</a> + + < /context> + < context > + BaseInstalledWidget < /name> + < message > + + Do +you +want +to +launch +{ +} + +< translation > Voulez - vous +lancer +{ +} + +< /message> +< /context> +< context > +BrowserLogin < /name> +< message > + + Opens +a +browser.You +login +and +copy +the +json +code in the +field +below.Click < a +href = +& +apos; +{ +} +& +apos; +> +here < /a> to open Browser +Ouvre +un +navigateur.Vous +vous +connectez +et +copiez +le +code +json +dans +le +champ +ci - dessous.Cliquez < a +href = +& +apos; +{ +} +& +apos; +> +here < /a> pour ouvrir un navigateur + +< message > + + Insert +SID +here < /source> +< translation > Insérer +le +SID +ici < /translation> +< /message> +< message > + +Login < /source> +< translation > Login < /translation> +< /message> +< message > + + Loading +... + +< translation > charge +... + +< /message> +< /context> +< context > +DownloadTab < /name> +< message > + + No +active +Download < /source> +< translation > Aucun +téléchargement +actif < /translation> +< /message> +< message > + + Stop +Download < /source> +< translation > Stop +Télécharger < /translation> +< /message> +< message > + + No +updates +available < /source> +< translation > Aucune +mise +à +jour +disponible < /translation> +< /message> +< message > + + Error +preparing +download < /source> +< translation > Erreur +lors +de +la +préparation +du +téléchargement < /translation> +< /message> +< message > + + Download +size +is +0. +Game +already +exists < /source> +< translation > La +taille +du +téléchargement +est +de +0. +Le +jeu +existe +déjà < /translation> +< /message> +< message > + + Installing +game: +< translation > Installation +du +jeu: +< /message> +< message > + + Installation +finished < /source> +< translation > Installation +terminée < /translation> +< /message> +< message > + + Finished +Download +of +game +{ +} + +< translation > Fin +du +téléchargement +du +jeu +{ +} + +< /message> +< message > + + Installing +Game: No +active +download < /source> +< translation > Installation +du +jeu: Aucun +téléchargement +actif < /translation> +< /message> +< message > + + Download +speed < /source> +< translation > Vitesse +de +téléchargement < /translation> +< /message> +< message > + + Cache +used < /source> +< translation > Cache +utilisé < /translation> +< /message> +< message > + +Downloaded < /source> +< translation > Téléchargé < /translation> +< /message> +< message > + + Time +left: +< translation > Il +reste +du +temps: +< /message> +< /context> +< context > +DxvkWidget < /name> +< message > + + GPU +usage < /source> +< translation > GPU +Utilisation < /translation> +< /message> +< message > + + Used +Memory < /source> +< translation > utilisé +Memory < /translation> +< /message> +< message > + + Device +info < /source> +< translation > Info +sur +le +dispositif < /translation> +< /message> +< message > + + DXVK +version < /source> +< translation > DXVK +version < /translation> +< /message> +< message > + + D3D +Level +of +application < /source> +< translation > D3D +Niveau +d +'application +< /message> +< message > + + Frame +time +graph < /source> +< translation > Graphique +de +temps +de +trame < /translation> +< /message> +< message > + + dxvk +settings < /source> +< translation > dxvk +paramètres < /translation> +< /message> +< /context> +< context > +GameActions < /name> +< message > + + Uninstall +game < /source> +< translation > Désinstaller +le +jeu < /translation> +< /message> +< message > + +Uninstall < /source> +< translation > Désinstaller < /translation> +< /message> +< message > + + Verify +Game < /source> +< translation > Vérifier +le +jeu < /translation> +< /message> +< message > + +Verify < /source> +< translation > Vérifier < /translation> +< /message> +< message > + + Repair +Game < /source> +< translation > Jeu +de +réparation < /translation> +< /message> +< message > + +Repair < /source> +< translation > Réparation < /translation> +< /message> +< /context> +< context > +GameInfo < /name> +< message > + + Are +you +sure +to +uninstall +{ +} + +< translation > Etes - vous +sûr +de +désinstaller +{ +} + +< /message> +< message > + + Repair +file +does +not +exist +or +game +does +not +need +a +repair.Please +verify +game +first < /source> +< translation > Le +fichier +de +réparation +n +'existe pas ou le jeu ne nécessite pas de réparation. Veuillez d' +abord +vérifier +le +jeu. < /translation> +< /message> +< message > + + Verification +failed, {} +file(s) +corrupted, {} +file(s) +are +missing.Do +you +want +to +repair +them ? + < translation > La vérification +a +échoué, {} +fichier(s) +corrompu(s), {} +fichier(s) +manquant(s).Voulez - vous +les +réparer ? +< /message> +< message > + + Developer +: + +< translation > Développeur +: + +< /message> +< message > + + Install +size: +< translation > Taille +d +'installation: +< /message> +< message > + + Install +path: +< translation > Chemin +d +'installation: +< /message> +< /context> +< context > +GameList < /name> +< message > + + Installed +Games: { +} +Available +Games: { +} + +< translation > Jeux +installés: { +} +Jeux +disponibles: { +} + +< /message> +< message > + +Launch < /source> +< translation > Lancer < /translation> +< /message> +< message > + + Game +running < /source> +< translation > Jeu +en +cours < /translation> +< /message> +< /context> +< context > +GameListHeadBar < /name> +< message > + + Installed +only < /source> +< translation > Installé +uniquement < /translation> +< /message> +< message > + + Import +Game < /source> +< translation > Jeu +d +'importation +< /message> +< message > + + Search +Game < /source> +< translation > Rechercher +un +jeu < /translation> +< /message> +< /context> +< context > +GameSettings < /name> +< message > + + Launch +Game +offline < /source> +< translation > Lancer +le +jeu +hors +ligne < /translation> +< /message> +< message > + + Skip +update +check +before +launching < /source> +< translation > Sauter +la +vérification +de +la +mise +à +jour +avant +le +lancement < /translation> +< /message> +< message > + +Save < /source> +< translation > Sauvez < /translation> +< /message> +< message > + +Wrapper(e.g.optirun) < /source> +< translation > Wrapper(p.e.optirun) < /translation> +< /message> +< message > + + Proton +Wrapper < /source> +< translation > Enveloppeur +de +Proton < /translation> +< /message> +< message > + + Proton +prefix < /source> +< translation > Préfixe +du +proton < /translation> +< /message> +< message > + + No +permission +to +create +folder < /source> +< translation > Pas +de +permission +pour +créer +un +dossier < /translation> +< /message> +< message > + + Please +select +path +for proton prefix < /source> +< translation > Veuillez +sélectionner +le +chemin +pour +le +préfixe +proton < /translation> +< /message> +< /context> +< context > +GameWidgetInstalled < /name> +< message > + + Update +available < /source> +< translation > Mise +à +jour +disponible < /translation> +< /message> +< message > + + Start +game +without +version +check < /source> +< translation > Démarrer +le +jeu +sans +vérifier +la +version < /translation> +< /message> +< message > + + Game +running < /source> +< translation > Jeu +en +cours < /translation> +< /message> +< /context> +< context > +IconWidgetUninstalled < /name> +< message > + + Install +Game < /source> +< translation > Installer +le +jeu < /translation> +< /message> +< /context> +< context > +ImportWidget < /name> +< message > + +Import < /source> +< translation > Importer < /translation> +< /message> +< message > + + Could +not +find +EGL +program +data < /source> +< translation > Impossible +de +trouver +les +données +du +programme +EGL < /translation> +< /message> +< message > + + Found +EGL +program +Data.Do +you +want +to +import them + +? + < translation > Les données +du +programme +EGL +ont +été +trouvées.Voulez - vous +les +importer ? +< /message> +< message > + + Could +not +find +any +Epic +Games +login +data < /source> +< translation > Impossible +de +trouver +les +données +de +connexion +d +'Epic Games +< /message> +< message > + + Loading +... + +< translation > Chargement +... + +< /message> +< message > + + Error +: +No +valid +session +found < /source> +< translation > Erreur +: +Aucune +session +valide +n +'a été trouvée +< /message> +< message > + +Back < /source> +< translation > Dos < /translation> +< /message> +< message > + + Select +path +to +game < /source> +< translation > Sélectionnez +le +chemin +vers +le +jeu < /translation> +< /message> +< message > + + Override +app +name(Only +if imported game +from +legendary +or +the +app +could +not +find +the +app +name +) + +< translation > Remplacer +le +nom +de +l +'application (uniquement si le jeu a été importé depuis le légendaire ou si l' +application +n +'a pas pu trouver le nom de l' +application +) + +< /message> +< message > + + Import +Game < /source> +< translation > Import +jeu < /translation> +< /message> +< message > + + Import +all +games +from +Epic +Games +Launcher < /source> +< translation > Importer +tous +les +jeux +du +Epic +Games +Launcher < /translation> +< /message> +< message > + + Could +not +find +app +name < /source> +< translation > Impossible +de +trouver +le +nom +de +l +'application +< /message> +< message > + + Successfully +imported +{ +} +. +Reload +library < /source> +< translation > Importation +réussie +de +{ +} +. +Recharger +la +bibliothèque < /translation> +< /message> +< message > + + Failed +to +import {} + + +< translation > Impossible +d +'importer {} +< /message> +< message > + + Successfully +imported +{ +} +Games.Reloading +Library < /source> +< translation > Importation +réussie +de +{ +} +Jeux.Bibliothèque +de +rechargement < /translation> +< /message> +< /context> +< context > +InfoTabs < /name> +< message > + +Back < /source> +< translation > Dos < /translation> +< /message> +< message > + + Game +Info < /source> +< translation > Info +de +jeu < /translation> +< /message> +< message > + +Settings < /source> +< translation > Paramètres < /translation> +< /message> +< /context> +< context > +InstallDialog < /name> +< message > + + <h3>Install +{ +} +</h3> +<h3>Installer +{ +} +</h3> + +< message > + + Max +workers(0 +: +Default +) + +< translation > Travailleurs +maximum(0 +: +Par +défaut +) + +< /message> +< message > + + Force +download < /source> +< translation > Téléchargement +forcé < /translation> +< /message> +< message > + + Ignore +free +space(Warning!) < /source> +< translation > Ignorer +l +'espace libre (Attention!) +< /message> +< /context> +< context > +InstallInfoDialog < /name> +< message > + + Download +size: { +} +GB +Install +size: { +} +GB < /source> +< translation > Taille +du +téléchargement: { +} +GB +Taille +de +l +'installation: {}GB +< /message> +< message > + +Install < /source> +< translation > Installer < /translation> +< /message> +< message > + +Cancel < /source> +< translation > Annuler < /translation> +< /message> +< /context> +< context > +InstalledListWidget < /name> +< message > + +Launch < /source> +< translation > Lancer < /translation> +< /message> +< message > + + Developer +: + +< translation > Développeur +: + +< /message> +< /context> +< context > +LaunchDialog < /name> +< message > + + Launching +Rare < /source> +< translation > Lancer +Rare < /translation> +< /message> +< message > + + Logging in + < translation > Se +connecter < /translation> +< /message> +< message > + + Downloading +Images < /source> +< translation > Téléchargement +d +'images +< /message> +< message > + + Starting +... + +< translation > Démarrage +... + +< /message> +< /context> +< context > +LaunchThread < /name> +< message > + + Downloading +Images < /source> +< translation > Téléchargement +d +'images +< /message> +< /context> +< context > +LegendarySettings < /name> +< message > + + Legendary +settings < /source> +< translation > Legendary +paramètres < /translation> +< /message> +< message > + + Default +installation +directory < /source> +< translation > Répertoire +d +'installation par défaut +< /message> +< message > + + Max +workers +for Download(Less: +slower +download +) +(0 +: +Default +) + +< translation > Nombre +maximum +de +travailleurs +pour +le +téléchargement(Moins +: +téléchargement +plus +lent +) +(0 +: +Défaut +) + +< /message> +< message > + +Cleanup < /source> +< translation > Nettoyage < /translation> +< /message> +< message > + + Remove +everything < /source> +< translation > Enlever +tout < /translation> +< /message> +< message > + + Clean, but +keep +manifests < /source> +< translation > Nettoyer, mais +garder +les +manifestes < /translation> +< /message> +< message > + + Cleanup +complete! +Successfully +removed +{ +} +MB < /source> +< translation > Nettoyage +terminé ! +J +'ai réussi à supprimer {} MB +< /message> +< /context> +< context > +LinuxSettings < /name> +< message > + + Linux +settings < /source> +< translation > Linux +paramètres < /translation> +< /message> +< message > + + Default +Wine +Prefix < /source> +< translation > Défaut +Wine +Prefix < /translation> +< /message> +< message > + + Default +Wine +executable < /source> +< translation > Défaut +Wine +exécutable < /translation> +< /message> +< /context> +< context > +ListWidgetUninstalled < /name> +< message > + +Install < /source> +< translation > Installer < /translation> +< /message> +< /context> +< context > +LoginDialog < /name> +< message > + + Select +one +option +to +Login < /source> +< translation > Sélectionnez +une +option +pour +vous +connecter < /translation> +< /message> +< message > + + Use +Browser < /source> +< translation > Utiliser +le +navigateur < /translation> +< /message> +< message > + + This +opens +your +default +browser.Login +and +copy +the +text < /source> +< translation > Cela +ouvre +votre +navigateur +par +défaut.Connectez - vous +et +copiez +le +texte < /translation> +< /message> +< /context> +< context > +MiniWidget < /name> +< message > + + Logged in as < /source> + < translation > Connecté +en +tant +que < /translation> +< /message> +< message > + + Account +settings < /source> +< translation > paramètres +du +compte < /translation> +< /message> +< message > + +Logout < /source> +< translation > Déconnexion < /translation> +< /message> +< message > + + Do +you +really +want +to +logout < /source> +< translation > Voulez - vous +vraiment +vous +déconnecter ? +< /message> +< /context> +< context > +PathEdit < /name> +< message > + + Select +Path < /source> +< translation > Sélectionner +le +chemin < /translation> +< /message> +< message > + + Choose +Path < /source> +< translation > Choisir +le +chemin < /translation> +< /message> +< /context> +< context > +PathInputDialog < /name> +< message > + +Cancel < /source> +< translation > Annuler < /translation> +< /message> +< /context> +< context > +RareSettings < /name> +< message > + + Rare +settings < /source> +< translation > Rare +paramètres < /translation> +< /message> +< message > + +Save < /source> +< translation > Sauvez < /translation> +< /message> +< message > + + Image +Directory < /source> +< translation > Répertoire +d +'images +< /message> +< message > + +Language < /source> +< translation > Langue < /translation> +< /message> +< message > + + Confirm +launch +of +game < /source> +< translation > Confirmation +du +lancement +du +jeu < /translation> +< /message> +< message > + + Restart +Application +to +activate +changes < /source> +< translation > Redémarrez +l +'application pour activer les changements +< /message> +< /context> +< context > +SyncSaves < /name> +< message > + + Cloud +Saves < /source> +< translation > Cloud +Saves < /translation> +< /message> +< message > + + Found +Saves +for folowing Games < /source> +< translation > Sauvegardes +trouvées +pour +les +jeux +suivants < /translation> +< /message> +< message > + + Your +games +does +not +support +Cloud +Saves < /source> +< translation > Vos +jeux +ne +prennent +pas +en +charge +les +sauvegardes +en +nuage < /translation> +< /message> +< message > + + Sync +all +games < /source> +< translation > Sync +tous +les +jeux < /translation> +< /message> +< message > + + Found +no +savepath < /source> +< translation > Pas +de +chemin +de +sauvegarde +trouvé < /translation> +< /message> +< message > + + No +save +path +was +found.Please +select +path +or +skip < /source> +< translation > Aucun +chemin +de +sauvegarde +n +'a été trouvé. Veuillez sélectionner le chemin ou passer +< /message> +< /context> +< context > +SyncWidget < /name> +< message > + + Path +not +found < /source> +< translation > Chemin +non +trouvé < /translation> +< /message> +< message > + + Local +Save +date: +< translation > Local +Save +date: +< /message> +< message > + + No +Local +Save +files < /source> +< translation > Pas +de +fichiers +de +sauvegarde +locaux < /translation> +< /message> +< message > + + Cloud +save +date: +< translation > Cloud +save +date: +< /message> +< message > + + No +Cloud +saves < /source> +< translation > Pas +Cloud +saves < /translation> +< /message> +< message > + + Game +is +up +to +date < /source> +< translation > Le +jeu +est +à +jour < /translation> +< /message> +< message > + + Upload +anyway < /source> +< translation > Télécharger +quand +même < /translation> +< /message> +< message > + + Download +anyway < /source> +< translation > Télécharger +en +tout +cas < /translation> +< /message> +< message > + + Cloud +save +is +newer < /source> +< translation > La +sauvegarde +en +nuage +est +plus +récente < /translation> +< /message> +< message > + + Download +Cloud +saves < /source> +< translation > Télécharger +Cloud +saves < /translation> +< /message> +< message > + + Upload +Saves < /source> +< translation > Upload +Saves < /translation> +< /message> +< message > + + Local +save +is +newer < /source> +< translation > La +sauvegarde +locale +est +plus +récente < /translation> +< /message> +< message > + + Upload +saves < /source> +< translation > Upload +Saves < /translation> +< /message> +< message > + + Download +saves < /source> +< translation > Télécharger +les +sauvegardes < /translation> +< /message> +< message > + + Change +path < /source> +< translation > Changement +de +trajectoire < /translation> +< /message> +< message > + + Uploading +... + +< translation > Téléchargement +... + +< /message> +< message > + + Upload +finished < /source> +< translation > Téléchargement +terminé < /translation> +< /message> +< message > + + Downloading +... + +< translation > Téléchargement +... + +< /message> +< message > + + Download +finished < /source> +< translation > Téléchargement +terminé < /translation> +< /message> +< /context> +< context > +TabWidget < /name> +< message > + +Games < /source> +< translation > Jeus < /translation> +< /message> +< /context> +< context > +UpdateWidget < /name> +< message > + + Update +Game < /source> +< translation > Jeu +de +mise +à +jour < /translation> +< /message> +< /context> +< /TS> diff --git a/rare/styles/qss/RareStyle.qss b/rare/styles/qss/RareStyle.qss index daba360f..231a225d 100644 --- a/rare/styles/qss/RareStyle.qss +++ b/rare/styles/qss/RareStyle.qss @@ -5,21 +5,21 @@ QWidget { QLabel { background-color: transparent; - padding: 4px; + padding: 4px; } QLineEdit { border: 1px solid darkslategrey; border-radius: 2px; background-color: #334; - padding: 2px; + padding: 2px; } QScrollBar { - border: 1px solid darkslategrey; + border: 1px solid darkslategrey; border-radius: 4px; background-color: #334; - padding: 1px; + padding: 1px; } QScrollBar::add-line:vertical { @@ -54,12 +54,12 @@ QScrollBar::sub-line:horizontal { subcontrol-origin: margin; } -QScrollBar::handle{ - border: 1px solid darkslategrey; +QScrollBar::handle { + border: 1px solid darkslategrey; background-color: gray; border-radius: 4px; - min-height: 20px; - min-width: 20px; + min-height: 20px; + min-width: 20px; } QTabBar#main_tab_bar { @@ -172,12 +172,12 @@ QPushButton:hover#menu_button { QRadioButton { background-color: none; - border-radius: 50%; + border-radius: 50%; } QRadioButton::indicator { border: 1px solid gray; - border-radius: 5%; + border-radius: 5%; } QCheckBox { @@ -186,22 +186,22 @@ QCheckBox { QCheckBox::indicator { border: 1px solid gray; - border-radius: 2px; + border-radius: 2px; } QCheckBox::indicator:checked { - width: -20ex; - height: -20ex; - background: #5F5F80; - border-radius: 10px; - + width: -20ex; + height: -20ex; + background: #5F5F80; + border-radius: 10px; + } QSpinBox { border: 1px solid darkslategrey; border-radius: 2px; background-color: #334; - padding: 2px; + padding: 2px; } /* @@ -221,11 +221,11 @@ QComboBox::drop-down { subcontrol-origin: padding; subcontrol-position: top right; width: 15px; -/* - border-left-width: 1px; - border-left-color: darkgray; - border-left-style: solid; -*/ + /* + border-left-width: 1px; + border-left-color: darkgray; + border-left-style: solid; + */ border-top-right-radius: 3px; border-bottom-right-radius: 3px; } diff --git a/rare/ui/components/dialogs/launch_dialog.py b/rare/ui/components/dialogs/launch_dialog.py index 280c45b6..a563f459 100644 --- a/rare/ui/components/dialogs/launch_dialog.py +++ b/rare/ui/components/dialogs/launch_dialog.py @@ -8,7 +8,7 @@ # run again. Do not edit this file unless you know what you are doing. -from PyQt5 import QtCore, QtGui, QtWidgets +from PyQt5 import QtCore, QtWidgets class Ui_LaunchDialog(object): @@ -48,6 +48,7 @@ class Ui_LaunchDialog(object): if __name__ == "__main__": import sys + app = QtWidgets.QApplication(sys.argv) LaunchDialog = QtWidgets.QDialog() ui = Ui_LaunchDialog() diff --git a/rare/ui/components/dialogs/launch_dialog.ui b/rare/ui/components/dialogs/launch_dialog.ui index 3c2819af..a5b0a134 100644 --- a/rare/ui/components/dialogs/launch_dialog.ui +++ b/rare/ui/components/dialogs/launch_dialog.ui @@ -1,56 +1,56 @@ - LaunchDialog - - - - 0 - 0 - 400 - 168 - - - - Dialog - - - - - - <h2>Launching Rare</h2> - + LaunchDialog + + + + 0 + 0 + 400 + 168 + + + + Dialog + + + + + + <h2>Launching Rare</h2> + + + + + + + 0 + + + + + + + Downloading images + + + + + + + 0 + + + + + + + Getting Steam grades + + + + - - - - - 0 - - - - - - - Downloading images - - - - - - - 0 - - - - - - - Getting Steam grades - - - - - - - + + diff --git a/rare/ui/components/tabs/games/game_info/game_info.py b/rare/ui/components/tabs/games/game_info/game_info.py index b5bad854..11f5b1d9 100644 --- a/rare/ui/components/tabs/games/game_info/game_info.py +++ b/rare/ui/components/tabs/games/game_info/game_info.py @@ -22,7 +22,7 @@ class Ui_GameInfo(object): self.layout_game_info_form.setObjectName("layout_game_info_form") self.install_size = QtWidgets.QLabel(GameInfo) self.install_size.setText("error") - self.install_size.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse) + self.install_size.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByMouse) self.install_size.setObjectName("install_size") self.layout_game_info_form.addWidget(self.install_size, 4, 1, 1, 1) self.lbl_dev = QtWidgets.QLabel(GameInfo) @@ -39,7 +39,7 @@ class Ui_GameInfo(object): self.layout_game_info_form.addWidget(self.lbl_dev, 0, 0, 1, 1, QtCore.Qt.AlignRight) self.version = QtWidgets.QLabel(GameInfo) self.version.setText("error") - self.version.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse) + self.version.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByMouse) self.version.setObjectName("version") self.layout_game_info_form.addWidget(self.version, 2, 1, 1, 1) self.lbl_install_path = QtWidgets.QLabel(GameInfo) @@ -106,7 +106,7 @@ class Ui_GameInfo(object): self.repair_button = QtWidgets.QPushButton(self.wg_game_actions) self.repair_button.setObjectName("repair_button") self.layout_game_actions.addWidget(self.repair_button) - self.layout_game_info_form.addWidget(self.wg_game_actions, 6, 1, 1, 1, QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop) + self.layout_game_info_form.addWidget(self.wg_game_actions, 6, 1, 1, 1, QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) self.lbl_version = QtWidgets.QLabel(GameInfo) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) @@ -133,18 +133,18 @@ class Ui_GameInfo(object): self.layout_game_info_form.addWidget(self.lbl_app_name, 1, 0, 1, 1, QtCore.Qt.AlignRight) self.dev = QtWidgets.QLabel(GameInfo) self.dev.setText("error") - self.dev.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse) + self.dev.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByMouse) self.dev.setObjectName("dev") self.layout_game_info_form.addWidget(self.dev, 0, 1, 1, 1) self.app_name = QtWidgets.QLabel(GameInfo) self.app_name.setText("error") - self.app_name.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse) + self.app_name.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByMouse) self.app_name.setObjectName("app_name") self.layout_game_info_form.addWidget(self.app_name, 1, 1, 1, 1) self.install_path = QtWidgets.QLabel(GameInfo) self.install_path.setText("error") self.install_path.setWordWrap(True) - self.install_path.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse) + self.install_path.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByMouse) self.install_path.setObjectName("install_path") self.layout_game_info_form.addWidget(self.install_path, 5, 1, 1, 1) self.lbl_game_actions = QtWidgets.QLabel(GameInfo) @@ -168,7 +168,7 @@ class Ui_GameInfo(object): self.layout_game_info_form.addWidget(self.lbl_grade, 3, 0, 1, 1, QtCore.Qt.AlignRight) self.grade = QtWidgets.QLabel(GameInfo) self.grade.setText("error") - self.grade.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse) + self.grade.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByMouse) self.grade.setObjectName("grade") self.layout_game_info_form.addWidget(self.grade, 3, 1, 1, 1) self.layout_game_info.addLayout(self.layout_game_info_form, 2, 1, 1, 1) @@ -177,10 +177,10 @@ class Ui_GameInfo(object): self.image.setFrameShadow(QtWidgets.QFrame.Sunken) self.image.setText("") self.image.setObjectName("image") - self.layout_game_info.addWidget(self.image, 2, 0, 1, 1, QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop) + self.layout_game_info.addWidget(self.image, 2, 0, 1, 1, QtCore.Qt.AlignLeft | QtCore.Qt.AlignTop) self.game_title = QtWidgets.QLabel(GameInfo) self.game_title.setText("error") - self.game_title.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse) + self.game_title.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByMouse) self.game_title.setObjectName("game_title") self.layout_game_info.addWidget(self.game_title, 0, 0, 1, 3) @@ -205,6 +205,7 @@ class Ui_GameInfo(object): if __name__ == "__main__": import sys + app = QtWidgets.QApplication(sys.argv) GameInfo = QtWidgets.QWidget() ui = Ui_GameInfo() diff --git a/rare/ui/components/tabs/games/game_info/game_info.ui b/rare/ui/components/tabs/games/game_info/game_info.ui index d20c92fa..1d1926b6 100644 --- a/rare/ui/components/tabs/games/game_info/game_info.ui +++ b/rare/ui/components/tabs/games/game_info/game_info.ui @@ -1,376 +1,376 @@ - GameInfo - - - - 0 - 0 - 436 - 317 - - - - Game Info - - - - - - 6 - - - 6 - - - 6 - - - 6 - - - 12 - - - - - error - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Developer - - - - - - - error - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Installation Path - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Installation Size - - - - - - - Qt::Horizontal - - - - 0 - 20 - - - - - - - - Qt::Vertical - - - - 20 - 0 - - - - - - - - - 250 - 0 - - - - - 0 + GameInfo + + + + 0 + 0 + 436 + 317 + - - 0 + + Game Info - - 0 - - - 0 - - - - - Uninstall Game - - - - - - - 0 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Verify Installation - - + + + + + 6 + + + 6 + + + 6 + + + 6 + + + 12 + + + + + error + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Developer + + + + + + + error + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Installation Path + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Installation Size + + + + + + + Qt::Horizontal + + + + 0 + 20 + + + + + + + + Qt::Vertical + + + + 20 + 0 + + + + + + + + + 250 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Uninstall Game + + + + + + + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Verify Installation + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 24 + + + + + + + + + + + Repair Instalation + + + + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Version + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Application Name + + + + + + + error + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + + + error + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + + + error + + + true + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + + + + 0 + 0 + + + + + 75 + true + + + + Actions + + + + + + + + 75 + true + + + + ProtonDB Grade + + + + + + + error + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - 24 - - + + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + + - - - - - - - - Repair Instalation - - - - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Version - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Application Name - - - - - - - error - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - - - - - error - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - - - - - error - - - true - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - - - - - - 0 - 0 - - - - - 75 - true - - - - Actions - - - - - - - - 75 - true - - - - ProtonDB Grade - - - - - - - error - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - - - - - - - QFrame::StyledPanel - - - QFrame::Sunken - - - - + + + + error + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + - - - - - error - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - - - - - + + diff --git a/rare/ui/components/tabs/games/game_info/game_settings.py b/rare/ui/components/tabs/games/game_info/game_settings.py index 55df7c5b..d86ec1b5 100644 --- a/rare/ui/components/tabs/games/game_info/game_settings.py +++ b/rare/ui/components/tabs/games/game_info/game_settings.py @@ -8,7 +8,7 @@ # run again. Do not edit this file unless you know what you are doing. -from PyQt5 import QtCore, QtGui, QtWidgets +from PyQt5 import QtCore, QtWidgets class Ui_GameSettings(object): @@ -19,7 +19,7 @@ class Ui_GameSettings(object): self.game_settings_layout.setObjectName("game_settings_layout") self.title = QtWidgets.QLabel(GameSettings) self.title.setText("error") - self.title.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse|QtCore.Qt.TextSelectableByMouse) + self.title.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse | QtCore.Qt.TextSelectableByMouse) self.title.setObjectName("title") self.game_settings_layout.addWidget(self.title) self.launch_settings_groupbox = QtWidgets.QGroupBox(GameSettings) @@ -146,6 +146,7 @@ class Ui_GameSettings(object): if __name__ == "__main__": import sys + app = QtWidgets.QApplication(sys.argv) GameSettings = QtWidgets.QWidget() ui = Ui_GameSettings() diff --git a/rare/ui/components/tabs/games/game_info/game_settings.ui b/rare/ui/components/tabs/games/game_info/game_settings.ui index d2865952..30c51e60 100644 --- a/rare/ui/components/tabs/games/game_info/game_settings.ui +++ b/rare/ui/components/tabs/games/game_info/game_settings.ui @@ -1,277 +1,277 @@ - GameSettings - - - - 0 - 0 - 759 - 617 - - - - GameSettings - - - - - - error - - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse - - - - - - - Launch Settings - - - - - - - Default - - - - - Yes - - - - - No - - - - - - - - + GameSettings + + + + 0 + 0 + 759 + 617 + - - - - - - Launch parameters + + GameSettings - - - - - - Wrapper - - - - - - - Skip update check - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 400 - 0 - - - - e.g. optirun - - - - - - - Save - - - + + + + + error + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + + + + + Launch Settings + + + + + + + Default + + + + + Yes + + + + + No + + + + + + + + + + + + + + + Launch parameters + + + + + + + Wrapper + + + + + + + Skip update check + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 400 + 0 + + + + e.g. optirun + + + + + + + Save + + + + + + + + + + Offline mode + + + + + + + + Default + + + + + Yes + + + + + No + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 400 + 0 + + + + parameters + + + + + + + Save + + + + + + + + + + Sync with cloud + + + + + + + + + + Linux Settings + + + + + + + Don't use Proton + + + + + + + + Proton + + + + + + + Prefix + + + + + + + Qt::Vertical + + + QSizePolicy::Maximum + + + + 20 + 0 + + + + + + + + + + + false + + + + + + + + + + 0 + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + - - - - - - Offline mode - - - - - - - - Default - - - - - Yes - - - - - No - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 400 - 0 - - - - parameters - - - - - - - Save - - - - - - - - - - Sync with cloud - - - - - - - - - Linux Settings - - - - - - - Don't use Proton - - - - - - - - Proton - - - - - - - Prefix - - - - - - - Qt::Vertical - - - QSizePolicy::Maximum - - - - 20 - 0 - - - - - - - - - - - false - - - - - - - - - - 0 - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - + + diff --git a/rare/ui/components/tabs/settings/about.py b/rare/ui/components/tabs/settings/about.py index e98ac7f9..5eb18a83 100644 --- a/rare/ui/components/tabs/settings/about.py +++ b/rare/ui/components/tabs/settings/about.py @@ -104,12 +104,14 @@ class Ui_About(object): self.dev_label.setText(_translate("About", "Rare Developer")) self.license.setText(_translate("About", "GNU General Public License v3.0")) self.lgd_dev.setToolTip(_translate("About", "Github")) - self.info_text.setText(_translate("About", "This is a beta version, so you can get bugs. If you get a bug, please report it by creating an Issue on Github. You can also contact me on Discord (Dummerle#7419). Or you can join the Discord server")) + self.info_text.setText(_translate("About", + "This is a beta version, so you can get bugs. If you get a bug, please report it by creating an Issue on Github. You can also contact me on Discord (Dummerle#7419). Or you can join the Discord server")) self.title.setText(_translate("About", "

About

")) if __name__ == "__main__": import sys + app = QtWidgets.QApplication(sys.argv) About = QtWidgets.QWidget() ui = Ui_About() diff --git a/rare/ui/components/tabs/settings/about.ui b/rare/ui/components/tabs/settings/about.ui index eb21f288..af38de8d 100644 --- a/rare/ui/components/tabs/settings/about.ui +++ b/rare/ui/components/tabs/settings/about.ui @@ -1,186 +1,190 @@ - About - - - - 0 - 0 - 499 - 396 - - - - About - - - - - - Download latest release - + About + + + + 0 + 0 + 499 + 396 + + + + About + + + + + + Download latest release + + + + + + + + 75 + true + + + + Version + + + + + + + + 75 + true + + + + License + + + + + + + + 75 + true + + + + Legendary Developer + + + + + + + Github + + + <a href='https://github.com/Dummerle'>Dummerle</a> + + + true + + + + + + + + 75 + true + + + + Update available + + + + + + + error + + + + + + + + 75 + true + + + + Rare Developer + + + + + + + GNU General Public License v3.0 + + + + + + + error + + + + + + + Github + + + <a href='https://github.com/derrod/'>derrod</a> + + + true + + + + + + + This is a beta version, so you can get bugs. If you get a bug, please report it by + creating an Issue on <a href='https://github.com/Dummerle/Rare/issues'>Github</a>. + You can also contact me on Discord (Dummerle#7419). Or you can join the <a + href='https://discord.gg/YvmABK9YSk'>Discord server</a> + + + + true + + + true + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + <h2>About</h2> + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + - - - - - - 75 - true - - - - Version - - - - - - - - 75 - true - - - - License - - - - - - - - 75 - true - - - - Legendary Developer - - - - - - - Github - - - <a href='https://github.com/Dummerle'>Dummerle</a> - - - true - - - - - - - - 75 - true - - - - Update available - - - - - - - error - - - - - - - - 75 - true - - - - Rare Developer - - - - - - - GNU General Public License v3.0 - - - - - - - error - - - - - - - Github - - - <a href='https://github.com/derrod/'>derrod</a> - - - true - - - - - - - This is a beta version, so you can get bugs. If you get a bug, please report it by creating an Issue on <a href='https://github.com/Dummerle/Rare/issues'>Github</a>. You can also contact me on Discord (Dummerle#7419). Or you can join the <a href='https://discord.gg/YvmABK9YSk'>Discord server</a> - - - true - - - true - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - <h2>About</h2> - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - + + diff --git a/rare/ui/components/tabs/settings/dxvk.py b/rare/ui/components/tabs/settings/dxvk.py index 5738b8ae..75c5f520 100644 --- a/rare/ui/components/tabs/settings/dxvk.py +++ b/rare/ui/components/tabs/settings/dxvk.py @@ -8,7 +8,7 @@ # run again. Do not edit this file unless you know what you are doing. -from PyQt5 import QtCore, QtGui, QtWidgets +from PyQt5 import QtCore, QtWidgets class Ui_DxvkSettings(object): @@ -89,6 +89,7 @@ class Ui_DxvkSettings(object): if __name__ == "__main__": import sys + app = QtWidgets.QApplication(sys.argv) DxvkSettings = QtWidgets.QGroupBox() ui = Ui_DxvkSettings() diff --git a/rare/ui/components/tabs/settings/dxvk.ui b/rare/ui/components/tabs/settings/dxvk.ui index e1fe686d..5da74df7 100644 --- a/rare/ui/components/tabs/settings/dxvk.ui +++ b/rare/ui/components/tabs/settings/dxvk.ui @@ -1,138 +1,138 @@ - DxvkSettings - - - - 0 - 0 - 419 - 185 - - - - DxvkSettings - - - DXVK Settings - - - - - - DXVK HUD Options - - - - - - DXVK Version + DxvkSettings + + + + 0 + 0 + 419 + 185 + - - - - - - FPS + + DxvkSettings - - - - - - Memory Usage + + DXVK Settings - - - - - - Device Info - - - - - - - GPU Usage - - - - - - - Frame Time graph - - - - - - - Qt::Horizontal - - - - 0 - 20 - - - - - - - - D3D Version - - - - + + + + + DXVK HUD Options + + + + + + DXVK Version + + + + + + + FPS + + + + + + + Memory Usage + + + + + + + Device Info + + + + + + + GPU Usage + + + + + + + Frame Time graph + + + + + + + Qt::Horizontal + + + + 0 + 20 + + + + + + + + D3D Version + + + + + + + + + + + 0 + 0 + + + + Show HUD + + + + + + + + 0 + 0 + + + + + System Default + + + + + Hidden + + + + + Visible + + + + + Custom Options + + + + + - - - - - - 0 - 0 - - - - Show HUD - - - - - - - - 0 - 0 - - - - - System Default - - - - - Hidden - - - - - Visible - - - - - Custom Options - - - - - - - - + + diff --git a/rare/ui/components/tabs/settings/legendary.py b/rare/ui/components/tabs/settings/legendary.py index 20e2500e..b2cf2405 100644 --- a/rare/ui/components/tabs/settings/legendary.py +++ b/rare/ui/components/tabs/settings/legendary.py @@ -150,6 +150,7 @@ class Ui_legendary_settings(object): if __name__ == "__main__": import sys + app = QtWidgets.QApplication(sys.argv) legendary_settings = QtWidgets.QStackedWidget() ui = Ui_legendary_settings() diff --git a/rare/ui/components/tabs/settings/legendary.ui b/rare/ui/components/tabs/settings/legendary.ui index a3104db1..971a5e2a 100644 --- a/rare/ui/components/tabs/settings/legendary.ui +++ b/rare/ui/components/tabs/settings/legendary.ui @@ -1,234 +1,234 @@ - legendary_settings - - - - 0 - 0 - 532 - 383 - - - - StackedWidget - - - 1 - - - - - - - Cleanup - - - - - - Clean, but keep manifests - - - - - - - Remove everything - - - - - - - - - - EGL Sync - - - - - - Sync Settings - - - - - - - - - - Download Settings - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - 0 - 0 - - - - Max Workers - - - - - - - - true - - - - Less is slower (0: Default) - - - - - - - - - - Default Installation Directory - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - Back - - - - - - - <h2>Sync Games with Epic Games Store</h2> - - - - - - - - - - TextLabel - - - - - - - - - Exportable Games + legendary_settings + + + + 0 + 0 + 532 + 383 + - - - - - - - Importable + + StackedWidget - - - - - - - Export all Games + + 1 - - - - - - Import all Games - - - - - - - - - Enable Sync - - - - - - Sync once - + + + + + + Cleanup + + + + + + Clean, but keep manifests + + + + + + + Remove everything + + + + + + + + + + EGL Sync + + + + + + Sync Settings + + + + + + + + + + Download Settings + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 0 + 0 + + + + Max Workers + + + + + + + + true + + + + Less is slower (0: Default) + + + + + + + + + + Default Installation Directory + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + - - - - - Enable automatic sync - + + + + + + Back + + + + + + + <h2>Sync Games with Epic Games Store</h2> + + + + + + + + + + TextLabel + + + + + + + + + Exportable Games + + + + + + + + Importable + + + + + + + + Export all Games + + + + + + + Import all Games + + + + + + + + + Enable Sync + + + + + + Sync once + + + + + + + Enable automatic sync + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - + + + diff --git a/rare/ui/components/tabs/settings/linux.py b/rare/ui/components/tabs/settings/linux.py index 4c23dec1..6ad65599 100644 --- a/rare/ui/components/tabs/settings/linux.py +++ b/rare/ui/components/tabs/settings/linux.py @@ -8,7 +8,7 @@ # run again. Do not edit this file unless you know what you are doing. -from PyQt5 import QtCore, QtGui, QtWidgets +from PyQt5 import QtCore, QtWidgets class Ui_LinuxSettings(object): @@ -63,6 +63,7 @@ class Ui_LinuxSettings(object): if __name__ == "__main__": import sys + app = QtWidgets.QApplication(sys.argv) LinuxSettings = QtWidgets.QWidget() ui = Ui_LinuxSettings() diff --git a/rare/ui/components/tabs/settings/linux.ui b/rare/ui/components/tabs/settings/linux.ui index 4cee6742..24ca4a90 100644 --- a/rare/ui/components/tabs/settings/linux.ui +++ b/rare/ui/components/tabs/settings/linux.ui @@ -1,86 +1,86 @@ - LinuxSettings - - - - 0 - 0 - 569 - 454 - - - - LinuxSettings - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Wine Settings - - - - - - Executable + LinuxSettings + + + + 0 + 0 + 569 + 454 + - - - - - - Prefix + + LinuxSettings - - - - - - false - - - - - - - - - - false - - - - - - - - - - - - - + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Wine Settings + + + + + + Executable + + + + + + + Prefix + + + + + + + false + + + + + + + + + + false + + + + + + + + + + + + + + + + + + + - - - - - - - - + + diff --git a/rare/ui/components/tabs/settings/rare.py b/rare/ui/components/tabs/settings/rare.py index 748e7c88..b7f6b1ff 100644 --- a/rare/ui/components/tabs/settings/rare.py +++ b/rare/ui/components/tabs/settings/rare.py @@ -135,6 +135,7 @@ class Ui_RareSettings(object): if __name__ == "__main__": import sys + app = QtWidgets.QApplication(sys.argv) RareSettings = QtWidgets.QWidget() ui = Ui_RareSettings() diff --git a/rare/ui/components/tabs/settings/rare.ui b/rare/ui/components/tabs/settings/rare.ui index 9cfed0ba..0b0c6193 100644 --- a/rare/ui/components/tabs/settings/rare.ui +++ b/rare/ui/components/tabs/settings/rare.ui @@ -1,219 +1,219 @@ - RareSettings - - - RareSettings - - - - - - - 0 - 0 - - - - Interface - - - - - - - None - - - - - - - - Style Sheet + RareSettings + + + RareSettings - - - - - - Language - - - - - - - - - - Color Scheme - - - - - - - - true - - - - Restart Rare to apply. - - - true - - - - - - - - None - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - + + + + + + 0 + 0 + + + + Interface + + + + + + + None + + + + + + + + Style Sheet + + + + + + + Language + + + + + + + + + + Color Scheme + + + + + + + + true + + + + Restart Rare to apply. + + + true + + + + + + + + None + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Image Cache Directory + + + + + + + + Behavior + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Restore window size on application startup + + + + + + + Show notification on download completion + + + + + + + Automatically sync with cloud + + + + + + + Confirm game launch + + + + + + + Update games on application startup + + + + + + + Exit to System tray + + + + + + + + + + Logs + + + + + + Open Log directory + + + + + + + Clean Log directory + + + + + + + + + + true + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + - - - - - Image Cache Directory - - - - - - - - Behavior - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Restore window size on application startup - - - - - - - Show notification on download completion - - - - - - - Automatically sync with cloud - - - - - - - Confirm game launch - - - - - - - Update games on application startup - - - - - - - Exit to System tray - - - - - - - - - - Logs - - - - - - Open Log directory - - - - - - - Clean Log directory - - - - - - - - - - true - - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - + + diff --git a/rare/ui/components/tabs/settings/rpc_settings.py b/rare/ui/components/tabs/settings/rpc_settings.py index 8cde8cf2..8c95e1fe 100644 --- a/rare/ui/components/tabs/settings/rpc_settings.py +++ b/rare/ui/components/tabs/settings/rpc_settings.py @@ -8,7 +8,7 @@ # run again. Do not edit this file unless you know what you are doing. -from PyQt5 import QtCore, QtGui, QtWidgets +from PyQt5 import QtCore, QtWidgets class Ui_RPCSettings(object): @@ -58,6 +58,7 @@ class Ui_RPCSettings(object): if __name__ == "__main__": import sys + app = QtWidgets.QApplication(sys.argv) RPCSettings = QtWidgets.QGroupBox() ui = Ui_RPCSettings() diff --git a/rare/ui/components/tabs/settings/rpc_settings.ui b/rare/ui/components/tabs/settings/rpc_settings.ui index 215a9531..ea0a9c7b 100644 --- a/rare/ui/components/tabs/settings/rpc_settings.ui +++ b/rare/ui/components/tabs/settings/rpc_settings.ui @@ -1,69 +1,69 @@ - RPCSettings - - - DiscordRPC - - - Discord RPC - - - - - - - When Playing - - - - - Always - - - - - Never - - + RPCSettings + + + DiscordRPC + + + Discord RPC + + + + + + + When Playing + + + + + Always + + + + + Never + + + + + + + + + 0 + 0 + + + + Show + + + + + + + Show Game + + + + + + + Show OS + + + + + + + Show Time playing + + + + - - - - - - 0 - 0 - - - - Show - - - - - - - Show Game - - - - - - - Show OS - - - - - - - Show Time playing - - - - - - - + + diff --git a/rare/ui/utils/pathedit.py b/rare/ui/utils/pathedit.py index 0752f0b1..fa1bdb06 100644 --- a/rare/ui/utils/pathedit.py +++ b/rare/ui/utils/pathedit.py @@ -8,7 +8,7 @@ # run again. Do not edit this file unless you know what you are doing. -from PyQt5 import QtCore, QtGui, QtWidgets +from PyQt5 import QtCore, QtWidgets class Ui_PathEdit(object): @@ -47,6 +47,7 @@ class Ui_PathEdit(object): if __name__ == "__main__": import sys + app = QtWidgets.QApplication(sys.argv) PathEdit = QtWidgets.QWidget() ui = Ui_PathEdit() diff --git a/rare/ui/utils/pathedit.ui b/rare/ui/utils/pathedit.ui index a297a6d0..4c593c31 100644 --- a/rare/ui/utils/pathedit.ui +++ b/rare/ui/utils/pathedit.ui @@ -1,72 +1,72 @@ - PathEdit - - - PathEdit - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Browse... - + PathEdit + + + PathEdit + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Browse... + + + + + + + + 300 + 0 + + + + Default + + + + + + + + + Qt::Horizontal + + + + 40 + 0 + + + + + + + + true + + + Save + + + + + + - - - - - - 300 - 0 - - - - Default - - - - - - - - - Qt::Horizontal - - - - 40 - 0 - - - - - - - - true - - - Save - - - - - - - - - + + diff --git a/rare/utils/json_formatter.py b/rare/utils/json_formatter.py index fe32e2e5..22168309 100644 --- a/rare/utils/json_formatter.py +++ b/rare/utils/json_formatter.py @@ -143,8 +143,8 @@ class QJsonModel(QtCore.QAbstractItemModel): """ assert isinstance(document, (dict, list, tuple)), ( - "`document` must be of dict, list or tuple, " - "not %s" % type(document) + "`document` must be of dict, list or tuple, " + "not %s" % type(document) ) self.beginResetModel() @@ -194,7 +194,6 @@ class QJsonModel(QtCore.QAbstractItemModel): item = index.internalPointer() item.value = str(value) - self.dataChanged.emit(index, index, [QtCore.Qt.EditRole]) return True @@ -317,8 +316,8 @@ if __name__ == '__main__': # Sanity check assert ( - json.dumps(model.json(), sort_keys=True) == - json.dumps(document, sort_keys=True) + json.dumps(model.json(), sort_keys=True) == + json.dumps(document, sort_keys=True) ) view.show() diff --git a/rare/utils/legendary_utils.py b/rare/utils/legendary_utils.py index dac21139..10174398 100644 --- a/rare/utils/legendary_utils.py +++ b/rare/utils/legendary_utils.py @@ -64,7 +64,8 @@ def uninstall(app_name: str, core: LegendaryCore, options=None): elif os.name == "nt": if os.path.exists(os.path.expanduser(f"~/Desktop/{igame.title.split(':')[0]}.lnk")): os.remove(os.path.expanduser(f"~/Desktop/{igame.title.split(':')[0]}.lnk")) - elif os.path.exists(os.path.expandvars(f"%appdata%/Microsoft/Windows/Start Menu/{igame.title.split(':')[0]}.lnk")): + elif os.path.exists( + os.path.expandvars(f"%appdata%/Microsoft/Windows/Start Menu/{igame.title.split(':')[0]}.lnk")): os.remove(os.path.expandvars(f"%appdata%/Microsoft/Windows/Start Menu/{igame.title.split(':')[0]}.lnk")) try: diff --git a/rare/utils/rpc.py b/rare/utils/rpc.py index df674336..4c5cc0f3 100644 --- a/rare/utils/rpc.py +++ b/rare/utils/rpc.py @@ -4,7 +4,6 @@ from logging import getLogger import pypresence.exceptions from PyQt5.QtCore import QObject, QSettings -from PyQt5.QtWidgets import QMessageBox from pypresence import Presence from custom_legendary.core import LegendaryCore @@ -76,7 +75,8 @@ class DiscordRPC(QObject): self.update_rpc(app_name) def update_rpc(self, app_name=None): - if self.settings.value("rpc_enable", 0, int) == 2 or (app_name is None and self.settings.value("rpc_enable", 0, int) == 0): + if self.settings.value("rpc_enable", 0, int) == 2 or ( + app_name is None and self.settings.value("rpc_enable", 0, int) == 0): self.remove_rpc() return title = None diff --git a/setup.py b/setup.py index 456839c3..a22e2f1e 100644 --- a/setup.py +++ b/setup.py @@ -8,16 +8,16 @@ with open("README.md", "r") as fh: long_description = fh.read() requirements = [ - "requests<3.0", - "pillow", - "setuptools", - "wheel", - "PyQt5", - "QtAwesome", - "notify-py", - "psutil", - "pypresence" - ] + "requests<3.0", + "pillow", + "setuptools", + "wheel", + "PyQt5", + "QtAwesome", + "notify-py", + "psutil", + "pypresence" +] if os.name == "nt": requirements.append("pywin32")