diff --git a/Rare/Components/Dialogs/InstallDialog.py b/Rare/Components/Dialogs/InstallDialog.py index a83456c9..04df8288 100644 --- a/Rare/Components/Dialogs/InstallDialog.py +++ b/Rare/Components/Dialogs/InstallDialog.py @@ -23,7 +23,7 @@ class InstallDialog(QDialog): self.layout.addLayout(self.form) - self.ok_btn = QPushButton("Get Download infos") + self.ok_btn = QPushButton("Next") self.ok_btn.clicked.connect(self.ok) self.cancel = QPushButton("Cancel") self.cancel.clicked.connect(lambda: self.close()) diff --git a/Rare/Components/Dialogs/Login/ImportWidget.py b/Rare/Components/Dialogs/Login/ImportWidget.py index d2ca611f..500e46f0 100644 --- a/Rare/Components/Dialogs/Login/ImportWidget.py +++ b/Rare/Components/Dialogs/Login/ImportWidget.py @@ -1,5 +1,8 @@ +import os +from getpass import getuser + from PyQt5.QtCore import pyqtSignal -from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton +from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QLabel, QButtonGroup, QRadioButton from legendary.core import LegendaryCore @@ -12,4 +15,58 @@ class ImportWidget(QWidget): self.core = core self.back = QPushButton("Back") - self.layout.addWidget(self.back) \ No newline at end of file + self.layout.addWidget(self.back) + self.title = QLabel("

Import existing Login session

") + self.title.setWordWrap(True) + self.layout.addWidget(self.title) + appdata_paths = self.get_appdata_paths() + + if len(appdata_paths) == 0: + self.infoText = QLabel("Found Installations here. \nNote: You will get logged out there") + self.infoText.setWordWrap(True) + self.layout.addWidget(self.infoText) + + else: + self.btn_group = QButtonGroup() + for i,p in enumerate(appdata_paths): + radio_button = QRadioButton(p) + if i == 0: + radio_button.setChecked(True) + self.btn_group.addButton(radio_button) + self.layout.addWidget(radio_button) + + self.appdata_path_text = QLabel(self.tr("Appdata path: ") + str(self.core.egl.appdata_path)) + self.appdata_path_text.setWordWrap(True) + self.login_text = QLabel("") + # self.layout.addWidget(self.btn_group) + self.layout.addWidget(self.login_text) + self.layout.addStretch(1) + self.import_btn = QPushButton("Import") + self.layout.addWidget(self.import_btn) + + self.setLayout(self.layout) + + def get_appdata_paths(self) -> list: + if self.core.egl.appdata_path: + return [self.core.egl.appdata_path] + + else: # Linux + wine_paths = [] + possible_wine_paths = [os.path.expanduser('~/Games/epic-games-store/'), + os.path.expanduser('~/.wine/')] + if os.environ.get("WINEPREFIX"): + possible_wine_paths.append(os.environ.get("WINEPREFIX")) + + for i in possible_wine_paths: + if os.path.exists(i): + if os.path.exists(os.path.join(i, "drive_c/users", getuser(), + 'Local Settings/Application Data/EpicGamesLauncher', + 'Saved/Config/Windows')): + wine_paths.append(i) + + if len(wine_paths) > 0: + appdata_dirs = [ + os.path.join(i, "drive_c/users", getuser(), 'Local Settings/Application Data/EpicGamesLauncher', + 'Saved/Config/Windows') for i in wine_paths] + return appdata_dirs + return [] diff --git a/Rare/Components/Dialogs/Login/LoginDialog.py b/Rare/Components/Dialogs/Login/LoginDialog.py index 5803bc04..897deec6 100644 --- a/Rare/Components/Dialogs/Login/LoginDialog.py +++ b/Rare/Components/Dialogs/Login/LoginDialog.py @@ -1,11 +1,10 @@ from PyQt5.QtWidgets import QDialog, QVBoxLayout, QLabel, QStackedLayout, QWidget, QPushButton from legendary.core import LegendaryCore -from Rare.Components.Dialogs.Login import BrowserLogin -from Rare.Components.Dialogs.Login import ImportWidget - # Login Opportunities: Browser, Import +from Rare.Components.Dialogs.Login.BrowserLogin import BrowserLogin +from Rare.Components.Dialogs.Login.ImportWidget import ImportWidget class LoginDialog(QDialog): @@ -16,7 +15,6 @@ class LoginDialog(QDialog): self.core = core self.setWindowTitle("Rare - Login") - self.setGeometry(0, 0, 400, 600) self.init_ui() def init_ui(self): @@ -53,6 +51,7 @@ class LoginDialog(QDialog): self.layout.addWidget(self.browser_widget) self.import_widget = ImportWidget(self.core) + self.import_widget.back.clicked.connect(lambda: self.layout.setCurrentIndex(0)) self.layout.addWidget(self.import_widget) self.layout.addWidget(LoginSuccessfulWidget()) diff --git a/Rare/Components/Launch/LaunchDialog.py b/Rare/Components/Launch/LaunchDialog.py index 423af227..fb21e467 100644 --- a/Rare/Components/Launch/LaunchDialog.py +++ b/Rare/Components/Launch/LaunchDialog.py @@ -4,7 +4,7 @@ from PyQt5.QtCore import QThread, pyqtSignal from PyQt5.QtWidgets import QDialog, QLabel, QProgressBar, QVBoxLayout from legendary.core import LegendaryCore -from Rare.Components.Dialogs.Login import LoginDialog +from Rare.Components.Dialogs.Login.LoginDialog import LoginDialog from Rare.utils.utils import download_images logger = getLogger("Login") diff --git a/Rare/Components/TabWidget.py b/Rare/Components/TabWidget.py index b4b66134..2e286f20 100644 --- a/Rare/Components/TabWidget.py +++ b/Rare/Components/TabWidget.py @@ -1,17 +1,19 @@ from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import QTabWidget, QTabBar, QWidget, QToolButton, QWidgetAction, QMenu +from legendary.core import LegendaryCore from Rare import style_path from Rare.Components.Tabs.Account.AccountWidget import MiniWidget from Rare.Components.Tabs.Downloads.DownloadTab import DownloadTab from Rare.Components.Tabs.Games.GamesTab import Games +from Rare.Components.Tabs.Settings.SettingsTab import SettingsTab class TabWidget(QTabWidget): - def __init__(self, core): + def __init__(self, core: LegendaryCore): super(TabWidget, self).__init__() self.setTabBar(TabBar(2)) - + self.settings = SettingsTab(core) self.game_list = Games(core) self.addTab(self.game_list, self.tr("Games")) self.downloadTab = DownloadTab(core) @@ -26,8 +28,9 @@ class TabWidget(QTabWidget): self.addTab(self.account, "") self.setTabEnabled(3, False) # self.settings = SettingsTab(core) - self.settings = QWidget() - self.addTab(self.settings, QIcon(style_path + "/Icons/settings.png"), "") + + self.addTab(self.settings, QIcon(style_path + "/Icons/settings.png"), None) + self.tabBar().setTabButton(3, self.tabBar().RightSide, TabButtonWidget(core)) def resizeEvent(self, event): @@ -39,6 +42,7 @@ class TabBar(QTabBar): def __init__(self, expanded): super(TabBar, self).__init__() self._expanded = expanded + self.setObjectName("main_tab_bar") def tabSizeHint(self, index): size = super(TabBar, self).tabSizeHint(index) @@ -55,6 +59,7 @@ class TabButtonWidget(QToolButton): super(TabButtonWidget, self).__init__() self.setText("Icon") self.setPopupMode(QToolButton.InstantPopup) + self.setIcon(QIcon(style_path + "/Icons/account.png")) self.setToolTip("Account") self.setMenu(QMenu()) diff --git a/Rare/Components/Tabs/Account/AccountWidget.py b/Rare/Components/Tabs/Account/AccountWidget.py index 333a1aa8..c2a83727 100644 --- a/Rare/Components/Tabs/Account/AccountWidget.py +++ b/Rare/Components/Tabs/Account/AccountWidget.py @@ -11,7 +11,7 @@ class MiniWidget(QWidget): self.layout = QVBoxLayout() self.core = core self.layout.addWidget(QLabel("Account")) - self.layout.addWidget(QLabel("Logged in as "+ self.core.lgd.userdata["display_name"])) + self.layout.addWidget(QLabel("Logged in as " + self.core.lgd.userdata.get("display_name"))) self.open_browser = QPushButton("Account settings") self.open_browser.clicked.connect(self.open_account) @@ -30,8 +30,6 @@ class MiniWidget(QWidget): if reply == QMessageBox.Yes: self.core.lgd.invalidate_userdata() QCoreApplication.exit(0) - # self.core.lgd.invalidate_userdata() - # exit() def open_account(self): - webbrowser.open("https://www.epicgames.com/account/personal?productName=epicgames") \ No newline at end of file + webbrowser.open("https://www.epicgames.com/account/personal?productName=epicgames") diff --git a/Rare/Components/Tabs/Downloads/DownloadTab.py b/Rare/Components/Tabs/Downloads/DownloadTab.py index 94595900..fb9c68d6 100644 --- a/Rare/Components/Tabs/Downloads/DownloadTab.py +++ b/Rare/Components/Tabs/Downloads/DownloadTab.py @@ -3,6 +3,8 @@ import subprocess import time from logging import getLogger +from legendary.models.game import Game +from notifypy import Notify from PyQt5.QtCore import QThread, pyqtSignal from PyQt5.QtWidgets import QWidget, QMessageBox, QVBoxLayout, QLabel, QGridLayout, QProgressBar from legendary.core import LegendaryCore @@ -80,6 +82,7 @@ class DownloadTab(QWidget): super(DownloadTab, self).__init__() self.core = core self.layout = QVBoxLayout() + self.active_game: Game = None self.installing_game = QLabel("Installing Game: None") self.dl_speed = QLabel("Download speed: 0MB/s") @@ -134,7 +137,7 @@ class DownloadTab(QWidget): logger.error('Installation cannot proceed, exiting.') QMessageBox.warning(self, "Installation failed", "Installation failed. See logs for more information") return - + self.active_game = game self.thread = DownloadThread(dlm, self.core, igame) self.thread.status.connect(self.status) self.thread.start() @@ -143,7 +146,11 @@ class DownloadTab(QWidget): if text == "dl_finished": pass elif text == "finish": - QMessageBox.information(self, "Info", "Download finished") + notification = Notify() + notification.title = "Installation finished" + notification.message = f"Download of game {self.active_game.app_title}" + notification.send() + #QMessageBox.information(self, "Info", "Download finished") self.finished.emit() self.installing_game.setText("Installing Game: No running download") elif text == "error": diff --git a/Rare/Components/Tabs/Games/GameWidgetInstalled.py b/Rare/Components/Tabs/Games/GameWidgetInstalled.py index cdab9256..3e7fcc81 100644 --- a/Rare/Components/Tabs/Games/GameWidgetInstalled.py +++ b/Rare/Components/Tabs/Games/GameWidgetInstalled.py @@ -1,7 +1,7 @@ import os from logging import getLogger -from PyQt5.QtCore import QEvent, pyqtSignal +from PyQt5.QtCore import QEvent, pyqtSignal, QSettings from PyQt5.QtGui import QPixmap, QIcon from PyQt5.QtWidgets import * from legendary.core import LegendaryCore @@ -10,7 +10,6 @@ from legendary.models.game import InstalledGame from Rare import style_path from Rare.utils import LegendaryApi from Rare.utils.QtExtensions import ClickableLabel -from Rare.utils.RareConfig import IMAGE_DIR logger = getLogger("GameWidgetInstalled") @@ -25,17 +24,20 @@ class GameWidgetInstalled(QWidget): self.core = core self.game = game self.running = False + settings = QSettings() + + self.IMAGE_DIR = settings.value("img_dir", os.path.expanduser("~/.cache/rare")) self.update_available = self.core.get_asset(self.game.app_name, True).build_version != game.version if self.update_available: logger.info("Update available for game: " + self.game.app_name) - if os.path.exists(f"{IMAGE_DIR}/{game.app_name}/FinalArt.png"): - pixmap = QPixmap(f"{IMAGE_DIR}/{game.app_name}/FinalArt.png") - elif os.path.exists(f"{IMAGE_DIR}/{game.app_name}/DieselGameBoxTall.png"): - pixmap = QPixmap(f"{IMAGE_DIR}/{game.app_name}/DieselGameBoxTall.png") - elif os.path.exists(f"{IMAGE_DIR}/{game.app_name}/DieselGameBoxLogo.png"): - pixmap = QPixmap(f"{IMAGE_DIR}/{game.app_name}/DieselGameBoxLogo.png") + if os.path.exists(f"{self.IMAGE_DIR}/{game.app_name}/FinalArt.png"): + pixmap = QPixmap(f"{self.IMAGE_DIR}/{game.app_name}/FinalArt.png") + elif os.path.exists(f"{self.IMAGE_DIR}/{game.app_name}/DieselGameBoxTall.png"): + pixmap = QPixmap(f"{self.IMAGE_DIR}/{game.app_name}/DieselGameBoxTall.png") + elif os.path.exists(f"{self.IMAGE_DIR}/{game.app_name}/DieselGameBoxLogo.png"): + pixmap = QPixmap(f"{self.IMAGE_DIR}/{game.app_name}/DieselGameBoxLogo.png") else: logger.warning(f"No Image found: {self.game.title}") pixmap = None diff --git a/Rare/Components/Tabs/Games/GameWidgetUninstalled.py b/Rare/Components/Tabs/Games/GameWidgetUninstalled.py index 57ca057b..c7311c2a 100644 --- a/Rare/Components/Tabs/Games/GameWidgetUninstalled.py +++ b/Rare/Components/Tabs/Games/GameWidgetUninstalled.py @@ -1,7 +1,7 @@ import os from logging import getLogger -from PyQt5.QtCore import pyqtSignal +from PyQt5.QtCore import pyqtSignal, QSettings from PyQt5.QtGui import QPixmap from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel from legendary.core import LegendaryCore @@ -9,7 +9,6 @@ from legendary.models.game import Game from Rare.Components.Dialogs.InstallDialog import InstallDialog from Rare.utils.QtExtensions import ClickableLabel -from Rare.utils.RareConfig import IMAGE_DIR from Rare.utils.utils import download_image logger = getLogger("Uninstalled") @@ -24,6 +23,7 @@ class GameWidgetUninstalled(QWidget): self.core = core self.game = game + IMAGE_DIR = QSettings().value("img_dir", type=str) if os.path.exists(f"{IMAGE_DIR}/{game.app_name}/UninstalledArt.png"): pixmap = QPixmap(f"{IMAGE_DIR}/{game.app_name}/UninstalledArt.png") else: diff --git a/Rare/Components/Tabs/Settings/About.py b/Rare/Components/Tabs/Settings/About.py new file mode 100644 index 00000000..d5d61b0a --- /dev/null +++ b/Rare/Components/Tabs/Settings/About.py @@ -0,0 +1,12 @@ +from PyQt5.QtWidgets import QWidget, QVBoxLayout, QFormLayout, QLabel + + +class About(QWidget): + def __init__(self): + super(About, self).__init__() + self.layout = QVBoxLayout() + + self.title = QLabel("

About

") + self.layout.addWidget(self.title) + + self.setLayout(self.layout) \ No newline at end of file diff --git a/Rare/Components/Tabs/Settings/Legendary.py b/Rare/Components/Tabs/Settings/Legendary.py new file mode 100644 index 00000000..a3378386 --- /dev/null +++ b/Rare/Components/Tabs/Settings/Legendary.py @@ -0,0 +1,12 @@ +from PyQt5.QtWidgets import QWidget, QVBoxLayout, QFormLayout, QLabel + + +class LegendarySettings(QWidget): + def __init__(self): + super(LegendarySettings, self).__init__() + self.layout = QVBoxLayout() + + self.title = QLabel("

Legendary settings

") + self.layout.addWidget(self.title) + + self.setLayout(self.layout) \ No newline at end of file diff --git a/Rare/Components/Tabs/Settings/Linux.py b/Rare/Components/Tabs/Settings/Linux.py new file mode 100644 index 00000000..55049e4c --- /dev/null +++ b/Rare/Components/Tabs/Settings/Linux.py @@ -0,0 +1,12 @@ +from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel + + +class LinuxSettings(QWidget): + def __init__(self): + super(LinuxSettings, self).__init__() + self.layout = QVBoxLayout() + + self.title = QLabel("

Linux settings (Wine, dxvk)

") + self.layout.addWidget(self.title) + + self.setLayout(self.layout) diff --git a/Rare/Components/Tabs/Settings/Rare.py b/Rare/Components/Tabs/Settings/Rare.py new file mode 100644 index 00000000..50e88818 --- /dev/null +++ b/Rare/Components/Tabs/Settings/Rare.py @@ -0,0 +1,95 @@ +import os +import shutil +from logging import getLogger + +from PyQt5.QtCore import QSettings, QTranslator +from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QFileDialog, QComboBox, QApplication, QPushButton + +from Rare.utils.QtExtensions import PathEdit +from Rare.utils.utils import get_lang, get_possible_langs + +logger = getLogger("RareSettings") +class RareSettings(QWidget): + def __init__(self): + super(RareSettings, self).__init__() + self.layout = QVBoxLayout() + self.title = QLabel("

Rare settings

") + self.layout.addWidget(self.title) + settings = QSettings() + img_dir = settings.value("img_dir", type=str) + language = settings.value("language", type=str) + # default settings + if not img_dir: + settings.setValue("img_dir", os.path.expanduser("~/.cache/rare/")) + if not language: + settings.setValue("language", get_lang()) + del settings + # select Image dir + self.select_path = PathEdit(img_dir, type_of_file=QFileDialog.DirectoryOnly) + self.select_path.text_edit.textChanged.connect(lambda t: self.save_path_button.setDisabled(False)) + self.save_path_button = QPushButton("Save") + self.save_path_button.clicked.connect(self.save_path) + self.img_dir = SettingsWidget("Image Directory", self.select_path, self.save_path_button) + self.layout.addWidget(self.img_dir) + + # Select lang + self.select_lang = QComboBox() + languages = ["English", "Deutsch"] + self.select_lang.addItems(languages) + if language in get_possible_langs(): + if language == "de": + self.select_lang.setCurrentIndex(1) + elif language == "en": + self.select_lang.setCurrentIndex(0) + else: + self.select_lang.setCurrentIndex(0) + self.lang_widget = SettingsWidget("Language", self.select_lang) + self.select_lang.currentIndexChanged.connect(self.update_lang) + self.layout.addWidget(self.lang_widget) + + self.layout.addStretch() + + self.setLayout(self.layout) + + def save_path(self): + self.save_path_button.setDisabled(True) + self.update_path() + + def update_lang(self, i: int): + settings = QSettings() + if i == 0: + settings.setValue("language", "en") + elif i == 1: + settings.setValue("language", "de") + del settings + self.lang_widget.info_text.setText("Restart Application to activate changes") + + def update_path(self): + settings = QSettings() + old_path = settings.value("img_dir", type=str) + new_path = self.select_path.text() + settings.setValue("img_dir", new_path) + print(old_path, new_path) + del settings + if old_path != new_path: + if os.path.exists(new_path): + os.makedirs(new_path) + logger.info("Move Images") + shutil.move(old_path, new_path) + + + + + +class SettingsWidget(QWidget): + def __init__(self, text: str, widget: QWidget, accept_button: QPushButton=None): + super(SettingsWidget, self).__init__() + self.setObjectName("settings_widget") + self.layout = QVBoxLayout() + self.info_text = QLabel("") + self.layout.addWidget(QLabel(text)) + self.layout.addWidget(widget) + if accept_button: + self.layout.addWidget(accept_button) + self.layout.addWidget(self.info_text) + self.setLayout(self.layout) diff --git a/Rare/Components/Tabs/Settings/SettingsTab.py b/Rare/Components/Tabs/Settings/SettingsTab.py new file mode 100644 index 00000000..d542aad8 --- /dev/null +++ b/Rare/Components/Tabs/Settings/SettingsTab.py @@ -0,0 +1,56 @@ +import os + +from PyQt5.QtCore import QRect, QPoint, QSize +from PyQt5.QtWidgets import QWidget, QTabWidget, QStylePainter, QStyleOptionTab, QTabBar, QStyle, QLabel + +from Rare.Components.Tabs.Settings.About import About +from Rare.Components.Tabs.Settings.Legendary import LegendarySettings +from Rare.Components.Tabs.Settings.Linux import LinuxSettings +from Rare.Components.Tabs.Settings.Rare import RareSettings + + +class SettingsTab(QTabWidget): + def __init__(self, core): + super(SettingsTab, self).__init__() + self.core = core + self.setTabBar(TabBar()) + self.setTabPosition(QTabWidget.West) + self.addTab(RareSettings(), "Rare") + self.addTab(LegendarySettings(), "Legendary") + if os.name != "nt": + self.addTab(LinuxSettings(), "Linux") + self.addTab(About(), "About") + + + +class TabBar(QTabBar): + def __init__(self): + super(TabBar, self).__init__() + self.setObjectName("settings_bar") + + + def tabSizeHint(self, index): + # width = QTabBar.tabSizeHint(self, index).width() + return QSize(200, 30) + + def paintEvent(self, event): + painter = QStylePainter(self) + opt = QStyleOptionTab() + + for i in range(self.count()): + self.initStyleOption(opt, i) + painter.drawControl(QStyle.CE_TabBarTabShape, opt) + painter.save() + + s = opt.rect.size() + s.transpose() + r = QRect(QPoint(), s) + r.moveCenter(opt.rect.center()) + opt.rect = r + + c = self.tabRect(i).center() + painter.translate(c) + painter.rotate(90) + painter.translate(-c) + painter.drawControl(QStyle.CE_TabBarTabLabel, opt); + painter.restore() diff --git a/Rare/Components/Tabs/Settings/__init__.py b/Rare/Components/Tabs/Settings/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/Rare/Main.py b/Rare/Main.py index 4f2bd7b9..65450f35 100644 --- a/Rare/Main.py +++ b/Rare/Main.py @@ -2,16 +2,14 @@ import logging import os import sys -from PyQt5.QtCore import QTranslator +from PyQt5.QtCore import QTranslator, QSettings from PyQt5.QtWidgets import QApplication + from legendary.core import LegendaryCore from Rare import style_path, lang_path from Rare.Components.Launch.LaunchDialog import LaunchDialog from Rare.Components.MainWindow import MainWindow -# from Rare.Start.Launch import LaunchDialog -# from Rare.Start.Login import LoginWindow -# from Rare.utils.RareUtils import get_lang from Rare.utils.utils import get_lang logging.basicConfig( @@ -24,9 +22,11 @@ core = LegendaryCore() def main(): app = QApplication(sys.argv) + settings = QSettings() # Translator translator = QTranslator() - lang = get_lang() + lang = settings.value("language",get_lang() , type=str) + if os.path.exists(lang_path + lang + ".qm"): translator.load(lang_path + lang + ".qm") elif not lang == "en": diff --git a/Rare/Styles/Icons/settings.png b/Rare/Styles/Icons/settings.png index 0fb26453..3d83d9f2 100644 Binary files a/Rare/Styles/Icons/settings.png and b/Rare/Styles/Icons/settings.png differ diff --git a/Rare/Styles/RareStyle.qss b/Rare/Styles/RareStyle.qss index b51f213b..4ac914d4 100644 --- a/Rare/Styles/RareStyle.qss +++ b/Rare/Styles/RareStyle.qss @@ -2,14 +2,16 @@ QWidget { background-color: #202225; color: white; } +QLabel{ + background-color: transparent; +} - -QTabBar::tab { - +QTabBar::tab#main_tab_bar{ + border: none; padding: 5px; } -QTabBar::tab:hover { +QTabBar::tab:hover#main_tab_bar{ background-color: black; } @@ -61,4 +63,18 @@ QCheckBox::indicator:checked { } QPushButton:hover#installed_menu_button{ background-color: green; -} \ No newline at end of file +} + +QTabBar::tab#settings_bar{ + + border-radius: 0; + +} + +QTabBar::tab:hover#settings_bar { + border-left: 2px solid white; +} + +QTabBar::tab::selected#settings_bar { + background-color: darkslategrey; +} diff --git a/Rare/utils/RareConfig.py b/Rare/utils/RareConfig.py deleted file mode 100644 index 6d36d244..00000000 --- a/Rare/utils/RareConfig.py +++ /dev/null @@ -1,36 +0,0 @@ -import configparser -import os -from logging import getLogger - -config_path = os.path.join(os.path.expanduser("~"), ".config/Rare/") -rare_config = configparser.ConfigParser() - -logger = getLogger("Config") -rare_config.read(config_path + "config.ini") - -if not os.path.exists(config_path): - os.makedirs(config_path) - rare_config["Rare"] = { - "IMAGE_DIR": os.path.expanduser(f"~/.cache/images"), - "theme": "default" - } - rare_config.write(open(config_path + "config.ini", "w")) -elif not rare_config.sections(): - rare_config["Rare"] = { - "IMAGE_DIR": os.path.expanduser("~/.cache/images"), - "theme": "default" - } - rare_config.write(open(config_path + "config.ini", "w")) - - -def get_config() -> {}: - return rare_config.__dict__["_sections"] - - -def set_config(new_config: {}): - rare_config.__dict__["_sections"] = new_config - rare_config.write(open(config_path + "config.ini", "w")) - - -IMAGE_DIR = rare_config["Rare"]["IMAGE_DIR"] -THEME = rare_config["Rare"]["theme"] diff --git a/Rare/utils/utils.py b/Rare/utils/utils.py index 0c4abd23..af9b91ca 100644 --- a/Rare/utils/utils.py +++ b/Rare/utils/utils.py @@ -5,13 +5,15 @@ from logging import getLogger import requests from PIL import Image -from PyQt5.QtCore import pyqtSignal, QLocale +from PyQt5.QtCore import pyqtSignal, QLocale, QSettings from legendary.core import LegendaryCore +from Rare import lang_path from Rare.utils import legendaryConfig -from Rare.utils.RareConfig import IMAGE_DIR logger = getLogger("Utils") +s = QSettings() +IMAGE_DIR = s.value("language", os.path.expanduser("~/.cache/rare"), type=str) def download_images(signal: pyqtSignal, core: LegendaryCore): @@ -21,7 +23,12 @@ def download_images(signal: pyqtSignal, core: LegendaryCore): # Download Images for i, game in enumerate(sorted(core.get_game_list(), key=lambda x: x.app_title)): - download_image(game) + + try: + download_image(game) + except json.decoder.JSONDecodeError: + shutil.rmtree(f"{IMAGE_DIR}/{game.app_name}") + download_image(game) signal.emit(i) @@ -94,3 +101,11 @@ def get_lang(): else: logger.info("Found locale in system config: " + QLocale.system().name().split("_")[0]) return QLocale.system().name().split("_")[0] + + +def get_possible_langs(): + langs = ["en"] + for i in os.listdir(lang_path): + if i.endswith(".qm"): + langs.append(i.split(".")[0]) + return langs