-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathupdater.pyw
113 lines (108 loc) · 5.08 KB
/
updater.pyw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import os
import sys
import json
import requests
import subprocess
from PyQt5.QtWidgets import QApplication, QMessageBox
from PyQt5.QtGui import QIcon
if sys.platform == 'win32':
PROGRAM_PATH = os.path.join(os.environ.get("APPDATA"), "PyStocking")
else:
PROGRAM_PATH = os.path.join(os.path.expanduser("~"), ".pystocking")
ASSETS_PATH = os.path.join(PROGRAM_PATH, "assets")
ICON_PATH = os.path.join(ASSETS_PATH, "icon.ico")
UPDATER_ICON_PATH = os.path.join(ASSETS_PATH, "upd_icon.ico")
UPDATER_PATH = os.path.join(PROGRAM_PATH, "updater.pyw")
INFO_PATH = os.path.join(PROGRAM_PATH, "info.json")
MAIN_PATH = os.path.join(PROGRAM_PATH, "main.pyw")
SUBMENUS_PATH = os.path.join(PROGRAM_PATH, "submenus")
ADDITEMS_PATH = os.path.join(SUBMENUS_PATH, "add_items")
ADDITEMS_MENU_PATH = os.path.join(ADDITEMS_PATH, "menu.py")
ADVOPTIONS_PATH = os.path.join(SUBMENUS_PATH, "advanced_options")
ADVOPTIONS_MENU_PATH = os.path.join(ADVOPTIONS_PATH, "menu.py")
MANAGEITEMS_PATH = os.path.join(SUBMENUS_PATH, "manage_items")
MANAGEITEMS_MENU_PATH = os.path.join(MANAGEITEMS_PATH, "menu.py")
os.makedirs(PROGRAM_PATH, exist_ok=True)
os.makedirs(ASSETS_PATH, exist_ok=True)
os.makedirs(SUBMENUS_PATH, exist_ok=True)
os.makedirs(ADDITEMS_PATH, exist_ok=True)
os.makedirs(ADVOPTIONS_PATH, exist_ok=True)
os.makedirs(MANAGEITEMS_PATH, exist_ok=True)
try:
session = requests.Session()
# Check versionCode
link = "https://raw.githubusercontent.com/ngdplnk/PyStocking/main/info.json"
code = session.get(link)
remote_version = code.json()
local_version = None
if os.path.isfile(INFO_PATH):
with open(INFO_PATH, "r") as file:
local_version = json.load(file)
if local_version is None or local_version["versionCode"] < remote_version["versionCode"]:
# Icon
link = "https://raw.githubusercontent.com/ngdplnk/PyStocking/main/assets/icon.ico"
code = session.get(link)
with open(ICON_PATH, 'wb') as writecode:
writecode.write(code.content)
# Updater Icon
link = "https://raw.githubusercontent.com/ngdplnk/PyStocking/main/assets/upd_icon.ico"
code = session.get(link)
with open(UPDATER_ICON_PATH, 'wb') as writecode:
writecode.write(code.content)
# Launcher Script
link = "https://raw.githubusercontent.com/ngdplnk/PyStocking/main/updater.pyw"
code = session.get(link)
with open(UPDATER_PATH, 'wb') as writecode:
writecode.write(code.content)
# Add Items Menu
link = "https://raw.githubusercontent.com/ngdplnk/PyStocking/main/submenus/add_items/menu.py"
code = session.get(link)
with open(ADDITEMS_MENU_PATH, 'wb') as writecode:
writecode.write(code.content)
# Advanced Options Menu
link = "https://raw.githubusercontent.com/ngdplnk/PyStocking/main/submenus/advanced_options/menu.py"
code = session.get(link)
with open(ADVOPTIONS_MENU_PATH, 'wb') as writecode:
writecode.write(code.content)
# Manage Items Menu
link = "https://raw.githubusercontent.com/ngdplnk/PyStocking/main/submenus/manage_items/menu.py"
code = session.get(link)
with open(MANAGEITEMS_MENU_PATH, 'wb') as writecode:
writecode.write(code.content)
# Main Program
link = "https://raw.githubusercontent.com/ngdplnk/PyStocking/main/main.pyw"
code = session.get(link)
with open(MAIN_PATH, 'wb') as writecode:
writecode.write(code.content)
# Info
with open(INFO_PATH, "w") as file:
json.dump(remote_version, file)
# Run the program
if sys.platform == 'win32':
subprocess.Popen(f"python {MAIN_PATH}", creationflags=subprocess.CREATE_NO_WINDOW, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
else:
os.system(f"python3 {MAIN_PATH}")
else:
# Display a message indicating there are no updates
app = QApplication(sys.argv)
if os.path.exists(ICON_PATH):
app.setWindowIcon(QIcon(ICON_PATH))
QMessageBox.information(None, "No Updates", "There are no updates available.")
sys.exit(0)
# Run the program
if sys.platform == 'win32':
subprocess.Popen(f"python {MAIN_PATH}", creationflags=subprocess.CREATE_NO_WINDOW, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
else:
os.system(f"python3 {MAIN_PATH}")
except Exception:
if os.path.isfile(MAIN_PATH) and os.path.isfile(ADDITEMS_MENU_PATH) and os.path.isfile(ADVOPTIONS_MENU_PATH) and os.path.isfile(MANAGEITEMS_MENU_PATH):
if sys.platform == 'win32':
subprocess.Popen(f"python {MAIN_PATH}", creationflags=subprocess.CREATE_NO_WINDOW, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
else:
os.system(f"python3 {MAIN_PATH}")
else:
app = QApplication(sys.argv)
if os.path.exists(ICON_PATH):
app.setWindowIcon(QIcon(ICON_PATH))
QMessageBox.critical(None, "Error", "The program could not be started. Please check your internet connection and try again.")
sys.exit(1)