Upload files to "subfiles"
This commit is contained in:
		
							parent
							
								
									37f33f49ca
								
							
						
					
					
						commit
						cc433a5bbf
					
				
							
								
								
									
										150
									
								
								subfiles/comunic.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										150
									
								
								subfiles/comunic.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,150 @@
 | 
			
		||||
#communication stuff here
 | 
			
		||||
 | 
			
		||||
import requests 
 | 
			
		||||
import json
 | 
			
		||||
from hashlib import sha256
 | 
			
		||||
from . import helpers, savetools
 | 
			
		||||
from websockets.sync.client import connect
 | 
			
		||||
from subprocess import Popen, PIPE
 | 
			
		||||
from sys import platform
 | 
			
		||||
from os import listdir
 | 
			
		||||
from os.path import isfile, join, exists
 | 
			
		||||
from pathlib import Path
 | 
			
		||||
import subprocess
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def downloadLatestDll(self, filepath):
 | 
			
		||||
    x = requests.get('https://openwf.io/supplementals/client%20drop-in/meta')
 | 
			
		||||
    meta = json.loads(x.text)
 | 
			
		||||
    url = f"https://openwf.io/supplementals/client%20drop-in/{meta['version']}/dwmapi.dll"# 
 | 
			
		||||
    content = requests.get(url, stream=True).content
 | 
			
		||||
    hashofdll = sha256()
 | 
			
		||||
    hashofdll.update(content)# 
 | 
			
		||||
    if hashofdll.hexdigest() == meta['sha256']:
 | 
			
		||||
        with open(filepath + "dwmapi.dll", "wb") as out_file:
 | 
			
		||||
            out_file.write(content)
 | 
			
		||||
            helpers.messageBox(self=self,title="Bootstrapper Downloaded", message="Bootstrapper Downloaded!", type="info")
 | 
			
		||||
    else:
 | 
			
		||||
        helpers.messageBox(self=self,title="Unknown Error.", message="SpaceninGUI could not verify the hash of the Bootstrapper. Sorry :(", type="error")#
 | 
			
		||||
 | 
			
		||||
def getLatestVersions(self, cacheFile, value):
 | 
			
		||||
    ver = {
 | 
			
		||||
        "server" : (
 | 
			
		||||
            "no lol" #not finished update check for server, check back later :3
 | 
			
		||||
        ),
 | 
			
		||||
        "client" : ""
 | 
			
		||||
    }
 | 
			
		||||
    #client code here
 | 
			
		||||
    x = requests.get('https://openwf.io/supplementals/client%20drop-in/meta')
 | 
			
		||||
    meta = json.loads(x.text)
 | 
			
		||||
    ver["client"] = meta['version']
 | 
			
		||||
 | 
			
		||||
    try: 
 | 
			
		||||
        oldVer = savetools.loadFile(self, cacheFile)["client"]
 | 
			
		||||
    except:
 | 
			
		||||
        with open('tempFile.json', 'w') as f:
 | 
			
		||||
            json.dump({
 | 
			
		||||
                "client":'notassigned',
 | 
			
		||||
                'server':'notassigned'
 | 
			
		||||
            },f,indent=2)
 | 
			
		||||
    
 | 
			
		||||
    oldVer = savetools.loadFile(self, cacheFile)["client"]
 | 
			
		||||
    if oldVer == ver["client"]:
 | 
			
		||||
        client="Up To Date!"
 | 
			
		||||
    else:
 | 
			
		||||
        client="New Version " + ver["client"]
 | 
			
		||||
    server = "server Check Not Implemented"
 | 
			
		||||
    value[0].set("Latest Server Version: " + server)
 | 
			
		||||
    value[1].set("Latest Client Version: " + client)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def serverBackground(self, cd, logArea): # To my knowledge, running the server in the main thread would stall the gui, fuck that lol
 | 
			
		||||
     logmax = helpers.getLogMax()
 | 
			
		||||
     logarr=[]
 | 
			
		||||
     def mongo():
 | 
			
		||||
         sysctl = Popen(['systemctl', 'start', 'mongodb'])
 | 
			
		||||
         sysctl.wait()# 
 | 
			
		||||
     def execute(cd):
 | 
			
		||||
         popen = Popen(['npm', 'run', 'dev'], stdin=PIPE, stdout=PIPE, universal_newlines=True, cwd=cd)
 | 
			
		||||
         for stdout_line in iter(popen.stdout.readline, ""):
 | 
			
		||||
             yield stdout_line 
 | 
			
		||||
         popen.stdout.close()
 | 
			
		||||
         return_code = popen.wait()
 | 
			
		||||
         if return_code:
 | 
			
		||||
             raise subprocess.CalledProcessError(return_code)# 
 | 
			
		||||
     if platform == "linux":
 | 
			
		||||
         helpers.messageBox(self, title="MongoDB", message="The mongodb server is required to start SNS\nYou will need to give sudo permission for this.", type="info")
 | 
			
		||||
         mongo()
 | 
			
		||||
     
 | 
			
		||||
     for path in execute(cd):
 | 
			
		||||
         if len(logarr) < logmax:
 | 
			
		||||
             logarr.append(path)
 | 
			
		||||
         else:
 | 
			
		||||
             logarr.pop(0)
 | 
			
		||||
             logarr.append(path)
 | 
			
		||||
         if logArea:
 | 
			
		||||
             logArea.configure(state="normal")
 | 
			
		||||
             logArea.delete(1.0, "end")
 | 
			
		||||
             for element in logarr:
 | 
			
		||||
                 pass
 | 
			
		||||
             logArea.configure(state="disabled")
 | 
			
		||||
 | 
			
		||||
