NinjaCheetah db6dc65791
Work in progress language selection support
Still need to add a popup telling you that NUSGet needs to be restarted after changing the language, and having it load the selected language in the selection menu so that it's checked on launch.
2025-05-26 21:50:04 -04:00

88 lines
3.0 KiB
Python

# "modules/core.py", licensed under the MIT license
# Copyright 2024-2025 NinjaCheetah & Contributors
import requests
from dataclasses import dataclass
from typing import List
from PySide6.QtCore import Qt, QSize
from PySide6.QtWidgets import QStyledItemDelegate
# This is required to make the dropdown look correct with the custom styling. A little fuzzy on the why, but it has to
# do with how Qt handles rendering the dropdown items. The sizing has to be overridden so that they don't overlap.
class ComboBoxItemDelegate(QStyledItemDelegate):
def sizeHint(self, option, index):
return QSize(option.rect.width(), 33)
@dataclass
class TitleData:
# Class to store all data for a Title.
tid: str
name: str
version: str
ticket: bool
region: str
category: str
danger: str
@dataclass
class BatchTitleData:
# Class to store all data for a Title in a batch operation.
tid: str
version: int
console: str
archive_name: str
@dataclass
class BatchResults:
# Class to store the results of a batch download.
code: int
warning_titles: List[str]
failed_titles: List[str]
def connect_label_to_checkbox(label, checkbox):
def toggle_checkbox(event):
if checkbox.isEnabled() and event.button() == Qt.LeftButton:
checkbox.toggle()
label.mousePressEvent = toggle_checkbox
def connect_is_enabled_to_checkbox(items, chkbox):
for item in items:
if chkbox.isChecked():
item.setEnabled(True)
else:
item.setEnabled(False)
def fixup_qmenu_background(menu):
# These fixes are required to not have a square background poking out from behind the rounded corners of a QMenu.
menu.setWindowFlags(menu.windowFlags() | Qt.FramelessWindowHint)
menu.setWindowFlags(menu.windowFlags() | Qt.NoDropShadowWindowHint)
menu.setAttribute(Qt.WA_TranslucentBackground)
def check_nusget_updates(app, current_version: str, progress_callback=None) -> str | None:
# Simple function to make a request to the GitHub API and then check if the latest available version is newer.
gh_api_request = requests.get(url="https://api.github.com/repos/NinjaCheetah/NUSGet/releases/latest", stream=True)
if gh_api_request.status_code != 200:
progress_callback.emit(app.translate("MainWindow", "\n\nCould not check for updates."))
else:
api_response = gh_api_request.json()
new_version: str = api_response["tag_name"].replace('v', '')
new_version_split = new_version.split('.')
current_version_split = current_version.split('.')
for place in range(len(new_version_split)):
if new_version_split[place] < current_version_split[place]:
return None
elif new_version_split[place] > current_version_split[place]:
progress_callback.emit(app.translate("MainWindow", "\n\nThere's a newer version of NUSGet available!"))
return new_version
progress_callback.emit(app.translate("MainWindow", "\n\nYou're running the latest release of NUSGet."))
return None