1
0
Fork 0
mirror of synced 2024-06-02 02:34:40 +12:00
Rare/rare/components/tabs/settings/rare.py

128 lines
5.2 KiB
Python
Raw Normal View History

2021-02-20 00:57:55 +13:00
import os
import shutil
import subprocess
import sys
2021-02-20 00:57:55 +13:00
from logging import getLogger
2021-04-08 20:38:24 +12:00
from PyQt5.QtCore import QSettings, Qt
from PyQt5.QtWidgets import QVBoxLayout, QFileDialog, QComboBox, QPushButton, QCheckBox, QGroupBox, QScrollArea
2021-02-20 00:57:55 +13:00
2021-04-13 06:31:12 +12:00
from rare.components.tabs.settings.rpc_settings import RPCSettings
2021-04-08 08:42:30 +12:00
from rare.components.tabs.settings.settings_widget import SettingsWidget
2021-04-08 08:39:23 +12:00
from rare.utils.extra_widgets import PathEdit
from rare.utils.utils import get_lang, get_possible_langs
2021-02-20 00:57:55 +13:00
logger = getLogger("RareSettings")
2021-02-20 06:09:00 +13:00
languages = [
("en", "English"),
("de", "Deutsch"),
("fr", "Français")
]
2021-02-20 06:09:00 +13:00
2021-04-08 20:38:24 +12:00
class RareSettings(QScrollArea):
2021-02-20 00:57:55 +13:00
def __init__(self):
super(RareSettings, self).__init__()
2021-04-08 20:38:24 +12:00
self.widget = QGroupBox(self.tr("Rare settings"))
self.widget.setObjectName("group")
self.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
self.setWidgetResizable(True)
# (option_name, group_text, checkbox_text, default
self.checkboxes = [
("sys_tray", self.tr("Hide to System Tray Icon"), self.tr("Exit to System Tray Icon"), True),
("auto_update", self.tr("Automatically update Games on startup"), self.tr("Auto updates"),
False),
("confirm_start", self.tr("Confirm launch of game"), self.tr("Confirm launch of game"),
False),
("auto_sync_cloud", self.tr("Auto sync with cloud"), self.tr("Sync with cloud"), True),
("notification", self.tr("Show Notifications after Downloads"), self.tr("Show notification"),
True),
("save_size", self.tr("Save size of window after restart"), self.tr("Save size"), False)
]
2021-02-20 00:57:55 +13:00
self.layout = QVBoxLayout()
self.settings = QSettings()
img_dir = self.settings.value("img_dir", os.path.expanduser("~/.cache/rare/images/"), type=str)
language = self.settings.value("language", get_lang(), type=str)
2021-02-20 00:57:55 +13:00
# 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(self.tr("Save"))
2021-02-20 00:57:55 +13:00
self.save_path_button.clicked.connect(self.save_path)
2021-03-01 08:01:15 +13:00
self.img_dir = SettingsWidget(self.tr("Image Directory"), self.select_path, self.save_path_button)
2021-02-20 00:57:55 +13:00
self.layout.addWidget(self.img_dir)
# Select lang
self.select_lang = QComboBox()
self.select_lang.addItems([i[1] for i in languages])
2021-02-20 00:57:55 +13:00
if language in get_possible_langs():
index = [lang[0] for lang in languages].index(language)
self.select_lang.setCurrentIndex(index)
2021-02-20 00:57:55 +13:00
else:
self.select_lang.setCurrentIndex(0)
self.lang_widget = SettingsWidget(self.tr("Language"), self.select_lang)
2021-02-20 00:57:55 +13:00
self.select_lang.currentIndexChanged.connect(self.update_lang)
self.layout.addWidget(self.lang_widget)
2021-04-13 06:31:12 +12:00
self.rpc = RPCSettings()
self.layout.addWidget(self.rpc)
for option, head_text, text, default in self.checkboxes:
checkbox = SettingsCheckbox(option, text, default)
settings_widget = SettingsWidget(head_text, checkbox)
self.layout.addWidget(settings_widget)
2021-04-11 00:58:34 +12:00
self.open_log_dir = QPushButton(self.tr("Open Log directory"))
self.layout.addWidget(self.open_log_dir)
self.open_log_dir.clicked.connect(self.open_dir)
2021-02-20 00:57:55 +13:00
self.layout.addStretch()
2021-04-08 20:38:24 +12:00
self.widget.setLayout(self.layout)
self.setWidget(self.widget)
2021-02-20 00:57:55 +13:00
def open_dir(self):
logdir = os.path.expanduser("~/.cache/rare/logs")
if os.name == "nt":
os.startfile(logdir)
else:
opener = "open" if sys.platform == "darwin" else "xdg-open"
subprocess.Popen([opener, logdir])
def save_window_size(self):
self.settings.setValue("save_size", self.save_size.isChecked())
self.settings.remove("window_size")
2021-02-20 00:57:55 +13:00
def save_path(self):
self.save_path_button.setDisabled(True)
self.update_path()
def update_lang(self, i: int):
self.settings.setValue("language", languages[i][0])
2021-03-01 08:01:15 +13:00
self.lang_widget.info_text.setText(self.tr("Restart Application to activate changes"))
2021-02-20 00:57:55 +13:00
def update_path(self):
old_path = self.settings.value("img_dir", type=str)
2021-02-20 00:57:55 +13:00
new_path = self.select_path.text()
2021-03-01 00:56:13 +13:00
2021-02-20 00:57:55 +13:00
if old_path != new_path:
2021-02-28 03:31:14 +13:00
if not os.path.exists(new_path):
2021-02-20 00:57:55 +13:00
os.makedirs(new_path)
2021-03-01 00:56:13 +13:00
elif len(os.listdir(new_path)) > 0:
logger.warning("New directory is not empty")
return
2021-02-20 00:57:55 +13:00
logger.info("Move Images")
2021-03-01 00:56:13 +13:00
for i in os.listdir(old_path):
shutil.move(os.path.join(old_path, i), os.path.join(new_path, i))
os.rmdir(old_path)
self.settings.setValue("img_dir", new_path)
class SettingsCheckbox(QCheckBox):
def __init__(self, option, text, default):
super(SettingsCheckbox, self).__init__(text)
self.option = option
self.settings = QSettings()
self.setChecked(self.settings.value(option, default, bool))
self.stateChanged.connect(lambda: self.settings.setValue(option, self.isChecked()))