def getClientResponse():
 | 
			
		||||
    try: 
 | 
			
		||||
        with connect("ws://localhost:61558") as websocket:
 | 
			
		||||
            message = json.loads(websocket.recv())
 | 
			
		||||
    except:
 | 
			
		||||
        message=False
 | 
			
		||||
    return message
 | 
			
		||||
 | 
			
		||||
def checkForClient(clientpath):
 | 
			
		||||
    onlyfiles = [f for f in listdir(clientpath) if isfile(join(clientpath, f))]
 | 
			
		||||
    if "dwmapi.dll" in onlyfiles:
 | 
			
		||||
        return True
 | 
			
		||||
    else: 
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
def runPluto(name, plutolist, conffile):
 | 
			
		||||
    openwfpath = helpers.getclientpath(conffile) + "/OpenWF/scripts/"
 | 
			
		||||
    onlyfiles = [f for f in listdir(openwfpath) if isfile(join(openwfpath, f))]
 | 
			
		||||
    if helpers.getclientresponse():
 | 
			
		||||
        running = []
 | 
			
		||||
        print(helpers.getclientresponse()["running_scripts"])
 | 
			
		||||
        if name in running:
 | 
			
		||||
            requests.get(url=("http://localhost:61558/stop_script?OpenWF/scripts/" + name))
 | 
			
		||||
        else:
 | 
			
		||||
            requests.get(url=("http://localhost:61558/start_script?OpenWF/scripts/" + name))
 | 
			
		||||
        
 | 
			
		||||
        for script in helpers.getclientresponse()["running_scripts"]:
 | 
			
		||||
            running.append(script.removeprefix("OpenWF/scripts/"))# 
 | 
			
		||||
        for file in onlyfiles:
 | 
			
		||||
            if file in running:
 | 
			
		||||
                if plutolist[file]: plutolist[file].set("Running")
 | 
			
		||||
            else:
 | 
			
		||||
                if plutolist[file]: plutolist[file].set("Not Running")
 | 
			
		||||
 | 
			
		||||
def getSnPath(file):
 | 
			
		||||
    if Path(file).is_file():
 | 
			
		||||
        with open(file) as f:
 | 
			
		||||
            d = json.load(f)
 | 
			
		||||
            return d["spaceninjapath"] 
 | 
			
		||||
    else: 
 | 
			
		||||
        return False
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										77
									
								
								subfiles/helpers.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								subfiles/helpers.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,77 @@
 | 
			
		||||
from CTkMessagebox import CTkMessagebox
 | 
			
		||||
import threading
 | 
			
		||||
from .savetools import loadFile
 | 
			
		||||
 | 
			
		||||
try: 
 | 
			
		||||
    from os import startfile 
 | 
			
		||||
except:
 | 
			
		||||
    from os import system
 | 
			
		||||
from sys import platform
 | 
			
		||||
 | 
			
		||||
def check():
 | 
			
		||||
    print("Save Good")
 | 
			
		||||
 | 
			
		||||
def removeChildren(frame):
 | 
			
		||||
    for element in frame.winfo_children():
 | 
			
		||||
            element.destroy()
 | 
			
		||||
 | 
			
		||||
def bgThread(func, args):
 | 
			
		||||
    th = threading.Thread(target=func, args=args)
 | 
			
		||||
    th.daemon = True
 | 
			
		||||
    th.start()
 | 
			
		||||
 | 
			
		||||
def openLocation(self, location):
 | 
			
		||||
    if platform == "linux":
 | 
			
		||||
        system('xdg-open "%s"' % location)
 | 
			
		||||
    elif platform == "windows":
 | 
			
		||||
        startfile(foldername)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def messageBox(self, title, message, type): #type will be implemented at a later point when required 
 | 
			
		||||
    CTkMessagebox(title=title, message=message)
 | 
			
		||||
 | 
			
		||||
