Upload files to "/"
This commit is contained in:
		
							parent
							
								
									0970e28f0c
								
							
						
					
					
						commit
						9da204da1d
					
				
							
								
								
									
										548
									
								
								__main__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										548
									
								
								__main__.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,548 @@
 | 
				
			|||||||
 | 
					from os.path import isfile, join, exists
 | 
				
			||||||
 | 
					import customtkinter
 | 
				
			||||||
 | 
					from CTkMessagebox import CTkMessagebox
 | 
				
			||||||
 | 
					from subfiles import helpers, install, savetools, themes, comunic
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from subprocess import Popen, PIPE
 | 
				
			||||||
 | 
					import threading
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from pathlib import Path
 | 
				
			||||||
 | 
					from sys import platform
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from hashlib import sha256
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from os import listdir
 | 
				
			||||||
 | 
					from os.path import isfile, join, exists
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import shutil
 | 
				
			||||||
 | 
					from websockets.sync.client import connect
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					customtkinter.set_appearance_mode("System") 
 | 
				
			||||||
 | 
					customtkinter.set_window_scaling(1)
 | 
				
			||||||
 | 
					customtkinter.set_widget_scaling(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def placeholder():
 | 
				
			||||||
 | 
					    print("placeholder called")
 | 
				
			||||||
 | 
					    pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class menuTools:
 | 
				
			||||||
 | 
					    def selectFromList(self, itemList, iconList, textvar):
 | 
				
			||||||
 | 
					        #there is a LOT here, I really should make a "menus" file lol 
 | 
				
			||||||
 | 
					        self.truePath=''
 | 
				
			||||||
 | 
					        print(textvar.get())
 | 
				
			||||||
 | 
					        self.threadRunning=False
 | 
				
			||||||
 | 
					        currentOption= customtkinter.StringVar()
 | 
				
			||||||
 | 
					        currentOption.set("Current Option: None")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.currentImage = helpers.getIcon(self, "NA", "/placeholder.png")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        currentLimit = customtkinter.StringVar()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        newWindow = customtkinter.CTkToplevel(self.root)
 | 
				
			||||||
 | 
					        newWindow.title("Select An Option")
 | 
				
			||||||
 | 
					        newWindow.geometry("600x400")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        customtkinter.CTkLabel(newWindow, text="Please Choose an Option", anchor='center').grid(row=0, column=0, sticky="we")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        centerFrame = customtkinter.CTkFrame(newWindow, width=600, height=200, fg_color="transparent")
 | 
				
			||||||
 | 
					        centerFrame.pack_propagate(False)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        listFrame= customtkinter.CTkScrollableFrame(centerFrame, height=200, width=300, bg_color="transparent")
 | 
				
			||||||
 | 
					        self.listFrameInner = customtkinter.CTkFrame(listFrame)
 | 
				
			||||||
 | 
					        self.listFrameInner.pack()
 | 
				
			||||||
 | 
					        def submit(self, truePath, textvar, window):
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            print(f"truePath : {self.truePath}")
 | 
				
			||||||
 | 
					            print(textvar.get())
 | 
				
			||||||
 | 
					            if currentOption.get() == '':
 | 
				
			||||||
 | 
					                window.destroy()
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                textvar.set(self.truePath)
 | 
				
			||||||
 | 
					                window.destroy()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        def change(self, path, name, textVar, iconList):
 | 
				
			||||||
 | 
					            textVar.set(f"Current Option: {name}")
 | 
				
			||||||
 | 
					            print(path)
 | 
				
			||||||
 | 
					            self.truePath=path
 | 
				
			||||||
 | 
					            print(self.truePath)
 | 
				
			||||||
 | 
					            self.currentImage=helpers.getIcon(self, path, iconList[path])
 | 
				
			||||||
 | 
					            icon=customtkinter.CTkImage(dark_image=self.currentImage, size=(200, 200))
 | 
				
			||||||
 | 
					            self.iconLabel.destroy()
 | 
				
			||||||
 | 
					            self.iconLabel = customtkinter.CTkLabel(sideFrame, text="", image=icon, width=275, height=200)
 | 
				
			||||||
 | 
					            self.iconLabel.grid(row=0, column=0)
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        def outsideThread(self, listFrame, itemList, limit, truePath):
 | 
				
			||||||
 | 
					            i = 0
 | 
				
			||||||
 | 
					            for element in itemList: 
 | 
				
			||||||
 | 
					                if limit in element["name"].lower(): ass= True 
 | 
				
			||||||
 | 
					                else: ass= False
 | 
				
			||||||
 | 
					                print(f"{element["name"]} : {str(ass)}")
 | 
				
			||||||
 | 
					                if limit in element["name"].lower():
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                    if "slot" in element:
 | 
				
			||||||
 | 
					                        button = customtkinter.CTkButton(self.listFrameInner, text=(f"{element["name"]} - SLOT {str(element["slot"])}"), border_color="black", anchor="w", fg_color="transparent", width = 299, command=lambda element=element: change(self, element["uniqueName"], element["name"], currentOption, iconList))
 | 
				
			||||||
 | 
					                    else:
 | 
				
			||||||
 | 
					                        i+=1
 | 
				
			||||||
 | 
					                        button = customtkinter.CTkButton(self.listFrameInner, text=(f"{element["name"]} - NO SLOT"), border_color="black", anchor="w", fg_color="transparent", width = 299, command=lambda element=element: change(self, element["uniqueName"], element["name"], currentOption, iconList))
 | 
				
			||||||
 | 
					                    button.pack(anchor="nw", expand=True)
 | 
				
			||||||
 | 
					            print(i)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            self.threadRunning=False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        def reset(self, args):
 | 
				
			||||||
 | 
					            if self.threadRunning:
 | 
				
			||||||
 | 
					                return #If the search thread is running, just wait, don't be fucking lazy, it takes 2 seconds for THE ENTIRE LIST, it is not that hard
 | 
				
			||||||
 | 
					            helpers.removeChildren(self.listFrameInner)
 | 
				
			||||||
 | 
					            helpers.bgThread(outsideThread, args)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        helpers.bgThread(outsideThread, [self, listFrame, itemList, '', self.truePath])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        sideFrame= customtkinter.CTkFrame(centerFrame, height=200, width=275, fg_color="transparent")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        icon=customtkinter.CTkImage(dark_image=self.currentImage, size=(200, 200))
 | 
				
			||||||
 | 
					        self.iconLabel = customtkinter.CTkLabel(sideFrame, text="", image=icon, width=275, height=200)
 | 
				
			||||||
 | 
					        self.iconLabel.grid(row=0, column=0)
 | 
				
			||||||
 | 
					        sideFrame.grid(row=0, column=0, sticky="nsew")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        searchFrame=customtkinter.CTkFrame(newWindow, width=600)
 | 
				
			||||||
 | 
					        searchFrame.grid(row=2, column=0)
 | 
				
			||||||
 | 
					        search=customtkinter.CTkEntry(searchFrame, textvariable=currentLimit, fg_color="transparent", width=400)
 | 
				
			||||||
 | 
					        search.grid(row=0, column=0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        searchButton=customtkinter.CTkButton(searchFrame, width=200, text="Search", command=lambda: reset(self, [self, listFrame, itemList, currentLimit.get(), self.truePath]))
 | 
				
			||||||
 | 
					        searchButton.grid(row=0, column=1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        optionLabel= customtkinter.CTkLabel(newWindow, textvariable=currentOption)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        submitButton=customtkinter.CTkButton(newWindow, width=100, text="Submit", height=30, command= lambda: submit(self,self.truePath,textvar,newWindow))
 | 
				
			||||||
 | 
					        submitButton.grid(row=4, column=0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        centerFrame.grid(row=1, column=0)
 | 
				
			||||||
 | 
					        listFrame.grid(row=0, column=1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        optionLabel.grid(row=3, column=0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def verticalButtons(self, buttonList, frame):
 | 
				
			||||||
 | 
					        for button in buttonList.keys():
 | 
				
			||||||
 | 
					            sideButton = customtkinter.CTkButton(frame, height=28, hover_color=self.theme["highlight_color"], 
 | 
				
			||||||
 | 
					            border_color=self.theme["highlight_color"],
 | 
				
			||||||
 | 
					            border_width=(self.x * .001),
 | 
				
			||||||
 | 
					            fg_color="transparent",
 | 
				
			||||||
 | 
					            bg_color="transparent",
 | 
				
			||||||
 | 
					            text=button,
 | 
				
			||||||
 | 
					            command=buttonList[button])
 | 
				
			||||||
 | 
					            sideButton.pack(pady=(self.y * .01), padx=2, side="top", anchor="nw")
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    def labelDown(self, labelList, frame, column):
 | 
				
			||||||
 | 
					        newFrame=customtkinter.CTkFrame(frame, fg_color="transparent")
 | 
				
			||||||
 | 
					        newFrame.grid(row=0, column=3, sticky="nswe")
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        i=1
 | 
				
			||||||
 | 
					        l = []
 | 
				
			||||||
 | 
					        for labelText in labelList: 
 | 
				
			||||||
 | 
					            label = customtkinter.CTkLabel(newFrame, textvariable=labelText, height=28, text_color="white")
 | 
				
			||||||
 | 
					            l.append(label)
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					        for g in l:
 | 
				
			||||||
 | 
					            g.pack(anchor='nw')
 | 
				
			||||||
 | 
					            i+=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def horizontalButtons(self, buttonList, frame):
 | 
				
			||||||
 | 
					        for button in buttonList.keys():
 | 
				
			||||||
 | 
					            sideButton = customtkinter.CTkButton(frame, height=28, hover_color=self.theme["highlight_color"], 
 | 
				
			||||||
 | 
					            border_color=self.theme["highlight_color"],
 | 
				
			||||||
 | 
					            border_width=(self.x * .001),
 | 
				
			||||||
 | 
					            fg_color="transparent",
 | 
				
			||||||
 | 
					            bg_color="transparent",
 | 
				
			||||||
 | 
					            text=button,
 | 
				
			||||||
 | 
					            command=buttonList[button])
 | 
				
			||||||
 | 
					            sideButton.pack(pady=(self.x * .01), padx=2, side="left", anchor="w")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class menus():
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    def serverMenu(self):
 | 
				
			||||||
 | 
					        helpers.removeChildren(self.mainFrame)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        topFrame = customtkinter.CTkFrame(self.mainFrame, fg_color=self.theme["bg_deep"], corner_radius=10, height=(self.y * .80), width=(self.x * (.70)),
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        topFrame.pack(pady=(self.y * .10))
 | 
				
			||||||
 | 
					        topFrame.grid_propagate(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        sideFrame = customtkinter.CTkFrame(topFrame, width=(self.x * .7 * .25), height=self.y*.8, fg_color=self.theme['bg_deep'])
 | 
				
			||||||
 | 
					        sideFrame.grid(row=0, column=0, sticky="ns")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        borderFrame=customtkinter.CTkFrame(topFrame, width=(self.x * .7 * .01), height=(self.y*.8), fg_color=self.theme['bg_color'], corner_radius=0)
 | 
				
			||||||
 | 
					        borderFrame.grid(row=0, column=1, sticky="ns")
 | 
				
			||||||
 | 
					        sideFrame.grid_propagate(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        buttonList = {
 | 
				
			||||||
 | 
					            "Start Server" : lambda: helpers.bgThread(comunic.startServer, [self, self.serverPath, self.logArea]),
 | 
				
			||||||
 | 
					            "Open Server Location": lambda: helpers.openLocation(self, comunic.getSnPath('sngconfig.json'))
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        menuTools.verticalButtons(self, buttonList=buttonList, frame=sideFrame)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.logArea = customtkinter.CTkTextbox(topFrame, width=(self.x * .7 * .74))
 | 
				
			||||||
 | 
					        self.logArea.grid(row=0, column=2, sticky="ns")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def updateMenu(self):
 | 
				
			||||||
 | 
					        helpers.removeChildren(self.mainFrame)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        topFrame = customtkinter.CTkFrame(self.mainFrame, fg_color=self.theme["bg_deep"], corner_radius=10, height=(self.y * .80), width=(self.x * (.70)),
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        topFrame.pack(pady=(self.y * .10))
 | 
				
			||||||
 | 
					        topFrame.grid_propagate(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        sideFrame = customtkinter.CTkFrame(topFrame, width=(self.x * .7 * .25), height=self.y*.8, fg_color="transparent", corner_radius=10)
 | 
				
			||||||
 | 
					        sideFrame.grid(row=0, column=0, sticky="ns")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        borderFrame=customtkinter.CTkFrame(topFrame, width=(self.x * .7 * .01), height=(self.y*.8), fg_color=self.theme['bg_color'], corner_radius=0)
 | 
				
			||||||
 | 
					        borderFrame.grid(row=0, column=1, sticky="ns")
 | 
				
			||||||
 | 
					        sideFrame.grid_propagate(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.versions = [
 | 
				
			||||||
 | 
					            customtkinter.StringVar(),
 | 
				
			||||||
 | 
					            customtkinter.StringVar()
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        buttonList = {
 | 
				
			||||||
 | 
					            "Open Client Location" : lambda: helpers.openLocation(self, self.clientPath),
 | 
				
			||||||
 | 
					            "Open Server Location": lambda: helpers.openLocation(self, comunic.getSnPath(self.configFile)),
 | 
				
			||||||
 | 
					            "Update Client Bootstrapper" : lambda: comunic.downloadLatestDll(self, self.clientPath),
 | 
				
			||||||
 | 
					            "Update Server" : lambda: placeholder()
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        menuTools.verticalButtons(self, buttonList=buttonList, frame=sideFrame)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        self.versions[0].set("Checking Server Version")
 | 
				
			||||||
 | 
					        self.versions[1].set("Checking Client Version")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        helpers.bgThread(comunic.getLatestVersions, [self, 'tempFile.json', self.versions])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        menuTools.labelDown(self, labelList=self.versions, frame=topFrame, column=3)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    def clientMenu(self):
 | 
				
			||||||
 | 
					        helpers.removeChildren(self.mainFrame)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        topFrame = customtkinter.CTkFrame(self.mainFrame, fg_color=self.theme["bg_deep"], corner_radius=10, height=(self.y * .80), width=(self.x * (.70)),
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        topFrame.pack(pady=(self.y * .10))
 | 
				
			||||||
 | 
					        topFrame.grid_propagate(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        menuBar = customtkinter.CTkFrame(topFrame, fg_color=self.theme["bg_deep"], width=(self.x * (.70)), height=self.y * .1)
 | 
				
			||||||
 | 
					        menuBar.grid(row=0, column=0, sticky="we")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        buttonList = {
 | 
				
			||||||
 | 
					            "Start Client (steam)" : lambda: helpers.bgThread(comunic.startClient, [self, json.load(open(self.configFile))["steamID"]]),
 | 
				
			||||||
 | 
					            "Open Logs Location" : lambda: comunic.openClientLogs(self, platform)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        menuTools.horizontalButtons(self, buttonList, menuBar)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def settingsMenu(self, file):
 | 
				
			||||||
 | 
					        data = savetools.loadFile(self, file)
 | 
				
			||||||
 | 
					        helpers.removeChildren(self.mainFrame)
 | 
				
			||||||
 | 
					        topFrame = customtkinter.CTkScrollableFrame(self.mainFrame, fg_color=self.theme["bg_deep"], corner_radius=10, height=(self.y * .80), width=(self.x * (.70)),
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        topFrame.pack(pady=(self.y * .10))
 | 
				
			||||||
 | 
					        newData = {}
 | 
				
			||||||
 | 
					        def recusiveIssue(self, data, newData, topFrame, recLayer, i):
 | 
				
			||||||
 | 
					            print("Length : " + str(i) + " Type : " + str(type(data)))
 | 
				
			||||||
 | 
					            if type(data) is dict:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                for key in data.keys():
 | 
				
			||||||
 | 
					                    layerArr = ""
 | 
				
			||||||
 | 
					                    for n in range(recLayer):
 | 
				
			||||||
 | 
					                        layerArr = layerArr + "  "
 | 
				
			||||||
 | 
					                    if recLayer > 0:
 | 
				
			||||||
 | 
					                        layerArr=layerArr+"↳"
 | 
				
			||||||
 | 
					                    l = customtkinter.CTkLabel(topFrame, text=layerArr + key, anchor='w')
 | 
				
			||||||
 | 
					                    l.grid(row=i, column=0, sticky='w')
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                    print(key + f" : {str(i)}")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    match data[key]:
 | 
				
			||||||
 | 
					                        case str():
 | 
				
			||||||
 | 
					                            newData[key] = customtkinter.StringVar()
 | 
				
			||||||
 | 
					                            newData[key].set(data[key])
 | 
				
			||||||
 | 
					                            
 | 
				
			||||||
 | 
					                            e = customtkinter.CTkEntry(topFrame, textvariable=newData[key], width=self.x*.5)
 | 
				
			||||||
 | 
					                            e.grid(row=i, column=1, padx=10)
 | 
				
			||||||
 | 
					                            i+=1
 | 
				
			||||||
 | 
					                        case bool():
 | 
				
			||||||
 | 
					                            newData[key] = customtkinter.BooleanVar()
 | 
				
			||||||
 | 
					                            newData[key].set(data[key])
 | 
				
			||||||
 | 
					                            
 | 
				
			||||||
 | 
					                            e = customtkinter.CTkSwitch(topFrame, variable=newData[key], onvalue=True, offvalue=False, text='')
 | 
				
			||||||
 | 
					                            e.grid(row=i, column=1, padx=10)
 | 
				
			||||||
 | 
					                            i+=1
 | 
				
			||||||
 | 
					                        case int():
 | 
				
			||||||
 | 
					                            newData[key] = customtkinter.StringVar()
 | 
				
			||||||
 | 
					                            newData[key].set(str(data[key]))
 | 
				
			||||||
 | 
					                            
 | 
				
			||||||
 | 
					                            e = customtkinter.CTkEntry(topFrame, textvariable=newData[key], width=self.x*.5, validate='key', validatecommand=(self.verifyNumb, '%P'))
 | 
				
			||||||
 | 
					                            e.grid(row=i, column=1, padx=10)
 | 
				
			||||||
 | 
					                            i+=1
 | 
				
			||||||
 | 
					                        case dict():
 | 
				
			||||||
 | 
					                            i+=1
 | 
				
			||||||
 | 
					                            newData[key] = {}
 | 
				
			||||||
 | 
					                            i = recusiveIssue(self, data[key], newData[key], topFrame, (recLayer + 1), i)
 | 
				
			||||||
 | 
					                        case list():
 | 
				
			||||||
 | 
					                            i+=1
 | 
				
			||||||
 | 
					                            newData[key] = []
 | 
				
			||||||
 | 
					                            i = recusiveIssue(self, data[key], newData[key], topFrame, (recLayer + 1), i)
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            elif type(data) is list:
 | 
				
			||||||
 | 
					                for key in range(len(data)):
 | 
				
			||||||
 | 
					                    layerArr = ""
 | 
				
			||||||
 | 
					                    for n in range(recLayer):
 | 
				
			||||||
 | 
					                        layerArr = layerArr + "  "
 | 
				
			||||||
 | 
					                    if recLayer > 0:
 | 
				
			||||||
 | 
					                        layerArr=layerArr+"↳"
 | 
				
			||||||
 | 
					                    l = customtkinter.CTkLabel(topFrame, text=layerArr + str(key), anchor='w')
 | 
				
			||||||
 | 
					                    l.grid(row=i, column=0, sticky='w')
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                    print(str(key) + " key")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    match data[key]:
 | 
				
			||||||
 | 
					                        
 | 
				
			||||||
 | 
					                        case str():
 | 
				
			||||||
 | 
					                            newData.append(customtkinter.StringVar())
 | 
				
			||||||
 | 
					                            newData[key].set(data[key])
 | 
				
			||||||
 | 
					                            
 | 
				
			||||||
 | 
					                            e = customtkinter.CTkEntry(topFrame, textvariable=newData[key], width=self.x*.5)
 | 
				
			||||||
 | 
					                            e.grid(row=i, column=1, padx=10)
 | 
				
			||||||
 | 
					                            i+=1
 | 
				
			||||||
 | 
					                        case bool():
 | 
				
			||||||
 | 
					                            newData.append(customtkinter.BooleanVar())
 | 
				
			||||||
 | 
					                            newData[key].set(data[key])
 | 
				
			||||||
 | 
					                            
 | 
				
			||||||
 | 
					                            e = customtkinter.CTkSwitch(topFrame, variable=newData[key], onvalue=True, offvalue=False, text='')
 | 
				
			||||||
 | 
					                            e.grid(row=i, column=1, padx=10)
 | 
				
			||||||
 | 
					                            i+=1
 | 
				
			||||||
 | 
					                        case int():
 | 
				
			||||||
 | 
					                            newData.append(customtkinter.IntVar())
 | 
				
			||||||
 | 
					                            newData[key].set(data[key])
 | 
				
			||||||
 | 
					                            
 | 
				
			||||||
 | 
					                            e = customtkinter.CTkEntry(topFrame, textvariable=newData[key], width=self.x*.5)
 | 
				
			||||||
 | 
					                            e.grid(row=i, column=1, padx=10)
 | 
				
			||||||
 | 
					                            i+=1
 | 
				
			||||||
 | 
					                        case dict():
 | 
				
			||||||
 | 
					                            i+=1
 | 
				
			||||||
 | 
					                            newData.append({})
 | 
				
			||||||
 | 
					                            i = recusiveIssue(self, data[key], newData[key], topFrame, (recLayer + 1), i)
 | 
				
			||||||
 | 
					                        case list():
 | 
				
			||||||
 | 
					                            i+=1
 | 
				
			||||||
 | 
					                            newData.append([])
 | 
				
			||||||
 | 
					                            i = recusiveIssue(self, data[key], newData[key], topFrame, (recLayer + 1), i)
 | 
				
			||||||
 | 
					            return i
 | 
				
			||||||
 | 
					        i=0
 | 
				
			||||||
 | 
					        i=recusiveIssue(self, data, newData, topFrame, 0, i)
 | 
				
			||||||
 | 
					        saveButton = customtkinter.CTkButton(topFrame, height=28, hover_color=self.theme["highlight_color"], 
 | 
				
			||||||
 | 
					            border_color=self.theme["highlight_color"],
 | 
				
			||||||
 | 
					            border_width=(self.x * .001),
 | 
				
			||||||
 | 
					            fg_color="transparent",
 | 
				
			||||||
 | 
					            bg_color="transparent",
 | 
				
			||||||
 | 
					            text="Save Settings",
 | 
				
			||||||
 | 
					            command=lambda: savetools.saveFile(self, newData, file))
 | 
				
			||||||
 | 
					        saveButton.grid(row=i, column=0, sticky='w')
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    def plutoMenu(self):
 | 
				
			||||||
 | 
					        helpers.removeChildren(self.mainFrame)
 | 
				
			||||||
 | 
					        plutoList=[f for f in listdir(self.clientPath+'/OpenWF/scripts/') if isfile(join(self.clientPath + "/OpenWF/scripts/", f))]
 | 
				
			||||||
 | 
					        runningList={}
 | 
				
			||||||
 | 
					        print(plutoList)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        topFrame = customtkinter.CTkFrame(self.mainFrame, fg_color=self.theme["bg_deep"], corner_radius=10, height=(self.y * .80), width=(self.x * (.70)),
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        topFrame.pack(pady=(self.y * .10))
 | 
				
			||||||
 | 
					        topFrame.grid_propagate(0)
 | 
				
			||||||
 | 
					        topFrame.columnconfigure(1, weight=1)
 | 
				
			||||||
 | 
					        i=0
 | 
				
			||||||
 | 
					        for pluto in plutoList:
 | 
				
			||||||
 | 
					            runningList[pluto] = customtkinter.BooleanVar()
 | 
				
			||||||
 | 
					            label = customtkinter.CTkLabel(topFrame, text=pluto)
 | 
				
			||||||
 | 
					            label.grid(row=i, column=0, sticky="nsw", padx=10)
 | 
				
			||||||
 | 
					            toggle = customtkinter
 | 
				
			||||||
 | 
					            e = customtkinter.CTkSwitch(topFrame, variable=runningList[pluto], command=lambda pluto=pluto: comunic.runPluto(self, pluto, runningList), text='')
 | 
				
			||||||
 | 
					            e.grid(row=i, column=1, padx=10)
 | 
				
			||||||
 | 
					            i+=1
 | 
				
			||||||
 | 
					            print(pluto)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def inlineScripting(self):
 | 
				
			||||||
 | 
					        helpers.removeChildren(self.mainFrame)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        topFrame = customtkinter.CTkFrame(self.mainFrame, fg_color=self.theme["bg_deep"], corner_radius=10, height=(self.y * .80), width=(self.x * (.70)),
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        topFrame.pack(pady=(self.y * .10))
 | 
				
			||||||
 | 
					        topFrame.grid_propagate(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        sideFrame = customtkinter.CTkFrame(topFrame, width=(self.x * .7 * .25), height=self.y*.8, fg_color=self.theme['bg_deep'])
 | 
				
			||||||
 | 
					        sideFrame.grid(row=0, column=0, sticky="ns")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        borderFrame=customtkinter.CTkFrame(topFrame, width=(self.x * .7 * .01), height=(self.y*.8), fg_color=self.theme['bg_color'], corner_radius=0)
 | 
				
			||||||
 | 
					        borderFrame.grid(row=0, column=1, sticky="ns")
 | 
				
			||||||
 | 
					        sideFrame.grid_propagate(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        buttonList = {
 | 
				
			||||||
 | 
					            "Push Inline" : lambda: comunic.pushInline(self, self.logArea)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        menuTools.verticalButtons(self, buttonList=buttonList, frame=sideFrame)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.logArea = customtkinter.CTkTextbox(topFrame, width=(self.x * .7 * .74))
 | 
				
			||||||
 | 
					        self.logArea.grid(row=0, column=2, sticky="ns")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def arsenalMenu(self):
 | 
				
			||||||
 | 
					        helpers.removeChildren(self.mainFrame)
 | 
				
			||||||
 | 
					        #Load weapons from cache
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            self.weapons=helpers.formatExportWeapons(self, './cache/items/weapons.json')
 | 
				
			||||||
 | 
					            self.powersuits=helpers.formatExportPowersuits(self, './cache/items/powersuits.json')
 | 
				
			||||||
 | 
					            self.weaponsIcons=helpers.formatExportPlus(self, './cache/items/plus/weapons.json')
 | 
				
			||||||
 | 
					            self.powersuitsIcons=helpers.formatExportPlus(self, './cache/items/plus/powersuits.json')
 | 
				
			||||||
 | 
					        except:
 | 
				
			||||||
 | 
					            print("FUCK")
 | 
				
			||||||
 | 
					            comunic.getWarframeExports(self, "./cache/items/")
 | 
				
			||||||
 | 
					            comunic.getWarframeExportsPlus(self, "./cache/items/")
 | 
				
			||||||
 | 
					            self.weapons=helpers.formatExportWeapons(self, './cache/items/weapons.json')
 | 
				
			||||||
 | 
					            self.powersuits=helpers.formatExportPowersuits(self, './cache/items/powersuits.json')
 | 
				
			||||||
 | 
					            self.weaponsIcons=helpers.formatExportPlus(self, './cache/items/plus/weapons.json')
 | 
				
			||||||
 | 
					            self.powersuitsIcons=helpers.formatExportPlus(self, './cache/items/plus/powersuits.json')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        topFrame = customtkinter.CTkFrame(self.mainFrame, fg_color=self.theme["bg_deep"], corner_radius=10, height=(self.y * .80), width=(self.x * (.70)),)
 | 
				
			||||||
 | 
					        topFrame.pack(pady=(self.y * .10))
 | 
				
			||||||
 | 
					        topFrame.grid_propagate(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        leftFrame = customtkinter.CTkFrame(topFrame, width=(self.x * .7 * .25), height=self.y*.8, fg_color=self.theme['bg_deep'])
 | 
				
			||||||
 | 
					        leftFrame.grid(row=0, column=0, sticky="ns")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        borderFrame=customtkinter.CTkFrame(topFrame, width=(self.x * .7 * .01), height=(self.y*.8), fg_color=self.theme['bg_color'], corner_radius=0)
 | 
				
			||||||
 | 
					        borderFrame.grid(row=0, column=1, sticky="ns")
 | 
				
			||||||
 | 
					        leftFrame.grid_propagate(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        rightFrame = customtkinter.CTkFrame(topFrame, fg_color=self.theme['bg_deep'])
 | 
				
			||||||
 | 
					        rightFrame.grid(row=0, column=2, sticky="nsew")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        selectedWeapons = {}
 | 
				
			||||||
 | 
					        i=0
 | 
				
			||||||
 | 
					        for entry in ["Warframe", "Primary", "Secondary", "Melee"]:
 | 
				
			||||||
 | 
					            selectedWeapons[entry] = customtkinter.StringVar()
 | 
				
			||||||
 | 
					            l=customtkinter.CTkLabel(rightFrame, text=entry)
 | 
				
			||||||
 | 
					            l.grid(row=i, column=0, padx=6)
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            e=customtkinter.CTkEntry(rightFrame, textvariable=selectedWeapons[entry], width=self.x*.3, fg_color=self.theme["fg_color"])
 | 
				
			||||||
 | 
					            e.grid(row=i, column=1, sticky="n", padx=10, pady=3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if not (entry == "Warframe"):
 | 
				
			||||||
 | 
					                button=customtkinter.CTkButton(rightFrame, text="📁", width=5, command=lambda selectedWeapons=selectedWeapons[entry]: menuTools.selectFromList(self, self.weapons, self.weaponsIcons, selectedWeapons))
 | 
				
			||||||
 | 
					            elif entry == "Warframe":
 | 
				
			||||||
 | 
					                button=customtkinter.CTkButton(rightFrame, text="📁", width=5, command=lambda selectedWeapons=selectedWeapons[entry]: menuTools.selectFromList(self, self.powersuits, self.powersuitsIcons, selectedWeapons))
 | 
				
			||||||
 | 
					            #if not entry:
 | 
				
			||||||
 | 
					            #   how????? 
 | 
				
			||||||
 | 
					            button.grid(row=i, column=2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            i+=1
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        buttonList = {
 | 
				
			||||||
 | 
					            "Push All" : lambda: comunic.pushWeapon(self, [selectedWeapons["Warframe"].get(),selectedWeapons["Primary"].get(),selectedWeapons["Secondary"].get(),selectedWeapons["Melee"].get()], [3, 1, 0, 5]),
 | 
				
			||||||
 | 
					            "Push Warframe" : lambda: comunic.pushWeapon(self, selectedWeapons["Warframe"].get(), 3),
 | 
				
			||||||
 | 
					            "Push Primary" : lambda: comunic.pushWeapon(self, selectedWeapons["Primary"].get(), 1),
 | 
				
			||||||
 | 
					            "Push Secondary" : lambda: comunic.pushWeapon(self, selectedWeapons["Secondary"].get(), 0),
 | 
				
			||||||
 | 
					            "Push Melee" : lambda: comunic.pushWeapon(self, selectedWeapons["Melee"].get(), 5)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        menuTools.verticalButtons(self, buttonList, leftFrame)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class main():
 | 
				
			||||||
 | 
					    def exit(self):
 | 
				
			||||||
 | 
					        self.threadStop = True
 | 
				
			||||||
 | 
					        for thread in self.popenThreads:
 | 
				
			||||||
 | 
					            helpers.killPopen(thread)
 | 
				
			||||||
 | 
					        self.root.destroy()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __init__(self, configFile):
 | 
				
			||||||
 | 
					        self.configFile = configFile
 | 
				
			||||||
 | 
					        self.clientPath = json.load(open(configFile))['wfpath']
 | 
				
			||||||
 | 
					        self.serverPath = json.load(open(configFile))['spaceninjapath']
 | 
				
			||||||
 | 
					        self.debug = False
 | 
				
			||||||
 | 
					        self.root = customtkinter.CTk()
 | 
				
			||||||
 | 
					        self.popenThreads = []
 | 
				
			||||||
 | 
					        self.x=750
 | 
				
			||||||
 | 
					        self.y=500
 | 
				
			||||||
 | 
					        self.theme = themes.getThemes(self)[json.load(open(configFile))['theme']]
 | 
				
			||||||
 | 
					        self.threadStop = False
 | 
				
			||||||
 | 
					        print()
 | 
				
			||||||
 | 
					        for lib in [helpers, install, savetools]:
 | 
				
			||||||
 | 
					            lib.check()
 | 
				
			||||||
 | 
					        self.rightFrame = customtkinter.CTkScrollableFrame(self.root, 
 | 
				
			||||||
 | 
					        orientation="vertical",
 | 
				
			||||||
 | 
					        width=(self.x * .20),
 | 
				
			||||||
 | 
					        height=(self.y * 1),
 | 
				
			||||||
 | 
					        fg_color=self.theme["fg_color"],
 | 
				
			||||||
 | 
					        bg_color=self.theme["bg_color"],
 | 
				
			||||||
 | 
					        corner_radius=0
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        buttonList = {
 | 
				
			||||||
 | 
					            "Server" : lambda: menus.serverMenu(self),
 | 
				
			||||||
 | 
					            "Server Settings": lambda: menus.settingsMenu(self, self.serverPath+'config.json'),
 | 
				
			||||||
 | 
					            "Client" : lambda: menus.clientMenu(self),
 | 
				
			||||||
 | 
					            "Client Settings": lambda: menus.settingsMenu(self, self.clientPath+'OpenWF/client_config.json'),
 | 
				
			||||||
 | 
					            "Scripts" : lambda: menus.plutoMenu(self),
 | 
				
			||||||
 | 
					            "Script Store": lambda: placeholder(),
 | 
				
			||||||
 | 
					            "Inline Scripting" : lambda: menus.inlineScripting(self),
 | 
				
			||||||
 | 
					            "Metadata" : lambda: placeholder(),
 | 
				
			||||||
 | 
					            "Arsenal Management": lambda: menus.arsenalMenu(self),
 | 
				
			||||||
 | 
					            "Weapon Upgrades" : lambda: placeholder(),
 | 
				
			||||||
 | 
					            "Updates": lambda: menus.updateMenu(self),
 | 
				
			||||||
 | 
					            "GUI Settings" : lambda: menus.settingsMenu(self, self.configFile)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        menuTools.verticalButtons(self, buttonList, self.rightFrame)
 | 
				
			||||||
 | 
					        self.rightFrame.grid(row=0, column=0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.mainFrame = customtkinter.CTkScrollableFrame(self.root, 
 | 
				
			||||||
 | 
					        width=(self.x * (1-.20)), 
 | 
				
			||||||
 | 
					        height=(self.y * 1), 
 | 
				
			||||||
 | 
					        fg_color=self.theme["bg_color"],
 | 
				
			||||||
 | 
					        bg_color=self.theme["bg_color"],
 | 
				
			||||||
 | 
					        corner_radius=0)
 | 
				
			||||||
 | 
					        self.verifyNumb = self.root.register(helpers.isNumber)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        self.mainFrame.grid(row=0, column=1)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        self.root.title("SpaceNinGui CustomTK 1.0.0")
 | 
				
			||||||
 | 
					        self.root.protocol("WM_DELETE_WINDOW", lambda: main.exit(self))
 | 
				
			||||||
 | 
					        self.root.geometry(f"{str(self.x)}x{str(self.y)}")
 | 
				
			||||||
 | 
					        self.root.resizable(width=False, height=False)
 | 
				
			||||||
 | 
					        self.root.mainloop()
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == "__main__":
 | 
				
			||||||
 | 
					    if isfile('sngconfig.json'):
 | 
				
			||||||
 | 
					        main('sngconfig.json')
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        pass
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user