From 2e8a5facfdc664ede6164b8a433331ac0ee5c696 Mon Sep 17 00:00:00 2001 From: Yannik Schmidt Date: Thu, 17 Apr 2025 12:22:22 +0200 Subject: [PATCH] wip: self updater --- check_release.py | 31 ++++++++++++++++++++++++ client.py | 2 ++ updater/requirements.txt | 2 ++ updater/updater.py | 51 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 86 insertions(+) create mode 100644 check_release.py create mode 100644 updater/requirements.txt create mode 100644 updater/updater.py diff --git a/check_release.py b/check_release.py new file mode 100644 index 0000000..a5c57c9 --- /dev/null +++ b/check_release.py @@ -0,0 +1,31 @@ +import requests +import os + +REPO = "FAUSheppy/homelab_gamevault" +API_URL = f"https://api.github.com/repos/{REPO}/releases/latest" +VERSION_FILE = ".gamevault_version" + +def get_latest_release(): + response = requests.get(API_URL) + response.raise_for_status() + data = response.json() + version = data['tag_name'] + zip_url = data['zipball_url'] + return version, zip_url + + +def read_local_version(): + if not os.path.exists(VERSION_FILE): + return None + with open(VERSION_FILE, 'r') as f: + return f.read().strip() + +def update_updater(): + pass # TODO + # download updater + # replace updater + +def execute_updater(new_version): + # TODO + # os.system(["updater.exe", new_version]) + pass \ No newline at end of file diff --git a/client.py b/client.py index c5076eb..8651828 100644 --- a/client.py +++ b/client.py @@ -320,6 +320,8 @@ def update_button_positions(event=None): if __name__ == "__main__": + # run updater # + pgw = pgwrapper.ProgressBarWrapper() pgw.new(app) diff --git a/updater/requirements.txt b/updater/requirements.txt new file mode 100644 index 0000000..9252f95 --- /dev/null +++ b/updater/requirements.txt @@ -0,0 +1,2 @@ +tkinter +requests \ No newline at end of file diff --git a/updater/updater.py b/updater/updater.py new file mode 100644 index 0000000..0cdfec0 --- /dev/null +++ b/updater/updater.py @@ -0,0 +1,51 @@ +import os +import requests +import zipfile +import io +import shutil +import tkinter as tk + + +CLIENT_DIR = os.path.join("client") +INTERNAL_DIR = os.path.join(CLIENT_DIR, "_internal") + +def prompt_user(version): + root = tk.Tk() + root.withdraw() # Hide main window + result = tk.messagebox.askyesno("Update Available", f"New version {version} available. Download and install?") + root.destroy() + return result + +def download_and_extract(zip_url): + print("Downloading...") + response = requests.get(zip_url) + response.raise_for_status() + with zipfile.ZipFile(io.BytesIO(response.content)) as z: + temp_dir = "_temp_extracted" + z.extractall(temp_dir) + top_folder = next(os.scandir(temp_dir)).path + + # Replace _internal + source_internal = os.path.join(top_folder, "client", "_internal") + if os.path.exists(INTERNAL_DIR): + shutil.rmtree(INTERNAL_DIR) + shutil.copytree(source_internal, INTERNAL_DIR) + + # Replace client.exe + source_exe = os.path.join(top_folder, "client", "client.exe") + target_exe = os.path.join(CLIENT_DIR, "client.exe") + shutil.copy2(source_exe, target_exe) + + shutil.rmtree(temp_dir) + print("Update complete.") + + +def main(): + + + if prompt_user(): + download_and_extract() + # TODO: run main file again + +if __name__ == '__main__': + main() \ No newline at end of file