This commit is contained in:
Cuptain 2024-06-21 00:41:58 +10:00
commit 1de111ee2c
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 os
import io
import json
import tempfile
import subprocess
import time
import tkinter as tk import tkinter as tk
from tkinter import filedialog from tkinter import filedialog
import configparser import configparser
import Backend
import customtkinter import customtkinter
from customtkinter import * from customtkinter import *
@ -79,7 +74,7 @@ def main():
def start_installation(): def start_installation():
prism_instance_path = prism_instance_path_entry.get() prism_instance_path = prism_instance_path_entry.get()
app.destroy() # Close the GUI window app.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 # Button to start installation
install_button = CTkButton(master=app, text="Launch Minecraft", command=start_installation) install_button = CTkButton(master=app, text="Launch Minecraft", command=start_installation)
@ -87,50 +82,6 @@ def main():
app.mainloop() app.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__": if __name__ == "__main__":
main() main()

View File

@ -1,28 +1,12 @@
from ftplib import FTP_TLS as FTP import Backend
from getpass import getpass
import json
import io
import datetime
def main():
fileName = "modpack.mrpack" fileName = "modpack.mrpack"
username = input("Username: ") username = input("Username: ")
password = getpass() password = getpass()
version_tag = input("Version Number: ") version_tag = input("Version Number: ")
ftp = FTP("gitea.piwalker.net", username, password) Backend.upload_pack(username, password, version_tag, fileName)
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()
if __name__=="__main__":
main()