1
0
Fork 0
mirror of synced 2024-06-27 02:30:31 +12:00

Get some requests from image worker, to avoid same request twice

This commit is contained in:
Dummerle 2021-11-30 20:32:45 +01:00
parent db7e312b1d
commit bd0802e4be
No known key found for this signature in database
GPG key ID: AB68CC59CA39F2F1
3 changed files with 34 additions and 33 deletions

View file

@ -51,8 +51,8 @@ jobs:
uses: svenstaro/upload-release-action@2.2.1 uses: svenstaro/upload-release-action@2.2.1
with: with:
repo_token: ${{ secrets.GITHUB_TOKEN }} repo_token: ${{ secrets.GITHUB_TOKEN }}
file: Rare.deb file: Rare-${{ github.event.release.tag_name }}.deb
asset_name: Rare.deb asset_name: Rare-${{ github.event.release.tag_name }}.deb
tag: ${{ github.ref }} tag: ${{ github.ref }}
overwrite: true overwrite: true
@ -90,7 +90,7 @@ jobs:
with: with:
repo_token: ${{ secrets.GITHUB_TOKEN }} repo_token: ${{ secrets.GITHUB_TOKEN }}
file: Rare.AppImage file: Rare.AppImage
asset_name: Rare-${{github.ref}}.AppImage asset_name: Rare-${{ github.event.release.tag_name }}.AppImage
tag: ${{ github.ref }} tag: ${{ github.ref }}
overwrite: true overwrite: true
- name: Upload to GitHub - name: Upload to GitHub
@ -98,7 +98,7 @@ jobs:
with: with:
repo_token: ${{ secrets.GITHUB_TOKEN }} repo_token: ${{ secrets.GITHUB_TOKEN }}
file: Rare.AppImage.zsync file: Rare.AppImage.zsync
asset_name: Rare-${{github.ref}}.AppImage.zsync asset_name: Rare-${{ github.event.release.tag_name }}.AppImage.zsync
tag: ${{ github.ref }} tag: ${{ github.ref }}
overwrite: true overwrite: true
@ -122,13 +122,13 @@ jobs:
run: python freeze.py bdist_msi run: python freeze.py bdist_msi
- name: Rename File - name: Rename File
run: mv dist/* dist/Rare.msi run: mv dist/*.msi dist/Rare.msi
- name: Upload to GitHub - name: Upload to GitHub
uses: svenstaro/upload-release-action@2.2.1 uses: svenstaro/upload-release-action@2.2.1
with: with:
repo_token: ${{ secrets.GITHUB_TOKEN }} repo_token: ${{ secrets.GITHUB_TOKEN }}
file: dist/Rare.msi file: dist/Rare.msi
asset_name: Rare-${{github.ref}}.msi asset_name: Rare-${{ github.event.release.tag_name }}.msi
tag: ${{ github.ref }} tag: ${{ github.ref }}
overwrite: true overwrite: true
mac_os: mac_os:
@ -158,13 +158,13 @@ jobs:
- name: create dmg - name: create dmg
run: | run: |
git clone https://github.com/create-dmg/create-dmg 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 - name: upload to GitHub
uses: svenstaro/upload-release-action@2.2.1 uses: svenstaro/upload-release-action@2.2.1
with: with:
repo_token: ${{ secrets.GITHUB_TOKEN }} repo_token: ${{ secrets.GITHUB_TOKEN }}
file: Rare-${{github.ref}}.dmg file: Rare.dmg
asset_name: Rare-${{github.ref}}.dmg asset_name: Rare-${{ github.event.release.tag_name }}.dmg
tag: ${{ github.ref }} tag: ${{ github.ref }}
overwrite: true overwrite: true

View file

@ -22,8 +22,6 @@ class ApiSignals(QObject):
class ImageWorker(QRunnable): class ImageWorker(QRunnable):
download_progress = pyqtSignal(int)
def __init__(self, core: LegendaryCore): def __init__(self, core: LegendaryCore):
super(ImageWorker, self).__init__() super(ImageWorker, self).__init__()
self.core = core self.core = core
@ -31,24 +29,24 @@ class ImageWorker(QRunnable):
self.setAutoDelete(True) self.setAutoDelete(True)
def run(self): 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) self.signal.image_progress.emit(100)
class ApiRequestWorker(QRunnable): class ApiRequestWorker(QRunnable):
def __init__(self, text: str, function: callable, args: tuple): def __init__(self, api_requests: list):
super(ApiRequestWorker, self).__init__() super(ApiRequestWorker, self).__init__()
self.function, self.args = function, args self.api_requests = api_requests
self.signals = ApiSignals() self.signals = ApiSignals()
self.text = text
self.setAutoDelete(True) self.setAutoDelete(True)
def run(self) -> None: def run(self) -> None:
try: for text, function, args in self.api_requests:
result = self.function(*self.args) try:
except HTTPError(): result = function(*args)
result = None except HTTPError():
self.signals.result.emit(result, self.text) result = None
self.signals.result.emit(result, text)
class LaunchDialog(QDialog, Ui_LaunchDialog): class LaunchDialog(QDialog, Ui_LaunchDialog):
@ -98,20 +96,20 @@ class LaunchDialog(QDialog, Ui_LaunchDialog):
self.image_info.setText(self.tr("Downloading Images")) self.image_info.setText(self.tr("Downloading Images"))
image_worker = ImageWorker(self.core) image_worker = ImageWorker(self.core)
image_worker.signal.image_progress.connect(self.update_image_progbar) 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) self.thread_pool.start(image_worker)
api_requests = [ api_requests = [
["gamelist", self.core.get_game_and_dlc_list, (True,)],
["32bit", self.core.get_game_and_dlc_list, (True, "Win32")], ["32bit", self.core.get_game_and_dlc_list, (True, "Win32")],
["mac", self.core.get_game_and_dlc_list, (True, "Mac")], ["mac", self.core.get_game_and_dlc_list, (True, "Mac")],
["assets", self.core.egs.get_game_assets, ()], ["assets", self.core.egs.get_game_assets, ()],
["no_assets", self.core.get_non_asset_library_items, ()],
] ]
for r in api_requests: # gamelist and no_asset games are from Image worker
worker = ApiRequestWorker(*r) worker = ApiRequestWorker(api_requests)
worker.signals.result.connect(self.handle_api_worker_result) worker.signals.result.connect(self.handle_api_worker_result)
self.thread_pool.start(worker) self.thread_pool.start(worker)
# cloud save from another worker, because it is used in cloud_save_utils too
cloud_worker = CloudWorker() cloud_worker = CloudWorker()
cloud_worker.signals.result_ready.connect(lambda x: self.handle_api_worker_result(x, "saves")) cloud_worker.signals.result_ready.connect(lambda x: self.handle_api_worker_result(x, "saves"))
self.thread_pool.start(cloud_worker) self.thread_pool.start(cloud_worker)
@ -140,7 +138,7 @@ class LaunchDialog(QDialog, Ui_LaunchDialog):
self.core.lgd.assets = assets self.core.lgd.assets = assets
self.api_results.assets = assets self.api_results.assets = assets
elif text == "no_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": elif text == "saves":
self.api_results.saves = result self.api_results.saves = result
@ -158,7 +156,7 @@ class LaunchDialog(QDialog, Ui_LaunchDialog):
logger.info("App starting") logger.info("App starting")
self.image_info.setText(self.tr("Starting...")) self.image_info.setText(self.tr("Starting..."))
shared.args.offline = self.offline shared.args.offline = self.offline
shared.api_results = self.api_results shared.init_api_response(self.api_results)
self.start_app.emit() self.start_app.emit()
else: else:
self.finished = True self.finished = True

View file

@ -8,11 +8,11 @@ import sys
from logging import getLogger from logging import getLogger
from typing import Tuple, List from typing import Tuple, List
import requests
import qtawesome import qtawesome
import requests
from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject, QRunnable, QSettings, Qt 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.QtGui import QPalette, QColor, QPixmap, QImage
from PyQt5.QtWidgets import QApplication, QStyleFactory
from requests import HTTPError from requests import HTTPError
from legendary.models.game import Game from legendary.models.game import Game
@ -21,6 +21,7 @@ from .models import PathSpec
# Windows # Windows
if platform.system() == "Windows": if platform.system() == "Windows":
# noinspection PyUnresolvedReferences
from win32com.client import Dispatch # pylint: disable=E0401 from win32com.client import Dispatch # pylint: disable=E0401
from rare import languages_path, resources_path, image_dir, shared from rare import languages_path, resources_path, image_dir, shared
@ -32,18 +33,20 @@ logger = getLogger("Utils")
settings = QSettings("Rare", "Rare") 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): if not os.path.isdir(image_dir):
os.makedirs(image_dir) os.makedirs(image_dir)
logger.info("Create Image dir") logger.info("Create Image dir")
# Download Images # 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 = [] dlc_list = []
for i in dlcs.values(): for i in dlcs.values():
dlc_list.append(i[0]) dlc_list.append(i[0])
no_assets = core.get_non_asset_library_items()[0] no_assets = core.get_non_asset_library_items()[0]
results.emit(no_assets, "no_assets")
game_list = games + dlc_list + no_assets game_list = games + dlc_list + no_assets
for i, game in enumerate(game_list): for i, game in enumerate(game_list):
@ -52,7 +55,7 @@ def download_images(signal: pyqtSignal, core: LegendaryCore):
except json.decoder.JSONDecodeError: except json.decoder.JSONDecodeError:
shutil.rmtree(f"{image_dir}/{game.app_name}") shutil.rmtree(f"{image_dir}/{game.app_name}")
download_image(game) download_image(game)
signal.emit(i * 100 // len(game_list)) progress.emit(i * 100 // len(game_list))
def download_image(game, force=False): def download_image(game, force=False):