diff --git a/Backend.py b/Backend.py new file mode 100644 index 0000000..008561c --- /dev/null +++ b/Backend.py @@ -0,0 +1,75 @@ +from ftplib import FTP_TLS as FTP +import io +import json +import tempfile +import subprocess +import time +import os +import datetime + + +def perform_installation(instance_name, prism_command, prism_instance_path): + ftp = FTP("gitea.piwalker.net") + ftp.login() + ftp.prot_p() + + # Fetching versions.json from FTP + bio = io.BytesIO() + ftp.retrbinary("RETR versions.json", bio.write) + bio.seek(0) + versions = json.load(bio) + bio.close() + + # Checking current version + version = "0.0.0" + version_file_path = os.path.join(prism_instance_path, instance_name, ".minecraft", "version.txt") + if os.path.exists(version_file_path): + with open(version_file_path, 'r') as fp: + version = fp.readline().rstrip() + + # Checking if update is needed + if version != versions[-1]["Version"]: + print(f"Current version: {version}") + print(f"Latest version: {versions[-1]['Version']}") + + # Downloading modpack + with tempfile.TemporaryDirectory() as temp_dir: + modpack_file_path = os.path.join(temp_dir, instance_name + ".mrpack") + with open(modpack_file_path, 'wb') as modpack: + ftp.retrbinary("RETR " + versions[-1]["File"], modpack.write) + + # Running PrismLauncher with modpack + subprocess.Popen([prism_command, '-I', modpack_file_path]) + + # Waiting for installation to complete + while True: + time.sleep(5) + if os.path.exists(version_file_path): + with open(version_file_path, 'r') as fp: + version = fp.readline().rstrip() + if version == versions[-1]["Version"]: + break + + # Launching PrismLauncher with the instance + subprocess.run([prism_command, '-l', instance_name]) + + +def upload_pack(username, password, version_tag, fileName): + ftp = FTP("gitea.piwalker.net", username, password) + ftp.prot_p() + bio = io.BytesIO() + ftp.retrbinary("RETR versions.json", bio.write) + bio.seek(0) + versions = json.load(bio) + bio.close() + time = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S") + versions.append({"Version":version_tag, "Date":time, "File":"Versions/fcs7-"+time+".mrpack"}) + with open(fileName, 'rb') as fp: + ftp.storbinary("STOR "+versions[len(versions)-1]["File"], fp) + bio = io.BytesIO() + bio.write(json.dumps(versions).encode()) + bio.seek(0) + ftp.storbinary("STOR versions.json", bio) + bio.close() + ftp.close() + diff --git a/Main.py b/Main.py index 5f3cc93..0a1693b 100644 --- a/Main.py +++ b/Main.py @@ -1,13 +1,8 @@ -from ftplib import FTP import os -import io -import json -import tempfile -import subprocess -import time import tkinter as tk from tkinter import filedialog import configparser +import Backend # Initialize a configparser object for managing the configuration file config = configparser.ConfigParser() @@ -75,7 +70,7 @@ def main(): def start_installation(): prism_instance_path = prism_instance_path_entry.get() root.destroy() # Close the GUI window - perform_installation(instance_name, prism_command, prism_instance_path) + Backend.perform_installation(instance_name, prism_command, prism_instance_path) # Button to start installation install_button = tk.Button(root, text="Launch Minecraft", command=start_installation) @@ -83,50 +78,6 @@ def main(): root.mainloop() -def perform_installation(instance_name, prism_command, prism_instance_path): - ftp = FTP("gitea.piwalker.net") - ftp.login() - - # Fetching versions.json from FTP - bio = io.BytesIO() - ftp.retrbinary("RETR versions.json", bio.write) - bio.seek(0) - versions = json.load(bio) - bio.close() - - # Checking current version - version = "0.0.0" - version_file_path = os.path.join(prism_instance_path, instance_name, ".minecraft", "version.txt") - if os.path.exists(version_file_path): - with open(version_file_path, 'r') as fp: - version = fp.readline().rstrip() - - # Checking if update is needed - if version != versions[-1]["Version"]: - print(f"Current version: {version}") - print(f"Latest version: {versions[-1]['Version']}") - - # Downloading modpack - with tempfile.TemporaryDirectory() as temp_dir: - modpack_file_path = os.path.join(temp_dir, instance_name + ".mrpack") - with open(modpack_file_path, 'wb') as modpack: - ftp.retrbinary("RETR " + versions[-1]["File"], modpack.write) - - # Running PrismLauncher with modpack - p = subprocess.Popen([prism_command, '-I', modpack_file_path]) - - # Waiting for installation to complete - while True: - time.sleep(5) - if os.path.exists(version_file_path): - with open(version_file_path, 'r') as fp: - version = fp.readline().rstrip() - if version == versions[-1]["Version"]: - break - - # Launching PrismLauncher with the instance - subprocess.run([prism_command, '-l', instance_name]) - if __name__ == "__main__": main() diff --git a/Upload.py b/Upload.py index 0f31a4b..93a4eaf 100644 --- a/Upload.py +++ b/Upload.py @@ -1,28 +1,12 @@ -from ftplib import FTP_TLS as FTP -from getpass import getpass -import json -import io -import datetime +import Backend -fileName = "modpack.mrpack" -username = input("Username: ") -password = getpass() -version_tag = input("Version Number: ") -ftp = FTP("gitea.piwalker.net", username, password) -ftp.prot_p() -bio = io.BytesIO() -ftp.retrbinary("RETR versions.json", bio.write) -bio.seek(0) -versions = json.load(bio) -bio.close() -time = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S") -versions.append({"Version":version_tag, "Date":time, "File":"Versions/fcs7-"+time+".mrpack"}) -with open(fileName, 'rb') as fp: - ftp.storbinary("STOR "+versions[len(versions)-1]["File"], fp) - bio = io.BytesIO() - bio.write(json.dumps(versions).encode()) - bio.seek(0) - ftp.storbinary("STOR versions.json", bio) - bio.close() +def main(): + fileName = "modpack.mrpack" + username = input("Username: ") + password = getpass() + version_tag = input("Version Number: ") + Backend.upload_pack(username, password, version_tag, fileName) -ftp.close() + +if __name__=="__main__": + main()