1
0
Fork 0
mirror of synced 2024-06-17 01:54:46 +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):
self.start_thread.disconnect()
self.main_layout = QVBoxLayout()
self.title = QLabel(
f"<h1>" + self.tr("Cloud Saves") + "</h1>\n" + self.tr("Found Saves for folowing Games"))
self.main_layout.addWidget(self.title)
saves_games = []
@ -78,7 +75,6 @@ class SyncSaves(QScrollArea):
logger.info(f'Got {len(latest_save)} remote save game(s)')
self.widgets = []
for igame in self.igames:
game = self.core.get_game(igame.app_name)
if not game.supports_cloud_saves:
@ -92,7 +88,9 @@ class SyncSaves(QScrollArea):
self.widgets.append(sync_widget)
self.widget = QWidget()
self.main_layout.addStretch(1)
self.widget.setLayout(self.main_layout)
self.setWidgetResizable(True)
self.setWidget(self.widget)
def reload(self):

View file

@ -2,7 +2,7 @@ import os
from logging import getLogger
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 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)
class SyncWidget(QWidget):
class SyncWidget(QGroupBox):
reload = pyqtSignal()
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.setContentsMargins(10, 20, 10, 20)
self.thr = None
self.core = core
self.save = save
@ -70,7 +72,7 @@ class SyncWidget(QWidget):
self.logger.info('No cloud or local savegame found.')
return
game_title = QLabel(f"<h2>{igame.title}</h2>")
# game_title = QLabel(f"<h2>{igame.title}</h2>")
if self.dt_local:
local_save_date = QLabel(
@ -124,7 +126,7 @@ class SyncWidget(QWidget):
self.upload_button.clicked.connect(self.upload)
self.download_button.clicked.connect(self.download)
self.info_text = QLabel(status)
self.layout.addWidget(game_title)
# self.layout.addWidget(game_title)
self.layout.addWidget(local_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.setWordWrap(True)
self.change_save_path = QPushButton(self.tr("Change path"))
self.change_save_path.setFixedWidth(100)
self.change_save_path.clicked.connect(self.change_path)
save_path_layout.addWidget(self.save_path_text)
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.download_button)
self.layout.addLayout(button_layout)
self.layout.addStretch(1)
self.setLayout(self.layout)
def change_path(self):

View file

@ -111,6 +111,7 @@ class ImportWidget(QWidget):
if not path:
path = self.path_edit.text()
if not app_name:
# try to find app name
if a_n := self.find_app_name(path):
app_name = a_n
else:
@ -141,7 +142,7 @@ class ImportWidget(QWidget):
continue
app_name = self.find_app_name(json_path)
if not app_name:
logger.warning("Could not find app name")
logger.warning("Could not find app name at " + game_path)
continue
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))
self.update_list.emit()
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
self.clean_layout = QVBoxLayout()
self.cleanup_widget = QGroupBox()
self.cleanup_widget.setTitle(self.tr("Cleanup"))
self.cleanup_widget = QGroupBox(self.tr("Cleanup"))
self.clean_button = QPushButton(self.tr("Remove everything"))
self.clean_button.clicked.connect(lambda: self.cleanup(False))
self.clean_layout.addWidget(self.clean_button)
@ -92,7 +91,7 @@ class LegendarySettings(QWidget):
after = self.core.lgd.get_dir_size()
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)))
else:
QMessageBox.information(self, "Cleanup", "Nothing to clean")

View file

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

Binary file not shown.

View file

