From b13cbe24dedf0856ce3d1bb78df81810c87efcdc Mon Sep 17 00:00:00 2001 From: Dummerle Date: Tue, 13 Apr 2021 19:08:49 +0200 Subject: [PATCH] Add Desktop Link for Windows: .bat file --- rare/components/tabs/downloads/__init__.py | 10 +++++--- .../tabs/games/game_info/__init__.py | 25 ------------------- .../tabs/games/game_info/game_settings.py | 2 +- .../game_widgets/base_installed_widget.py | 19 +++++++------- rare/utils/utils.py | 25 ++++++++++++++----- 5 files changed, 37 insertions(+), 44 deletions(-) diff --git a/rare/components/tabs/downloads/__init__.py b/rare/components/tabs/downloads/__init__.py index 6c9896f4..63c7617e 100644 --- a/rare/components/tabs/downloads/__init__.py +++ b/rare/components/tabs/downloads/__init__.py @@ -76,7 +76,7 @@ class DownloadTab(QWidget): self.update_layout.addWidget(widget) widget.update.connect(self.update_game) if QSettings().value("auto_update", False, bool): - self.update_game(igame.app_name) + self.update_game(igame.app_name, True) self.updates.setLayout(self.update_layout) self.layout.addWidget(self.updates) @@ -264,9 +264,13 @@ class DownloadTab(QWidget): def get_time(self, seconds: int) -> str: return str(datetime.timedelta(seconds=seconds)) - def update_game(self, app_name: str): + def update_game(self, app_name: str, auto=False): logger.info("Update " + app_name) - infos = InstallDialog(app_name, self.core, True).get_information() + if not auto: + infos = InstallDialog(app_name, self.core, True).get_information() + else: + self.install_game(InstallOptions(app_name=app_name), True) + return if infos != 0: path, max_workers, force, ignore_free_space = infos self.install_game(InstallOptions(app_name=app_name, max_workers=max_workers, path=path, diff --git a/rare/components/tabs/games/game_info/__init__.py b/rare/components/tabs/games/game_info/__init__.py index 85270c57..c36007e3 100644 --- a/rare/components/tabs/games/game_info/__init__.py +++ b/rare/components/tabs/games/game_info/__init__.py @@ -48,7 +48,6 @@ class GameInfo(QScrollArea): verify_game = pyqtSignal(str) verify_threads = {} action = pyqtSignal(str) - desktop_exists = False def __init__(self, core: LegendaryCore): super(GameInfo, self).__init__() @@ -87,10 +86,6 @@ class GameInfo(QScrollArea): self.install_path.setTextInteractionFlags(Qt.TextSelectableByMouse) right_layout.addWidget(self.install_path) - self.create_desktop_link_button = QPushButton(self.tr("Create Desktop link")) - right_layout.addWidget(self.create_desktop_link_button) - self.create_desktop_link_button.clicked.connect(self.create_desktop_link) - top_layout.addLayout(right_layout) top_layout.addStretch() self.game_actions = GameActions() @@ -105,19 +100,6 @@ class GameInfo(QScrollArea): self.widget.setLayout(self.layout) self.setWidget(self.widget) - def create_desktop_link(self): - if not self.desktop_exists: - create_desktop_link(self.igame.app_name, self.core) - self.create_desktop_link_button.setText(self.tr("Remove Desktop link")) - self.desktop_exists = True - else: - if os.path.exists(os.path.expanduser(f"~/Desktop/{self.igame.title}.desktop")): - os.remove(os.path.expanduser(f"~/Desktop/{self.igame.title}.desktop")) - elif os.path.exists(os.path.expanduser(f"~/Desktop/{self.igame.title}.lnk")): - os.remove(os.path.expanduser(f"~/Desktop/{self.igame.title}.lnk")) - self.desktop_exists = False - self.create_desktop_link_button.setText(self.tr("Create Desktop link")) - def repair(self): repair_file = os.path.join(self.core.lgd.get_tmp_path(), f'{self.game.app_name}.repair') if not os.path.exists(repair_file): @@ -186,13 +168,6 @@ class GameInfo(QScrollArea): self.game_actions.verify_widget.setCurrentIndex(1) self.game_actions.verify_progress_bar.setValue( self.verify_threads[app_name].num / self.verify_threads[app_name].total * 100) - if os.path.exists(os.path.expanduser(f"~/Desktop/{self.igame.title}.desktop")) \ - or os.path.exists(os.path.expanduser(f"~/Desktop/{self.igame.title}.lnk")): - self.create_desktop_link_button.setText(self.tr("Remove Desktop link")) - self.desktop_exists = True - else: - self.create_desktop_link_button.setText(self.tr("Create Desktop link")) - self.desktop_exists = False class GameActions(QGroupBox): diff --git a/rare/components/tabs/games/game_info/game_settings.py b/rare/components/tabs/games/game_info/game_settings.py index 9e63b129..ec728967 100644 --- a/rare/components/tabs/games/game_info/game_settings.py +++ b/rare/components/tabs/games/game_info/game_settings.py @@ -104,7 +104,7 @@ class GameSettings(QScrollArea): if self.game.app_name in self.core.lgd.config.sections() and self.core.lgd.config.get( f"{self.game.app_name}", option, fallback="") != "": self.core.lgd.config.remove_option(self.game.app_name, option) - if self.core.lgd.config[self.game.app_name] == {}: + if not self.core.lgd.config.get(self.game.app_name): self.core.lgd.config.remove_section(self.game.app_name) self.core.lgd.save_config() 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 4d0b78df..ace33412 100644 --- a/rare/components/tabs/games/game_widgets/base_installed_widget.py +++ b/rare/components/tabs/games/game_widgets/base_installed_widget.py @@ -35,16 +35,17 @@ class BaseInstalledWidget(QGroupBox): launch = QAction(self.tr("Launch"), self) launch.triggered.connect(self.launch) self.addAction(launch) + + if os.path.exists(os.path.expanduser(f"~/Desktop/{self.igame.title}.desktop"))\ + or os.path.exists(os.path.expanduser(f"~/Desktop/{self.igame.title}.lnk")): + self.create_desktop = QAction(self.tr("Remove Desktop link")) + else: + self.create_desktop = QAction(self.tr("Create Desktop link")) + + self.create_desktop.triggered.connect(lambda: self.create_desktop_link("desktop")) + self.addAction(self.create_desktop) + if os.name == "posix": - if os.path.exists(os.path.expanduser(f"~/Desktop/{self.igame.title}.desktop"))\ - or os.path.exists(os.path.expanduser(f"~/Desktop/{self.igame.title}.lnk")): - self.create_desktop = QAction(self.tr("Remove Desktop link")) - else: - self.create_desktop = QAction(self.tr("Create Desktop link")) - - self.create_desktop.triggered.connect(lambda: self.create_desktop_link("desktop")) - self.addAction(self.create_desktop) - if os.path.exists(os.path.expanduser(f"~/.local/share/applications/{self.igame.title}.desktop")): self.create_start_menu = QAction(self.tr("Remove start menu link")) else: diff --git a/rare/utils/utils.py b/rare/utils/utils.py index 0709ba1a..bffea2f7 100644 --- a/rare/utils/utils.py +++ b/rare/utils/utils.py @@ -137,7 +137,14 @@ def get_size(b: int) -> str: def create_desktop_link(app_name, core: LegendaryCore, type_of_link="desktop"): igame = core.get_installed_game(app_name) - + if os.path.exists( + os.path.join(QSettings('Rare', 'Rare').value('img_dir', os.path.expanduser('~/.cache/rare/images'), str), + igame.app_name, 'Thumbnail.png')): + icon = os.path.join(QSettings('Rare', 'Rare').value('img_dir', os.path.expanduser('~/.cache/rare/images'), str), + igame.app_name, 'Thumbnail.png') + else: + icon = os.path.join(QSettings('Rare', 'Rare').value('img_dir', os.path.expanduser('~/.cache/rare/images'), str), + igame.app_name, 'DieselGameBoxTall.png') # Linux if os.name == "posix": if type_of_link == "desktop": @@ -147,10 +154,6 @@ def create_desktop_link(app_name, core: LegendaryCore, type_of_link="desktop"): else: return - if os.path.exists(os.path.join(QSettings('Rare', 'Rare').value('img_dir', os.path.expanduser('~/.cache/rare/images'), str), igame.app_name, 'Thumbnail.png')): - icon = os.path.join(QSettings('Rare', 'Rare').value('img_dir', os.path.expanduser('~/.cache/rare/images'), str), igame.app_name, 'Thumbnail.png') - else: - icon = os.path.join(QSettings('Rare', 'Rare').value('img_dir', os.path.expanduser('~/.cache/rare/images'), str), igame.app_name, 'DieselGameBoxTall.png') with open(f"{path}{igame.title}.desktop", "w") as desktop_file: desktop_file.write("[Desktop Entry]\n" f"Name={igame.title}\n" @@ -161,5 +164,15 @@ def create_desktop_link(app_name, core: LegendaryCore, type_of_link="desktop"): "StartupWMClass=rare-game\n" ) os.chmod(os.path.expanduser(f"~/Desktop/{igame.title}.desktop"), 0o755) + + # Windows elif os.name == "nt": - logger.info("Create a shortcut is currently not supported on windows") + if type_of_link == "desktop": + path = os.path.expanduser(f"~/Desktop/") + elif type_of_link == "start_menu": + logger.info("Startmenu link is not supported on windows") + return + else: + return + with open(path+igame.title+".bat", "w") as desktop_file: + desktop_file.write(f"rare launch {app_name}") \ No newline at end of file