1
0
mirror of https://github.com/Escartem/AnimeWwise.git synced 2026-06-04 23:40:25 +08:00

updater utility

This commit is contained in:
Escartem
2025-01-07 15:57:39 +01:00
parent d7f897ffdc
commit ae7b0ff1fa
4 changed files with 225 additions and 22 deletions

116
app.py
View File

@@ -2,14 +2,16 @@ import os
import sys
import json
import math
import time
import extract
import platform
import urllib
import webbrowser
from PyQt5 import uic
from requests import get
from PyQt5.QtGui import QTextCursor
from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot, QThread, QMetaType, Qt
from PyQt5.QtWidgets import QMessageBox, QMainWindow, QApplication, QFileDialog, QHeaderView, QAbstractItemView, QTreeWidgetItem, QAction, QActionGroup
from PyQt5.QtWidgets import QDesktopWidget, QDialog, QMessageBox, QMainWindow, QApplication, QFileDialog, QHeaderView, QAbstractItemView, QTreeWidgetItem, QAction, QActionGroup
QMetaType.type("QTextCursor")
@@ -70,6 +72,112 @@ class BackgroundWorker(QObject):
self.extract.extract_files(self.input, self.files, self.output, self.format, progress=self.progress.emit)
self.finished.emit({"action": "extract"})
class UpdaterWorker(QObject):
finished = pyqtSignal(bool)
progress = pyqtSignal(list)
def __init__(self):
super().__init__()
def run(self):
try:
# know current and latest maps
self.progress.emit([0, "Fetching index..."])
ver = lambda s: int(s.replace(".", ""))
index = open("maps/index.json", "r")
currentMaps = json.loads(index.read())
index.close()
latestMaps = get("https://raw.githubusercontent.com/Escartem/AnimeWwise/master/maps/index.json")
if latestMaps.status_code == 200:
latestMaps = json.loads(latestMaps.text)
# do each game
n_games = len(latestMaps["maps"])
game_size = 95 // n_games
for i in range(n_games):
current = currentMaps["maps"][i]
latest = latestMaps["maps"][i]
if ver(current["version"]) < ver(latest["version"]):
self.progress.emit([5 + game_size * i, f"Updating {latest["game"]} to {latest["version"]}"])
name = f"maps/{latest['name']}"
url = f"https://raw.githubusercontent.com/Escartem/AnimeWwise/master/{name}"
urllib.request.urlretrieve(url, "maps/temp.map")
if os.path.isfile(name):
os.remove(name)
os.rename("maps/temp.map", name)
# update index
currentMaps["maps"][i]["version"] = latest["version"]
# save new index
index = open("maps/index.json", "w+")
index.write(json.dumps(currentMaps, indent=4))
index.close()
index_sum = sum([ver(e["version"]) for e in currentMaps["maps"]])
with open("version.json", "r+") as f:
data = json.loads(f.read())
data["mapsVersion"] = index_sum
f.seek(0)
f.write(json.dumps(data, indent=4))
f.truncate()
f.close()
# done
self.progress.emit([100, "Update finished ! The program will start shortly..."])
except Exception as e:
# failure :(
self.progress.emit([100, f"Update failed ! The program will start shortly... | {e}"])
time.sleep(3)
self.finished.emit(True)
class Updater(QDialog):
def __init__(self):
super(Updater, self).__init__()
uic.loadUi("updater.ui", self)
self.setWindowFlag(Qt.WindowCloseButtonHint, False)
self.center()
self.update()
def center(self):
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
def update(self):
self.backgroundThread = QThread()
self.backgroundWorker = UpdaterWorker()
self.backgroundWorker.moveToThread(self.backgroundThread)
self.backgroundThread.started.connect(self.backgroundWorker.run)
self.backgroundWorker.finished.connect(self.updateFinished)
self.backgroundWorker.finished.connect(self.backgroundThread.quit)
self.backgroundWorker.finished.connect(self.backgroundWorker.deleteLater)
self.backgroundThread.finished.connect(self.backgroundThread.deleteLater)
self.backgroundWorker.progress.connect(self.updateProgress)
self.backgroundThread.start()
@pyqtSlot(bool)
def updateFinished(self):
self.close()
@pyqtSlot(list)
def updateProgress(self, data):
self.progressBar.setValue(data[0])
if len(data) == 2:
self.status.setText(data[1])
class AnimeWwise(QMainWindow):
def __init__(self):
super(AnimeWwise, self).__init__()
@@ -104,10 +212,12 @@ class AnimeWwise(QMainWindow):
if currentVersion["version"] < latestVersion["version"]:
print("Update found !")
QMessageBox.information(None, "Info", "Newer version of the program is availble, please update.", QMessageBox.Ok)
QMessageBox.information(None, "Info", "Newer version of the program is availble, please update it.", QMessageBox.Ok)
elif currentVersion["mapsVersion"] < latestVersion["mapsVersion"]:
print("Update found !")
QMessageBox.information(None, "Info", "Newer version of the mappings are availble, please update the program.", QMessageBox.Ok)
QMessageBox.information(None, "Info", "Newer version of the mappings are availble, the program will update them now.", QMessageBox.Ok)
self.updaterWindow = Updater()
self.updaterWindow.exec_()
else:
print("No updates")
except:

View File

@@ -1,17 +1,19 @@
{"maps": [
{
"name": "hk4e.map",
"game": "Genshin Impact",
"version": "5.2"
},
{
"name": "hkrpg.map",
"game": "Star Rail",
"version": "2.6"
},
{
"name": "nap.map",
"game": "Zenless Zone Zero",
"version": "1.2"
}
]}
{
"maps": [
{
"name": "hk4e.map",
"game": "Genshin Impact",
"version": "5.2"
},
{
"name": "hkrpg.map",
"game": "Star Rail",
"version": "2.6"
},
{
"name": "nap.map",
"game": "Zenless Zone Zero",
"version": "1.2"
}
]
}

91
updater.ui Normal file
View File

@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>UpdaterWindow</class>
<widget class="QWidget" name="UpdaterWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>100</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>400</width>
<height>100</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>400</width>
<height>100</height>
</size>
</property>
<property name="windowTitle">
<string>Updater</string>
</property>
<widget class="QWidget" name="centralwidget" native="true">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>404</width>
<height>83</height>
</rect>
</property>
<widget class="QLabel" name="title">
<property name="geometry">
<rect>
<x>6</x>
<y>0</y>
<width>391</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>16</pointsize>
<weight>75</weight>
<bold>true</bold>
<underline>true</underline>
</font>
</property>
<property name="text">
<string>Updating...</string>
</property>
</widget>
<widget class="QProgressBar" name="progressBar">
<property name="geometry">
<rect>
<x>7</x>
<y>42</y>
<width>381</width>
<height>16</height>
</rect>
</property>
<property name="value">
<number>0</number>
</property>
<property name="textVisible">
<bool>false</bool>
</property>
</widget>
<widget class="QLabel" name="status">
<property name="geometry">
<rect>
<x>16</x>
<y>62</y>
<width>361</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Status</string>
</property>
</widget>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@@ -1,4 +1,4 @@
{
"version": 211,
"mapsVersion": 89
"version": 220,
"mapsVersion": 90
}