def getLogMax(self, save):
 | 
			
		||||
    return loadFile(self, save)['maxlogsize'] #not entirely sure why I made this a seperate function but eh 
 | 
			
		||||
 | 
			
		||||
def isNumber(data):
 | 
			
		||||
    if data == '':
 | 
			
		||||
        return True
 | 
			
		||||
    try:
 | 
			
		||||
        rv = int(data)
 | 
			
		||||
    except ValueError:
 | 
			
		||||
        return False
 | 
			
		||||
    return True
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#Old Helper options, left here for future reference. Shitty code, but it works, and it may be useful in the future
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# def getlogmax():
 | 
			
		||||
#     file = 'sngconfig.json'
 | 
			
		||||
#     if Path(file).is_file():
 | 
			
		||||
#         with open(file) as f:
 | 
			
		||||
#             d = json.load(f)
 | 
			
		||||
#              
 | 
			
		||||
#     else: 
 | 
			
		||||
#         return False
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# def check4sn(configfile):
 | 
			
		||||
#     file = helpers.getsnpath(configfile) + "package.json"
 | 
			
		||||
#     if Path(file).is_file():
 | 
			
		||||
#         with open(file) as f:
 | 
			
		||||
#             d = json.load(f)
 | 
			
		||||
#             if (d["name"] == "wf-emulator"):
 | 
			
		||||
#                 return True
 | 
			
		||||
#             else:
 | 
			
		||||
#                 return False# 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										23
									
								
								subfiles/install.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								subfiles/install.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
			
		||||
def check():
 | 
			
		||||
    print("install Good")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def installFiles(self, clientpath, serverpath):
 | 
			
		||||
    #first install server
 | 
			
		||||
    self.installstep.set("Downloading Server Through Git")
 | 
			
		||||
    sysctl = Popen(['git', 'clone', 'https://openwf.io/SpaceNinjaServer.git', serverpath])
 | 
			
		||||
    self.installprog.set(1)
 | 
			
		||||
    sysctl.wait()
 | 
			
		||||
    self.installstep.set("Installing Server Requirements (via npm)")
 | 
			
		||||
    self.installprog.set(25)
 | 
			
		||||
    sysctl = Popen(["npm", '--prefix', f'{serverpath}', 'install'])
 | 
			
		||||
    sysctl.wait()
 | 
			
		||||
    self.installstep.set("Copying Config File")
 | 
			
		||||
    shutil.copy(serverpath + "/config.json.example", serverpath + "/config.json")
 | 
			
		||||
    self.installstep.set("Starting Bootstrapper Download")
 | 
			
		||||
    self.installprog.set(50)
 | 
			
		||||
    print("Server install worked. ")
 | 
			
		||||
    helpers.downloadlatestdll(clientpath)
 | 
			
		||||
    self.installprog.set(99)
 | 
			
		||||
    self.installstep.set("Install Complete!\nPress next then restart to get started!")
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										22
									
								
								subfiles/savetools.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								subfiles/savetools.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,22 @@
 | 
			
		||||
import json
 | 
			
		||||
 | 
			
		||||
def check():
 | 
			
		||||
    print("Save Check Good")
 | 
			
		||||
 | 
			
		||||
# Yea I know this is pretty pointless in a seperate file but it's nice to have these things
 | 
			
		||||
def loadFile(self, file1):
 | 
			
		||||
    with open(file1, "r") as file:
 | 
			
		||||
        
 | 
			
		||||
        data = json.load(file)
 | 
			
		||||
    return data
 | 
			
		||||
 | 
			
		||||
#Data should be recived in [[data, position], [data, position]] format
 | 
			
		||||
def saveFile(self, fileP, data):
 | 
			
		||||
    with open(fileP, 'r') as file:
 | 
			
		||||
        data = json.load(file)
 | 
			
		||||
    for subData in data:
 | 
			
		||||
        data[subData[1]] = subData[0]
 | 
			
		||||
    with open(fileP, 'w'):
 | 
			
		||||
        json.dump(file, indent=2)
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										12
									
								
								subfiles/themes.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								subfiles/themes.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
def getThemes(self):
 | 
			
		||||
    themes = {
 | 
			
		||||
        "black_orange" : {
 | 
			
		||||
            "fg_color" : "#000000",
 | 
			
		||||
            "bg_color" : "#14213D",
 | 
			
		||||
            "bg_deep" : "#121e37",
 | 
			
		||||
            "border_color" : "#14213D",
 | 
			
		||||
            "highlight_color" : '#FCA311',
 | 
			
		||||
            "text_color" : ""
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return themes
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user