Files
lazy-dsi-file-downloader/main.py
2020-06-27 18:11:11 +01:00

129 lines
4.2 KiB
Python

import tkinter
from tkinter import messagebox
from tkinter import filedialog
import os
import platform
import sys
import requests
import json
import py7zr
from pathlib import Path
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 = ''
SDlabel = tkinter.Label(text = "SD card directory")
SDlabel.width = 100
SDentry = tkinter.Entry()
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 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)
#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
archive = py7zr.SevenZipFile(TWLmenuLocation, mode='r')
archive.extractall(path=temp)
archive.close()
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 = "Choose Folder", width = 20, 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 = "Install Unlaunch?", variable =unlaunch)
startButton = tkinter.Button(window, text = "Start", width = 20, command = start)
outputLabel = tkinter.Label(text="Output")
outputLabel.width = 100
outputBox = tkinter.Text(window,state='disabled', width = 30, height = 10)
SDlabel.pack()
SDentry.pack()
b_chooseDir.pack()
firmwareLabel.pack()
selector.pack()
unlaunchCheck.pack()
startButton.pack()
outputLabel.pack()
outputBox.pack()
window.mainloop()