1
0
Fork 0
mirror of synced 2024-06-09 06:04:41 +12:00

Fix create startmenu/desktop link

This commit is contained in:
BuildTools 2021-09-18 16:34:43 +02:00
parent bfd16d9f83
commit 740153bd0d
9 changed files with 55 additions and 45 deletions

View file

@ -42,10 +42,10 @@ In [releases page](https://github.com/Dummerle/Rare/releases) are AppImages for
available available
### Run from source ### Run from source
1. Clone the repo with Submodule: `git clone https://github.com/Dummerle/Rare --recurse-submodules`.
1. Run `pip install -r requirements.txt` to get dependencies. If you use `pacman` you can 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` 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? ## Why Rare?

View file

@ -4,6 +4,7 @@ __version__ = "1.6.2"
resources_path = os.path.join(os.path.dirname(__file__), "resources") resources_path = os.path.join(os.path.dirname(__file__), "resources")
languages_path = os.path.join(os.path.dirname(__file__), "languages") languages_path = os.path.join(os.path.dirname(__file__), "languages")
data_dir = ""
# Cache Directory: Store images # Cache Directory: Store images
if p := os.getenv("XDG_CACHE_HOME"): if p := os.getenv("XDG_CACHE_HOME"):

View file

@ -5,11 +5,10 @@ import pathlib
import sys import sys
from argparse import ArgumentParser from argparse import ArgumentParser
from rare import __version__, data_dir
from rare.utils import singleton
def main(): def main():
# disable debug.log file
# QOpenGLDebugLogger.disableMessages(QOpenGLDebugLogger(), QOpenGLDebugMessage.AnySource, QOpenGLDebugMessage.AnyType)
# fix cx_freeze # fix cx_freeze
import multiprocessing import multiprocessing
multiprocessing.freeze_support() multiprocessing.freeze_support()
@ -17,6 +16,9 @@ def main():
# insert legendary submodule to path # insert legendary submodule to path
sys.path.insert(0, os.path.join(pathlib.Path(__file__).parent.parent.absolute(), "legendary")) 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 # CLI Options
parser = ArgumentParser() parser = ArgumentParser()
parser.add_argument("-V", "--version", action="store_true", help="Shows version and exits") parser.add_argument("-V", "--version", action="store_true", help="Shows version and exits")
@ -36,24 +38,31 @@ def main():
args = parser.parse_args() args = parser.parse_args()
if args.debug:
print(sys.path)
if args.desktop_shortcut: if args.desktop_shortcut:
from rare.utils import utils from rare.utils import utils
utils.create_rare_desktop_link("desktop") utils.create_rare_desktop_link("desktop")
print("Link created") print("Link created")
if args.startmenu_shortcut: if args.startmenu_shortcut:
from rare.utils import utils from rare.utils import utils
utils.create_rare_desktop_link("start_menu") utils.create_rare_desktop_link("start_menu")
print("link created") print("link created")
if args.version: if args.version:
from rare import __version__
print(__version__) print(__version__)
return return
from rare.utils import singleton
try: try:
# this object only allows one instance per machine # this object only allows one instance per machine
me = singleton.SingleInstance() me = singleton.SingleInstance()
except singleton.SingleInstanceException: except singleton.SingleInstanceException:
print("Rare is already running") print("Rare is already running")
from rare import data_dir
with open(os.path.join(data_dir, "lockfile"), "w") as file: with open(os.path.join(data_dir, "lockfile"), "w") as file:
if args.subparser == "launch": if args.subparser == "launch":
file.write("launch " + args.app_name) file.write("launch " + args.app_name)

View file

@ -55,9 +55,9 @@ class BaseInstalledWidget(QGroupBox):
self.create_desktop = QAction(self.tr("Remove Desktop link")) self.create_desktop = QAction(self.tr("Remove Desktop link"))
else: else:
self.create_desktop = QAction(self.tr("Create Desktop link")) self.create_desktop = QAction(self.tr("Create Desktop link"))
if not is_origin:
self.create_desktop.triggered.connect(lambda: self.create_desktop_link("desktop")) self.create_desktop.triggered.connect(lambda: self.create_desktop_link("desktop"))
self.addAction(self.create_desktop) self.addAction(self.create_desktop)
if platform.system() == "Linux": if platform.system() == "Linux":
start_menu_file = os.path.expanduser(f"~/.local/share/applications/{self.game.app_title}.desktop") 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")) self.create_start_menu = QAction(self.tr("Remove start menu link"))
else: else:
self.create_start_menu = QAction(self.tr("Create start menu link")) self.create_start_menu = QAction(self.tr("Create start menu link"))
if not is_origin:
self.create_start_menu.triggered.connect(lambda: self.create_desktop_link("start_menu")) self.create_start_menu.triggered.connect(lambda: self.create_desktop_link("start_menu"))
self.addAction(self.create_start_menu) self.addAction(self.create_start_menu)
reload_image = QAction(self.tr("Reload Image"), self) reload_image = QAction(self.tr("Reload Image"), self)
reload_image.triggered.connect(self.reload_image) reload_image.triggered.connect(self.reload_image)
@ -99,8 +99,11 @@ class BaseInstalledWidget(QGroupBox):
return return
if not (os.path.exists(os.path.expanduser(f"{path}{self.game.app_title}.desktop")) 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"))): 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): try:
return 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": if type_of_link == "desktop":
self.create_desktop.setText(self.tr("Remove Desktop link")) self.create_desktop.setText(self.tr("Remove Desktop link"))
elif type_of_link == "start_menu": elif type_of_link == "start_menu":

View file

@ -5,7 +5,7 @@ import sys
from logging import getLogger from logging import getLogger
from PyQt5.QtCore import QSettings, Qt from PyQt5.QtCore import QSettings, Qt
from PyQt5.QtWidgets import QWidget from PyQt5.QtWidgets import QWidget, QMessageBox
from legendary.core import LegendaryCore from legendary.core import LegendaryCore
from rare import cache_dir from rare import cache_dir
@ -101,12 +101,11 @@ class RareSettings(QWidget, Ui_RareSettings):
) )
if platform.system() == "Linux": if platform.system() == "Linux":
self.desktop_file = os.path.expanduser("~/Desktop/Rare.desktop") self.desktop_file = os.path.expanduser("~/Desktop/Rare.desktop")
self.start_menu_link = os.path.expanduser("~/.local/share/applications/Rare.desktop") self.start_menu_link = os.path.expanduser("~/.local/share/applications/Rare.desktop")
elif platform.system() == "Windows": elif platform.system() == "Windows":
self.desktop_file = os.path.expanduser("~/Desktop/Rare.lnk") 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: else:
self.desktop_file = "" self.desktop_file = ""
self.start_menu_link = "" self.start_menu_link = ""
@ -138,20 +137,27 @@ class RareSettings(QWidget, Ui_RareSettings):
self.log_dir_size_label.setText("0KB") self.log_dir_size_label.setText("0KB")
def create_start_menu_link(self): def create_start_menu_link(self):
if not os.path.exists(self.start_menu_link): try:
utils.create_rare_desktop_link("start_menu") if not os.path.exists(self.start_menu_link):
self.startmenu_link.setText(self.tr("Remove start menu link")) utils.create_rare_desktop_link("start_menu")
else: self.startmenu_link.setText(self.tr("Remove start menu link"))
os.remove(self.start_menu_link) else:
self.startmenu_link.setText(self.tr("Create start menu link")) 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): def create_desktop_link(self):
if not os.path.exists(self.desktop_file): try:
utils.create_rare_desktop_link("desktop") if not os.path.exists(self.desktop_file):
self.desktop_link.setText(self.tr("Remove Desktop link")) utils.create_rare_desktop_link("desktop")
else: self.desktop_link.setText(self.tr("Remove Desktop link"))
os.remove(self.desktop_file) else:
self.desktop_link.setText(self.tr("Create desktop link")) 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): def on_color_select_changed(self, color):
if color: if color:

View file

@ -64,7 +64,6 @@ class GameWidget(QWidget):
break break
else: else:
logger.info(", ".join([img["type"] for img in json_info["keyImages"]])) logger.info(", ".join([img["type"] for img in json_info["keyImages"]]))
# print(json_info["keyImages"])
self.setLayout(self.layout) self.setLayout(self.layout)

View file

@ -3,7 +3,7 @@ import logging
import random import random
from PyQt5.QtCore import pyqtSignal 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 legendary.core import LegendaryCore
from rare.components.tabs.shop import ShopApiCore from rare.components.tabs.shop import ShopApiCore
@ -240,7 +240,6 @@ class ShopWidget(QScrollArea, Ui_ShopWidget):
if data: if data:
for game in data: for game in data:
print(game)
w = GameWidget(self.path, game, 275) w = GameWidget(self.path, game, 275)
self.game_widget.layout().addWidget(w) self.game_widget.layout().addWidget(w)
w.show_info.connect(self.show_game.emit) w.show_info.connect(self.show_game.emit)

View file

@ -254,20 +254,15 @@ def create_rare_desktop_link(type_of_link):
# Path to location of link file # Path to location of link file
pathLink = os.path.join(target_folder, linkName) pathLink = os.path.join(target_folder, linkName)
if sys.executable.endswith("Rare.exe"): executable = sys.executable
executable = sys.executable executable = executable.replace("python.exe", "pythonw.exe")
else: logger.debug(executable)
executable = f"{sys.executable} {os.path.abspath(sys.argv[0])}"
if "python.exe" in executable:
executable = executable.replace("python.exe", "pythonw.exe")
# Add shortcut # Add shortcut
shell = Dispatch('WScript.Shell') shell = Dispatch('WScript.Shell')
shortcut = shell.CreateShortCut(pathLink) shortcut = shell.CreateShortCut(pathLink)
shortcut.Targetpath = executable shortcut.Targetpath = executable
shortcut.Arguments = os.path.abspath(sys.argv[0]) if not sys.executable.endswith("Rare.exe"):
shortcut.WorkingDirectory = os.getcwd() shortcut.Arguments = os.path.abspath(sys.argv[0])
# Icon # Icon
shortcut.IconLocation = os.path.join(resources_path, "images", "Rare.ico") shortcut.IconLocation = os.path.join(resources_path, "images", "Rare.ico")

View file

@ -1,2 +0,0 @@
export PYTHONPATH=$PWD
python3 rare