From bd0802e4be833def1536fdd7134b4ed28d3d2235 Mon Sep 17 00:00:00 2001 From: Dummerle <44114474+Dummerle@users.noreply.github.com> Date: Tue, 30 Nov 2021 20:32:45 +0100 Subject: [PATCH] Get some requests from image worker, to avoid same request twice --- .github/workflows/release.yml | 18 ++++++------ rare/components/dialogs/launch_dialog.py | 36 +++++++++++------------- rare/utils/utils.py | 13 +++++---- 3 files changed, 34 insertions(+), 33 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a07e69d0..7bd839c5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -51,8 +51,8 @@ jobs: uses: svenstaro/upload-release-action@2.2.1 with: repo_token: ${{ secrets.GITHUB_TOKEN }} - file: Rare.deb - asset_name: Rare.deb + file: Rare-${{ github.event.release.tag_name }}.deb + asset_name: Rare-${{ github.event.release.tag_name }}.deb tag: ${{ github.ref }} overwrite: true @@ -90,7 +90,7 @@ jobs: with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: Rare.AppImage - asset_name: Rare-${{github.ref}}.AppImage + asset_name: Rare-${{ github.event.release.tag_name }}.AppImage tag: ${{ github.ref }} overwrite: true - name: Upload to GitHub @@ -98,7 +98,7 @@ jobs: with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: Rare.AppImage.zsync - asset_name: Rare-${{github.ref}}.AppImage.zsync + asset_name: Rare-${{ github.event.release.tag_name }}.AppImage.zsync tag: ${{ github.ref }} overwrite: true @@ -122,13 +122,13 @@ jobs: run: python freeze.py bdist_msi - name: Rename File - run: mv dist/* dist/Rare.msi + run: mv dist/*.msi dist/Rare.msi - name: Upload to GitHub uses: svenstaro/upload-release-action@2.2.1 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: dist/Rare.msi - asset_name: Rare-${{github.ref}}.msi + asset_name: Rare-${{ github.event.release.tag_name }}.msi tag: ${{ github.ref }} overwrite: true mac_os: @@ -158,13 +158,13 @@ jobs: - name: create dmg run: | git clone https://github.com/create-dmg/create-dmg - create-dmg/create-dmg Rare-${{github.ref}}.dmg dist/Rare.App --volname Rare --volicon rare/resources/images/Rare.icns + create-dmg/create-dmg Rare.dmg dist/Rare.App --volname Rare --volicon rare/resources/images/Rare.icns - name: upload to GitHub uses: svenstaro/upload-release-action@2.2.1 with: repo_token: ${{ secrets.GITHUB_TOKEN }} - file: Rare-${{github.ref}}.dmg - asset_name: Rare-${{github.ref}}.dmg + file: Rare.dmg + asset_name: Rare-${{ github.event.release.tag_name }}.dmg tag: ${{ github.ref }} overwrite: true diff --git a/rare/components/dialogs/launch_dialog.py b/rare/components/dialogs/launch_dialog.py index bc528291..266744f7 100644 --- a/rare/components/dialogs/launch_dialog.py +++ b/rare/components/dialogs/launch_dialog.py @@ -22,8 +22,6 @@ class ApiSignals(QObject): class ImageWorker(QRunnable): - download_progress = pyqtSignal(int) - def __init__(self, core: LegendaryCore): super(ImageWorker, self).__init__() self.core = core @@ -31,24 +29,24 @@ class ImageWorker(QRunnable): self.setAutoDelete(True) def run(self): - download_images(self.signal.image_progress, self.core) + download_images(self.signal.image_progress, self.signal.result, self.core) self.signal.image_progress.emit(100) class ApiRequestWorker(QRunnable): - def __init__(self, text: str, function: callable, args: tuple): + def __init__(self, api_requests: list): super(ApiRequestWorker, self).__init__() - self.function, self.args = function, args + self.api_requests = api_requests self.signals = ApiSignals() - self.text = text self.setAutoDelete(True) def run(self) -> None: - try: - result = self.function(*self.args) - except HTTPError(): - result = None - self.signals.result.emit(result, self.text) + for text, function, args in self.api_requests: + try: + result = function(*args) + except HTTPError(): + result = None + self.signals.result.emit(result, text) class LaunchDialog(QDialog, Ui_LaunchDialog): @@ -98,20 +96,20 @@ class LaunchDialog(QDialog, Ui_LaunchDialog): self.image_info.setText(self.tr("Downloading Images")) image_worker = ImageWorker(self.core) image_worker.signal.image_progress.connect(self.update_image_progbar) + image_worker.signal.result.connect(self.handle_api_worker_result) self.thread_pool.start(image_worker) api_requests = [ - ["gamelist", self.core.get_game_and_dlc_list, (True,)], ["32bit", self.core.get_game_and_dlc_list, (True, "Win32")], ["mac", self.core.get_game_and_dlc_list, (True, "Mac")], ["assets", self.core.egs.get_game_assets, ()], - ["no_assets", self.core.get_non_asset_library_items, ()], ] - for r in api_requests: - worker = ApiRequestWorker(*r) - worker.signals.result.connect(self.handle_api_worker_result) - self.thread_pool.start(worker) + # gamelist and no_asset games are from Image worker + worker = ApiRequestWorker(api_requests) + worker.signals.result.connect(self.handle_api_worker_result) + self.thread_pool.start(worker) + # cloud save from another worker, because it is used in cloud_save_utils too cloud_worker = CloudWorker() cloud_worker.signals.result_ready.connect(lambda x: self.handle_api_worker_result(x, "saves")) self.thread_pool.start(cloud_worker) @@ -140,7 +138,7 @@ class LaunchDialog(QDialog, Ui_LaunchDialog): self.core.lgd.assets = assets self.api_results.assets = assets elif text == "no_assets": - self.api_results.no_asset_games = result[0] if result else [] + self.api_results.no_asset_games = result if result else [] elif text == "saves": self.api_results.saves = result @@ -158,7 +156,7 @@ class LaunchDialog(QDialog, Ui_LaunchDialog): logger.info("App starting") self.image_info.setText(self.tr("Starting...")) shared.args.offline = self.offline - shared.api_results = self.api_results + shared.init_api_response(self.api_results) self.start_app.emit() else: self.finished = True diff --git a/rare/utils/utils.py b/rare/utils/utils.py index fe01b82d..64afc08a 100644 --- a/rare/utils/utils.py +++ b/rare/utils/utils.py @@ -8,11 +8,11 @@ import sys from logging import getLogger from typing import Tuple, List -import requests import qtawesome +import requests from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject, QRunnable, QSettings, Qt -from PyQt5.QtWidgets import QApplication, QStyleFactory, QStyle from PyQt5.QtGui import QPalette, QColor, QPixmap, QImage +from PyQt5.QtWidgets import QApplication, QStyleFactory from requests import HTTPError from legendary.models.game import Game @@ -21,6 +21,7 @@ from .models import PathSpec # Windows if platform.system() == "Windows": + # noinspection PyUnresolvedReferences from win32com.client import Dispatch # pylint: disable=E0401 from rare import languages_path, resources_path, image_dir, shared @@ -32,18 +33,20 @@ logger = getLogger("Utils") settings = QSettings("Rare", "Rare") -def download_images(signal: pyqtSignal, core: LegendaryCore): +def download_images(progress: pyqtSignal, results: pyqtSignal, core: LegendaryCore): if not os.path.isdir(image_dir): os.makedirs(image_dir) logger.info("Create Image dir") # Download Images - games, dlcs = core.get_game_and_dlc_list() + games, dlcs = core.get_game_and_dlc_list(True) + results.emit((games, dlcs), "gamelist") dlc_list = [] for i in dlcs.values(): dlc_list.append(i[0]) no_assets = core.get_non_asset_library_items()[0] + results.emit(no_assets, "no_assets") game_list = games + dlc_list + no_assets for i, game in enumerate(game_list): @@ -52,7 +55,7 @@ def download_images(signal: pyqtSignal, core: LegendaryCore): except json.decoder.JSONDecodeError: shutil.rmtree(f"{image_dir}/{game.app_name}") download_image(game) - signal.emit(i * 100 // len(game_list)) + progress.emit(i * 100 // len(game_list)) def download_image(game, force=False):