1
0
Fork 0
mirror of synced 2024-06-26 10:11:19 +12:00

Cloud saves: use max width; Groupbox Style

This commit is contained in:
Dummerle 2021-04-06 20:55:59 +02:00
parent 478fd17937
commit d0f4e3b7c3
7 changed files with 146 additions and 79 deletions

View file

@ -48,12 +48,9 @@ class SyncSaves(QScrollArea):
def setup_ui(self, saves: list): def setup_ui(self, saves: list):
self.start_thread.disconnect() self.start_thread.disconnect()
self.main_layout = QVBoxLayout() self.main_layout = QVBoxLayout()
self.title = QLabel( self.title = QLabel(
f"<h1>" + self.tr("Cloud Saves") + "</h1>\n" + self.tr("Found Saves for folowing Games")) f"<h1>" + self.tr("Cloud Saves") + "</h1>\n" + self.tr("Found Saves for folowing Games"))
self.main_layout.addWidget(self.title) self.main_layout.addWidget(self.title)
saves_games = [] saves_games = []
@ -78,7 +75,6 @@ class SyncSaves(QScrollArea):
logger.info(f'Got {len(latest_save)} remote save game(s)') logger.info(f'Got {len(latest_save)} remote save game(s)')
self.widgets = [] self.widgets = []
for igame in self.igames: for igame in self.igames:
game = self.core.get_game(igame.app_name) game = self.core.get_game(igame.app_name)
if not game.supports_cloud_saves: if not game.supports_cloud_saves:
@ -92,7 +88,9 @@ class SyncSaves(QScrollArea):
self.widgets.append(sync_widget) self.widgets.append(sync_widget)
self.widget = QWidget() self.widget = QWidget()
self.main_layout.addStretch(1)
self.widget.setLayout(self.main_layout) self.widget.setLayout(self.main_layout)
self.setWidgetResizable(True)
self.setWidget(self.widget) self.setWidget(self.widget)
def reload(self): def reload(self):

View file

