split frontend and backend

This commit is contained in:
Samuel Walker 2024-06-20 08:30:57 -06:00
parent 1212dd49c6
commit 75e558313c
3 changed files with 87 additions and 77 deletions

75
Backend.py Normal file
View File

@ -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()

53
Main.py
View File

@ -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()

View File

@ -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()