mirror of
https://github.com/283375/arcaea-offline-pyside-ui.git
synced 2025-07-02 04:46:26 +00:00
Compare commits
8 Commits
39ee379010
...
v0.3.8
Author | SHA1 | Date | |
---|---|---|---|
d5895fe230
|
|||
cd2e3f51ca
|
|||
4a09dc210a | |||
cc8ab11b78
|
|||
48c5682e55 | |||
ee03770764
|
|||
b45c7f7de5
|
|||
15bc56e6f9
|
@ -1,6 +1,9 @@
|
|||||||
name: Build UI from latest `arcaea-offline-*` dependencies
|
name: Build UI from latest `arcaea-offline-*` dependencies
|
||||||
run-name: ${{ github.actor }} started a build request.
|
run-name: ${{ github.actor }} started a build request.
|
||||||
on: [workflow_dispatch]
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-windows:
|
build-windows:
|
||||||
runs-on: windows-2022
|
runs-on: windows-2022
|
||||||
@ -8,16 +11,16 @@ jobs:
|
|||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: actions/setup-python@v4
|
- uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.11'
|
python-version: "3.11"
|
||||||
|
|
||||||
# install dependencies
|
# install dependencies
|
||||||
- run: 'pip install -r requirements.txt'
|
- run: "pip install -r requirements.txt"
|
||||||
- run: 'pip uninstall arcaea-offline arcaea-offline-ocr -y'
|
- run: "pip uninstall arcaea-offline arcaea-offline-ocr -y"
|
||||||
- run: 'pip install git+https://github.com/283375/arcaea-offline'
|
- run: "pip install git+https://github.com/283375/arcaea-offline"
|
||||||
- run: 'pip install git+https://github.com/283375/arcaea-offline-ocr'
|
- run: "pip install git+https://github.com/283375/arcaea-offline-ocr"
|
||||||
- run: 'pip install nuitka imageio'
|
- run: "pip install nuitka imageio"
|
||||||
- name: Install UPX
|
- name: Install UPX
|
||||||
uses: crazy-max/ghaction-upx@v3
|
uses: crazy-max/ghaction-upx@v3
|
||||||
with:
|
with:
|
||||||
@ -25,11 +28,11 @@ jobs:
|
|||||||
|
|
||||||
# release builtin files
|
# release builtin files
|
||||||
- run: 'pyside6-lrelease.exe .\ui\resources\lang\en_US.ts .\ui\resources\lang\zh_CN.ts'
|
- run: 'pyside6-lrelease.exe .\ui\resources\lang\en_US.ts .\ui\resources\lang\zh_CN.ts'
|
||||||
- run: 'python prebuild.py'
|
- run: "python prebuild.py"
|
||||||
- run: 'pyside6-rcc.exe .\ui\resources\resources.qrc -o .\ui\resources\resources_rc.py'
|
- run: 'pyside6-rcc.exe .\ui\resources\resources.qrc -o .\ui\resources\resources_rc.py'
|
||||||
|
|
||||||
# build
|
# build
|
||||||
- run: 'python -m nuitka --plugin-enable=upx --enable-plugin=pyside6 --assume-yes-for-downloads --windows-icon-from-ico=./ui/resources/images/icon.png --standalone --onefile index.py'
|
- run: "python -m nuitka --plugin-enable=upx --enable-plugin=pyside6 --assume-yes-for-downloads --windows-icon-from-ico=./ui/resources/images/icon.png --standalone --onefile index.py"
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
|
36
.github/workflows/build.yml
vendored
36
.github/workflows/build.yml
vendored
@ -1,6 +1,16 @@
|
|||||||
name: Build UI
|
name: Build UI
|
||||||
run-name: ${{ github.actor }} started a build request.
|
run-name: ${{ github.actor }} started a build request.
|
||||||
on: [workflow_dispatch]
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- "v[0-9]+.[0-9]+.[0-9]+"
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
discussions: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-windows:
|
build-windows:
|
||||||
runs-on: windows-2022
|
runs-on: windows-2022
|
||||||
@ -8,14 +18,14 @@ jobs:
|
|||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: actions/setup-python@v4
|
- uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: '3.11'
|
python-version: "3.11"
|
||||||
cache: 'pip'
|
cache: "pip"
|
||||||
|
|
||||||
# install dependencies
|
# install dependencies
|
||||||
- run: 'pip install -r requirements.txt'
|
- run: "pip install -r requirements.txt"
|
||||||
- run: 'pip install nuitka imageio'
|
- run: "pip install nuitka imageio"
|
||||||
- name: Install UPX
|
- name: Install UPX
|
||||||
uses: crazy-max/ghaction-upx@v3
|
uses: crazy-max/ghaction-upx@v3
|
||||||
with:
|
with:
|
||||||
@ -23,13 +33,17 @@ jobs:
|
|||||||
|
|
||||||
# release builtin files
|
# release builtin files
|
||||||
- run: 'pyside6-lrelease.exe .\ui\resources\lang\en_US.ts .\ui\resources\lang\zh_CN.ts'
|
- run: 'pyside6-lrelease.exe .\ui\resources\lang\en_US.ts .\ui\resources\lang\zh_CN.ts'
|
||||||
- run: 'python prebuild.py'
|
- run: "python prebuild.py"
|
||||||
- run: 'pyside6-rcc.exe .\ui\resources\resources.qrc -o .\ui\resources\resources_rc.py'
|
- run: 'pyside6-rcc.exe .\ui\resources\resources.qrc -o .\ui\resources\resources_rc.py'
|
||||||
|
|
||||||
# build
|
# build
|
||||||
- run: 'python -m nuitka --plugin-enable=upx --enable-plugin=pyside6 --assume-yes-for-downloads --windows-icon-from-ico=./ui/resources/images/icon.png --standalone --onefile index.py'
|
- run: "python -m nuitka --plugin-enable=upx --enable-plugin=pyside6 --assume-yes-for-downloads --windows-icon-from-ico=./ui/resources/images/icon.png --standalone --onefile index.py"
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v3
|
- name: Draft a release
|
||||||
|
uses: softprops/action-gh-release@v2
|
||||||
with:
|
with:
|
||||||
name: build-windows
|
discussion_category_name: New releases
|
||||||
path: index.exe
|
draft: true
|
||||||
|
generate_release_notes: true
|
||||||
|
files: |
|
||||||
|
index.exe
|
||||||
|
22
README.md
22
README.md
@ -1,9 +1,27 @@
|
|||||||
# Arcaea Offline PySide UI
|
# Arcaea Offline PySide UI
|
||||||
|
|
||||||
GUI for both [283375/arcaea-offline](https://github.com/283375/arcaea-offline) and [283375/arcaea-offline-ocr](https://github.com/283375/arcaea-offline-ocr)
|
GUI for both [283375/arcaea-offline](https://github.com/283375/arcaea-offline) and [ArcaeaOffline/core-ocr](https://github.com/ArcaeaOffline/core-ocr).
|
||||||
|
|
||||||
## Before you run `python index.py`...
|
## Prerequisites
|
||||||
|
|
||||||
* Install requirements
|
* Install requirements
|
||||||
* Release translation files from `ui/resources/lang/*.ts`
|
* Release translation files from `ui/resources/lang/*.ts`
|
||||||
|
* Run `prebuild.py`
|
||||||
* Compile `ui/resources/resources.qrc` to `ui/resources/resources_rc.py`
|
* Compile `ui/resources/resources.qrc` to `ui/resources/resources_rc.py`
|
||||||
|
|
||||||
|
You can refer to the [GitHub Actions file](./.github/workflows/build.yml) for a rough reference.
|
||||||
|
|
||||||
|
```
|
||||||
|
pip install -r ./requirements.txt
|
||||||
|
pyside6-lrelease ./ui/resources/lang/en_US.ts ./ui/resources/lang/zh_CN.ts
|
||||||
|
python prebuild.py
|
||||||
|
pyside6-rcc ./ui/resources/resources.qrc -o ./ui/resources/resources_rc.py
|
||||||
|
```
|
||||||
|
|
||||||
|
Sometimes you have to install the latest, unpublished version of `arcaea-offline` and `arcaea-offline-ocr`.
|
||||||
|
|
||||||
|
```
|
||||||
|
pip uninstall -y arcaea-offline arcaea-offline-ocr
|
||||||
|
pip install git+https://github.com/283375/arcaea-offline
|
||||||
|
pip install git+https://github.com/ArcaeaOffline/core-ocr
|
||||||
|
```
|
||||||
|
@ -4,14 +4,14 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "arcaea-offline-pyside-ui"
|
name = "arcaea-offline-pyside-ui"
|
||||||
version = "0.1.0"
|
version = "0.3.8"
|
||||||
authors = [{ name = "283375", email = "log_283375@163.com" }]
|
authors = [{ name = "283375", email = "log_283375@163.com" }]
|
||||||
description = "No description."
|
description = "No description."
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
requires-python = ">=3.9"
|
requires-python = ">=3.9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arcaea-offline==0.2.1",
|
"arcaea-offline==0.2.2",
|
||||||
"arcaea-offline-ocr==0.0.97",
|
"arcaea-offline-ocr==0.0.98",
|
||||||
"exif==1.6.0",
|
"exif==1.6.0",
|
||||||
"PySide6==6.5.2",
|
"PySide6==6.5.2",
|
||||||
]
|
]
|
||||||
@ -21,8 +21,8 @@ classifiers = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[project.urls]
|
[project.urls]
|
||||||
"Homepage" = "https://github.com/283375/arcaea-offline-pyside-ui"
|
"Homepage" = "https://github.com/ArcaeaOffline/client-pyside6"
|
||||||
"Bug Tracker" = "https://github.com/283375/arcaea-offline-pyside-ui/issues"
|
"Bug Tracker" = "https://github.com/ArcaeaOffline/client-pyside6/issues"
|
||||||
|
|
||||||
[tool.black]
|
[tool.black]
|
||||||
force-exclude = '''
|
force-exclude = '''
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
arcaea-offline==0.2.1
|
arcaea-offline==0.2.2
|
||||||
arcaea-offline-ocr==0.0.97
|
arcaea-offline-ocr==0.0.98
|
||||||
exif==1.6.0
|
exif==1.6.0
|
||||||
|
Pillow==10.1.0
|
||||||
PySide6==6.5.2
|
PySide6==6.5.2
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import logging
|
||||||
from typing import Type
|
from typing import Type
|
||||||
|
|
||||||
from PySide6.QtCore import Signal
|
from PySide6.QtCore import Signal
|
||||||
@ -6,6 +7,8 @@ from PySide6.QtWidgets import QHBoxLayout, QSizePolicy, QVBoxLayout, QWidget
|
|||||||
|
|
||||||
from ui.implements.components.ratingClassRadioButton import RatingClassRadioButton
|
from ui.implements.components.ratingClassRadioButton import RatingClassRadioButton
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class RatingClassSelector(QWidget):
|
class RatingClassSelector(QWidget):
|
||||||
valueChanged = Signal()
|
valueChanged = Signal()
|
||||||
@ -120,9 +123,10 @@ class RatingClassSelector(QWidget):
|
|||||||
|
|
||||||
if ratingClass is None or isinstance(ratingClass, bool):
|
if ratingClass is None or isinstance(ratingClass, bool):
|
||||||
button = self.sender()
|
button = self.sender()
|
||||||
elif ratingClass in range(4):
|
elif ratingClass in range(len(self.buttons)):
|
||||||
button = self.buttons[ratingClass]
|
button = self.buttons[ratingClass]
|
||||||
else:
|
else:
|
||||||
|
logger.debug(f"Cannot select {ratingClass=}, condition check failed")
|
||||||
return
|
return
|
||||||
|
|
||||||
if not button.isEnabled():
|
if not button.isEnabled():
|
||||||
|
@ -3,7 +3,7 @@ import traceback
|
|||||||
from enum import IntEnum
|
from enum import IntEnum
|
||||||
|
|
||||||
from arcaea_offline.database import Database
|
from arcaea_offline.database import Database
|
||||||
from PySide6.QtCore import QCoreApplication, QDir, QFileInfo, Qt, QUrl, Slot
|
from PySide6.QtCore import QCoreApplication, QDir, QFileInfo, QSysInfo, Qt, QUrl, Slot
|
||||||
from PySide6.QtWidgets import QDialog, QMessageBox
|
from PySide6.QtWidgets import QDialog, QMessageBox
|
||||||
|
|
||||||
from ui.extends.shared.database import create_engine
|
from ui.extends.shared.database import create_engine
|
||||||
@ -59,8 +59,13 @@ class DatabaseChecker(Ui_DatabaseChecker, QDialog):
|
|||||||
return QUrl.fromLocalFile(self.dbFileInfo().filePath())
|
return QUrl.fromLocalFile(self.dbFileInfo().filePath())
|
||||||
|
|
||||||
def dbSqliteUrl(self):
|
def dbSqliteUrl(self):
|
||||||
# dbSqliteUrl.setScheme("sqlite")
|
kernelType = QSysInfo.kernelType()
|
||||||
return QUrl(self.dbFileUrl().toString().replace("file://", "sqlite://"))
|
# the slash count varies depending on the kernel
|
||||||
|
# https://docs.sqlalchemy.org/en/20/core/engines.html#sqlite
|
||||||
|
if kernelType == "winnt":
|
||||||
|
return QUrl(self.dbFileUrl().toString().replace("file://", "sqlite://"))
|
||||||
|
else:
|
||||||
|
return QUrl(self.dbFileUrl().toString().replace("file://", "sqlite:///"))
|
||||||
|
|
||||||
def confirmDb(self) -> DatabaseCheckerResult:
|
def confirmDb(self) -> DatabaseCheckerResult:
|
||||||
flags = 0x000
|
flags = 0x000
|
||||||
|
Reference in New Issue
Block a user