@ -2,7 +2,7 @@ import os
from logging import getLogger from logging import getLogger
from PyQt5.QtCore import QThread, pyqtSignal, Qt from PyQt5.QtCore import QThread, pyqtSignal, Qt
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton, QHBoxLayout, QLabel from PyQt5.QtWidgets import QVBoxLayout, QPushButton, QHBoxLayout, QLabel, QGroupBox
from Rare.Components.Dialogs.PathInputDialog import PathInputDialog from Rare.Components.Dialogs.PathInputDialog import PathInputDialog
from custom_legendary.core import LegendaryCore from custom_legendary.core import LegendaryCore
@ -37,12 +37,14 @@ class _DownloadThread(QThread):
self.core.download_saves(self.app_name, self.latest_save.manifest_name, self.save_path, clean_dir=True) self.core.download_saves(self.app_name, self.latest_save.manifest_name, self.save_path, clean_dir=True)
class SyncWidget(QWidget): class SyncWidget(QGroupBox):
reload = pyqtSignal() reload = pyqtSignal()
def __init__(self, igame: InstalledGame, save, core: LegendaryCore): def __init__(self, igame: InstalledGame, save, core: LegendaryCore):
super(SyncWidget, self).__init__() super(SyncWidget, self).__init__(igame.title)
self.setObjectName("group")
self.layout = QVBoxLayout() self.layout = QVBoxLayout()
self.setContentsMargins(10, 20, 10, 20)
self.thr = None self.thr = None
self.core = core self.core = core
self.save = save self.save = save
@ -70,7 +72,7 @@ class SyncWidget(QWidget):
self.logger.info('No cloud or local savegame found.') self.logger.info('No cloud or local savegame found.')
return return
game_title = QLabel(f"<h2>{igame.title}</h2>") # game_title = QLabel(f"<h2>{igame.title}</h2>")
if self.dt_local: if self.dt_local:
local_save_date = QLabel( local_save_date = QLabel(
@ -124,7 +126,7 @@ class SyncWidget(QWidget):
self.upload_button.clicked.connect(self.upload) self.upload_button.clicked.connect(self.upload)
self.download_button.clicked.connect(self.download) self.download_button.clicked.connect(self.download)
self.info_text = QLabel(status) self.info_text = QLabel(status)
self.layout.addWidget(game_title) # self.layout.addWidget(game_title)
self.layout.addWidget(local_save_date) self.layout.addWidget(local_save_date)
self.layout.addWidget(cloud_save_date) self.layout.addWidget(cloud_save_date)
@ -133,6 +135,7 @@ class SyncWidget(QWidget):
self.save_path_text.setTextInteractionFlags(Qt.TextSelectableByMouse) self.save_path_text.setTextInteractionFlags(Qt.TextSelectableByMouse)
self.save_path_text.setWordWrap(True) self.save_path_text.setWordWrap(True)
self.change_save_path = QPushButton(self.tr("Change path")) self.change_save_path = QPushButton(self.tr("Change path"))
self.change_save_path.setFixedWidth(100)
self.change_save_path.clicked.connect(self.change_path) self.change_save_path.clicked.connect(self.change_path)
save_path_layout.addWidget(self.save_path_text) save_path_layout.addWidget(self.save_path_text)
save_path_layout.addWidget(self.change_save_path) save_path_layout.addWidget(self.change_save_path)
@ -142,7 +145,7 @@ class SyncWidget(QWidget):
button_layout.addWidget(self.upload_button) button_layout.addWidget(self.upload_button)
button_layout.addWidget(self.download_button) button_layout.addWidget(self.download_button)
self.layout.addLayout(button_layout) self.layout.addLayout(button_layout)
self.layout.addStretch(1)
self.setLayout(self.layout) self.setLayout(self.layout)
def change_path(self): def change_path(self):

View file

@ -111,6 +111,7 @@ class ImportWidget(QWidget):
if not path: if not path:
path = self.path_edit.text() path = self.path_edit.text()
if not app_name: if not app_name:
# try to find app name
if a_n := self.find_app_name(path): if a_n := self.find_app_name(path):
app_name = a_n app_name = a_n
else: else:
@ -141,7 +142,7 @@ class ImportWidget(QWidget):
continue continue
app_name = self.find_app_name(json_path) app_name = self.find_app_name(json_path)
if not app_name: if not app_name:
logger.warning("Could not find app name") logger.warning("Could not find app name at " + game_path)
continue continue
if LegendaryApi.import_game(self.core, app_name, game_path + path): if LegendaryApi.import_game(self.core, app_name, game_path + path):
@ -166,4 +167,4 @@ class ImportWidget(QWidget):
QMessageBox.information(self, "Imported Games", self.tr("Successfully imported {} Games. Reloading Library").format(imported)) QMessageBox.information(self, "Imported Games", self.tr("Successfully imported {} Games. Reloading Library").format(imported))
self.update_list.emit() self.update_list.emit()
else: else:
QMessageBox.information(self, "Imported Games", "No Games were found") QMessageBox.information(self, "Imported Games", self.tr("No Games were found"))

View file

@ -39,8 +39,7 @@ class LegendarySettings(QWidget):
#cleanup #cleanup
self.clean_layout = QVBoxLayout() self.clean_layout = QVBoxLayout()
self.cleanup_widget = QGroupBox() self.cleanup_widget = QGroupBox(self.tr("Cleanup"))
self.cleanup_widget.setTitle(self.tr("Cleanup"))
self.clean_button = QPushButton(self.tr("Remove everything")) self.clean_button = QPushButton(self.tr("Remove everything"))
self.clean_button.clicked.connect(lambda: self.cleanup(False)) self.clean_button.clicked.connect(lambda: self.cleanup(False))
self.clean_layout.addWidget(self.clean_button) self.clean_layout.addWidget(self.clean_button)
@ -92,7 +91,7 @@ class LegendarySettings(QWidget):
after = self.core.lgd.get_dir_size() after = self.core.lgd.get_dir_size()
logger.info(f'Cleanup complete! Removed {(before - after) / 1024 / 1024:.02f} MiB.') logger.info(f'Cleanup complete! Removed {(before - after) / 1024 / 1024:.02f} MiB.')
if cleaned := (before-after) != 0: if cleaned := (before-after) > 0:
QMessageBox.information(self, "Cleanup", self.tr("Cleanup complete! Successfully removed {} MB").format(round(cleaned / 1024 / 1024, 3))) QMessageBox.information(self, "Cleanup", self.tr("Cleanup complete! Successfully removed {} MB").format(round(cleaned / 1024 / 1024, 3)))
else: else:
QMessageBox.information(self, "Cleanup", "Nothing to clean") QMessageBox.information(self, "Cleanup", "Nothing to clean")

View file

@ -31,14 +31,22 @@ QTabBar::tab:hover#main_tab_bar {
} }
QGroupBox{ QGroupBox{
padding: 4px;
margin: 8px;
}
QGroupBox#game_widget_icon{
border: none; border: none;
padding: 0;
margin: 0;
} }
QGroupBox#group{ QGroupBox#group{
font-size: 15px; font-size: 15px;
font-weight: bold;
border: 1px solid white; border: 1px solid white;
padding: 8px;
margin-top: 10px; margin-top: 10px;
padding: 8px;
} }
QTabBar::tab:disabled { QTabBar::tab:disabled {

Binary file not shown.

View file

@ -27,7 +27,7 @@
<context> <context>
<name>BaseInstalledWidget</name> <name>BaseInstalledWidget</name>
<message> <message>
<location filename="../Components/Tabs/Games/GameWidgets/BaseInstalledWidget.py" line="34"/> <location filename="../Components/Tabs/Games/GameWidgets/BaseInstalledWidget.py" line="36"/>
<source>Do you want to launch {}</source> <source>Do you want to launch {}</source>
<translation>Möchtest du {} starten</translation> <translation>Möchtest du {} starten</translation>
</message> </message>
@ -83,40 +83,45 @@
<translation>Die Größe des Downloads ist 0. Spiel existiert bereits</translation> <translation>Die Größe des Downloads ist 0. Spiel existiert bereits</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="287"/> <location filename="../Components/Tabs/Downloads/DownloadTab.py" line="288"/>
<source>Installation finished</source> <source>Installation finished</source>
<translation>Installation abgeschlossen</translation> <translation>Installation abgeschlossen</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="311"/> <location filename="../Components/Tabs/Downloads/DownloadTab.py" line="312"/>
<source>Installing Game: No active download</source> <source>Installing Game: No active download</source>
<translation>Installierendes Spiel: Kein aktiver Download</translation> <translation>Installierendes Spiel: Kein aktiver Download</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="319"/> <location filename="../Components/Tabs/Downloads/DownloadTab.py" line="320"/>
<source>Download speed</source> <source>Download speed</source>
<translation>Geschwindigkeit</translation> <translation>Geschwindigkeit</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="320"/> <location filename="../Components/Tabs/Downloads/DownloadTab.py" line="321"/>
<source>Cache used</source> <source>Cache used</source>
<translation>Benutzter Cache</translation> <translation>Benutzter Cache</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="321"/> <location filename="../Components/Tabs/Downloads/DownloadTab.py" line="322"/>
<source>Downloaded</source> <source>Downloaded</source>
<translation>Runtergeladen</translation> <translation>Runtergeladen</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="322"/> <location filename="../Components/Tabs/Downloads/DownloadTab.py" line="323"/>
<source>Time left: </source> <source>Time left: </source>
<translation>Zeit übrig: </translation> <translation>Zeit übrig: </translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="288"/> <location filename="../Components/Tabs/Downloads/DownloadTab.py" line="289"/>
<source>Finished Download of game {}</source> <source>Finished Download of game {}</source>
<translation>Downlaod von {} abgeschlossen</translation> <translation>Downlaod von {} abgeschlossen</translation>
</message> </message>
<message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="281"/>
<source>Download finished. Reload library</source>
<translation>Download abgeschlossen. Spiele neu laden</translation>
</message>
</context> </context>
<context> <context>
<name>DxvkWidget</name> <name>DxvkWidget</name>
@ -159,32 +164,32 @@
<context> <context>
<name>GameActions</name> <name>GameActions</name>
<message> <message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="182"/> <location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="189"/>
<source>Uninstall game</source> <source>Uninstall game</source>
<translation>Spiel deinstallieren</translation> <translation>Spiel deinstallieren</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="184"/> <location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="191"/>
<source>Uninstall</source> <source>Uninstall</source>
<translation>Deinstallieren</translation> <translation>Deinstallieren</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="190"/> <location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="197"/>
<source>Verify Game</source> <source>Verify Game</source>
<translation>Spieldateien überprüfen</translation> <translation>Spieldateien überprüfen</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="195"/> <location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="202"/>
<source>Verify</source> <source>Verify</source>
<translation>Überprüfen</translation> <translation>Überprüfen</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="204"/> <location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="211"/>
<source>Repair Game</source> <source>Repair Game</source>
<translation>Spiel reparieren</translation> <translation>Spiel reparieren</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="206"/> <location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="213"/>
<source>Repair</source> <source>Repair</source>
<translation>Reparieren</translation> <translation>Reparieren</translation>
</message> </message>
@ -192,50 +197,50 @@
<context> <context>
<name>GameInfo</name> <name>GameInfo</name>
<message> <message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="106"/> <location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="113"/>
<source>Repair file does not exist or game does not need a repair. Please verify game first</source> <source>Repair file does not exist or game does not need a repair. Please verify game first</source>
<translation>Reparationsdatei existiert nicht oder das Spiel braucht keine Reperatur. Bitte das spiel zuerst überprüfen</translation> <translation>Reparationsdatei existiert nicht oder das Spiel braucht keine Reperatur. Bitte das spiel zuerst überprüfen</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="131"/> <location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="138"/>
<source>Verification failed, {} file(s) corrupted, {} file(s) are missing. Do you want to repair them?</source> <source>Verification failed, {} file(s) corrupted, {} file(s) are missing. Do you want to repair them?</source>
<translation>Überprüfung fehlgeschlagen, {} Datei(en) fehlerhaft, {} Datei(en) fehlen. Willst du das Spiel reparieren?</translation> <translation>Überprüfung fehlgeschlagen, {} Datei(en) fehlerhaft, {} Datei(en) fehlen. Willst du das Spiel reparieren?</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="160"/> <location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="167"/>
<source>Developer: </source> <source>Developer: </source>
<translation>Entwickler: </translation> <translation>Entwickler: </translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="161"/> <location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="168"/>
<source>Install size: </source> <source>Install size: </source>
<translation>Größe: </translation> <translation>Größe: </translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="163"/> <location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="170"/>
<source>Install path: </source> <source>Install path: </source>
<translation>Installationsordner: </translation> <translation>Installationsordner: </translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="98"/> <location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="98"/>
<source>Are you sure to uninstall {}</source> <source>Are you sure to uninstall {}</source>
<translation>Möchtest du {} wirklich deinstallieren</translation> <translation type="obsolete">Möchtest du {} wirklich deinstallieren</translation>
</message> </message>
</context> </context>
<context> <context>
<name>GameList</name> <name>GameList</name>
<message> <message>
<location filename="../Components/Tabs/Games/GameList.py" line="148"/> <location filename="../Components/Tabs/Games/GameList.py" line="151"/>
<source>Launch</source> <source>Launch</source>
<translation>Starten</translation> <translation>Starten</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/GameList.py" line="153"/> <location filename="../Components/Tabs/Games/GameList.py" line="156"/>
<source>Game running</source> <source>Game running</source>
<translation>Spiel läuft</translation> <translation>Spiel läuft</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/GameList.py" line="45"/> <location filename="../Components/Tabs/Games/GameList.py" line="46"/>
<source>Installed Games: {} Available Games: {}</source> <source>Installed Games: {} Available Games: {}</source>
<translation>Installierte Spiele: {} Verfügbare Spiele: {}</translation> <translation>Installierte Spiele: {} Verfügbare Spiele: {}</translation>
</message> </message>
@ -360,22 +365,22 @@
<translation>Keine valide Session gefunden</translation> <translation>Keine valide Session gefunden</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/ImportWidget.py" line="26"/> <location filename="../Components/Tabs/Games/ImportWidget.py" line="27"/>
<source>Back</source> <source>Back</source>
<translation>Zurück</translation> <translation>Zurück</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/ImportWidget.py" line="40"/> <location filename="../Components/Tabs/Games/ImportWidget.py" line="43"/>
<source>Select path to game</source> <source>Select path to game</source>
<translation>Wähle den Pfad zum Spiel</translation> <translation>Wähle den Pfad zum Spiel</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/ImportWidget.py" line="62"/> <location filename="../Components/Tabs/Games/ImportWidget.py" line="65"/>
<source>Import Game</source> <source>Import Game</source>
<translation>Spiel importieren</translation> <translation>Spiel importieren</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/ImportWidget.py" line="70"/> <location filename="../Components/Tabs/Games/ImportWidget.py" line="77"/>
<source>Import all games from Epic Games Launcher</source> <source>Import all games from Epic Games Launcher</source>
<translation>Alle Spiele aus dem Epic Games Launcher importieren</translation> <translation>Alle Spiele aus dem Epic Games Launcher importieren</translation>
</message> </message>
@ -385,45 +390,55 @@
<translation type="obsolete">{} Spiele erfolgreich importiert</translation> <translation type="obsolete">{} Spiele erfolgreich importiert</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/ImportWidget.py" line="43"/> <location filename="../Components/Tabs/Games/ImportWidget.py" line="46"/>
<source>Override app name (Only if imported game from legendary or the app could not find the app name)</source> <source>Override app name (Only if imported game from legendary or the app could not find the app name)</source>
<translation>App Name überschreiben (Nur falls das Spiel von Legendary importiert wird oder der App Name nicht gefunden wird</translation> <translation>App Name überschreiben (Nur falls das Spiel von Legendary importiert wird oder der App Name nicht gefunden wird</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/ImportWidget.py" line="110"/> <location filename="../Components/Tabs/Games/ImportWidget.py" line="118"/>
<source>Could not find app name</source> <source>Could not find app name</source>
<translation>Konnte den Appnamen nicht finden</translation> <translation>Konnte den Appnamen nicht finden</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/ImportWidget.py" line="114"/> <location filename="../Components/Tabs/Games/ImportWidget.py" line="122"/>
<source>Successfully imported {}. Reload library</source> <source>Successfully imported {}. Reload library</source>
<translation>Erfolgreich {} importiert. Spiele neu laden</translation> <translation>Erfolgreich {} importiert. Spiele neu laden</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/ImportWidget.py" line="120"/> <location filename="../Components/Tabs/Games/ImportWidget.py" line="128"/>
<source>Failed to import {}</source> <source>Failed to import {}</source>
<translation>{} Konnte nicht importiert werden</translation> <translation>{} Konnte nicht importiert werden</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/ImportWidget.py" line="159"/> <location filename="../Components/Tabs/Games/ImportWidget.py" line="167"/>
<source>Successfully imported {} Games. Reloading Library</source> <source>Successfully imported {} Games. Reloading Library</source>
<translation>Erfolgreich {} Spiele importiert. Spiele neu laden</translation> <translation>Erfolgreich {} Spiele importiert. Spiele neu laden</translation>
</message> </message>
<message>
<location filename="../Components/Tabs/Games/ImportWidget.py" line="39"/>
<source>Import existing game from Epic Games Launcher</source>
<translation>Ein bereits existierendes Spiel aus dem Epic Games Launcher importieren</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/ImportWidget.py" line="170"/>
<source>No Games were found</source>
<translation>Keine Spiele wurden gefunden</translation>
</message>
</context> </context>
<context> <context>
<name>InfoTabs</name> <name>InfoTabs</name>
<message> <message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="26"/> <location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="27"/>
<source>Back</source> <source>Back</source>
<translation>Zurück</translation> <translation>Zurück</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="30"/> <location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="31"/>
<source>Game Info</source> <source>Game Info</source>
<translation>Spielinfo</translation> <translation>Spielinfo</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="32"/> <location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="33"/>
<source>Settings</source> <source>Settings</source>
<translation>Einstellungen</translation> <translation>Einstellungen</translation>
</message> </message>
@ -431,27 +446,42 @@
<context> <context>
<name>InstallDialog</name> <name>InstallDialog</name>
<message> <message>
<location filename="../Components/Dialogs/InstallDialog.py" line="22"/> <location filename="../Components/Dialogs/InstallDialog.py" line="29"/>
<source>Max workers (0: Default)</source> <source>Max workers (0: Default)</source>
<translation>Maximale Anzahl Downloadprozessen(Standard: 0)</translation> <translation>Maximale Anzahl Downloadprozessen(Standard: 0)</translation>
</message> </message>
<message>
<location filename="../Components/Dialogs/InstallDialog.py" line="20"/>
<source>&lt;h3&gt;Install {}&lt;/h3&gt;</source>
<translation>&lt;h3&gt;Installiere {}&lt;/h3&gt;</translation>
</message>
<message>
<location filename="../Components/Dialogs/InstallDialog.py" line="33"/>
<source>Force download</source>
<translation>Download erzwingen</translation>
</message>
<message>
<location filename="../Components/Dialogs/InstallDialog.py" line="37"/>
<source>Ignore free space (Warning!)</source>
<translation>Freien Speicherplatz ignorieren (Achtung!)</translation>
</message>
</context> </context>
<context> <context>
<name>InstallInfoDialog</name> <name>InstallInfoDialog</name>
<message> <message>
<location filename="../Components/Dialogs/InstallDialog.py" line="55"/> <location filename="../Components/Dialogs/InstallDialog.py" line="70"/>
<source>Download size: {}GB <source>Download size: {}GB
Install size: {}GB</source> Install size: {}GB</source>
<translation>Downloadgröße: {}GB <translation>Downloadgröße: {}GB
Installationsgröße: {} GB</translation> Installationsgröße: {} GB</translation>
</message> </message>
<message> <message>
<location filename="../Components/Dialogs/InstallDialog.py" line="61"/> <location filename="../Components/Dialogs/InstallDialog.py" line="76"/>
<source>Install</source> <source>Install</source>
<translation>Installieren</translation> <translation>Installieren</translation>
</message> </message>
<message> <message>
<location filename="../Components/Dialogs/InstallDialog.py" line="63"/> <location filename="../Components/Dialogs/InstallDialog.py" line="78"/>
<source>Cancel</source> <source>Cancel</source>
<translation>Abbruch</translation> <translation>Abbruch</translation>
</message> </message>
@ -518,22 +548,22 @@ Installationsgröße: {} GB</translation>
<translation>Maximale Anzahl Downloadprozesse (Weniger: langsamer)(Standard: 0)</translation> <translation>Maximale Anzahl Downloadprozesse (Weniger: langsamer)(Standard: 0)</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Settings/Legendary.py" line="43"/> <location filename="../Components/Tabs/Settings/Legendary.py" line="42"/>
<source>Cleanup</source> <source>Cleanup</source>
<translation>Aufräumen</translation> <translation>Aufräumen</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Settings/Legendary.py" line="44"/> <location filename="../Components/Tabs/Settings/Legendary.py" line="43"/>
<source>Remove everything</source> <source>Remove everything</source>
<translation>Alles aufräumen</translation> <translation>Alles aufräumen</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Settings/Legendary.py" line="48"/> <location filename="../Components/Tabs/Settings/Legendary.py" line="47"/>
<source>Clean, but keep manifests</source> <source>Clean, but keep manifests</source>
<translation>Aufräumen, aber Manifests behalten</translation> <translation>Aufräumen, aber Manifests behalten</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/Settings/Legendary.py" line="96"/> <location filename="../Components/Tabs/Settings/Legendary.py" line="95"/>
<source>Cleanup complete! Successfully removed {} MB</source> <source>Cleanup complete! Successfully removed {} MB</source>
<translation>Fertig! Es wurden {} MB entfernt</translation> <translation>Fertig! Es wurden {} MB entfernt</translation>
</message> </message>
@ -695,97 +725,97 @@ Installationsgröße: {} GB</translation>
<context> <context>
<name>SyncWidget</name> <name>SyncWidget</name>
<message> <message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="60"/> <location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="62"/>
<source>Path not found</source> <source>Path not found</source>
<translation>Ordner nicht gefunden</translation> <translation>Ordner nicht gefunden</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="76"/> <location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="78"/>
<source>Local Save date: </source> <source>Local Save date: </source>
<translation>Lokales Speicherdatum: </translation> <translation>Lokales Speicherdatum: </translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="79"/> <location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="81"/>
<source>No Local Save files</source> <source>No Local Save files</source>
<translation>Keine Lokalen Dateien</translation> <translation>Keine Lokalen Dateien</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="81"/> <location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="83"/>
<source>Cloud save date: </source> <source>Cloud save date: </source>
<translation>Online Speicherdatum: </translation> <translation>Online Speicherdatum: </translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="83"/> <location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="85"/>
<source>No Cloud saves</source> <source>No Cloud saves</source>
<translation>Keine Online Speicherstände</translation> <translation>Keine Online Speicherstände</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="87"/> <location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="89"/>
<source>Game is up to date</source> <source>Game is up to date</source>
<translation>Spiel ist aktuell</translation> <translation>Spiel ist aktuell</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="88"/> <location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="90"/>
<source>Upload anyway</source> <source>Upload anyway</source>
<translation>Trotzdem hochladen</translation> <translation>Trotzdem hochladen</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="89"/> <location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="91"/>
<source>Download anyway</source> <source>Download anyway</source>
<translation>Trotzdem herunterladen</translation> <translation>Trotzdem herunterladen</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="91"/> <location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="93"/>
<source>Cloud save is newer</source> <source>Cloud save is newer</source>
<translation>Online Speicherstand ist aktueller</translation> <translation>Online Speicherstand ist aktueller</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="92"/> <location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="94"/>
<source>Download Cloud saves</source> <source>Download Cloud saves</source>
<translation>Online Speicherstand herunterladen</translation> <translation>Online Speicherstand herunterladen</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="96"/> <location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="98"/>
<source>Upload Saves</source> <source>Upload Saves</source>
<translation>Spielstände hochladen</translation> <translation>Spielstände hochladen</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="107"/> <location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="109"/>
<source>Local save is newer</source> <source>Local save is newer</source>
<translation>Lokaler Speicher ist aktueller</translation> <translation>Lokaler Speicher ist aktueller</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="108"/> <location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="110"/>
<source>Upload saves</source> <source>Upload saves</source>
<translation>Spielstände hochladen</translation> <translation>Spielstände hochladen</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="112"/> <location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="114"/>
<source>Download saves</source> <source>Download saves</source>
<translation>Spielstand herunterladen</translation> <translation>Spielstand herunterladen</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="134"/> <location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="137"/>
<source>Change path</source> <source>Change path</source>
<translation>Pfad ändern</translation> <translation>Pfad ändern</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="159"/> <location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="161"/>
<source>Uploading...</source> <source>Uploading...</source>
<translation>Hochladen...</translation> <translation>Hochladen...</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="167"/> <location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="169"/>
<source>Upload finished</source> <source>Upload finished</source>
<translation>Hochladen abgeschlossen</translation> <translation>Hochladen abgeschlossen</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="177"/> <location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="179"/>
<source>Downloading...</source> <source>Downloading...</source>
<translation>Runterladen...</translation> <translation>Runterladen...</translation>
</message> </message>
<message> <message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="183"/> <location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="185"/>
<source>Download finished</source> <source>Download finished</source>
<translation>Download abgeschlossen</translation> <translation>Download abgeschlossen</translation>
</message> </message>
@ -798,10 +828,38 @@ Installationsgröße: {} GB</translation>
<translation>Spiele</translation> <translation>Spiele</translation>
</message> </message>
</context> </context>
<context>
<name>UninstallDialog</name>
<message>
<location filename="../Components/Dialogs/UninstallDialog.py" line="13"/>
<source>Do you really want to uninstall {}</source>
<translation>Möchtest du wirklich {} deinstallieren</translation>
</message>
<message>
<location filename="../Components/Dialogs/UninstallDialog.py" line="15"/>
<source>Keep Files</source>
<translation>Dateien behalten</translation>
</message>
<message>
<location filename="../Components/Dialogs/UninstallDialog.py" line="18"/>
<source>Do you want to keep files?</source>
<translation>Willst du die Dateien behalten?</translation>
</message>
<message>
<location filename="../Components/Dialogs/UninstallDialog.py" line="22"/>
<source>Uninstall</source>
<translation>Deinstallieren</translation>
</message>
<message>
<location filename="../Components/Dialogs/UninstallDialog.py" line="25"/>
<source>Cancel</source>
<translation>Abbruch</translation>
</message>
</context>
<context> <context>
<name>UpdateWidget</name> <name>UpdateWidget</name>
<message> <message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="349"/> <location filename="../Components/Tabs/Downloads/DownloadTab.py" line="352"/>
<source>Update Game</source> <source>Update Game</source>
<translation>Spiel updaten</translation> <translation>Spiel updaten</translation>
</message> </message>