Since this is released under the MIT License (thank you author), could someone who knows how please share an .exe conversion?
Via 3dsx, from Homebrew Launcher on Luma v10.0.1. The exact message is this:How are you running custom-install-finalize?
Are you sure you typed the error code correctly? I don't recognize it at all.Via 3dsx, from Homebrew Launcher on Luma v10.0.1. The exact message is this:
"custom-install-finalize v1.0
Reading /cifinish.bin...
Finalizing 0004000e001b5000...
Failed to finish ticket install: d8e08019
Press START or B to exit."
Writing /title/00048004/4b554e45/content/cmd/00000001.cmd
Traceback (most recent call last):
File "custom-install.py", line 248, in <module>
cia.contents[0].version.to_bytes(2, 'little'),
KeyError: 0
from custominstall import CustomInstall
installer = CustomInstall(boot9="boot9.bin",
movable="movable.sed",
sd="(Put path here)"
cias=["sample.cia", "sample2.cia"])
installer.start()
print(installer.logLines) # Full log in array
# Using log... CustomInstall.log(message, type=0, errorname=None)
Though this error is strange and I'll have to look into it, DSiWare titles can't be installed to the SD card, so you have to do it the old-fashioned way.Yo, this software works great! Thank you!
I am having a problem with it though: it does not seem to support DSi game CIAs, throwing the following error:
Code:Writing /title/00048004/4b554e45/content/cmd/00000001.cmd Traceback (most recent call last): File "custom-install.py", line 248, in <module> cia.contents[0].version.to_bytes(2, 'little'), KeyError: 0
--------------------- MERGED ---------------------------
Finally! This works great!
Except that I get this error when installing a DSiWare CIA:
Code:Writing /title/00048004/4b554e45/content/cmd/00000001.cmd Traceback (most recent call last): File "custom-install.py", line 248, in <module> cia.contents[0].version.to_bytes(2, 'little'), KeyError: 0
Looks good to me so far. In this little example, I would probably rename logLines to log_lines to match PEP 8 and be consistent with everything else in the project.Good news! The OOP rewrite works! (I believe)
The files were copied onto the SD card, here is an example snippet of code showing its usage
Code:from custominstall import CustomInstall installer = CustomInstall(boot9="boot9.bin", movable="movable.sed", sd="(Put path here)" cias=["sample.cia", "sample2.cia"]) installer.start() print(installer.logLines) # Full log in array # Using log... CustomInstall.log(message, type=0, errorname=None)
As you see, I only have one more thing I will implement, events. Events will just allow us to handle info on the fly such as percentage, and importantly, log messages. And of course, how useful this would be on a GUI, right ? (Also needed for the new Terminal tool rewrite that works the same as the previous one but utilizing the new class, not just the GUI).
Let me know if any design decisions stick out that bother you, I put a todo that I am not really interested in ATM (will probably come with the PR) which will move some actions to their own respective methods, as currently the start function is one giant blob of copy and paste (with some changes here and there to utilize the class arguments VS argparse)
Good eye, fixing it, this is how JS messes with my brain sometimes.I would probably rename logLines to log_lines to match PEP 8 and be consistent with everything else in the project.
As the plan follows, but thanks for the notes to keep in mind.like one that starts writing a single title, one to update the title database, one to update cifinish.bin and add to it (currently it overwrites). Then start() should exist to call all of them to keep it simple for anything else that may use this.
@NekoBit
What about for the files that are needed you write a string/variable the looks for those files "probably in a folder". Then put a string in the main gui saying something like "movable.sed/boot9/blah" not detected if those files don't exist or are not in the folder.
Just my two cents. Not an expert at gui's.
Note: now that i thought about it might be weird coding that for different systems
It uses pyctr which is included in the repo (not yet separated to its own) to search for these files. It's an older one that doesn't yet store the location where it found boot9/seeddb. When it's updated you can use it to get those paths if it was automatically found. The original and updated version is in ninfs's repo right now.Edit: Just came to conclusion that magically selecting files would be a bad idea... BUT, automatically figuring out what the sd card is (say, one sd card in the system that contains a Nintendo 3DS folder) and selecting it would be neat.
Well, I don't fully understand what you mean, but I think I understand what you mean. If you mean to automagically search for the files on the application startup? Will probably implement that, similar to how it says in the Readme, that it should search for common folders like ~/3DS, %APPDATA%/3ds, etc. If you mean to automatically search the directory the script is ran in for CIA's to pick the first one, I don't think someone would put the files in a directory. Might also lead to confusion if they have multiple movable.sed or boot9.bin files, each with different names.
Checked again, it's correct.Are you sure you typed the error code correctly? I don't recognize it at all.
Turns out it just couldn't find my seeddb.binAre you sure you typed the error code correctly? I don't recognize it at all.
Strange, I will need to investigate this error more, since I've never seen the code before.Turns out it just couldn't find my seeddb.bin
After moving that to %appdata%\3ds\ I have no problem anymore.
I'm running into it again with some other .cia files.Strange, I will need to investigate this error more, since I've never seen the code before.