can now update twilight menu!

This commit is contained in:
Kalam :p
2020-06-30 17:55:43 +01:00
parent 17be26b13e
commit a235cee468
2 changed files with 290 additions and 41 deletions

101
main.py
View File

@@ -15,6 +15,8 @@ from pathlib import Path
import shutil import shutil
from subprocess import Popen from subprocess import Popen
import zipfile import zipfile
import distutils
from distutils import dir_util
if(sys.version_info.major < 3): if(sys.version_info.major < 3):
print("This program will ONLY work on Python 3 and above") print("This program will ONLY work on Python 3 and above")
@@ -125,46 +127,53 @@ def start():
temp = directory + "/tmp/" temp = directory + "/tmp/"
Path(temp).mkdir(parents=True,exist_ok=True) Path(temp).mkdir(parents=True,exist_ok=True)
#Download Memory Pit if downloadmemorypit.get() == 1:
memoryPitLocation = directory + "/private/ds/app/484E494A/" #Download Memory Pit
Path(memoryPitLocation).mkdir(parents=True, exist_ok=True) memoryPitLocation = directory + "/private/ds/app/484E494A/"
r = requests.get(memoryPitDownload, allow_redirects=True) Path(memoryPitLocation).mkdir(parents=True, exist_ok=True)
memoryPitLocation = memoryPitLocation + "pit.bin" r = requests.get(memoryPitDownload, allow_redirects=True)
open(memoryPitLocation, 'wb').write(r.content) memoryPitLocation = memoryPitLocation + "pit.bin"
outputbox("Memory Pit Downloaded ") open(memoryPitLocation, 'wb').write(r.content)
outputbox("Memory Pit Downloaded ")
print("Memory Pit Downloaded")
#Download TWiLight Menu if downloadtwlmenu.get() == 1:
r = requests.get(getLatestTWLmenu(), allow_redirects=True) #Download TWiLight Menu
TWLmenuLocation = temp + "TWiLightMenu.7z" r = requests.get(getLatestTWLmenu(), allow_redirects=True)
open(TWLmenuLocation,'wb').write(r.content) TWLmenuLocation = temp + "TWiLightMenu.7z"
outputbox("TWiLight Menu ++ Downloaded ") open(TWLmenuLocation,'wb').write(r.content)
outputbox("TWiLight Menu ++ Downloaded ")
print("TWiLight Menu ++ Downloaded")
#Extract TWiLight Menu #Extract TWiLight Menu
proc = Popen([ _7za, 'x', TWLmenuLocation, '-o' + temp, '_nds', 'DSi - CFW users', proc = Popen([ _7za, 'x', TWLmenuLocation, '-y' , '-o' + temp, '_nds', 'DSi - CFW users',
'DSi&3DS - SD card users', 'roms' ]) 'DSi&3DS - SD card users', 'roms' ])
ret_val = proc.wait() ret_val = proc.wait()
while True: while True:
if ret_val == 0: if ret_val == 0:
outputbox("TWiLight Menu ++ Extracted ") outputbox("TWiLight Menu ++ Extracted ")
break print("TWiLight Menu ++ Extracted to", temp)
else: break
continue
#Move TWiLight Menu #Move TWiLight Menu
shutil.copy(temp + "DSi&3DS - SD card users/BOOT.NDS", directory) shutil.copy(temp + "DSi&3DS - SD card users/BOOT.NDS", directory)
shutil.move(temp + "_nds/" , directory) distutils.dir_util.copy_tree(temp + "_nds/" , directory +"/_nds/")
shutil.move(temp + "DSi - CFW users/SDNAND root/hiya", directory) distutils.dir_util.copy_tree(temp + "DSi - CFW users/SDNAND root/hiya", directory+"hiya/")
shutil.move(temp + "DSi - CFW users/SDNAND root/title", directory) distutils.dir_util.copy_tree(temp + "DSi - CFW users/SDNAND root/title", directory+"hiya/")
shutil.copy(temp + "DSi&3DS - SD card users/_nds/nds-bootstrap-hb-nightly.nds", directory + "/_nds") shutil.copy(temp + "DSi&3DS - SD card users/_nds/nds-bootstrap-hb-nightly.nds", directory + "/_nds")
shutil.copy(temp + "DSi&3DS - SD card users/_nds/nds-bootstrap-hb-release.nds", directory + "/_nds") shutil.copy(temp + "DSi&3DS - SD card users/_nds/nds-bootstrap-hb-release.nds", directory + "/_nds")
outputbox("TWiLight Menu ++ placed ") Path(directory + "/roms/").mkdir(parents=True,exist_ok=True)
print("TWiLight Menu ++ placed in", directory)
outputbox("TWiLight Menu ++ placed ")
#Download dumpTool if downloaddumptool.get() == 1:
r = requests.get(getLatestdumpTool(), allow_redirects=True) #Download dumpTool
dumpToolLocation = directory + "/dumpTool.nds" r = requests.get(getLatestdumpTool(), allow_redirects=True)
open(dumpToolLocation,'wb').write(r.content) dumpToolLocation = directory + "/dumpTool.nds"
outputbox("dumpTool Downloaded ") open(dumpToolLocation,'wb').write(r.content)
print("dumpTool downloaded")
outputbox("dumpTool Downloaded ")
if unlaunchNeeded == 1 : if unlaunchNeeded == 1 :
#Download Unlaunch #Download Unlaunch
@@ -172,6 +181,7 @@ def start():
r = requests.get(url, allow_redirects=True) r = requests.get(url, allow_redirects=True)
unlaunchLocation = temp + "unlaunch.zip" unlaunchLocation = temp + "unlaunch.zip"
open(unlaunchLocation,'wb').write(r.content) open(unlaunchLocation,'wb').write(r.content)
print("Unlaunch Downloaded")
outputbox("Unlaunch Downloaded ") outputbox("Unlaunch Downloaded ")
#Extract Unlaunch #Extract Unlaunch
@@ -180,10 +190,10 @@ def start():
zip_ref.close() zip_ref.close()
#Delete tmp folder #Delete tmp folder
shutil.rmtree(directory + '/tmp') shutil.rmtree(directory + '/tmp')
print("Done!")
outputbox("Done!") outputbox("Done!")
def chooseDir(): def chooseDir():
@@ -196,6 +206,12 @@ b_chooseDir = tkinter.Button(window, text = "Click to select folder", width = 25
b_chooseDir.width = 100 b_chooseDir.width = 100
b_chooseDir.height = 50 b_chooseDir.height = 50
downloadmemorypit = tkinter.IntVar(value=1)
downloadmemorypitCheck = tkinter.Checkbutton(window, text = "Download Memory pit exploit?", variable = downloadmemorypit)
downloadtwlmenu = tkinter.IntVar(value=1)
downloadtwlmenuCheck = tkinter.Checkbutton(window, text = "Download / Update TWiLight menu?", variable = downloadtwlmenu)
firmwareLabel = tkinter.Label(text = "Select your DSi firmware : ") firmwareLabel = tkinter.Label(text = "Select your DSi firmware : ")
firmwareLabel.width = 100 firmwareLabel.width = 100
@@ -204,10 +220,13 @@ firmwareVersion.set(dsiVersions[0])
selector = tkinter.OptionMenu(window, firmwareVersion, *dsiVersions) selector = tkinter.OptionMenu(window, firmwareVersion, *dsiVersions)
selector.width = 100 selector.width = 100
downloaddumptool = tkinter.IntVar(value=1)
downloaddumptoolCheck = tkinter.Checkbutton(window, text ="Download dumpTool?", variable=downloaddumptool)
unlaunch = tkinter.IntVar(value=1) unlaunch = tkinter.IntVar(value=1)
unlaunchCheck = tkinter.Checkbutton(window, text = "Download Unlaunch?", variable =unlaunch) unlaunchCheck = tkinter.Checkbutton(window, text = "Download Unlaunch?", variable =unlaunch)
startButton = tkinter.Button(window, text = "Start", width = 25, command = start) startButton = tkinter.Button(window, text = "Start", font = ("TkDefaultFont",12,'bold'), width = 25, command = start)
outputLabel = tkinter.Label(text="Output") outputLabel = tkinter.Label(text="Output")
outputLabel.width = 100 outputLabel.width = 100
outputBox = tkinter.Text(window,state='disabled', width = 30, height = 10) outputBox = tkinter.Text(window,state='disabled', width = 30, height = 10)
@@ -219,11 +238,13 @@ appAuthor.pack()
SDlabel.pack() SDlabel.pack()
SDentry.pack() SDentry.pack()
b_chooseDir.pack() b_chooseDir.pack()
downloadmemorypitCheck.pack()
firmwareLabel.pack() firmwareLabel.pack()
selector.pack() selector.pack()
downloadtwlmenuCheck.pack()
downloaddumptoolCheck.pack()
unlaunchCheck.pack() unlaunchCheck.pack()
startButton.pack() startButton.pack()
outputLabel.pack() outputLabel.pack()
outputBox.pack() outputBox.pack()
window.mainloop() window.mainloop()

228
old version/1.0.0.py Normal file
View File

@@ -0,0 +1,228 @@
# Created by YourKalamity
#https://github.com/YourKalamity/lazy-dsi-file-downloader
import tkinter
from tkinter import messagebox
from tkinter import filedialog
import os
import platform
import sys
import requests
import json
from pathlib import Path
import shutil
from subprocess import Popen
import zipfile
if(sys.version_info.major < 3):
print("This program will ONLY work on Python 3 and above")
sys.exit()
dsiVersions = ["1.0 - 1.3 (USA, EUR, AUS, JPN)", "1.4 - 1.4.5 (USA, EUR, AUS, JPN)", "All versions (KOR, CHN)"]
memoryPitLinks = ["https://github.com/YourKalamity/just-a-dsi-cfw-installer/raw/master/assets/files/memoryPit/256/pit.bin","https://github.com/YourKalamity/just-a-dsi-cfw-installer/raw/master/assets/files/memoryPit/768_1024/pit.bin"]
window = tkinter.Tk()
window.sourceFolder = ''
window.sourceFile = ''
appTitle = tkinter.Label(text="Lazy DSi file downloader",font=('Verdana', 14), fg="white", bg="black")
appTitle.width = 100
appAuthor = tkinter.Label(text="by YourKalamity",font=('Verdana', 10, 'italic'), anchor="w")
appAuthor.width = 100
SDlabel = tkinter.Label(text = "Enter your SD card's directory")
SDlabel.width = 100
SDentry = tkinter.Entry(width=30)
SDentry.width = 100
def getLatestTWLmenu():
release = json.loads(requests.get("https://api.github.com/repos/DS-Homebrew/TWiLightMenu/releases/latest").content)
url = release["assets"][0]["browser_download_url"]
return url
def getLatestdumpTool():
release = json.loads(requests.get("https://api.github.com/repos/zoogie/dumpTool/releases/latest").content)
url = release["assets"][0]["browser_download_url"]
return url
def outputbox(message):
outputBox.configure(state='normal')
outputBox.insert('end', message)
outputBox.configure(state='disabled')
def validateDirectory(directory):
try:
directory = str(directory)
except TypeError:
outputbox("That's not a valid directory")
return False
try:
string = directory + "/test.file"
with open(string, 'w') as file:
file.close()
os.remove(string)
except FileNotFoundError:
outputbox("That's not a valid directory")
outputbox(" or you do not have the")
outputbox(" permission to write there")
return False
except PermissionError:
outputbox("You do not have write")
outputbox(" access to that folder")
return False
else:
return True
def start():
outputBox.delete(0, tkinter.END)
sysname = platform.system()
_7za = os.path.join(sysname, '7za')
_7z = None
if sysname == "Windows":
from winreg import OpenKey, QueryValueEx, HKEY_LOCAL_MACHINE, KEY_READ, KEY_WOW64_64KEY
print('Searching for 7-Zip in the Windows registry...')
try:
with OpenKey(HKEY_LOCAL_MACHINE, 'SOFTWARE\\7-Zip', 0, KEY_READ | KEY_WOW64_64KEY) as hkey:
_7z = os.path.join(QueryValueEx(hkey, 'Path')[0], '7z.exe')
if not os.path.exists(_7z):
raise WindowsError
_7za = _7z
except WindowsError:
print('Searching for 7-Zip in the 32-bit Windows registry...')
try:
with OpenKey(HKEY_LOCAL_MACHINE, 'SOFTWARE\\7-Zip') as hkey:
_7z = os.path.join(QueryValueEx(hkey, 'Path')[0], '7z.exe')
if not os.path.exists(_7z):
raise WindowsError
_7za = _7z
except WindowsError:
print("7-Zip not found, please install it before using")
outputbox("7-Zip not found")
return
print("7-Zip found!")
outputBox.configure(state='normal')
outputBox.delete('1.0', tkinter.END)
outputBox.configure(state='disabled')
#Variables
directory = SDentry.get()
version = firmwareVersion.get()
unlaunchNeeded = unlaunch.get()
directoryValidated = validateDirectory(directory)
if directoryValidated == False:
return
if dsiVersions.index(version) == 1:
memoryPitDownload = memoryPitLinks[1]
elif dsiVersions.index(version) in [0,2]:
memoryPitDownload = memoryPitLinks[0]
temp = directory + "/tmp/"
Path(temp).mkdir(parents=True,exist_ok=True)
#Download Memory Pit
memoryPitLocation = directory + "/private/ds/app/484E494A/"
Path(memoryPitLocation).mkdir(parents=True, exist_ok=True)
r = requests.get(memoryPitDownload, allow_redirects=True)
memoryPitLocation = memoryPitLocation + "pit.bin"
open(memoryPitLocation, 'wb').write(r.content)
outputbox("Memory Pit Downloaded ")
#Download TWiLight Menu
r = requests.get(getLatestTWLmenu(), allow_redirects=True)
TWLmenuLocation = temp + "TWiLightMenu.7z"
open(TWLmenuLocation,'wb').write(r.content)
outputbox("TWiLight Menu ++ Downloaded ")
#Extract TWiLight Menu
proc = Popen([ _7za, 'x', TWLmenuLocation, '-o' + temp, '_nds', 'DSi - CFW users',
'DSi&3DS - SD card users', 'roms' ])
ret_val = proc.wait()
while True:
if ret_val == 0:
outputbox("TWiLight Menu ++ Extracted ")
break
else:
continue
#Move TWiLight Menu
shutil.copy(temp + "DSi&3DS - SD card users/BOOT.NDS", directory)
shutil.move(temp + "_nds/" , directory)
shutil.move(temp + "DSi - CFW users/SDNAND root/hiya", directory)
shutil.move(temp + "DSi - CFW users/SDNAND root/title", directory)
shutil.copy(temp + "DSi&3DS - SD card users/_nds/nds-bootstrap-hb-nightly.nds", directory + "/_nds")
shutil.copy(temp + "DSi&3DS - SD card users/_nds/nds-bootstrap-hb-release.nds", directory + "/_nds")
outputbox("TWiLight Menu ++ placed ")
#Download dumpTool
r = requests.get(getLatestdumpTool(), allow_redirects=True)
dumpToolLocation = directory + "/dumpTool.nds"
open(dumpToolLocation,'wb').write(r.content)
outputbox("dumpTool Downloaded ")
if unlaunchNeeded == 1 :
#Download Unlaunch
url = "https://problemkaputt.de/unlaunch.zip"
r = requests.get(url, allow_redirects=True)
unlaunchLocation = temp + "unlaunch.zip"
open(unlaunchLocation,'wb').write(r.content)
outputbox("Unlaunch Downloaded ")
#Extract Unlaunch
with zipfile.ZipFile(unlaunchLocation, 'r') as zip_ref:
zip_ref.extractall(directory)
zip_ref.close()
#Delete tmp folder
shutil.rmtree(directory + '/tmp')
outputbox("Done!")
def chooseDir():
window.sourceFolder = filedialog.askdirectory(parent=window, initialdir= "/", title='Please select the directory of your SD card')
SDentry.delete(0, tkinter.END)
SDentry.insert(0, window.sourceFolder)
b_chooseDir = tkinter.Button(window, text = "Click to select folder", width = 25, command = chooseDir)
b_chooseDir.width = 100
b_chooseDir.height = 50
firmwareLabel = tkinter.Label(text = "Select your DSi firmware : ")
firmwareLabel.width = 100
firmwareVersion = tkinter.StringVar(window)
firmwareVersion.set(dsiVersions[0])
selector = tkinter.OptionMenu(window, firmwareVersion, *dsiVersions)
selector.width = 100
unlaunch = tkinter.IntVar(value=1)
unlaunchCheck = tkinter.Checkbutton(window, text = "Download Unlaunch?", variable =unlaunch)
startButton = tkinter.Button(window, text = "Start", width = 25, command = start)
outputLabel = tkinter.Label(text="Output")
outputLabel.width = 100
outputBox = tkinter.Text(window,state='disabled', width = 30, height = 10)
window.title("Lazy DSi file downloader")
window.resizable(0, 0)
appTitle.pack()
appAuthor.pack()
SDlabel.pack()
SDentry.pack()
b_chooseDir.pack()
firmwareLabel.pack()
selector.pack()
unlaunchCheck.pack()
startButton.pack()
outputLabel.pack()
outputBox.pack()
window.mainloop()