Skip to content

Commit 475a4c6

Browse files
authored
Add files via upload
1 parent d014297 commit 475a4c6

1 file changed

Lines changed: 207 additions & 0 deletions

File tree

‎PowerSetSetup/check_update.py‎

Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
1+
import requests
2+
import time
3+
import random
4+
import os
5+
import sys
6+
import subprocess
7+
import json
8+
from packaging.version import parse as parse_version
9+
import tempfile
10+
import platform
11+
import logging
12+
13+
sleep = time.sleep
14+
15+
CONFIG_PATH = os.path.join(
16+
os.path.dirname(os.path.abspath(sys.argv[0])),
17+
"data", "config", "config.json"
18+
)
19+
20+
Name_Program = "Check_update"
21+
version_soft = "1.0.2-beta+build.1"
22+
23+
LOG_DIR = "logs"
24+
LOG_FILE = os.path.join(LOG_DIR, "logs.txt")
25+
if not os.path.exists(LOG_DIR):
26+
os.makedirs(LOG_DIR)
27+
28+
logging.basicConfig(
29+
level=logging.DEBUG,
30+
format='%(asctime)s [%(levelname)s] %(message)s',
31+
handlers=[
32+
logging.FileHandler(LOG_FILE, mode='w', encoding='utf-8'),
33+
# logging.StreamHandler() # Вывод в консоль
34+
]
35+
)
36+
37+
logger = logging.getLogger()
38+
logging.info(f"--- {Name_Program} {version_soft} ---")
39+
40+
VERSION_URL = "https://raw.githubusercontent.com/BrocatScript/PowerSetSetup/main/version.json"
41+
42+
def clear():
43+
if platform.system() == 'Windows':
44+
os.system('cls')
45+
else:
46+
error_os()
47+
48+
def error_os():
49+
try:
50+
clear()
51+
print(f"ERROR: YOU SYSTEM NOT WINDOWS! YOU SYSTEM {platform.system}")
52+
sys.exit(5)
53+
except Exception as e:
54+
clear()
55+
logging.error(f"Critical error in error_os: {e}, uninstall program please!")
56+
print(f"Critical error in error_os: {e}")
57+
sys.exit(5)
58+
59+
def load_config():
60+
try:
61+
with open(CONFIG_PATH, 'r', encoding='utf-8') as f:
62+
return json.load(f)
63+
except FileNotFoundError:
64+
print(f"Ошибка: файл конфигурации не найден по пути {CONFIG_PATH}")
65+
sys.exit(2)
66+
except json.JSONDecodeError:
67+
print("Ошибка: не удалось разобрать config.json (некорректный JSON)")
68+
sys.exit(2)
69+
except Exception as e:
70+
print(f"Ошибка при чтении config.json: {e}")
71+
sys.exit(2)
72+
73+
def build_full_version(config):
74+
version = config.get("version")
75+
if not version:
76+
print("Ошибка: в файле config.json отсутствует поле 'version'")
77+
sys.exit(2)
78+
79+
build = config.get("build")
80+
if build is not None:
81+
try:
82+
build_num = int(build)
83+
return f"{version}+build.{build_num}"
84+
except (ValueError, TypeError):
85+
return version
86+
return version
87+
88+
def check_for_updates():
89+
try:
90+
config = load_config()
91+
current_version_str = build_full_version(config)
92+
allow_beta = config.get("allow_beta", False)
93+
auto_download = config.get("auto_download_install", False)
94+
95+
url = f"{VERSION_URL}?t={int(time.time())}&r={random.random()}"
96+
headers = {"Cache-Control": "no-cache", "Pragma": "no-cache"}
97+
resp = requests.get(url, timeout=5, headers=headers)
98+
resp.raise_for_status()
99+
data = resp.json()
100+
101+
if not isinstance(data, dict):
102+
print(f"Ошибка: сервер вернул не объект JSON, а {type(data).__name__}")
103+
os.system("pause")
104+
open_powersetsetup()
105+
106+
server_version_str = data.get("version")
107+
if not server_version_str:
108+
print("Ошибка: в JSON отсутствует поле 'version'")
109+
os.system("pause")
110+
open_powersetsetup()
111+
112+
print(f"🌐: {server_version_str}")
113+
print(f"🖥️: {current_version_str}")
114+
115+
server_version = parse_version(server_version_str)
116+
current_version = parse_version(current_version_str)
117+
118+
if not allow_beta and server_version.is_prerelease:
119+
print("✅ Update beta: ❌ The beta version is not available (allow_beta = false).")
120+
print("🌐🤜 🤛🖥️👍")
121+
os.system("pause")
122+
open_powersetsetup()
123+
124+
if server_version > current_version:
125+
print(f"✅ Update: {server_version_str}")
126+
download_url = data.get("download_url")
127+
if download_url:
128+
if auto_download:
129+
download_and_update(download_url)
130+
else:
131+
print("\nDownload the update?")
132+
answer = input("Enter the choice: ").lower()
133+
if answer in ["y", "yes", "д", "да"]:
134+
download_and_update(download_url)
135+
else:
136+
clear()
137+
open_powersetsetup()
138+
else:
139+
print("ERROR: Error code: 1x1013")
140+
open_powersetsetup()
141+
else:
142+
print("🖥️ = 🌐 ✅")
143+
sleep(2)
144+
open_powersetsetup()
145+
146+
except Exception as e:
147+
print(f"❌ ERROR: {e}")
148+
os.system("pause")
149+
150+
def open_powersetsetup():
151+
try:
152+
base_path = os.path.dirname(sys.executable)
153+
exe_path = os.path.join(base_path, "PowerSetSetup.exe")
154+
subprocess.Popen([exe_path], creationflags=subprocess.CREATE_NEW_CONSOLE)
155+
sys.exit(0)
156+
except Exception as e:
157+
clear()
158+
logging.error("Error start PowerSetSetup")
159+
print("ERROR: Error start")
160+
sys.exit(2)
161+
162+
def download_and_update(url: str):
163+
try:
164+
temp_dir = os.path.join(tempfile.gettempdir(), "PowerSetSetup_temp_update")
165+
os.makedirs(temp_dir, exist_ok=True)
166+
167+
filename = url.split('/')[-1]
168+
save_path = os.path.join(temp_dir, filename)
169+
170+
print(f"\nInstall in {save_path}...")
171+
response = requests.get(url, stream=True)
172+
response.raise_for_status()
173+
total_size = int(response.headers.get('content-length', 0))
174+
block_size = 8192
175+
downloaded = 0
176+
print()
177+
with open(save_path, 'wb') as file:
178+
for chunk in response.iter_content(chunk_size=block_size):
179+
file.write(chunk)
180+
downloaded += len(chunk)
181+
if total_size > 0:
182+
percent = downloaded / total_size * 100
183+
print(f"\r💾: {percent:.1f}%", end='')
184+
print("\n💾👍 = ✅")
185+
186+
script_dir = os.path.dirname(sys.argv[0])
187+
update_exe = os.path.join(script_dir, "update.exe")
188+
189+
sleep(2)
190+
if os.path.isfile(update_exe):
191+
print(f"\nStart {update_exe}...\n\n\n")
192+
subprocess.Popen([update_exe, temp_dir])
193+
sys.exit(0)
194+
else:
195+
print(f"ERROR: File {update_exe} not found. Please run the installer manually from the folder {temp_dir}.")
196+
sleep(2)
197+
except Exception as e:
198+
print(f"ERROR: Error code 0x0000: {e}")
199+
sleep(2)
200+
201+
def main():
202+
print("=== Update Check ===")
203+
check_for_updates()
204+
sleep(2)
205+
206+
if __name__ == "__main__":
207+
main()

0 commit comments

Comments
 (0)