mirror of
https://github.com/Escartem/AnimeWwise.git
synced 2026-06-04 23:40:25 +08:00
updater utility
This commit is contained in:
116
app.py
116
app.py
@@ -2,14 +2,16 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
import json
|
import json
|
||||||
import math
|
import math
|
||||||
|
import time
|
||||||
import extract
|
import extract
|
||||||
import platform
|
import platform
|
||||||
|
import urllib
|
||||||
import webbrowser
|
import webbrowser
|
||||||
from PyQt5 import uic
|
from PyQt5 import uic
|
||||||
from requests import get
|
from requests import get
|
||||||
from PyQt5.QtGui import QTextCursor
|
from PyQt5.QtGui import QTextCursor
|
||||||
from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot, QThread, QMetaType, Qt
|
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")
|
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.extract.extract_files(self.input, self.files, self.output, self.format, progress=self.progress.emit)
|
||||||
self.finished.emit({"action": "extract"})
|
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):
|
class AnimeWwise(QMainWindow):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(AnimeWwise, self).__init__()
|
super(AnimeWwise, self).__init__()
|
||||||
@@ -104,10 +212,12 @@ class AnimeWwise(QMainWindow):
|
|||||||
|
|
||||||
if currentVersion["version"] < latestVersion["version"]:
|
if currentVersion["version"] < latestVersion["version"]:
|
||||||
print("Update found !")
|
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"]:
|
elif currentVersion["mapsVersion"] < latestVersion["mapsVersion"]:
|
||||||
print("Update found !")
|
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:
|
else:
|
||||||
print("No updates")
|
print("No updates")
|
||||||
except:
|
except:
|
||||||
|
|||||||
@@ -1,17 +1,19 @@
|
|||||||
{"maps": [
|
{
|
||||||
{
|
"maps": [
|
||||||
"name": "hk4e.map",
|
{
|
||||||
"game": "Genshin Impact",
|
"name": "hk4e.map",
|
||||||
"version": "5.2"
|
"game": "Genshin Impact",
|
||||||
},
|
"version": "5.2"
|
||||||
{
|
},
|
||||||
"name": "hkrpg.map",
|
{
|
||||||
"game": "Star Rail",
|
"name": "hkrpg.map",
|
||||||
"version": "2.6"
|
"game": "Star Rail",
|
||||||
},
|
"version": "2.6"
|
||||||
{
|
},
|
||||||
"name": "nap.map",
|
{
|
||||||
"game": "Zenless Zone Zero",
|
"name": "nap.map",
|
||||||
"version": "1.2"
|
"game": "Zenless Zone Zero",
|
||||||
}
|
"version": "1.2"
|
||||||
]}
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
91
updater.ui
Normal file
91
updater.ui
Normal 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>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"version": 211,
|
"version": 220,
|
||||||
"mapsVersion": 89
|
"mapsVersion": 90
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user