1
0
Fork 0
mirror of synced 2024-06-18 18:44:45 +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
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

View file

@ -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

View file

@ -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):