@ -27,7 +27,7 @@
<context>
<name>BaseInstalledWidget</name>
<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>
<translation>Möchtest du {} starten</translation>
</message>
@ -83,40 +83,45 @@
<translation>Die Größe des Downloads ist 0. Spiel existiert bereits</translation>
</message>
<message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="287"/>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="288"/>
<source>Installation finished</source>
<translation>Installation abgeschlossen</translation>
</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>
<translation>Installierendes Spiel: Kein aktiver Download</translation>
</message>
<message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="319"/>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="320"/>
<source>Download speed</source>
<translation>Geschwindigkeit</translation>
</message>
<message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="320"/>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="321"/>
<source>Cache used</source>
<translation>Benutzter Cache</translation>
</message>
<message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="321"/>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="322"/>
<source>Downloaded</source>
<translation>Runtergeladen</translation>
</message>
<message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="322"/>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="323"/>
<source>Time left: </source>
<translation>Zeit übrig: </translation>
</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>
<translation>Downlaod von {} abgeschlossen</translation>
</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>
<name>DxvkWidget</name>
@ -159,32 +164,32 @@
<context>
<name>GameActions</name>
<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>
<translation>Spiel deinstallieren</translation>
</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>
<translation>Deinstallieren</translation>
</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>
<translation>Spieldateien überprüfen</translation>
</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>
<translation>Überprüfen</translation>
</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>
<translation>Spiel reparieren</translation>
</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>
<translation>Reparieren</translation>
</message>
@ -192,50 +197,50 @@
<context>
<name>GameInfo</name>
<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>
<translation>Reparationsdatei existiert nicht oder das Spiel braucht keine Reperatur. Bitte das spiel zuerst überprüfen</translation>
</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>
<translation>Überprüfung fehlgeschlagen, {} Datei(en) fehlerhaft, {} Datei(en) fehlen. Willst du das Spiel reparieren?</translation>
</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>
<translation>Entwickler: </translation>
</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>
<translation>Größe: </translation>
</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>
<translation>Installationsordner: </translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="98"/>
<source>Are you sure to uninstall {}</source>
<translation>Möchtest du {} wirklich deinstallieren</translation>
<translation type="obsolete">Möchtest du {} wirklich deinstallieren</translation>
</message>
</context>
<context>
<name>GameList</name>
<message>
<location filename="../Components/Tabs/Games/GameList.py" line="148"/>
<location filename="../Components/Tabs/Games/GameList.py" line="151"/>
<source>Launch</source>
<translation>Starten</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/GameList.py" line="153"/>
<location filename="../Components/Tabs/Games/GameList.py" line="156"/>
<source>Game running</source>
<translation>Spiel läuft</translation>
</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>
<translation>Installierte Spiele: {} Verfügbare Spiele: {}</translation>
</message>
@ -360,22 +365,22 @@
<translation>Keine valide Session gefunden</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/ImportWidget.py" line="26"/>
<location filename="../Components/Tabs/Games/ImportWidget.py" line="27"/>
<source>Back</source>
<translation>Zurück</translation>
</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>
<translation>Wähle den Pfad zum Spiel</translation>
</message>
<message>
<location filename="../Components/Tabs/Games/ImportWidget.py" line="62"/>
<location filename="../Components/Tabs/Games/ImportWidget.py" line="65"/>
<source>Import Game</source>
<translation>Spiel importieren</translation>
</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>
<translation>Alle Spiele aus dem Epic Games Launcher importieren</translation>
</message>
@ -385,45 +390,55 @@
<translation type="obsolete">{} Spiele erfolgreich importiert</translation>
</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>
<translation>App Name überschreiben (Nur falls das Spiel von Legendary importiert wird oder der App Name nicht gefunden wird</translation>
</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>
<translation>Konnte den Appnamen nicht finden</translation>
</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>
<translation>Erfolgreich {} importiert. Spiele neu laden</translation>
</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>
<translation>{} Konnte nicht importiert werden</translation>
</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>
<translation>Erfolgreich {} Spiele importiert. Spiele neu laden</translation>
</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>
<name>InfoTabs</name>
<message>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="26"/>
<location filename="../Components/Tabs/Games/GameInfo/GameInfo.py" line="27"/>
<source>Back</source>
<translation>Zurück</translation>
</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>
<translation>Spielinfo</translation>
</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>
<translation>Einstellungen</translation>
</message>
@ -431,27 +446,42 @@
<context>
<name>InstallDialog</name>
<message>
<location filename="../Components/Dialogs/InstallDialog.py" line="22"/>
<location filename="../Components/Dialogs/InstallDialog.py" line="29"/>
<source>Max workers (0: Default)</source>
<translation>Maximale Anzahl Downloadprozessen(Standard: 0)</translation>
</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>
<name>InstallInfoDialog</name>
<message>
<location filename="../Components/Dialogs/InstallDialog.py" line="55"/>
<location filename="../Components/Dialogs/InstallDialog.py" line="70"/>
<source>Download size: {}GB
Install size: {}GB</source>
<translation>Downloadgröße: {}GB
Installationsgröße: {} GB</translation>
</message>
<message>
<location filename="../Components/Dialogs/InstallDialog.py" line="61"/>
<location filename="../Components/Dialogs/InstallDialog.py" line="76"/>
<source>Install</source>
<translation>Installieren</translation>
</message>
<message>
<location filename="../Components/Dialogs/InstallDialog.py" line="63"/>
<location filename="../Components/Dialogs/InstallDialog.py" line="78"/>
<source>Cancel</source>
<translation>Abbruch</translation>
</message>
@ -518,22 +548,22 @@ Installationsgröße: {} GB</translation>
<translation>Maximale Anzahl Downloadprozesse (Weniger: langsamer)(Standard: 0)</translation>
</message>
<message>
<location filename="../Components/Tabs/Settings/Legendary.py" line="43"/>
<location filename="../Components/Tabs/Settings/Legendary.py" line="42"/>
<source>Cleanup</source>
<translation>Aufräumen</translation>
</message>
<message>
<location filename="../Components/Tabs/Settings/Legendary.py" line="44"/>
<location filename="../Components/Tabs/Settings/Legendary.py" line="43"/>
<source>Remove everything</source>
<translation>Alles aufräumen</translation>
</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>
<translation>Aufräumen, aber Manifests behalten</translation>
</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>
<translation>Fertig! Es wurden {} MB entfernt</translation>
</message>
@ -695,97 +725,97 @@ Installationsgröße: {} GB</translation>
<context>
<name>SyncWidget</name>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="60"/>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="62"/>
<source>Path not found</source>
<translation>Ordner nicht gefunden</translation>
</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>
<translation>Lokales Speicherdatum: </translation>
</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>
<translation>Keine Lokalen Dateien</translation>
</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>
<translation>Online Speicherdatum: </translation>
</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>
<translation>Keine Online Speicherstände</translation>
</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>
<translation>Spiel ist aktuell</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="88"/>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="90"/>
<source>Upload anyway</source>
<translation>Trotzdem hochladen</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="89"/>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="91"/>
<source>Download anyway</source>
<translation>Trotzdem herunterladen</translation>
</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>
<translation>Online Speicherstand ist aktueller</translation>
</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>
<translation>Online Speicherstand herunterladen</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="96"/>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="98"/>
<source>Upload Saves</source>
<translation>Spielstände hochladen</translation>
</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>
<translation>Lokaler Speicher ist aktueller</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="108"/>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="110"/>
<source>Upload saves</source>
<translation>Spielstände hochladen</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="112"/>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="114"/>
<source>Download saves</source>
<translation>Spielstand herunterladen</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="134"/>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="137"/>
<source>Change path</source>
<translation>Pfad ändern</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="159"/>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="161"/>
<source>Uploading...</source>
<translation>Hochladen...</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="167"/>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="169"/>
<source>Upload finished</source>
<translation>Hochladen abgeschlossen</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="177"/>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="179"/>
<source>Downloading...</source>
<translation>Runterladen...</translation>
</message>
<message>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="183"/>
<location filename="../Components/Tabs/CloudSaves/SyncWidget.py" line="185"/>
<source>Download finished</source>
<translation>Download abgeschlossen</translation>
</message>
@ -798,10 +828,38 @@ Installationsgröße: {} GB</translation>
<translation>Spiele</translation>
</message>
</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>
<name>UpdateWidget</name>
<message>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="349"/>
<location filename="../Components/Tabs/Downloads/DownloadTab.py" line="352"/>
<source>Update Game</source>
<translation>Spiel updaten</translation>
</message>