From 740153bd0d02ce7002895391209c2b96fb9eea53 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Sat, 18 Sep 2021 16:34:43 +0200 Subject: [PATCH] Fix create startmenu/desktop link --- README.md | 6 ++-- rare/__init__.py | 1 + rare/__main__.py | 17 ++++++--- .../game_widgets/base_installed_widget.py | 19 +++++----- rare/components/tabs/settings/rare.py | 36 +++++++++++-------- rare/components/tabs/shop/game_widgets.py | 1 - rare/components/tabs/shop/shop_widget.py | 3 +- rare/utils/utils.py | 15 +++----- start.sh | 2 -- 9 files changed, 55 insertions(+), 45 deletions(-) delete mode 100755 start.sh diff --git a/README.md b/README.md index aac9733f..4060ee36 100644 --- a/README.md +++ b/README.md @@ -42,10 +42,10 @@ In [releases page](https://github.com/Dummerle/Rare/releases) are AppImages for available ### Run from source - -1. Run `pip install -r requirements.txt` to get dependencies. If you use `pacman` you can +1. Clone the repo with Submodule: `git clone https://github.com/Dummerle/Rare --recurse-submodules`. +2. Run `pip install -r requirements.txt` to get dependencies. If you use `pacman` you can run `sudo pacman --needed -S python-wheel python-setuptools python-pyqt5 python-qtawesome python-requests python-pillow` -2. For unix operating systems run `sh start.sh`. For windows run `set PYTHONPATH=%CD% && python rare` +3. Run `python3 rare` ## Why Rare? diff --git a/rare/__init__.py b/rare/__init__.py index 31f3d859..e80b41e7 100644 --- a/rare/__init__.py +++ b/rare/__init__.py @@ -4,6 +4,7 @@ __version__ = "1.6.2" resources_path = os.path.join(os.path.dirname(__file__), "resources") languages_path = os.path.join(os.path.dirname(__file__), "languages") +data_dir = "" # Cache Directory: Store images if p := os.getenv("XDG_CACHE_HOME"): diff --git a/rare/__main__.py b/rare/__main__.py index db9db708..31bb65f3 100644 --- a/rare/__main__.py +++ b/rare/__main__.py @@ -5,11 +5,10 @@ import pathlib import sys from argparse import ArgumentParser -from rare import __version__, data_dir -from rare.utils import singleton - def main(): + # disable debug.log file + # QOpenGLDebugLogger.disableMessages(QOpenGLDebugLogger(), QOpenGLDebugMessage.AnySource, QOpenGLDebugMessage.AnyType) # fix cx_freeze import multiprocessing multiprocessing.freeze_support() @@ -17,6 +16,9 @@ def main(): # insert legendary submodule to path sys.path.insert(0, os.path.join(pathlib.Path(__file__).parent.parent.absolute(), "legendary")) + # insert source directory + sys.path.insert(0, str(pathlib.Path(__file__).parent.parent.absolute())) + # CLI Options parser = ArgumentParser() parser.add_argument("-V", "--version", action="store_true", help="Shows version and exits") @@ -36,24 +38,31 @@ def main(): args = parser.parse_args() + if args.debug: + print(sys.path) + if args.desktop_shortcut: from rare.utils import utils utils.create_rare_desktop_link("desktop") print("Link created") + if args.startmenu_shortcut: from rare.utils import utils utils.create_rare_desktop_link("start_menu") print("link created") if args.version: + from rare import __version__ print(__version__) return + from rare.utils import singleton try: # this object only allows one instance per machine + me = singleton.SingleInstance() except singleton.SingleInstanceException: print("Rare is already running") - + from rare import data_dir with open(os.path.join(data_dir, "lockfile"), "w") as file: if args.subparser == "launch": file.write("launch " + args.app_name) 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 30f99525..eacf14f3 100644 --- a/rare/components/tabs/games/game_widgets/base_installed_widget.py +++ b/rare/components/tabs/games/game_widgets/base_installed_widget.py @@ -55,9 +55,9 @@ class BaseInstalledWidget(QGroupBox): 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 not is_origin: + self.create_desktop.triggered.connect(lambda: self.create_desktop_link("desktop")) + self.addAction(self.create_desktop) if platform.system() == "Linux": start_menu_file = os.path.expanduser(f"~/.local/share/applications/{self.game.app_title}.desktop") @@ -69,9 +69,9 @@ class BaseInstalledWidget(QGroupBox): self.create_start_menu = QAction(self.tr("Remove start menu link")) else: self.create_start_menu = QAction(self.tr("Create start menu link")) - - self.create_start_menu.triggered.connect(lambda: self.create_desktop_link("start_menu")) - self.addAction(self.create_start_menu) + if not is_origin: + self.create_start_menu.triggered.connect(lambda: self.create_desktop_link("start_menu")) + self.addAction(self.create_start_menu) reload_image = QAction(self.tr("Reload Image"), self) reload_image.triggered.connect(self.reload_image) @@ -99,8 +99,11 @@ class BaseInstalledWidget(QGroupBox): return if not (os.path.exists(os.path.expanduser(f"{path}{self.game.app_title}.desktop")) or os.path.exists(os.path.expanduser(f"{path}{self.game.app_title}.lnk"))): - if not create_desktop_link(self.game.app_name, self.core, type_of_link): - return + try: + if not create_desktop_link(self.game.app_name, self.core, type_of_link): + return + except PermissionError: + QMessageBox.warning(self, "Error", "Permission error. Cannot create Desktop Link") if type_of_link == "desktop": self.create_desktop.setText(self.tr("Remove Desktop link")) elif type_of_link == "start_menu": diff --git a/rare/components/tabs/settings/rare.py b/rare/components/tabs/settings/rare.py index 4214994f..2ac85a49 100644 --- a/rare/components/tabs/settings/rare.py +++ b/rare/components/tabs/settings/rare.py @@ -5,7 +5,7 @@ import sys from logging import getLogger from PyQt5.QtCore import QSettings, Qt -from PyQt5.QtWidgets import QWidget +from PyQt5.QtWidgets import QWidget, QMessageBox from legendary.core import LegendaryCore from rare import cache_dir @@ -101,12 +101,11 @@ class RareSettings(QWidget, Ui_RareSettings): ) if platform.system() == "Linux": - self.desktop_file = os.path.expanduser("~/Desktop/Rare.desktop") self.start_menu_link = os.path.expanduser("~/.local/share/applications/Rare.desktop") elif platform.system() == "Windows": self.desktop_file = os.path.expanduser("~/Desktop/Rare.lnk") - self.start_menu_link = os.path.expandvars("%appdata%/Microsoft/Windows/Start Menu") + self.start_menu_link = os.path.expandvars("%appdata%\\Microsoft\\Windows\\Start Menu") else: self.desktop_file = "" self.start_menu_link = "" @@ -138,20 +137,27 @@ class RareSettings(QWidget, Ui_RareSettings): self.log_dir_size_label.setText("0KB") def create_start_menu_link(self): - if not os.path.exists(self.start_menu_link): - utils.create_rare_desktop_link("start_menu") - self.startmenu_link.setText(self.tr("Remove start menu link")) - else: - os.remove(self.start_menu_link) - self.startmenu_link.setText(self.tr("Create start menu link")) + try: + if not os.path.exists(self.start_menu_link): + utils.create_rare_desktop_link("start_menu") + self.startmenu_link.setText(self.tr("Remove start menu link")) + else: + os.remove(self.start_menu_link) + self.startmenu_link.setText(self.tr("Create start menu link")) + except PermissionError as e: + logger.error(str(e)) + QMessageBox.warning(self, "Error", "Permission error, cannot remove " + str(self.start_menu_link)) def create_desktop_link(self): - if not os.path.exists(self.desktop_file): - utils.create_rare_desktop_link("desktop") - self.desktop_link.setText(self.tr("Remove Desktop link")) - else: - os.remove(self.desktop_file) - self.desktop_link.setText(self.tr("Create desktop link")) + try: + if not os.path.exists(self.desktop_file): + utils.create_rare_desktop_link("desktop") + self.desktop_link.setText(self.tr("Remove Desktop link")) + else: + os.remove(self.desktop_file) + self.desktop_link.setText(self.tr("Create desktop link")) + except PermissionError as e: + logger.warning(self, "Error", "Permission error, cannot remove " + str(self.desktop_file)) def on_color_select_changed(self, color): if color: diff --git a/rare/components/tabs/shop/game_widgets.py b/rare/components/tabs/shop/game_widgets.py index 10bf6727..f5cb09e4 100644 --- a/rare/components/tabs/shop/game_widgets.py +++ b/rare/components/tabs/shop/game_widgets.py @@ -64,7 +64,6 @@ class GameWidget(QWidget): break else: logger.info(", ".join([img["type"] for img in json_info["keyImages"]])) - # print(json_info["keyImages"]) self.setLayout(self.layout) diff --git a/rare/components/tabs/shop/shop_widget.py b/rare/components/tabs/shop/shop_widget.py index 6845bf30..1dae47af 100644 --- a/rare/components/tabs/shop/shop_widget.py +++ b/rare/components/tabs/shop/shop_widget.py @@ -3,7 +3,7 @@ import logging import random from PyQt5.QtCore import pyqtSignal -from PyQt5.QtWidgets import QWidget, QGroupBox, QScrollArea, QCheckBox, QVBoxLayout, QLabel +from PyQt5.QtWidgets import QGroupBox, QScrollArea, QCheckBox, QVBoxLayout, QLabel from legendary.core import LegendaryCore from rare.components.tabs.shop import ShopApiCore @@ -240,7 +240,6 @@ class ShopWidget(QScrollArea, Ui_ShopWidget): if data: for game in data: - print(game) w = GameWidget(self.path, game, 275) self.game_widget.layout().addWidget(w) w.show_info.connect(self.show_game.emit) diff --git a/rare/utils/utils.py b/rare/utils/utils.py index 8e3ed8e8..5d136f8d 100644 --- a/rare/utils/utils.py +++ b/rare/utils/utils.py @@ -254,20 +254,15 @@ def create_rare_desktop_link(type_of_link): # Path to location of link file pathLink = os.path.join(target_folder, linkName) - if sys.executable.endswith("Rare.exe"): - executable = sys.executable - else: - executable = f"{sys.executable} {os.path.abspath(sys.argv[0])}" - - if "python.exe" in executable: - executable = executable.replace("python.exe", "pythonw.exe") - + executable = sys.executable + executable = executable.replace("python.exe", "pythonw.exe") + logger.debug(executable) # Add shortcut shell = Dispatch('WScript.Shell') shortcut = shell.CreateShortCut(pathLink) shortcut.Targetpath = executable - shortcut.Arguments = os.path.abspath(sys.argv[0]) - shortcut.WorkingDirectory = os.getcwd() + if not sys.executable.endswith("Rare.exe"): + shortcut.Arguments = os.path.abspath(sys.argv[0]) # Icon shortcut.IconLocation = os.path.join(resources_path, "images", "Rare.ico") diff --git a/start.sh b/start.sh deleted file mode 100755 index 181e713d..00000000 --- a/start.sh +++ /dev/null @@ -1,2 +0,0 @@ -export PYTHONPATH=$PWD -python3 rare