353 Commits

Author SHA1 Message Date
Niklas080208
ad4dd48026 Fix storage bar colours when theme uses custom background image
Some checks failed
build / build (ubuntu-latest, Release) (push) Failing after 22s
The header storage bar (microSD/System) used ThemeEntryID_BACKGROUND and ThemeEntryID_TEXT_INFO. When a theme sets background to an image path, no colour is set for that entry, so the bar got an unset/default colour (often white) and looked wrong on dark themes. Use PROGRESSBAR and PROGRESSBAR_BACKGROUND for the bar so it always uses theme colours that are defined as colours, not images.
2026-02-06 22:06:01 +01:00
dragonflylee
0474566576 Update chinese localization (#234) 2025-12-01 07:19:51 +09:00
david082321
09e8e50e69 Add Traditional Chinese localization (#223)
* Add Traditional Chinese localization

* Update

Upate to this version
dbb0501420/assets/romfs/i18n/zh-TW.json

* Translate

---------

Co-authored-by: Yorunokyujitsu <164279972+Yorunokyujitsu@users.noreply.github.com>
2025-11-29 06:55:12 +09:00
Yorunokyujitsu
db72e84c5b json: Fixed incorrect Simplified and Traditional Chinese labels 2025-11-29 06:49:40 +09:00
Yorunokyujitsu
d47bb0a41d Update Japanese and Korean.
- Update Japanese translation.
- Update Korean translation.
- Fix JSON syntax error (extra comma) in nl.json.
- Fix several translation strings.
2025-11-28 07:29:27 +09:00
stevo_ko
3b741f3180 Updated German Translation (#214)
* Updated German Translation

Just updated the German Translation, it is probably still not perfect

* Missing semicolons

---------

Co-authored-by: Yorunokyujitsu <164279972+Yorunokyujitsu@users.noreply.github.com>
2025-11-28 06:59:18 +09:00
Ninji418
a8965c0d4a Spanish translations (#230)
* Spanish translations

-Added Spanish translations for backup, USB, and mount menus
-Translations sourced from Google Translate and AI suggestions
-Preserved original formatting, line breaks, and 2-space line prefixes
-Miscellaneous minor UI strings translated
-all translations are taken from the en.json since the es.json has a bunch of empty fields
once again this isn't my native language, anyone is free to correct me on any part they deem necessary
2025-11-28 06:52:07 +09:00
redraz
87c277470e Update ru.json (#200)
Co-authored-by: Yorunokyujitsu <164279972+Yorunokyujitsu@users.noreply.github.com>
2025-11-28 06:24:10 +09:00
Yorunokyujitsu
c1b6287437 Added the missing parentheses. 2025-11-25 19:21:52 +09:00
Yorunokyujitsu
4540dd0112 homebrew: Added a Back button.
- Fixed an issue where entering through Menus could trap the user inside the menu.
2025-11-25 19:12:03 +09:00
Yorunokyujitsu
dbb0501420 json: Updated based on version 1.0.0.
- Removed all deprecated/unused strings.
- Added all missing translatable strings.
- Removed the previous unified Chinese translation and added separate Simplified and Traditional Chinese support.
2025-11-25 19:11:29 +09:00
Yorunokyujitsu
28411fcdd1 i18n: Added translatable strings, new languages, and extended localization features.
- Added sub-keys to better manage long strings, allowing either the sub-key value or the original text to be used.
- Multi-line values are now supported in language.json to prevent overly long single lines.
- Added word-order adjustment for certain Asian languages such as Japanese and Korean.
- Added separate support for Simplified and Traditional Chinese.
2025-11-25 19:10:45 +09:00
ITotalJustice
7f2d0e72f2 fix workflow 2025-11-18 18:29:38 +00:00
ITotalJustice
c9552f9785 bump version for new release 0.13.3 -> 1.0.0. 2025-11-18 18:11:59 +00:00
ITotalJustice
444ff3e2d1 swkdb: add support for setting the header. save: add support for setting the name for the save file. 2025-10-09 14:45:08 +01:00
ITotalJustice
7d56c8a381 increase list scroll speed. add list jump start/end. add L2 + scroll to select multiple enrties. 2025-10-07 07:05:38 +01:00
ITotalJustice
da051f8d8f add support for replacing the homebrew menu tab with another menu. 2025-10-03 09:58:48 +01:00
ITotalJustice
81e6bc5833 disable sftp as it was unused and very slow compared to other clients. 2025-10-03 09:07:12 +01:00
ITotalJustice
ca5ea827b2 devoptab: fix nginx listing, fix modifying entry overriding the scheme, fix smb failing to parse url if path isn't set. ftpsrv: workaround clients sending PASS for anon. 2025-10-03 07:31:10 +01:00
ITotalJustice
b700fff9ac devoptab: fix create new mount entries failing if the mount folder didn't already exist. 2025-09-29 02:19:25 +01:00
ITotalJustice
81741364a7 homebrew: fix crashing due to using the wrong array size when scrolling. 2025-09-28 23:04:16 +01:00
ITotalJustice
faebc42f0d fs: fix stdio dir count not filtering types. game/bfsar: fix dir listing loop exiting early due to post increment in the loop. 2025-09-27 03:37:29 +01:00
ITotalJustice
63e11ca377 remove unused 12h clock option. add option to hide ip address. 2025-09-21 22:13:53 +01:00
ITotalJustice
54a2215e04 support for filtering mtp/ftp mount options. use builtin config for ftp port,user,pass. 2025-09-21 21:56:36 +01:00
ITotalJustice
5edc3869cd display storage sizes, properly colour info text, and more (see below)
- display internal and sd card storage sizes.
- removed battery info.
- removed current time info.
- fix dumping save to sd card due to not opening the file with append.
- change all sizes to display GB instead of GiB.
- change progress bar units to 1000 rather than 1024.
- all info text, such as sizes and timestamps now use the info text colouring.
- shorten the ncm content type names.
2025-09-21 18:54:08 +01:00
ITotalJustice
a772d660f3 use spinner instead of default icon for homebrew + games menus.
more menus will use it soon.
need to have a way to show the spinner when loading, then revert to the default icon if
failed to load, or an icon doesn't exist.

otherwise, the user may think that the icon is still loading and wait for it.
2025-09-21 04:08:36 +01:00
ITotalJustice
3c504cc85d devoptab: add mounts (wrapper around all mounts, exposed via MTP/FTP). lots of fixes (see below).
- updated libhaze to 81154c1.
- increase ftpsrv stack size as it would crash when modifying custom mounts.
- fix warning for unused log data in haze.
- fix eof read for nsp/xci source by instead returning 0 for bytes read, rather than error.
- add support for lstat the root of a mount.
- handle zero size reads when reading games via devoptab.
2025-09-21 03:51:13 +01:00
ITotalJustice
0a2c16db0c mtp: bump to 6e24502, fixes freezing if write blocks for too long, simplify stream install for mtp and ftp.
see: https://github.com/ITotalJustice/libhaze/issues/1
2025-09-20 20:27:02 +01:00
ITotalJustice
2bd84c8d5a add version overrides for builds. 2025-09-19 19:43:38 +01:00
ITotalJustice
7cd668efb7 keyboard: swap Z/X 2025-09-18 17:14:37 +01:00
ITotalJustice
a6265c3089 add keyboard navigation support. 2025-09-18 17:06:22 +01:00
ITotalJustice
a2300c1a96 fix crashes when signalling a event thats not created yet.
this caused a crash after installing a game if the games menu wasn't init.
the same would happen if the games menu signalled the save menu.
2025-09-18 15:35:24 +01:00
ITotalJustice
3dae3f9173 devoptab/curl: fix rare deadlock casued by sleeping/blocking in curl callback functions.
it seems that curl does not like long blocking in the r/w callbacks.
blocking for too seems to cause a deadlock as the server stops send/recv anymore data.

to fix this, i now use curls pause api.
this api is not thread safe, so it's a little more involved than it needs to be.

however this fixes the deadlock as curls pause actually reduces the download/upload speed
to the minimum. it also reduces exit latency as now exiting is handled in the progress callback
as well, which is called far more often than r/w.
2025-09-16 04:15:56 +01:00
ITotalJustice
63c420d5d8 devoptab: set default url scheme and port in creator. make form sidebar slightly wider and always show on the left side. 2025-09-15 21:51:06 +01:00
ITotalJustice
a94c6bb581 devoptab: add games. add MTP and FTP game exporting. update ftpsrv (see below). fix "fix_path()" parsing.
ftpsrv was updated to support MLST and MLSD, as well as fixing SIZE (was fixed to 32bit).
2025-09-15 21:18:53 +01:00
ITotalJustice
9fe0044a65 devoptab: only push popuplist if the items array is non-empty. curl: guess the url scheme rather than force https. 2025-09-14 15:14:35 +01:00
ITotalJustice
c05ce5eff4 yati: signal change to games menu when a new game is installed. 2025-09-14 14:52:21 +01:00
ITotalJustice
a019103ed5 mui: create menus info text from the menus array, rather than hardcoding them. 2025-09-14 14:37:00 +01:00
ITotalJustice
50e55f4fca mtp: support overriding vid/pid. 2025-09-14 14:30:46 +01:00
ITotalJustice
0706683690 mui: rename misc to menus, change menu options order so that menus is at the top, improve some info boxes text. 2025-09-14 14:16:50 +01:00
ITotalJustice
9cdb77bafa devoptab: add mount creator. 2025-09-14 14:04:20 +01:00
ITotalJustice
b476c54825 devoptab: add workaround for dkp nullptr bug.
manually set the array at startup to avoid nullptr access.
2025-09-13 13:28:55 +01:00
ITotalJustice
8b2e541b1d lots of changes, see description.
- enable sftp by default.
- add more descriptive stdio errors.
- disable devoptab timeout by default.
- handle errors for devoptab seek.
- add r/d/w progress events for threaded_file_transfer
- remove system album from file browser, only show sd card.
- do not clear game selection in games menu. useful for selecting games to backup, then delete after.
- change smb2 r/w to only send max amount, matches nfs behaviour. not sure if its needed as smb probably handles it for us.
2025-09-13 13:16:18 +01:00
ITotalJustice
931531e799 devoptab: add SFTP. fs: disable stdio buffering. cmake: add options to disable components of sphaira, add new "lite" build with minimal features. 2025-09-09 18:39:03 +01:00
ITotalJustice
1695d69aa3 audio: enable flac, make thread safe, fix crash on exit if audio wasn't init. 2025-09-09 10:39:52 +01:00
ITotalJustice
217bd3bed3 mui: add list index to sidebar and popup_list, and better center the index text. 2025-09-08 01:47:41 +01:00
ITotalJustice
384e8794bf devoptab: refactor all custom mounts to inherit from helper struct. 2025-09-08 01:34:20 +01:00
ITotalJustice
61b398a89a fatfs: use devoptab mounting. devoptab: add config for hidding from fs and dump, fix http being writeable. 2025-09-07 17:35:37 +01:00
ITotalJustice
ba78fd0dc5 devoptab: add vfs, change mount.ini path location. 2025-09-07 15:43:01 +01:00
ITotalJustice
43969a773e fs: fix CreateDirectoryRecursivelyWithPath() for root files. save: fix restore detection. devoptab: return proper errno codes. 2025-09-07 14:40:45 +01:00
ITotalJustice
6e1eabbe0f devoptab: deprecate locations.ini in favour of hdd/network mounts, better handle folder creation errors. 2025-09-07 13:30:53 +01:00
ITotalJustice
b99d1e5dea devoptab: add webdav, refactor network devices, multi thread r/w to improve perf and support webdav uploads. 2025-09-07 12:40:45 +01:00
ITotalJustice
6ce566aea5 http: optimise the dir_list parsing, only parse tables. filebrowser: option to disable stat per fs.
this improves network fs speed by disabling stat for http entriely, and only enabling file stat for everything else.
this can be overriden in the config.
2025-09-05 14:10:06 +01:00
ITotalJustice
a4209961e2 devoptab: add ftp mount with random read and streaming write support.
read still needs some work. opening a file should open a thread where data is read/written async.
this avoids the huge number of roundtrips per r/w.

eg, a read currently has to REST, open the data socket, send the file data, send ABOR to close and then close the data socket.

using the thread approach would just send the file over the already open data socket.
writes will also benefit from the above, just instead of REST it would be APPE.

seeks would need to do the above ABORT, close and re-open. however most reads in sphaira are not random access. so this isn't an issue.
2025-09-04 22:29:35 +01:00
ITotalJustice
181ff3f2bf devoptab: fix http config parsing, add more options to network mounts (timeout,uid,port). fs: update path size.
fs path was changed to 255 in the past because that is the real path size that fs can handle.
however, this restriction does not apply to nfs, samba, http - and it is very easy to exceed this 255 path length.

to fix this, i have increased the path len to 1024. this allows fs to continue to work as the buffer is
big enough, but also gives network mounts enough space to work with.
2025-09-04 12:18:34 +01:00
ITotalJustice
b85b522643 app: remove ams erpt disable as it is possible to cause ams to fatal if a crash report fails to write. 2025-09-04 09:40:39 +01:00
ITotalJustice
5158e264c0 devoptab: add http, nfs and smb mount. nca: zero init ncz structs. fs: fix FsPath compare. 2025-09-03 18:56:54 +01:00
ITotalJustice
fd67da0527 webusb: add support for exporting. usb: block requests with no timeout, using pbox to cancel if the user presses B. 2025-09-02 04:24:45 +01:00
ITotalJustice
7bdec8457f tests: move location of usb tests and update workflows for the new paths. 2025-08-31 07:37:54 +01:00
ITotalJustice
bc75c9a89f workflow: temp disable main workflow on dev until libnx pushes a new release. 2025-08-31 07:30:13 +01:00
ITotalJustice
c2e8734e85 webusb: add webUSB page and workflow to auto build it. 2025-08-31 07:15:53 +01:00
ITotalJustice
22e965521a usb: change api so that every packet sent is crc32c, update python usb api, add automated tests for usb. 2025-08-31 06:12:02 +01:00
ITotalJustice
b6b1af5959 Revert "Clean up python (#212)"
This reverts commit 0a8bc01870.
2025-08-31 04:27:53 +01:00
ITotalJustice
876be3b7b6 download: add ref count to cache init/exit and have all threads call init.
this ensures that the etag cache is ready to use before a download request is made, avoiding a rare race condition.
2025-08-31 03:50:44 +01:00
ITotalJustice
62f48353ba download: use new etag cache file and delete the old one, this removes all the old themezer entries. 2025-08-31 03:50:44 +01:00
ITotalJustice
9c65e5a12d app: remove old themezer cache 2025-08-31 03:50:44 +01:00
ITotalJustice
235e947186 app: move config to async init 2025-08-31 03:50:44 +01:00
AndrewSpangler
0a8bc01870 Clean up python (#212)
* Python cleanup
2025-08-31 03:48:37 +01:00
ITotalJustice
f0bdc01156 huge changes to everything (see below).
Changelog:
- re-enable use in release build.
- remove ftpsrv and untitled from builtin ghdl options, as both packages are available in the appstore.
- add image viewer (png, jpg, bmp)
- add music player (bfstm, bfwav, mp3, wav, ogg)
- add idv3 tag parsing support for mp3.
- add "decyption" of GTA Vice City mp3.
- add usbdvd support for music playback and file browsing.
- add nsz export support (solid, block, ldm).
- add xcz export support (same as above).
- add nro fs proper mount support (romfs, nacp, icon).
- add program nca fs support.
- add bfsar fs support.
- re-write the usb protocol, still wip. replaces tinfoil protocol.
- all threads are now create with pre-emptive support with the proper affinity mask set.
- fix oob crash in libpulsar when a bfwav was opened that had more than 2 channels.
- bump yyjson version.
- bump usbhsfs version.
- disable nvjpg.
- add support for theme music of any supported playback type (bfstm, bfwav, mp3, wav, ogg).
- add support for setting background music.
- add async exit to blocking threads (download, nxlink, ftpsrv) to reduce exit time.
- add support for dumping to pc via usb.
- add null, deflate, zstd hash options, mainly used for benchmarking.
- add sidebar slider (currently unused).
- file_viwer can now be used with any filesystem.
- filebrowser will only ever stat file once. previously it would keep stat'ing until it succeeded.
- disabled themezer due to the api breaking and i am not willing to keep maintaining it.
- disable zlt handling in usbds as it's not needed for my api's because the size is always known.
- remove usbds enums and GetSpeed() as i pr'd it to libnx.
- added support for mounting nca's from any source, including files, memory, nsps, xcis etc.
- split the lru cache into it's own header as it's now used in multiple places (nsz, all mounted options).
- add support for fetching and decrypting es personalised tickets.
- fix es common ticket converting where i forgot to also convert the cert chain as well.
- remove the download default music option.
- improve performance of libpulsar when opening a bfsar by remove the large setvbuf option. instead, use the default 1k buffer and handle large buffers manually in sphaira by using a lru cache (todo: just write my own bfsar parser).
- during app init and exit, load times have been halved as i now load/exit async. timestamps have also been added to measure how long everything takes.
- download now async loads / exits the etag json file to improve init times.
- add custom zip io to dumper to support writing a zip to any dest (such as usb).
- dumper now returns a proper error if the transfer was cancelled by the user.
- fatfs mount now sets the timestamp for files.
- fatfs mount handles folders with the archive bit by reporting them as a file.
- ftpsrv config is async loaded to speed up load times.
- nxlink now tries attempt to connect/accept by handling blocking rather than just bailing out.
- added support for minini floats.
- thread_file_transfer now spawns 3 threads rather than 2, to have the middle thread be a optional processor (mainly used for compressing/decompressing).
- added spinner to progress box, taken from nvg demo.
- progress box disables sleep mode on init.
- add gamecard detection to game menu to detect a refresh.
- handle xci that have the key area prepended.
- change gamecard mount fs to use the xci mount code instead of native fs, that way we can see all the partitions rather than just secure.
- reformat the ghdl entries to show the timestamp first.
- support for exporting saves to pc via usb.
- zip fs now uses lru cache.
2025-08-28 23:12:34 +01:00
ITotalJustice
cd6fed6aae devoptab: use fixed size array of entries rather than vector as vector can change/break pointers when it reallocs. fs: disable loading assoc when mounting custom fs. 2025-08-12 08:04:24 +01:00
ITotalJustice
7835ebc346 perf: async signal exit ftpsrv and nxlink thread in order to not block. add perf logging for exit. 2025-08-11 22:26:28 +01:00
ITotalJustice
3c33581a08 devoptab: cache all reads to max read throughput, now as fast as normal sd card reads, including compressed zips (80MiB/s). 2025-08-11 21:35:43 +01:00
ITotalJustice
3e9a8c9249 devoptab: only add new entry if mounting is successful. 2025-08-11 20:59:56 +01:00
ITotalJustice
d6c8f120c6 fs: add zip mount support. hash: fix not checking open result for file. fs: fix stdio not checking nullptr access. 2025-08-11 20:01:53 +01:00
ITotalJustice
cb2fa1abfc fs: add support for mounting nsp an xci files in the filebrowser. 2025-08-11 07:01:52 +01:00
ITotalJustice
25f2cfbff2 save: support for mounting save fs, add LRU cache for fatfs. add mounting nro romfs. 2025-08-10 17:31:22 +01:00
ITotalJustice
3404d4cece app: destroy widgets in reverse order on exit as the widgets are a stack. 2025-08-09 11:45:13 +01:00
ITotalJustice
44e1584461 fs: add support for mounting nca, save and gamecard fs. file picker inherits from browser. fix bugs (see below).
- fixed fs real path length not actually being 0x301, but instead 255. fixes #204
- file picker inherits from file browser now so there's a lot less duplicated code.
- file browser now saves the last highlighted file.
- fix bug in file browser where the new file path could be empty (ie not containing a /).
- added support for viewing qlaunch romfs.
- moved fs mount options to the top of the list (may revert).
2025-08-09 11:34:35 +01:00
ITotalJustice
8a16188996 fat: add support for mounting fat bis paritions (prodinfof, safe, user, system), inital work needed for fetching personalised es tickets. 2025-08-08 05:12:51 +01:00
ITotalJustice
70518762ae game_menu: remove stubbed option to enable/disable title cache.
the option was never actually implemented and there's no benifit to disabling it anyway.
2025-08-06 14:11:59 +01:00
ITotalJustice
a0370912da Add content/nca viewer for games menu, fix manual nca title fetch for chinese lang icon, rename "dump" to "export". 2025-08-06 14:11:05 +01:00
ITotalJustice
3fee702ee2 ftp_menu: fix passphrase ascii convert which could cause a stack overflow.
from my notes:
this converts the passphrase array into an ascii string
well, turns out std::transform does not actually increase the std::string size when pushing the new ascii characters
basically, std::string (normally) has small string optimisation. For this, they have a small array which it uses instead of allocating memory.

std::transform casts the std::string itr to a void*. sooo it was basically manually writing to the class, which just so happened to be the SSO buffer. however after 32chars, it runs out...and starts overwriting the stack. so this was a stack overflow lmao
only reason i found this is because i changed some optimisation flags, so the compiler ended up inlining std::transform, which detected the buffer overflow. and then i realised how fucked it was lol.
2025-08-04 20:17:14 +01:00
ITotalJustice
54d73a6d3b optimise: pass all large objects (std::function, std::string, structs) by const ref rather than value.
really, these functions should be passed by && and using std::forward on assignment.
however, this means writing a lot of extra code for every single class, as well as explicitly calling move
in a lot of cases.

In the case of std::string, passing by value and calling std::move is the correct approach, especially if the
string is created as an rvalue, then it is only created once and moved into the dest.
Whereas with a const ref, the string is created and then copied into the dst, basically creating 2 copies.
The same thing happens std::function, and well any object.

However, accepting everything by value sucks if you call a constructor from within a constructor, as now you need to create 2 impls
that accept by value and the other by rvalue. All of this extra code to have a more efficent impl just isn't worth it when, going by
the benchmarks, makes no measurable difference (i count anything within >= 1ms as measurable).
2025-08-04 18:58:20 +01:00
ITotalJustice
9fe9c9d491 themezer: only show latest release for nxtheme when prompting user to download nro. 2025-08-03 04:00:21 +01:00
ITotalJustice
4300c9ee1b filebrowser/picker: backport changes in totalsms (optimise zip peek, remove unused vars and code, optimise folder count, fix missed extension parse). 2025-08-03 03:26:24 +01:00
ITotalJustice
a3780bdcea filebrowser: add forwarder creator. 2025-08-03 00:58:03 +01:00
ITotalJustice
6554b68efa menu: add filepicker, sidebar: add file picker entry.
the filepicker is a stripped down version of the file browser. only file picking is supported atm, no "select folder" yet.
2025-08-02 22:19:48 +01:00
ITotalJustice
1a00db9d55 sidebar: add text input entry 2025-08-02 19:18:42 +01:00
ITotalJustice
fb3ad260da install: add enable prompt to filebrowser and gc menu when an install option is clicked whilst disabled. 2025-08-02 18:41:52 +01:00
ITotalJustice
ed02b0f260 sidebar: add callback when a disabled option is clicked. install: option to enable when a disabled option is clicked. 2025-08-02 18:30:56 +01:00
ITotalJustice
620334439c themezer: show option to launch nro. 2025-08-02 17:51:36 +01:00
ITotalJustice
ab5c54b47a themeze: prompt user to install theme after installing. 2025-08-02 17:47:09 +01:00
ITotalJustice
40e4616520 themezer: prompt user to download ThemeInjector if not installed on launch. 2025-08-02 17:21:07 +01:00
ITotalJustice
3ebb3bd055 option to hide homebrew. 2025-07-31 18:47:41 +01:00
ITotalJustice
25e19b22f7 fix broken link in readme for switch-010editor-templates 2025-07-31 03:05:47 +01:00
ITotalJustice
c67266fe1a display install options by default, but warn the user that installing is disabled an instruct them on how to enable. 2025-07-31 02:48:19 +01:00
ITotalJustice
92d747a0f5 remove seconds from the clock, fix long file name in info box for theme music. 2025-07-31 01:41:07 +01:00
ITotalJustice
79b52ed13e fix the spacing on some of the info boxes 2025-07-31 01:32:21 +01:00
ITotalJustice
bd3ad8782a bump ftpsrv and haze versions (ftpsrv 85b3cf0, haze 0be1523). haze now has 4gb+ support. 2025-07-31 01:23:50 +01:00
ITotalJustice
6b57619871 change default option when installing for nca verify.
the default options where to always verify the nca content, this was for brick protection.
however, users seem to not care about this protection and get frustrated with the default values,
seemingly unable to find the install menu to disable said options.

this change skips verify by default. less issues for me, less unhappy users, win win.
2025-07-30 23:28:25 +01:00
ITotalJustice
c8644c80cd add more info boxes to options, merge option.cpp changes from totalsms. 2025-07-30 23:26:15 +01:00
ITotalJustice
430ee2280a update scrolling using delta_time to allow for smooth scrolling at different refresh rates (ie, using fpslocker). 2025-07-30 18:03:50 +01:00
vanTheodore
f71c10619c Update es.json (#194) 2025-07-30 18:03:28 +01:00
ITotalJustice
b6497c03f6 backport widget changes from totalsms 2025-07-21 12:40:54 +01:00
ITotalJustice
ecb470b938 ghdl: display timestamp for each release and asset 2025-07-21 12:24:28 +01:00
ITotalJustice
a9d3734117 ghdl: list all releases 2025-07-21 11:23:43 +01:00
redraz
faf77d8212 Update ru.json (#192) 2025-07-21 10:34:10 +01:00
Ny'hrarr
3e6d7af720 Update pt.json (#189) 2025-07-21 10:33:57 +01:00
BIGBIGSUI
f69cf8130d Update zh.json (#187)
an updated zh.json.  hope it helps.
2025-07-21 10:33:42 +01:00
ITotalJustice
796208722e workflow: only push new workflow release on push, set specific cmake version, use nproc to use all cores when building. 2025-07-21 10:30:11 +01:00
ITotalJustice
85dbc54641 remove unused usb script 2025-07-21 10:20:58 +01:00
ITotalJustice
8381446a69 disable usb and ftp installs 2025-07-21 10:17:27 +01:00
ITotalJustice
97dc39620c use condivar in install stream to wait until the buffer is empty 2025-07-20 20:25:49 +01:00
ITotalJustice
7fb973c28d handle more usb errors, set max for notifications, usb transfer uses unique ptr over vector, show usb speed in usb menu. 2025-07-19 20:29:53 +01:00
ITotalJustice
4421ac1ceb use uevent in transfer loops to reduce latency between exiting and updating progress time. 2025-07-19 18:33:47 +01:00
ITotalJustice
159abfa246 bump libhaze version, multithread mtp transfers to maximise sd throughput (77MiB/s read, 40MiB/s write) 2025-07-19 17:45:39 +01:00
ITotalJustice
4b06700187 add info boxes, fix case sensitive path compares, many other changes (see comments)
- nca::ParseControl now gets the nacp base on the language.
- xci returns a more descriptive error and logs info during install.
- replace volatile with atmoic, label atmoic methods with volatile as per the standard.
- s2s usb install skips verifying the content as its being installed from another switch.
- fix game / save menu bug where it would only load the nacp if it has started yet, now it will force load even if its in progress.
  this fixes save file zips having empty names.
- game menu saves the application type, to be later used for displaying if its a gamecard (inserted or not), launched etc.
2025-07-19 17:33:28 +01:00
Chronoss
ee68ca54b8 Update fr.json (#182) 2025-06-25 19:31:22 +01:00
ITotalJustice
0bfd336796 always set FsCreateOption_BigFile in fs.cpp when creating 4GiB+ file. 2025-06-25 19:28:23 +01:00
ITotalJustice
9b967a9af0 set FsSaveDataMetaInfo in save creation to match hos. 2025-06-25 19:25:00 +01:00
ITotalJustice
299aaa5359 fix save menu crash caused by commit 2ff2923. 2025-06-25 19:17:35 +01:00
ITotalJustice
4e3927bbd0 reduce explicit calls to make_unique by having app::push and options::add call it for us.
this commit doesn't change the codegen. it just cleans up the code slightly.
2025-06-25 19:17:01 +01:00
ITotalJustice
38f19ec778 add option to disable erpt_reports 2025-06-25 17:49:45 +01:00
ITotalJustice
168f4b0303 slightly optimise hbl by reading nro in a single pass and remove dynamic memory. 2025-06-25 17:37:28 +01:00
ITotalJustice
6f8300fb32 filter out some apps (hbmenu, retroarch core) if replaced via another app, or false positive. remove uneeded file.close() and commit calls. 2025-06-25 01:39:46 +01:00
ITotalJustice
2ff2923d39 replace almost all uses of shared_ptr with unique_ptr. 2025-06-23 20:02:04 +01:00
ITotalJustice
aa724e12ba fix invalid character being set in file path for themes (via theme name or author). log module in error box.
fixes #184
2025-06-23 17:08:42 +01:00
ITotalJustice
e039309a77 clear title result array when nxtc cache is deleted. rename sys-tweek -> sys-tweak. 2025-06-22 21:34:36 +01:00
ITotalJustice
a4f0a97088 use app_id for save backups for when the app is corrupted. 2025-06-21 23:25:21 +01:00
ITotalJustice
9d4c431eef add save creation. add loading sys-tweek entries. add title cache delete. 2025-06-21 22:25:51 +01:00
ITotalJustice
1f7179e941 simplify title cache loading. 2025-06-21 15:32:55 +01:00
ITotalJustice
4d27bf5492 bump version for new release 0.13.2 -> 0.13.3 2025-06-19 11:40:42 +01:00
ITotalJustice
6b85d2cef1 fix account save listing where the profile uid differs from the account uid.
i am unsure how this happens, as i thought the profile uid was the same as the account uid, but apparently this can differ.
on the same switch in sysmmc, the uid's match, so everything works.
again on the same switch, created in emummc, same account, the uid differs...

i performed the same test but on another 2 switches, and the uid's all match, so i am not sure what causes them to change.

in any case, using the uid from the account is the intended behaviour anyway, so this commit fixes that.
2025-06-19 11:37:08 +01:00
xHR
aae9930f5e Updated UK translation (#180)
* fixed long strings, translate untranslated

* Updated UK translation
2025-06-19 11:36:42 +01:00
ITotalJustice
eca19aa4bf fix hdd createDirWithPath, improve flashcart detection in gc menu, bump version for new release 0.13.1 -> 0.13.2 2025-06-18 23:17:58 +01:00
ITotalJustice
8e02538405 fix nvjpg crashing when trying to load a non-jpg image, fix building with nvjpg disable, optimise invalid nro asset loading, bump version for new release 0.13.0 -> 0.13.1 2025-06-18 21:10:15 +01:00
ITotalJustice
928da0cbda bump version for new release 0.12.0 -> 0.13.0 2025-06-18 15:42:50 +01:00
ITotalJustice
267693c6ab Revert "disable mtp install"
This reverts commit 8e67e5f0fc.

While MTP install may not work for most people, i guess it's better to have it as an option still.
Who knows, someone may figure out why it randomly freezes on windows when installing heavily compressed nsz files.
2025-06-18 15:22:53 +01:00
ITotalJustice
3f99afaa38 add personalised -> common convert. patch bad common tickets. fix yati installing nca's if already installed.
- dumped nsp now have the tik/cert at the end of the file table, rather than the beginning.
- dumped nsp patches the ticket if needed (no personalised dumping yet).
- installing titles will now patch the ticket, performing personalised -> common convert if needed, as well as fixing bad common tickets.
- yati no longer tries to install ncas if they already exist.
- ticket only option now actually works.
- fixed some translations.
- removed unused error codes.
2025-06-18 15:07:07 +01:00
ITotalJustice
8e67e5f0fc disable mtp install
see #132
2025-06-17 22:16:54 +01:00
Ny'hrarr
cb1508e6d5 Update pt.json (#178)
* Remove duplicate keys

* Add translation for MTP install

* Resolve conflicts with latest upstream commit

* Update pt.json
2025-06-17 17:32:53 +01:00
ITotalJustice
070be1ff94 fix filebrowser touch (related to f2462cff81).
the fix in commit f2462cff81 broke split screen.
this commit properly fixes the touch and split screen buttons.
2025-06-17 11:46:34 +01:00
ITotalJustice
7730eacea8 fix mtp install (again) due to the next transfer trying to start before the previous one had finished. 2025-06-17 11:23:45 +01:00
ITotalJustice
c5e3373fe1 fix filebrowser mount name not being displayed as the current option if translations are enabled 2025-06-17 11:00:56 +01:00
ITotalJustice
d7ec620173 signal homebrew refresh when downloading an app via ghdl 2025-06-17 10:57:24 +01:00
ITotalJustice
1c72350d4a add mtp install, fix es ticket being the wrong size, fix yati not returning the read fail result, updated haze, updated translations
see #132
2025-06-17 10:48:07 +01:00
sandmaennchen5
4ef15f8b81 German File Update (#177) 2025-06-17 01:59:13 +01:00
Aistra
8fc7b614a0 update Chinese translation and fix typo (#172) 2025-06-17 01:58:39 +01:00
ITotalJustice
0789a69975 delete save file before restoring. always commit fs after every write + close, delete, rename, create. 2025-06-17 01:57:42 +01:00
ITotalJustice
b405a816c9 use actual save timestamp when creating a zip backup 2025-06-17 01:03:18 +01:00
ITotalJustice
99c1db3655 disable hdd->hdd threading. only open log write on write to allow for reads. log fw/ams version.
hdd->hdd threading is disabled due to a bug in libusbhsfs which causes a deadlock if 2 fs calls happen at the same time.
2025-06-17 00:57:46 +01:00
ITotalJustice
6b099de63c fix passing raw string to vsprintf.
fixes #173
2025-06-12 21:50:06 +01:00
ITotalJustice
275707fe27 add mtp custom mount support (image sd, image nand, install, speed test). 2025-06-12 14:47:33 +01:00
ITotalJustice
c535b96b12 bump oss-nvjpg version fdcaba8 -> 16c10a3 (fixes homebrew icon decoding). 2025-06-10 20:23:37 +01:00
ITotalJustice
6b77cbb0c0 enable boost mode as early as possible during init, and exit boost as late as possible during exit. 2025-06-09 12:32:43 +01:00
ITotalJustice
a33d8e1061 fix gc menu button::A not being enabled when a gamecard is not inserted. 2025-06-09 12:20:27 +01:00
ITotalJustice
aaf11211dc add basic error messages for internal sphaira errors. 2025-06-09 12:11:05 +01:00
ITotalJustice
83b2aca942 bump ftpsrv version from 8c18431 -> 8782f6b 2025-06-09 10:26:31 +01:00
impeeza
fbae286dff Spanish file Update (#170)
* Spanish file Update

Making Spanish file update to latest version changes.

Short some strings.
2025-06-08 22:08:46 +01:00
游家小少
ba9b6b54bf Update zh.json (#171)
* Update zh.json

Add relevant strings to the Chinese language file and translate it based on the latest “pt.json” language file.

* Update zh.json
2025-06-08 22:07:43 +01:00
Ny'hrarr
1677514355 Update pt.json (#169)
* Update pt.json

* Update BCAT fields
2025-06-07 20:37:18 +01:00
ITotalJustice
ec1042efa3 rename Bcat -> BCAT, rename bcat folder to BCAT, better impl for stripping leading '/' for zip_add. 2025-06-07 20:27:36 +01:00
ITotalJustice
b03ad4ade3 support for all save types (system, bcat, cache, device). 2025-06-07 17:55:04 +01:00
ITotalJustice
04f6e5d2a8 update homebrew menu when app is installed from the appstore, add same effect to a few other menus (unused). 2025-06-07 13:03:44 +01:00
ITotalJustice
16c074db1a strip leading '/' in fs::AppendPath(). 2025-06-07 11:54:56 +01:00
ITotalJustice
8d958a2d1d in save menu close account service as soon as account data is loaded. 2025-06-07 11:49:50 +01:00
ITotalJustice
74c1cd3be0 add support for backup/restore save to usb 2025-06-07 11:45:06 +01:00
shadow2560
0fd5f348e2 Update french translation and fix a small typing error. (#168)
Signed-off-by: shadow2560 <24191064+shadow2560@users.noreply.github.com>
2025-06-07 08:13:34 +01:00
redraz
0c9433d0d3 Update ru.json (#166) 2025-06-05 08:59:00 +01:00
ITotalJustice
8fb34d42dc fix very rare crash when closing sphaira from the appstore when saves/games menu has also been opened.
i've been trying to track down this bug for a while. i still don't understand why it happens, however i have managed to
reproduce it an narrow down the crash, and thus fix it.

the bug was caused calling nvgDeleteImage() inside ~LazyImage() on image 43. this would only trigger once games/saves menu
had been opened at least once also.

i can only assume that the image fd was still refrenced in deko3d when drawing, as it would only ever crash on the visible images.
destroying fb resources before the calls to nvg delete seems to fix the issue.

maybe the explicit call to waitIdle is what fixes it? or clearing the cmd buf? who knows...
2025-06-05 02:56:13 +01:00
Ny'hrarr
be831eb04a Update pt.json (#165)
* Update pt.json
2025-06-05 02:51:49 +01:00
ITotalJustice
43ebab52d4 bump version for new release 0.11.3 -> 0.12.0 2025-06-05 01:00:08 +01:00
ITotalJustice
a5f9eaa392 compress save backup by default 2025-06-05 00:42:29 +01:00
ITotalJustice
cc2064f296 remove save support from ftpsrv as it may conflict with the new save menu. 2025-06-05 00:32:40 +01:00
ITotalJustice
f2462cff81 add save backup/restore, fix filebrowser touch screen, optimise all zip/unzip file code by using bigger stdio buffers. 2025-06-05 00:17:55 +01:00
xHR
b2e25abf08 fixed long strings, translate untranslated (#164) 2025-06-04 14:13:57 +01:00
ITotalJustice
cd0817bd11 add explicit sleep in between batch delete calls in order to not pin core3.
otherwise, core3 is pinned and button inputs (including the power button) become unresponsive.
2025-06-03 02:36:53 +01:00
ITotalJustice
e88ca8ede1 fix nvjpg icon loading if w*bpp != pitch. add build option to enable/disable nvjpg (for testing). 2025-06-03 02:16:23 +01:00
ITotalJustice
7a83269d98 disable nvjpg for homebrew menu (for now).
see https://github.com/averne/oss-nvjpg/issues/1.
2025-06-02 23:09:31 +01:00
ITotalJustice
4be1d48215 use oss-nvjpg for loading jpeg images (homebrew, games and themezer).
slightly faster loading on avg compared to stbi.
2025-06-02 22:18:38 +01:00
ITotalJustice
8485ff1e99 use nxtc (nx title cache) for caching titles in the game menu. 2025-06-02 20:52:08 +01:00
Chronoss
be66b10f49 Update fr.json (#162) 2025-06-02 18:02:01 +01:00
游家小少
1f22971493 中文语言文件更新 (#163)
* Update zh.json

Revise some Chinese translations
2025-06-02 18:01:43 +01:00
ITotalJustice
ea943088e5 usbds only set zlt on write 2025-06-02 18:00:40 +01:00
ITotalJustice
298be4a344 appstore add option to show installed files for app, add option to launch app website. slightly round scrollbar. 2025-06-02 17:51:48 +01:00
ITotalJustice
f37fc13b7c bump yyjson version 0.10.0 -> 0.11.1 (silences cmake warning) 2025-06-01 23:51:41 +01:00
ITotalJustice
506b74868e remove old screenshots. 2025-05-31 22:15:16 +01:00
ITotalJustice
4a59d1cfda add support for loading custom forwarder gif/logo from file. 2025-05-31 22:14:02 +01:00
ITotalJustice
7201c8347f handle left/right side menu swapping.
see #153
2025-05-31 18:45:57 +01:00
ITotalJustice
c8a3df3cfc merge Chinese translation from #159
fixes #159
2025-05-31 18:20:10 +01:00
ITotalJustice
2ef7742903 Merge branch 'multi_thread_everything' 2025-05-31 18:08:17 +01:00
ITotalJustice
f98135325a fix icon/list layout where the highlighted border would be clipped. 2025-05-31 18:03:12 +01:00
Yorunokyujitsu
fd765aa8c8 Updated theme, new translated strings, adjust left side split-screen x position. (#156)
* Add a new ThemeEntryID for split-screen and selected items and modify the theme.

* Adjust the position of the left side split-screen in the filebrowser menu.

* Add new strings and update Korean and Japanese translations.

* fix ja.json.

---------

Co-authored-by: ITotalJustice <47043333+ITotalJustice@users.noreply.github.com>
2025-05-31 18:02:53 +01:00
Ny'hrarr
ec93dd5a7d Add default theme and update screenshots (#160)
* Create sphaira_theme.ini

* Tweak colors and add default

* Add updated screenshots
2025-05-31 17:36:54 +01:00
Ny'hrarr
0e885ff2d5 Pt patches (#157)
* Update pt.json

* Update pt.json

* Added plural and one missing entry.
2025-05-31 17:35:55 +01:00
ITotalJustice
5893cb575e fix ncz block installs, fix error module value being out of range, display error on install from filebrowser.
the issue with block installs was that i was not tracking the ncz block offset in between transfers.
this resulted in the block size being used for each transfer, rather then size-offset.

for blocks that were always compressed, this silently worked as zstd stream can handle multiple frames.
however, if there existed compressed and uncompressed blocks, then this bug would be exposed.

thanks to Marulv for reporting the bug.
2025-05-31 17:30:28 +01:00
ITotalJustice
b46136b959 optimise fs CreateDirectoryRecursively() by checking if the path already exists prior to the loop. 2025-05-30 13:16:39 +01:00
ITotalJustice
390c1e870d multi-thread zip and unzip code. option to download appstore zip to mem. hasher mem support. 2025-05-30 12:34:29 +01:00
ITotalJustice
17b341d83a fix ncz install due to write offset being applied twice, fix zlt, bump version 0.11.2 -> 0.11.3
bug was introduced in 6b56b7f.
2025-05-29 01:45:15 +01:00
redraz
391234ea7b Update Russian translation (#155) 2025-05-28 23:24:43 +01:00
ITotalJustice
92eb3a9ecd add some default url entries, add option to enter custom url.
see #135
2025-05-28 20:02:51 +01:00
ITotalJustice
491445a12f Revert "remove Web menu"
This reverts commit 2d7763444e.
2025-05-28 18:46:30 +01:00
ITotalJustice
04c3c64562 always display commit hash with the version, log version hash, bump version for new release. 2025-05-28 15:37:14 +01:00
ITotalJustice
36c8a60de0 multi-threaded file copy (2.5x speed improvement for sd -> hdd). 2025-05-28 15:25:50 +01:00
ITotalJustice
6b01735655 multi-threaded hasher. 2025-05-28 15:16:32 +01:00
ITotalJustice
a801e385ce reduce the size of all file assoc entries by removing the [config] section. 2025-05-28 15:15:32 +01:00
ITotalJustice
01bfcb05cd fix gamecard install due to fs==NULL. more explicit yields for sd card transfers for file based emummc. 2025-05-28 15:00:31 +01:00
ITotalJustice
6b56b7f7c2 make all threads preemptive. workaround file based emummc hanging due to fs r/w hanging the system.
the fix for file based emummc is to simply sleep between fs r/w to the sd card.
the performance impact is minimal, even with the reduced buffer size.

the above *only* applies for when using file based emummc. not affecting using partition or sysmmc.
2025-05-28 14:37:56 +01:00
impeeza
b0ff2eb4b7 Impeeza build enh (#144)
* Update README.md

add switch-mbedtls needed to build the code

* Update build_release.sh

improvement on dir change using pushd

* Update README.md
2025-05-28 11:58:42 +01:00
Ny'hrarr
8821dfcbe4 Update Portuguese translation (#152)
* Update pt.json

* Update pt.json

* Translate new entries and other tweaks

* Added proper context to some entries
2025-05-28 11:57:32 +01:00
redraz
f48e6e21a1 Make RU translation (#151) 2025-05-28 11:57:13 +01:00
ITotalJustice
37ab1a345c fix toggling ftp enable in options which could cause a crash / prevent it from re-starting ftp.
fixes #137
2025-05-28 11:55:15 +01:00
ITotalJustice
89fbb10ee6 change update behaviour to update all paths where sphaira exists and better prompt the user how to update. 2025-05-27 22:17:50 +01:00
ITotalJustice
6db0cc0615 hide left-side menu from appearing in the misc menu 2025-05-27 21:51:51 +01:00
ITotalJustice
8f6c5ff618 enable hdd mounting over ftp, bump ftpsrv commit, disable ftpsrv gc mount, reduce ftpsrv memory usage in half 2025-05-27 21:47:06 +01:00
ITotalJustice
e1e19b1001 fix native fs showing empty dir count. 2025-05-27 18:21:13 +01:00
ITotalJustice
695102405b fix filebrowser split crash due to capturing the lambda by ref, 0.11.1 2025-05-27 17:59:06 +01:00
ITotalJustice
aeb6c64077 bump version for new release 0.10.3 -> 0.11.0 2025-05-27 17:44:48 +01:00
⭐️NINIKA⭐️
9050229b12 Change NSP padding logic to follow nxdt and nsfw validation (#147) 2025-05-27 17:05:28 +01:00
ITotalJustice
af4aa836a9 add gamecard trim detection. remove duplicate value in error box. 2025-05-27 15:35:52 +01:00
ITotalJustice
fb2272546a bump usbhsfs git tag to include hack for adaptor mounting. fix applet mode text being draw at wrong offset. 2025-05-27 00:55:26 +01:00
ITotalJustice
4b25b2c5eb use usb mount flags to detect if its read only, rather than checking global config. 2025-05-26 23:18:14 +01:00
ITotalJustice
c11d9edc4e add support for changing the left-side menu.
fixes #148
2025-05-26 22:55:06 +01:00
ITotalJustice
e2a5454263 set fs view to the right side when split mode is enabled. 2025-05-26 20:27:54 +01:00
ITotalJustice
3ca82463cc mount hdd by default, add hdd write protect option. 2025-05-26 19:25:09 +01:00
ITotalJustice
793b36fd59 add hotkey for file browser to jump to advanced options (R2 + X). 2025-05-26 18:01:06 +01:00
ITotalJustice
66fe526754 add option to label trimmed xci dumps (disabled by default). 2025-05-26 17:55:54 +01:00
ITotalJustice
7c45d60e60 add nxmp and switch wave file assoc, remove old sphaira file assoc, replace ext/db assoc parse code with views::split 2025-05-26 17:42:32 +01:00
ITotalJustice
a9931a975d many more optimisations. cleaned up fs code. bug fixes etc (see below).
- fix usb using the wrong year when polling the timestamp.
- fs file/dir has been re-written to allow for simplified calling and remove the need of manually closing.
- add SetSize for stdio by using ftruncate.
- don't truncate the file when opened in stdio.
- add getcount api for stdio.
- display file/dir count in filebrowser for non-native fs.
- allow hash to be used on non-native fs.
- slightly optimise nro parsing by manually calculating nro size rather than doing an os call.
- slightly optimise nro parsing by keeping the fs struct alive between calls, rather than creating a new one on the stack.
- fix filebrowser peeking into zip files that are stored on non-sd fs.
- set the timestamp of a file moved to a stdio location (cut/paste).
- slightly optimise daybreak update folder detection by skipping opening/polling the dir size.
- set the fullpath of the file thats being hashed in progress box.
2025-05-26 17:06:04 +01:00
ITotalJustice
3e3ec71329 default to having boost mode enabled for progress bar 2025-05-26 01:46:28 +01:00
ITotalJustice
49abdc0590 hotkey R2 in filebrowser for when pressed along with L2, select all files. 2025-05-25 21:06:14 +01:00
ITotalJustice
4f931d2991 Merge branch 'master' into dev 2025-05-25 21:00:51 +01:00
ITotalJustice
f7c5ccfa87 huge optimisations (see below). Build with c++26 and c23.
- build with c++26 and c23, fixes warnings due to this change.
- use #embed over romfs where applicable.
- load all configs upfront in the app menu, massively improves boot time
- enable boost mode during load/scan time in all (slow loading) menus, huge load time improvement.
- enable boost mode when exiting the app, to speed up closing all the menus and saving the config.
- reduce the size of the nro nacp when loading to just the title + author + display version.
- add option to enable boost mode for all progress bar menus, huge perf improvement again.
- remove unused launch_count var from the playlog file.
- display full path when dumping.
- optimise appstore unzip code by iterating through the zip rather than finding a specific file, reduces retroarch extract time from 52s to 26s.

overall, this commit has reduced boot time from 0.4s to 0.3s and massively increased load times of other menus.
(it also reduced the binary size by 4kb, so yay)
2025-05-25 20:57:03 +01:00
ITotalJustice
5ce23f29fa GC add initial data and UID dumping (credit to nxdumptool). Fix gc bug where ns wasn't closed. Fix usb s2s being an option if dumping the bins. Always remount GC after storage has been mounted. 2025-05-25 13:24:03 +01:00
shadow2560
d13ad64099 Update french translation (#149)
Signed-off-by: shadow2560 <24191064+shadow2560@users.noreply.github.com>
2025-05-25 11:23:00 +01:00
ITotalJustice
be88bdb567 initial work towards support standard nsp spec.
see #147
2025-05-24 23:56:42 +01:00
ITotalJustice
1bff57f9c9 Merge branch 'master' into dev 2025-05-24 23:40:52 +01:00
Yorunokyujitsu
4172d5d5b6 Added new strings and update Korean, Japanese lang. (#146)
* Added new strings and update Korean, Japanese lang.

* Update ko.json, ja.json.
2025-05-24 23:32:38 +01:00
ITotalJustice
1cdea981de workaround for time / battery % x position changing every few seconds.
fixes #142
2025-05-24 23:13:53 +01:00
ITotalJustice
22ebfd4a82 fs display hdd at the top of mount list for quick access, change xci dump folder to Gamecard. 2025-05-24 22:31:24 +01:00
ITotalJustice
798ac47487 limit fs hash to a single file. 2025-05-24 22:17:12 +01:00
ITotalJustice
fba8051007 use feof and ferror to detect errors with stdio fs stream. 2025-05-24 22:14:06 +01:00
ITotalJustice
15721b8e8a split screen mode for fs. fix game dump. scrolling text for fs, progress, menu base. display icon when dumping. 2025-05-24 21:55:10 +01:00
ITotalJustice
d43ca37875 add file hashing to the file browser (crc32, md5, sha1, sha256) 2025-05-23 17:02:35 +01:00
ITotalJustice
1b5e7401f2 use stdio for minini to benefit from buffering (reduces startup by 300ms), reduce fatfs size by 60kb. 2025-05-23 14:51:49 +01:00
ITotalJustice
d8b2896bed fix native dump, fix xci dumps going to nsp folder.
native dump broke with prev commit due to not using the sd card, instead using an empty fs.
2025-05-23 13:07:00 +01:00
ITotalJustice
6475f4316a simplify stdio/native file paths by sharing the same code. 2025-05-23 12:44:56 +01:00
ITotalJustice
93c38da742 add support for mounting stdio (hdd) in the file browser. 2025-05-23 12:23:28 +01:00
ITotalJustice
8070268d2a add hdd dump support, cleanup dump code into a single generic file. 2025-05-22 15:50:50 +01:00
ITotalJustice
2e6d757852 update usbds_getspeed to match pr, fix appstore install returning a bool instead of Result. 2025-05-21 21:52:54 +01:00
ITotalJustice
a91550174a add dump options, allow for gamecard menu to be accessed without install enabled. 2025-05-21 19:52:22 +01:00
ITotalJustice
52b166932d Merge branch 'master' into dev 2025-05-21 17:42:07 +01:00
ITotalJustice
d50bcb650f fix crash if nro has corrupted asset entry, bump version for new release 0.10.2 -> 0.10.3
the nro that caused this was ClkrstQuery.nro

fixes #141
2025-05-21 17:29:18 +01:00
ITotalJustice
654f3a1446 replace progress box result from bool to Result. Display error box if progress box fails. 2025-05-21 16:50:18 +01:00
ITotalJustice
71415e5044 remove unused last_launch | prev_timestamp storing / fetching. 2025-05-21 15:32:42 +01:00
ITotalJustice
da33b9a6b9 add usbds speed / max packet detection, add zlt support for usbds, fix game usb transfer bug (see below).
due to the previous commit, i broke dumping multiple games via usb as the stream offset wasn't reset.
because of this, the first transfer would complete, but the 2nd one would fail.
2025-05-21 14:43:18 +01:00
ITotalJustice
fe2a1a3a80 add support for streamed usb upload, multi thread usb uploads / dumps.
Some notes i made when adding stream support:
The tinfoil API makes it hard / impossible to multi thread the file upload because each data transfer passes the the file name and offset, meaning that it can and will change files and offset in the middle of a transfer
So that prevents the read thread from running freely in the background and the pull thread pulling data when requested.
The extension adds a flag to the usb header which if set, enables stream mode (same as ftp installs). This removes random access, but allows for multi threading as the data will be requested in order.
2025-05-21 13:19:46 +01:00
ITotalJustice
a67171e2b8 disable sleep whilst downloading, uploading, using usb, inside ftp menu. 2025-05-20 23:33:51 +01:00
ITotalJustice
cf908d63b9 backport controller led flashing from ftpsrv (only flash 1 controller). 2025-05-20 23:13:20 +01:00
ITotalJustice
ef25c3edc7 multi thread game dumps and file uploads.
previous uploads were all single threaded, which meant that it only uploaded as fast as the slowest source.
usb transfer is still single threaded due it being random access for both files and data, making it
hard for the read thread to run freely.
2025-05-20 22:50:05 +01:00
ITotalJustice
f956adabc3 add xci dumping, add xci cert and id set dump.
still missing uid and initial dumping.
2025-05-20 17:56:55 +01:00
⭐️NINIKA⭐️
4244be9592 Fix handling of unicode filenames in usb_install_pc.py (#143) 2025-05-20 12:45:59 +01:00
Ny'hrarr
a7fc19e28a Pt patches (#140)
* Update pt.json

* Translate new keys

* Translate FTP, USB and GameCard menus

* Update pt.json

* Update pt.json

* Add missing comma and translate more entries

* Fix case

* Update pt.json

* Update pt.json
2025-05-20 09:00:39 +01:00
ITotalJustice
cf192fca85 fix hbmenu not being updated due to faulty string compare, bump version 0.10.1 -> 0.10.2 2025-05-19 20:34:22 +01:00
xHR
041bb2bbe5 Added Ukranian language (#139) 2025-05-19 19:57:15 +01:00
ITotalJustice
df558d5dcc bump version for new release 0.10.0 -> 0.10.1 2025-05-19 17:06:49 +01:00
ITotalJustice
33de03a923 fix sd card dumps due to the folder not being created. 2025-05-19 17:04:49 +01:00
ITotalJustice
1000b9c8ec fix sphaira not detecting latest update as we went from 0.9 to 0.10. 2025-05-19 16:23:45 +01:00
ITotalJustice
74fddecebc bump version for new release 0.9.1 -> 0.10.0 2025-05-19 16:09:33 +01:00
ITotalJustice
a64d4dce7a remove ns event from games menu (see below).
turns out that the event is auto cleared when waited.
this meant that if sphaira handled the event before qlaunch got chance to handle it,
then qlaunch won't update when app records changed.

this can result in a gamecard not being mounted, deleted games still apearing, installed games
not being displayed etc...
2025-05-19 16:07:24 +01:00
ITotalJustice
5daca4354c add support for webdav uploads by creating missing folders, game now dumps to title/title[id].nsp 2025-05-19 16:00:03 +01:00
ITotalJustice
da9235f58e fix upload url path not being encoded, add seek api for uploads. 2025-05-19 12:06:43 +01:00
ITotalJustice
bd6566524c enable ftp in the ftp menu if it isn't already enabled. 2025-05-19 08:32:05 +01:00
ITotalJustice
eadc46b0e4 add support for file uploads in the file browser, optimise curl single thread download.
- curl now keeps the handle alive for single threaded downloads, rather than creating it each time.
2025-05-18 23:00:51 +01:00
ITotalJustice
71df5317be add game dump uploading, fix download progress using u32 instead of s64, add progress and title for usb game dump.
- added support for custom upload locations, set in /config/sphaira/locations.ini
- add support for various auth options for download/upload (port, pub/priv key, user/pass, bearer).
2025-05-18 20:30:04 +01:00
ITotalJustice
bd7eadc6a0 add game dumping, add game transfer (switch2switch) via usb, add multi game selecting, fix bugs (see below).
- added more es commands.
- fixed usb install potential hang if the exit command is sent, but the client stops responding (timeout is now 3s).
- added multi select to the games menu.
- added game dumping.
- added switch2switch support by having a switch act as a usb client to transfer games.
- replace std::find with std::ranges (in a few places).
- fix rounding of icon in progress box being too round.
- fix file copy helper in progress box not updating the progress bar.
2025-05-18 13:46:10 +01:00
ITotalJustice
544272925d fix IsEmunand() failing due to the paths not being page aligned. 2025-05-15 16:13:35 +01:00
ITotalJustice
70a31be134 don't fail if the control nca cannot be parsed during install, as it may depend on ticket not yet installed. 2025-05-15 15:25:03 +01:00
ITotalJustice
55ae2a63d9 fix installing failing during setup if prod.keys isn't found. 2025-05-15 15:14:02 +01:00
ITotalJustice
5a53947a3e fix crash in list layout caused by rendering all previous hidden entries. 2025-05-14 18:00:56 +01:00
BIGBIGSUI
3bbb5ccb3c Update zh.json (#136)
A latest zh.json. Hope it helps.
2025-05-14 00:29:04 +01:00
ITotalJustice
83472f1020 fix game menu forcefully disabled manual loading of control data.
this was done during testing / benchmarking, but i forgot to undo this.
2025-05-14 00:06:36 +01:00
ITotalJustice
0167bf034c gc menu now tries to load control data from ns cache before manually loading.
on fw 19 and below, loading from cache takes ~5ms, whereas manually loading takes ~20ms.
manually loading is still faster than relying on ns to load control from storage (~50ms).
2025-05-14 00:04:47 +01:00
ITotalJustice
35abe363a6 optimise theme meta loading. 2025-05-13 23:52:34 +01:00
ITotalJustice
97d3fd396e optimise game menu for fw 20
- 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
2025-05-13 23:51:06 +01:00
ITotalJustice
b98ccb927e fix appstore status icons no longer being rounded (bug added in e279a70) 2025-05-11 20:19:43 +01:00
ITotalJustice
db23f072a2 add sysmmc / emummc install enable options.
allows the user to enable installs for one config and disable it for the other.
by default, it will load the install option found in the config, if found.
otherwise, it will load from the new config option.
2025-05-11 20:14:34 +01:00
ITotalJustice
4d3d7e81d4 update libhaze to silence gcc 15 warning and run on core2 instead of core0. 2025-05-11 03:45:48 +01:00
ITotalJustice
441807bc53 fix building for gcc 15 2025-05-11 03:00:04 +01:00
ITotalJustice
20e2d85843 remove bubbles, no one likes easter eggs apparently.
fixes #138
2025-05-11 02:41:56 +01:00
ITotalJustice
e279a70606 add layout options to grid based menues. 2025-05-11 02:39:03 +01:00
ITotalJustice
5d9e24af31 use ns application event to detect when to re-scan for record changes. 2025-05-04 20:42:57 +01:00
Ny'hrarr
078627e07b Update pt.json (#133)
* Update pt.json

* Translate new keys

* Translate FTP, USB and GameCard menus
2025-05-03 22:27:31 +01:00
ITotalJustice
365ae2d0cb fix freeze if the usb menu is closed whilst a usb cable is not connected, 0.9.0 -> 0.9.1 2025-05-03 21:15:21 +01:00
ITotalJustice
5b6e09b926 bump version for new release 0.8.2 -> 0.9.0 2025-05-03 18:01:49 +01:00
ITotalJustice
7072647611 reduce usb install exit latency by waiting on a cancel uevent, rather than relying on a timeout. 2025-05-03 17:17:53 +01:00
ITotalJustice
30cf4826f8 add code for calculating games size, stubbed for now as the ns calls are too slow to be usable. 2025-05-03 15:30:40 +01:00
ITotalJustice
ca47fc1f89 add (limited) sort options to game menu.
getting the list of title_ids is very fast (less than 1ms), however parsing the control info, such as title names
is very slow.
depending on how many games the user has, blocking until we read all control info can take several seconds...
we would only need to block if the user wants to sort by name.
normally, we lazy load the control data, so we don't suffer from slow load times at all.
i decided that its not worth slowing the whole system down just to give the option to sort by name.
2025-05-03 15:08:25 +01:00
ITotalJustice
16a2c84edd simplify right-side shortcuts impl, add gamecard and themezer to shortcut list, fix l2/r2 using wrong icons, sort l2/r2 so l2 displays first.
some other changes:
- shorten the next page and prev page to just next/prev in themezer.
- remove misc shortcut name. the function itself still exists.
2025-05-03 14:39:20 +01:00
ITotalJustice
df5e27dd06 fix filebrowser crash caused when trying to select all files (L2) whilst a hidden file/folder exists.
this crash was found by @WE1ZARD.
to trigger it, press L2 in the filebrowser whilst a hidden file exists and the hide hidden is enabled.
the was due to GetEntry(i) internally using m_entries_current, and the select all was using the index from m_entries_current.
this would result in an index that goes oob, and as its a write, it crashes.
2025-05-03 13:25:09 +01:00
ITotalJustice
d95226f8c0 i18n::get should accept a string_view rather than char*, simplifies calling. 2025-05-03 13:25:09 +01:00
ITotalJustice
164fec5b73 fix right-side shortcut not displaying the correct name (again) when using translations. 2025-05-03 13:25:09 +01:00
glitched_nx
8dad96f39f Update de.json (#130)
Commit changes to language file (de.json), with many improvements and corrections.

The changes include:
- Modification and correction of existing translations for greater clarity and accuracy.
- Updated translations to match the terminology for homebrew and Nintendo Switch UI elements.
- Added new 'de' translation for the “ 12h time format” setting function.
2025-05-02 22:48:48 +01:00
ITotalJustice
2244e73c53 change "yes, no" for boolean options to "on, off", to match N's sidebar. 2025-05-02 00:57:11 +01:00
ITotalJustice
456cb02d2a [breaking change] update forwarder id generation, add "hide forwarders" to game menu. 2025-05-02 00:52:08 +01:00
ITotalJustice
f310704472 bump nca key generation values for fw 20.0.0 2025-05-02 00:02:09 +01:00
ITotalJustice
96e5a7081b clip rect and text drawing that go offscreen.
this is already handled by the gpu, but cpu side still has to do some work.
this wasn't a performance issue (we only use 4%) but its a free win, so we might as well.
2025-05-01 23:49:01 +01:00
ITotalJustice
1c93e18822 replace all "enabled" and "disabled" options with the default "On" and "Off". 2025-05-01 22:10:47 +01:00
ITotalJustice
ac152454f0 fix menu shortcut setting translated names for the config. 2025-05-01 22:00:40 +01:00
ITotalJustice
7851f7f400 add option to extract zip to root, better name extract / compress options. 2025-05-01 18:28:35 +01:00
ITotalJustice
2b561dd438 add option to change the right-side menu. 2025-05-01 18:06:10 +01:00
ITotalJustice
3545f557fc add scrolling text to popup list, handling clipping inside scrolling text, game menu changes
- added delete entity in game menu
- added list meta records to game menu
2025-05-01 15:14:50 +01:00
ITotalJustice
8dfb9b9ba6 reduce time for scrolling text from 1.5s to 1s. 2025-05-01 00:04:32 +01:00
ITotalJustice
7cf36cd25f reduces rounding of icons in grid based menus (15 -> 5). 2025-04-30 23:59:05 +01:00
ITotalJustice
c53692022b add scrolling text to all grid based menus.
fixes #122
2025-04-30 23:56:40 +01:00
ITotalJustice
0f3b7da0b2 fix memleak when deleting homebrew, add game menu. 2025-04-30 22:45:52 +01:00
ITotalJustice
e22daefb08 slightly round edges for progress and option box, add image support to option boxes 2025-04-30 18:19:13 +01:00
ITotalJustice
6fb5319da3 bump version for new release 0.8.1 -> 0.8.2 2025-04-30 17:21:04 +01:00
ITotalJustice
6970fec554 irs connect to first available handle, irs display connected pad in the title. 2025-04-30 17:16:59 +01:00
ITotalJustice
36be56647f Revert "remove IRS menu"
This reverts commit 1dafa2748c.
2025-04-30 17:05:44 +01:00
ITotalJustice
cca6326314 filebrowser add select al option by pressing L2 2025-04-30 16:55:33 +01:00
ITotalJustice
9176c6780a filebrowser move install forwarder option out of the advanced menu. 2025-04-30 16:49:19 +01:00
ITotalJustice
b1a6b12cf3 add zip extraction, add zip creation, themezer now displays the file name its extracting. 2025-04-30 16:42:05 +01:00
ITotalJustice
c7cc11cc98 only add etag is dst file already exists, enable curl --compressed option.
curl/libcurl does not send Accept-Encoding by default.
many servers support sending compressed versions of files, to speed up transfers.
this is ideal for the switch as its io is shit, but the cpu is mostly idle (4% cpu usage for sphaira).

github and appstore support sending gzip json files, themezer doesn't seem to.
2025-04-30 00:40:04 +01:00
ITotalJustice
ec4b96b95d remove stale etag if the server stops sending etags back
workaround for appstore images which stopped sending etags back.
2025-04-29 22:41:33 +01:00
ITotalJustice
a2e343daa7 improve popup_list to highlight the currently selected item. 2025-04-29 22:40:32 +01:00
BIGBIGSUI
b811c9e3cd Update zh.json (#129)
A latest zh.json. Hope it will be helpful
2025-04-29 20:35:05 +01:00
ITotalJustice
8ffaa56bc3 bump version for new release 0.8.0 -> 0.8.1 2025-04-29 20:03:23 +01:00
ITotalJustice
eca3358e57 add option to download default music. 2025-04-29 20:01:51 +01:00
ITotalJustice
757e380e08 play sound effect when gamecard is inserted. 2025-04-29 19:23:37 +01:00
ITotalJustice
6c1b5de932 label the shortcut for misc 2025-04-29 19:06:33 +01:00
ITotalJustice
d79ac126f7 remove all strings and error codes in error_box.cpp, reduce binary by a further 60k. 2025-04-29 18:56:55 +01:00
ITotalJustice
2d7763444e remove Web menu
the web browser on the switch is really bad, it shouldnt be used.
i am removing this menu because its another option that gets in the way of other options, and code bloat.
2025-04-29 18:42:32 +01:00
ITotalJustice
1dafa2748c remove IRS menu
i added the irs menu when i wanted to mess around with the sensor on the joycon.
since then, i have used it a total of 0 times, and i don't think any users use it either.
2025-04-29 18:37:43 +01:00
ITotalJustice
9f7bf9581c add boost mode option for installing 2025-04-29 18:33:02 +01:00
ITotalJustice
8f39acbaa2 replace usb protocol with tinfoils protocol, in order to support applications supporting said protocol.
- replace the python script with the one included with tinfoil, minor changes such as changing the supported extension,
  removing unused imports.
- tested with the included script, fluffy and ns-usbloader on linux.
  a user was unable to get it working on mac however...
- added build instructions to the readme, i think they're correct.
- added install instructions to the readme.
2025-04-29 18:11:07 +01:00
ITotalJustice
81469d0ac9 remove PageAlignedVector from yati as it's no longer needed due to previous commit.
the previous commit changed usb transfers to always transfer to/from page aligned buffers.
i wanted to keep the commits seperate so that its easier revert or git bisect later on, if needed.
2025-04-29 14:19:37 +01:00
ITotalJustice
1eae35f072 simplify the usb transfer process by using an aligned buffer to transfer to/from. 2025-04-29 14:17:12 +01:00
ITotalJustice
5b82e07b1c fix building due to previous commit 2025-04-29 13:08:32 +01:00
ITotalJustice
73886c28ae add gc event waiting, fix control nca mounting, better skip nca support.
- 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.
2025-04-29 12:47:38 +01:00
ITotalJustice
eea09f6e57 [appstore] make author search case insensitive. 2025-04-28 22:06:44 +01:00
ITotalJustice
282c6e5493 bump version for release 0.7.0 -> 0.8.0 2025-04-27 21:01:45 +01:00
ITotalJustice
2c2f602d14 add gc_menu, add progress, icon, time remaining to progress bar (see full commit message).
- 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).
2025-04-27 20:01:13 +01:00
ITotalJustice
f7f1254699 Merge pull request #128 from ITotalJustice/stream_installs
Stream installs (FTP), and many fixes
2025-04-23 01:02:26 +01:00
ITotalJustice
90f8a62823 display useful info in ftp menu (ip, port, user, pass, ssid, passphrase) 2025-04-23 01:00:36 +01:00
ITotalJustice
e2a1c8b5e3 fix yati not setting correct version, add support for using zip name when creating forwarder, remove some dead code.
fixes #126
fixes #127
2025-04-22 23:15:16 +01:00
ITotalJustice
21f6f4b74d [skip ci] fix file assoc always using internal name, fix menu showing wrong time
fixes #126
2025-04-22 00:08:26 +01:00
ITotalJustice
75d3b3ee0d [skip-ci] initial support for stream installs, add ftp installs.
do NOT build or release binaries of this version, it is not complete and there will be dragons.
2025-04-21 23:23:59 +01:00
ITotalJustice
0dde379932 don't return from usb menu on error, wait until the user presses B 2025-04-21 13:33:36 +01:00
ITotalJustice
9800bbecdf add basic support for gamecard installing 2025-04-21 13:30:46 +01:00
ITotalJustice
60e915c255 enable screenshot permissions in applet mode. 2025-04-21 12:40:37 +01:00
ITotalJustice
786f8a42fa send file name and size via usb, add requirements.txt for usb.py 2025-04-21 01:41:20 +01:00
ITotalJustice
5a4a0f75f2 add support for mame and neogeo, as well as alias for rom folder names 2025-04-20 22:03:53 +01:00
403 changed files with 81401 additions and 10631 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

View File

@@ -1,6 +1,12 @@
name: build
on: [push, pull_request]
on:
push:
branches-ignore:
- dev
pull_request:
branches-ignore:
- dev
jobs:
build:
@@ -8,7 +14,7 @@ jobs:
fail-fast: false
matrix:
os: [ubuntu-latest]
preset: [MinSizeRel]
preset: [Release]
runs-on: ${{ matrix.os }}
container: devkitpro/devkita64:latest
@@ -16,16 +22,17 @@ jobs:
- uses: actions/checkout@v3
# fetch latest cmake
- uses: lukka/get-cmake@latest
- uses: lukka/get-cmake@v3.31.6
- name: Configure CMake
run: |
cmake --preset ${{ matrix.preset }} -DUSE_VFS_GC=0
run: cmake --preset ${{ matrix.preset }}
- name: Build
run: cmake --build --preset ${{ matrix.preset }} --parallel 4
run: cmake --build --preset ${{ matrix.preset }} --parallel $(nproc)
- uses: actions/upload-artifact@master
- name: Deploy
if: ${{ github.event_name != 'pull_request' && github.event.action != 'unassigned' }}
uses: actions/upload-artifact@master
with:
name: sphaira-${{ matrix.preset }}
path: build/${{ matrix.preset }}/sphaira.nro

33
.github/workflows/python-usb-export.yml vendored Normal file
View File

@@ -0,0 +1,33 @@
name: USB Export Python Tests
on:
push:
paths: &python_usb_export_paths
- 'tools/tests/test_usb_export.py'
- 'tools/usb_export.py'
- 'tools/usb_common.py'
- 'tools/requirements.txt'
- '.github/workflows/python-usb-export.yml'
pull_request:
paths: *python_usb_export_paths
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python 3.11
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r tools/requirements.txt
- name: Run tests
run: |
python3 tools/tests/test_usb_export.py

View File

@@ -0,0 +1,33 @@
name: USB Install Python Tests
on:
push:
paths: &python_usb_install_paths
- 'tools/tests/test_usb_install.py'
- 'tools/usb_install.py'
- 'tools/usb_common.py'
- 'tools/requirements.txt'
- '.github/workflows/python-usb-install.yml'
pull_request:
paths: *python_usb_install_paths
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python 3.11
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r tools/requirements.txt
- name: Run tests
run: |
python3 tools/tests/test_usb_install.py

55
.github/workflows/webusb-build.yml vendored Normal file
View File

@@ -0,0 +1,55 @@
name: Build and Deploy WebUSB Site
on:
push:
paths:
- 'tools/webusb/**'
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout source
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install minifiers
run: |
npm install -g html-minifier-terser terser csso-cli
- name: Minify HTML
run: |
html-minifier-terser --collapse-whitespace --remove-comments --minify-css true --minify-js true -o tools/webusb/index.html.min tools/webusb/index.html
- name: Minify JS
run: |
terser tools/webusb/index.js -c -m -o tools/webusb/index.js.min
- name: Minify CSS
run: |
csso tools/webusb/index.css --output tools/webusb/index.css.min
- name: Prepare deploy branch
run: |
rm -rf webusb
mkdir webusb
cp tools/webusb/index.html.min webusb/index.html
cp tools/webusb/index.js.min webusb/index.js
cp tools/webusb/index.css.min webusb/index.css
cp -r tools/webusb/assets webusb/assets
- name: Commit and force-push to webusb branch
run: |
cd webusb
git init
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add .
git commit -m "Deploy minified webusb build"
git branch -M webusb
git remote add origin "https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git"
git push --force origin webusb

6
.gitignore vendored
View File

@@ -11,6 +11,7 @@ old_code
created_ncas
assets/romfs/shaders
.vscode/settings.json
.idea
info/
romfs/shaders
assets/unused
@@ -24,3 +25,8 @@ compile_commands.json
out
usb_test/
__pycache__
usb_*.spec
CMakeUserPresets.json
build_patreon.sh

View File

@@ -21,6 +21,7 @@ set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# enable LTO (only in release builds)
if (LTO)
if (CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
include(CheckIPOSupported)
check_ipo_supported(RESULT ipo_supported OUTPUT ipo_error)
@@ -35,6 +36,7 @@ if (CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "MinSizeRel
else()
message(STATUS "IPO / LTO not enabled in debug build")
endif()
endif()
function(dkp_fatal_if_not_found var package)
if (DEFINED ${var}_NOT_FOUND OR DEFINED ${var}-NOTFOUND)

View File

@@ -16,25 +16,49 @@
"name": "Release",
"displayName": "Release",
"inherits":["core"],
"cacheVariables": { "CMAKE_BUILD_TYPE": "Release" }
"cacheVariables": {
"CMAKE_BUILD_TYPE": "MinSizeRel",
"LTO": true
}
},
{
"name": "RelWithDebInfo",
"displayName": "RelWithDebInfo",
"name": "Lite",
"displayName": "Lite",
"inherits":["core"],
"cacheVariables": { "CMAKE_BUILD_TYPE":"RelWithDebInfo" }
"cacheVariables": {
"CMAKE_BUILD_TYPE": "MinSizeRel",
"LTO": true,
"ENABLE_NVJPG": false,
"ENABLE_NSZ": false,
"ENABLE_LIBUSBHSFS": false,
"ENABLE_LIBUSBDVD": false,
"ENABLE_FTPSRV": false,
"ENABLE_LIBHAZE": false,
"ENABLE_AUDIO_MP3": false,
"ENABLE_AUDIO_OGG": false,
"ENABLE_AUDIO_WAV": false,
"ENABLE_AUDIO_FLAC": false,
"ENABLE_DEVOPTAB_HTTP": false,
"ENABLE_DEVOPTAB_NFS": false,
"ENABLE_DEVOPTAB_SMB2": false,
"ENABLE_DEVOPTAB_FTP": false,
"ENABLE_DEVOPTAB_SFTP": false,
"ENABLE_DEVOPTAB_WEBDAV": false
}
},
{
"name": "MinSizeRel",
"displayName": "MinSizeRel",
"name": "Dev",
"displayName": "Dev",
"inherits":["core"],
"cacheVariables": { "CMAKE_BUILD_TYPE":"MinSizeRel" }
},
{
"name": "Debug",
"displayName": "Debug",
"inherits":["core"],
"cacheVariables": { "CMAKE_BUILD_TYPE":"Debug" }
"cacheVariables": {
"CMAKE_BUILD_TYPE": "MinSizeRel",
"LTO": false,
"DEV_BUILD": true
}
}
],
"buildPresets": [
@@ -44,18 +68,13 @@
"jobs": 16
},
{
"name": "RelWithDebInfo",
"configurePreset": "RelWithDebInfo",
"name": "Lite",
"configurePreset": "Lite",
"jobs": 16
},
{
"name": "MinSizeRel",
"configurePreset": "MinSizeRel",
"jobs": 16
},
{
"name": "Debug",
"configurePreset": "Debug",
"name": "Dev",
"configurePreset": "Dev",
"jobs": 16
}
]

View File

@@ -4,16 +4,16 @@ A homebrew menu for the Nintendo Switch.
[See the GBATemp thread for more details / discussion](https://gbatemp.net/threads/sphaira-hbmenu-replacement.664523/).
[We have now have a Discord server!](https://discord.gg/8vZBsrprEc). Please use the issues tab to report bugs, as it is much easier for me to track.
[We have now have a Discord server!](https://discord.gg/8vZBsrprEc) Please use the issues tab to report bugs, as it is much easier for me to track.
## Showcase
| | |
:-------------------------:|:-------------------------:
![Img](assets/screenshots/2024121522512100-879193CD6A8B96CD00931A628B1187CB.jpg) | ![Img](assets/screenshots/2024121522514300-879193CD6A8B96CD00931A628B1187CB.jpg)
![Img](assets/screenshots/2024121522513300-879193CD6A8B96CD00931A628B1187CB.jpg) | ![Img](assets/screenshots/2024121523084100-879193CD6A8B96CD00931A628B1187CB.jpg)
![Img](assets/screenshots/2024121522505300-879193CD6A8B96CD00931A628B1187CB.jpg) | ![Img](assets/screenshots/2024121522502300-879193CD6A8B96CD00931A628B1187CB.jpg)
![Img](assets/screenshots/2024121523033200-879193CD6A8B96CD00931A628B1187CB.jpg) | ![Img](assets/screenshots/2024121523070300-879193CD6A8B96CD00931A628B1187CB.jpg)
![Img](assets/screenshots/homebrew.jpg) | ![Img](assets/screenshots/games.jpg)
![Img](assets/screenshots/appstore.jpg) | ![Img](assets/screenshots/appstore_page.jpg)
![Img](assets/screenshots/file_browser.jpg) | ![Img](assets/screenshots/launch_options.jpg)
![Img](assets/screenshots/themezer.jpg) | ![Img](assets/screenshots/web.jpg)
## Bug reports
@@ -40,7 +40,6 @@ MTP can be enabled via the Network menu.
Sphaira has file association support. Let's say your app supports loading .png files, then you could write an association file, then when using the file browser, clicking on a .png file will launch your app along with the .png file as argv[1]. This was primarly added for rom loading support for emulators / frontends such as RetroArch, MelonDS, mGBA etc.
```ini
[config]
path=/switch/your_app.nro
supported_extensions=jpg|png|mp4|mp3
```
@@ -49,17 +48,60 @@ The `path` field is optional. If left out, it will use the name of the ini to fi
See `assets/romfs/assoc/` for more examples of file assoc entries.
## Installing (applications)
Sphaira can install applications (nsp, xci, nsz, xcz) from various sources (sd card, gamecard, ftp, usb).
For informantion about the install options, [see the wiki](https://github.com/ITotalJustice/sphaira/wiki/Install).
### Usb (install)
The USB protocol is the same as tinfoil, so tools such as [ns-usbloader](https://github.com/developersu/ns-usbloader) and [fluffy](https://github.com/fourminute/Fluffy) should work with sphaira. You may also use the provided python script found [here](tools/usb_install_pc.py).
### Ftp (install)
Once you have connected your ftp client to your switch, you can upload files to install into the `install` folder.
## Building from source
You will first need to install [devkitPro](https://devkitpro.org/wiki/Getting_Started).
Next you will need to install the dependencies:
```sh
sudo pacman -S switch-dev deko3d switch-cmake switch-curl switch-glm switch-zlib switch-mbedtls
```
Also you need to have on your environment the packages `git`, `make`, `zip` and `cmake`
Once devkitPro and all dependencies are installed, you can now build sphaira.
```sh
git clone https://github.com/ITotalJustice/sphaira.git
cd sphaira
cmake --preset MinSizeRel
cmake --build --preset MinSizeRel
```
The output will be found in `build/MinSizeRel/sphaira.nro`
## Credits
- borealis
- stb
- yyjson
- nx-hbmenu
- nx-hbloader
- deko3d-nanovg
- libpulsar
- minIni
- GBATemp
- hb-appstore
- haze
- [borealis](https://github.com/natinusala/borealis)
- [stb](https://github.com/nothings/stb)
- [yyjson](https://github.com/ibireme/yyjson)
- [nx-hbmenu](https://github.com/switchbrew/nx-hbmenu)
- [nx-hbloader](https://github.com/switchbrew/nx-hbloader)
- [deko3d-nanovg](https://github.com/Adubbz/nanovg-deko3d)
- [libpulsar](https://github.com/p-sam/switch-libpulsar)
- [minIni](https://github.com/compuphase/minIni)
- [GBATemp](https://gbatemp.net/threads/sphaira-hbmenu-replacement.664523/)
- [hb-appstore](https://github.com/fortheusers/hb-appstore)
- [haze](https://github.com/Atmosphere-NX/Atmosphere/tree/master/troposphere/haze)
- [nxdumptool](https://github.com/DarkMatterCore/nxdumptool) (for gamecard bin dumping and rsa verify code)
- [Liam0](https://github.com/ThatNerdyPikachu/switch-010editor-templates) (for ticket / cert structs)
- [libusbhsfs](https://github.com/DarkMatterCore/libusbhsfs)
- [libnxtc](https://github.com/DarkMatterCore/libnxtc)
- [oss-nvjpg](https://github.com/averne/oss-nvjpg)
- [nsz](https://github.com/nicoboss/nsz)
- [themezer](https://themezer.net/)
- Everyone who has contributed to this project!

View File

Before

Width:  |  Height:  |  Size: 569 B

After

Width:  |  Height:  |  Size: 569 B

View File

Before

Width:  |  Height:  |  Size: 703 B

After

Width:  |  Height:  |  Size: 703 B

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

Before

Width:  |  Height:  |  Size: 783 B

After

Width:  |  Height:  |  Size: 783 B

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/81_libretro_libnx.nro
supported_extensions=p|tzx|t81
database=Sinclair - ZX 81

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/DoubleCherryGB_libretro_libnx.nro
supported_extensions=cgb|dmg|gb|gbc|sgb
database=Nintendo - Game Boy|Nintendo - Game Boy Color

View File

@@ -0,0 +1 @@
supported_extensions=mp3|ogg|flac|wav|aac|ac3|aif|asf|mp4|mkv|m3u|m3u8|hls|vob|avi|dv|flv|m2ts|m2v|m4a|mov|mpeg|mpg|mts|swf|ts|vob|wma|wmv|png|jpg|jpeg|bmp|gif

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/a5200_libretro_libnx.nro
supported_extensions=a52|bin
database=Atari - 5200

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/ardens_libretro_libnx.nro
supported_extensions=hex|arduboy
database=Arduboy Inc - Arduboy

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/arduous_libretro_libnx.nro
supported_extensions=hex
database=Arduboy Inc - Arduboy

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/atari800_libretro_libnx.nro
supported_extensions=xfd|atr|dcm|cas|bin|a52|zip|atx|car|rom|com|xex|m3u
database=Atari - 5200|Atari - 8-bit

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/bk_libretro_libnx.nro
supported_extensions=bin
database=BK-0010/BK-0011

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/bluemsx_libretro_libnx.nro
supported_extensions=rom|ri|mx1|mx2|dsk|col|sg|sc|sf|cas|m3u
database=Microsoft - MSX|Microsoft - MSX2|Coleco - ColecoVision|Sega - SG-1000|Spectravideo - SVI-318 - SVI-328

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/boom3_libretro_libnx.nro
supported_extensions=pk4
database=Doom 3

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/boom3_xp_libretro_libnx.nro
supported_extensions=pk4
database=Doom 3

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/bsnes_hd_beta_libretro_libnx.nro
supported_extensions=smc|sfc|swc|fig|gb|gbc|bs
database=Nintendo - Super Nintendo Entertainment System|Nintendo - Sufami Turbo|Nintendo - Satellaview

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/bsnes_libretro_libnx.nro
supported_extensions=smc|sfc|swc|fig|gb|gbc|bs
database=Nintendo - Super Nintendo Entertainment System|Nintendo - Sufami Turbo|Nintendo - Satellaview

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/cannonball_libretro_libnx.nro
supported_extensions=game|88
database=Cannonball

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/cap32_libretro_libnx.nro
supported_extensions=dsk|sna|zip|tap|cdt|voc|cpr|m3u
database=Amstrad - CPC|Amstrad - GX4000

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/chailove_libretro_libnx.nro
supported_extensions=chai|chailove
database=ChaiLove

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/crocods_libretro_libnx.nro
supported_extensions=dsk|sna|kcr
database=Amstrad - CPC

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/desmume_libretro_libnx.nro
supported_extensions=nds|ids|bin
database=Nintendo - Nintendo DS|Nintendo - Nintendo DS (Download Play)

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/dinothawr_libretro_libnx.nro
supported_extensions=game
database=Dinothawr

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/dosbox_pure_libretro_libnx.nro
supported_extensions=zip|dosz|exe|com|bat|iso|chd|cue|ins|img|ima|vhd|jrc|tc|m3u|m3u8|conf|/
database=DOS

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/dosbox_svn_libretro_libnx.nro
supported_extensions=exe|com|bat|conf|cue|iso|img|/
database=DOS

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/easyrpg_libretro_libnx.nro
supported_extensions=ldb|zip|easyrpg
database=RPG Maker

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/ecwolf_libretro_libnx.nro
supported_extensions=wl6|n3d|sod|sdm|wl1|pk3|exe
database=Wolfenstein 3D

View File

@@ -1,4 +1,4 @@
[config]
path=/retroarch/cores/fbneo_libretro_libnx.nro
supported_extensions=zip|7z|cue|ccd
database=FBNeo - Arcade Games
use_base_name=true

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/fceumm_libretro_libnx.nro
supported_extensions=fds|nes|unif|unf
database=Nintendo - Nintendo Entertainment System|Nintendo - Family Computer Disk System

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/flycast_libretro_libnx.nro
supported_extensions=chd|cdi|elf|bin|cue|gdi|lst|zip|dat|7z|m3u
database=Sega - Dreamcast|Sega - Naomi|Sega - Naomi 2|Atomiswave

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/fmsx_libretro_libnx.nro
supported_extensions=rom|mx1|mx2|dsk|fdi|cas|m3u
database=Microsoft - MSX|Microsoft - MSX2

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/freechaf_libretro_libnx.nro
supported_extensions=bin|chf
database=Fairchild - Channel F

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/freeintv_libretro_libnx.nro
supported_extensions=int|bin|rom
database=Mattel - Intellivision

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/frodo_libretro_libnx.nro
supported_extensions=d64|t64|x64|p00|lnx|lyx|zip
database=Commodore - 64

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/fuse_libretro_libnx.nro
supported_extensions=tzx|tap|z80|rzx|scl|trd|dsk|dck|sna|szx|zip
database=Sinclair - ZX Spectrum +3|Sinclair - ZX Spectrum

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/gambatte_libretro_libnx.nro
supported_extensions=gb|gbc|dmg
database=Nintendo - Game Boy|Nintendo - Game Boy Color

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/gearboy_libretro_libnx.nro
supported_extensions=gb|dmg|gbc|cgb|sgb
database=Nintendo - Game Boy|Nintendo - Game Boy Color

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/gearcoleco_libretro_libnx.nro
supported_extensions=col|cv|bin|rom
database=Coleco - ColecoVision

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/gearsystem_libretro_libnx.nro
supported_extensions=sms|gg|sg|bin|rom
database=Sega - Game Gear|Sega - Master System - Mark III|Sega - SG-1000

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/genesis_plus_gx_libretro_libnx.nro
supported_extensions=mdx|md|smd|gen|bin|cue|iso|sms|bms|gg|sg|68k|sgd|chd|m3u
database=Sega - Game Gear|Sega - Master System - Mark III|Sega - Mega-CD - Sega CD|Sega - Mega Drive - Genesis|Sega - PICO|Sega - SG-1000

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/genesis_plus_gx_wide_libretro_libnx.nro
supported_extensions=mdx|md|smd|gen|bin|cue|iso|sms|bms|gg|sg|68k|sgd|chd|m3u
database=Sega - Game Gear|Sega - Master System - Mark III|Sega - Mega-CD - Sega CD|Sega - Mega Drive - Genesis|Sega - PICO|Sega - SG-1000

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/gpsp_libretro_libnx.nro
supported_extensions=gba|bin
database=Nintendo - Game Boy Advance

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/gw_libretro_libnx.nro
supported_extensions=mgw
database=Handheld Electronic Game

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/handy_libretro_libnx.nro
supported_extensions=lnx|lyx|o
database=Atari - Lynx

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/jaxe_libretro_libnx.nro
supported_extensions=ch8|sc8|xo8
database=CHIP-8

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/jumpnbump_libretro_libnx.nro
supported_extensions=dat
database=Jump 'n Bump

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/lowresnx_libretro_libnx.nro
supported_extensions=nx
database=LowRes NX

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/lutro_libretro_libnx.nro
supported_extensions=lutro|love|lua
database=Lutro

View File

@@ -1,4 +1,4 @@
[config]
path=/retroarch/cores/mame2000_libretro_libnx.nro
supported_extensions=zip|7z
database=MAME 2000
use_base_name=true

View File

@@ -1,4 +1,4 @@
[config]
path=/retroarch/cores/mame2003_libretro_libnx.nro
supported_extensions=zip
database=MAME 2003
use_base_name=true

View File

@@ -1,4 +1,4 @@
[config]
path=/retroarch/cores/mame2003_plus_libretro_libnx.nro
supported_extensions=zip
database=MAME 2003-Plus
use_base_name=true

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/mednafen_lynx_libretro_libnx.nro
supported_extensions=lnx|lyx|o
database=Atari - Lynx

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/mednafen_ngp_libretro_libnx.nro
supported_extensions=ngp|ngc|ngpc|npc
database=SNK - Neo Geo Pocket|SNK - Neo Geo Pocket Color

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/mednafen_pce_fast_libretro_libnx.nro
supported_extensions=pce|cue|ccd|chd|toc|m3u
database=NEC - PC Engine - TurboGrafx 16|NEC - PC Engine CD - TurboGrafx-CD

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/mednafen_pce_libretro_libnx.nro
supported_extensions=pce|sgx|cue|ccd|chd|toc|m3u
database=NEC - PC Engine SuperGrafx|NEC - PC Engine - TurboGrafx 16|NEC - PC Engine CD - TurboGrafx-CD

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/mednafen_pcfx_libretro_libnx.nro
supported_extensions=cue|ccd|toc|chd
database=NEC - PC-FX

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/mednafen_supergrafx_libretro_libnx.nro
supported_extensions=pce|sgx|cue|ccd|chd
database=NEC - PC Engine SuperGrafx|NEC - PC Engine - TurboGrafx 16|NEC - PC Engine CD - TurboGrafx-CD

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/mednafen_vb_libretro_libnx.nro
supported_extensions=vb|vboy|bin
database=Nintendo - Virtual Boy

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/mednafen_wswan_libretro_libnx.nro
supported_extensions=ws|wsc|pc2|pcv2
database=Bandai - WonderSwan|Bandai - WonderSwan Color

View File

@@ -1,4 +1,2 @@
[config]
supported_extensions=nds
database=Nintendo - Nintendo DS

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/melonds_libretro_libnx.nro
supported_extensions=nds|ids|dsi
database=Nintendo - Nintendo DS|Nintendo - Nintendo DS (Download Play)|Nintendo - Nintendo DSi|Nintendo - Nintendo DSi Decrypted|Nintendo - Nintendo DSi (Digital)

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/mesen-s_libretro_libnx.nro
supported_extensions=sfc|smc|fig|swc|bs|gb|gbc
database=Nintendo - Super Nintendo Entertainment System|Nintendo - Satellaview|Nintendo - Game Boy|Nintendo - Game Boy Color

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/mesen_libretro_libnx.nro
supported_extensions=nes|fds|unf|unif
database=Nintendo - Nintendo Entertainment System|Nintendo - Family Computer Disk System

View File

@@ -1,3 +1,2 @@
[config]
supported_extensions=gba|gbc|sgb|gb
database=Nintendo - Game Boy|Nintendo - Game Boy Color|Nintendo - Game Boy Advance

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/mgba_libretro_libnx.nro
supported_extensions=gb|gbc|gba
database=Nintendo - Game Boy|Nintendo - Game Boy Color|Nintendo - Game Boy Advance

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/mrboom_libretro_libnx.nro
supported_extensions=desktop
database=MrBoom

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/mupen64plus_next_libretro_libnx.nro
supported_extensions=n64|v64|z64|ndd|bin|u1
database=Nintendo - Nintendo 64

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/neocd_libretro_libnx.nro
supported_extensions=cue|chd
database=SNK - Neo Geo CD

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/nestopia_libretro_libnx.nro
supported_extensions=nes|fds|unf|unif
database=Nintendo - Nintendo Entertainment System|Nintendo - Family Computer Disk System

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/np2kai_libretro_libnx.nro
supported_extensions=d98|zip|98d|fdi|fdd|2hd|tfd|d88|88d|hdm|xdf|dup|cmd|hdi|thd|nhd|hdd|hdn
database=NEC - PC-98

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/nxengine_libretro_libnx.nro
supported_extensions=exe
database=Cave Story

View File

@@ -0,0 +1 @@
supported_extensions=mp3|ogg|flac|wav|aac|ac3|aif|asf|mp4|mkv|m3u|m3u8|hls|vob|avi|dv|flv|m2ts|m2v|m4a|mov|mpeg|mpg|mts|swf|ts|vob|wma|wmv|png|jpg|jpeg|bmp|gif

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/o2em_libretro_libnx.nro
supported_extensions=bin
database=Magnavox - Odyssey2|Philips - Videopac+

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/opera_libretro_libnx.nro
supported_extensions=iso|bin|chd|cue
database=The 3DO Company - 3DO

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/pcsx_rearmed_libretro_libnx.nro
supported_extensions=bin|cue|img|mdf|pbp|toc|cbn|m3u|ccd|chd|iso|exe
database=Sony - PlayStation

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/picodrive_libretro_libnx.nro
supported_extensions=bin|gen|smd|md|32x|cue|iso|chd|sms|gg|sg|sc|m3u|68k|sgd|pco
database=Sega - Master System - Mark III|Sega - Game Gear|Sega - Mega-CD - Sega CD|Sega - Mega Drive - Genesis|Sega - PICO|Sega - 32X

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/pokemini_libretro_libnx.nro
supported_extensions=min
database=Nintendo - Pokemon Mini

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/potator_libretro_libnx.nro
supported_extensions=bin|sv
database=Watara - Supervision

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/ppsspp_libretro_libnx.nro
supported_extensions=elf|iso|cso|prx|pbp|chd
database=Sony - PlayStation Portable

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/prboom_libretro_libnx.nro
supported_extensions=wad|iwad|pwad
database=DOOM

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/prosystem_libretro_libnx.nro
supported_extensions=a78|bin|cdf
database=Atari - 7800

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/puae2021_libretro_libnx.nro
supported_extensions=adf|adz|dms|fdi|ipf|hdf|hdz|lha|slave|info|cue|ccd|nrg|mds|iso|chd|uae|m3u|zip|7z|rp9
database=Commodore - Amiga|Commodore - CD32|Commodore - CDTV

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/puae_libretro_libnx.nro
supported_extensions=adf|adz|dms|fdi|ipf|hdf|hdz|lha|slave|info|cue|ccd|nrg|mds|iso|chd|uae|m3u|zip|7z|rp9
database=Commodore - Amiga|Commodore - CD32|Commodore - CDTV

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/px68k_libretro_libnx.nro
supported_extensions=dim|img|d88|88d|hdm|dup|2hd|xdf|hdf|cmd|m3u
database=Sharp - X68000

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/quasi88_libretro_libnx.nro
supported_extensions=d88|u88|m3u
database=NEC - PC-8001 - PC-8801

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/quicknes_libretro_libnx.nro
supported_extensions=nes
database=Nintendo - Nintendo Entertainment System

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/race_libretro_libnx.nro
supported_extensions=ngp|ngc|ngpc|npc
database=SNK - Neo Geo Pocket|SNK - Neo Geo Pocket Color

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/reminiscence_libretro_libnx.nro
supported_extensions=map|aba|seq|lev
database=Flashback

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/retro8_libretro_libnx.nro
supported_extensions=p8|png
database=PICO-8

View File

@@ -1,4 +1,3 @@
[config]
path=/retroarch/cores/sameboy_libretro_libnx.nro
supported_extensions=gb|gbc
database=Nintendo - Game Boy|Nintendo - Game Boy Color

Some files were not shown because too many files have changed in this diff Show More