Get some requests from image worker, to avoid same request twice
This commit is contained in:
parent
db7e312b1d
commit
bd0802e4be
18
.github/workflows/release.yml
vendored
18
.github/workflows/release.yml
vendored
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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):
|
||||||
|
|
Loading…
Reference in a new issue