- loading the control data is ran on its own thread, it does not block the main thread. allows for smooth scrolling like nintendos home menu.
- on fw20+, sphaira manually parses the control data, rather than using ns. manually parsing takes 20-40ms, which is faster than ms which can take 50-500ms.
- on fw19 and below, if the control data is not in ns cache, sphaira will manually parse the data as its twice as fast as ns. You can see how fast this is by loading the gamecard menu as that manually parses everything, and it loads the gamecard faster than the home menu
- gamecards now wait for an event to change, rather than polling each frame.
this reduces cpu load on core 3 slightly (3-4% less).
- my understanding of fsOpenFileSystemWithId() was wrong, i thought it used the app_id for the id param.
turns out it needs the program id (found in the nca header), this is why mounting some control ncas
would fail.
fs (and ncm) have a call in 17+ to get the program id, it does so by parsing the nca header.
in yati, we already have the header so we can avoid the call.
for the gamecard menu, we don't. so we can parse the nca header, or use the id offset (which we already have)
to form the program id.
- std::find_if in yati now takes args by ref rather than by value, avoid quite large copies.
- stream installs can now parse the control nca.
- if an nca is already installed, it is now skipped. this is regardless to whether it is not in ncm db.
- nca skipping is technically supported for stream installs, however it is disabled for now as there needs
to be a way to allow for the stream to continue reading and discarding data until the stream has finished.
currently, if a ftp (stream) install is skipped, it will close the progress box and cause spahira to hang.
this is because sphaira expects the stream to only be closed upon all data being read, so there's nothing more
to process.
- renamed the title_id field in nca header to program_id.
- fix ignore distribution bit doing nothing.
- fix yati failing to parse control nca causing the transfer to abort.
- yati now uses ncm rather than ns to get the latest app version.
- improve ui::list input handling (it handles directional buttons now).
- progress bar displays speed and time remaining.
- added gc menu (taken from my gc installer nx and gci).