Pass theme list & its entries around by reference rather than copying them.
Fix bug in async icon loading that caused icons to be loaded multiple times.
Original PR by @LiquidFenrir
* change fs to use a FS_Path argument for remake_file and buf_to_file
* more debug information when downloading
* browser caching v1: poc, works and is fast but not ideal
* add preview to cache
* this wasnt meant to be added now
* icons are black, but it's a start
* after testing, info_buffer in load_smdh_icon is for some reason all 0
* working! same speed as pre-threading (I think)
but the icons lag behind a bit.
Still, should allow for infinite themes
* not needed anymore
* fix icons not being loaded when switching modes
* stop trying to load icons if there arent enough entries
* swapping logic almost there...
* only need to update when on the main screen
* fix blind spot and typo
* allow optimizations maybe?
maybe will break stuff. just revert if it's the case
* fix blind spot when going up after cycling
* add swapping when changing 1 screen at a time (left/right)
* not needed anymore, since icon ids are fixed
* simpler scrolling
* dont reload everything when cycling
* other method for storing ids, maybe better logic later
* fix crash
* attempt at better and clearer algorithm for swapping
* optimization, swapping still broken but this was needed
* fix cycling/using left resulting in reversed icons
* fix icons scrolling in reverse
and fix the bug that introduced (same as switch-case method): scroll not following the selected entry when using left/right
* don't break when using left/right near the top/end
* correctly return from failed realloc during entries load
* move freeing the entries and killing the icon updating thread to exit_function
* fix icons being shifted the wrong value when cycling
* only exit using the shutdown screen method when needed
* show simple loading screen for themes and splashes
* only have the thread when needed
should consume less battery for people with low amount of splashes and themes
* fix instructions showing over the "no X found" screen
* fix instructions showing over confirm text
* fix overlapping and going out of bounds with few entries
* add quitting preview and qr mode with B
* add touchscreen controls
* cleaner BETWEEN macro
* only allow changing screens with touchscreen when arrows are visible
* tabs vs spaces
* fix selecting an entry that's not there using the touchscreen
and allow holding for selecting individual entries (not using the arrows)
* fix crash when deleting all entries and downloading one with QR
* add indicator for already installed themes/splashes
threaded as not to slow down initial loading too much, and imo cool effect as they load
* optimization for theme installed check
* make icon swapping thread higher priority to prevent problems with searching the installed themes/splashes
* add indicator with number of themes and selected theme
* add X to reload icons if it breaks
* add touchscreen controls:
- toggle shuffle
- toggle preview
- reload icons
- switch modes
- enable QR
* more usable thread args
* fix crash when closing the application too close to launch
* add hack to solve the scrolling problem.
Warning: will cause some lag for about 1-2 seconds, so I recommend using the jump menu
this will be removed once the bug is figured out
* first step of rewriting: at least it compiles™
* fix tabs/spaces
* fix dabort on load
* fix preview crash
* sorting isnt done outside of loading
* step one of making remake_file useless
* camera/qr code cleanup
* fix dabort when folder is empty, and bring back preview optimization
* fix button for switching modes and show mode when folder is empty
* fix scanning qrs
* no more splash discrimination
* add debug helpers
* fix theme installing
turns out that wasnt such a good idea
* fix battery icon
* mistake
* themeplaza compatibility
* make use of load_data
* don't drink and copy-paste, kids
* fix user-agent
* remove useless
* cleanup includes
* not even used
* add splash buttons
* upgrade buttons drawing
* fix controls while preview is up
* improve positions
If splash.bin and/or splashbottom.bin didn't already exist, splashes would not install.
Also added a line break to separate splash_delete(), for consistency.
Memset doesn't automatically set the entire size of each element, it's necessary to multiply by sizeof(<typename>) if it's larger than 1 byte, which in this case, u16, is (two bytes).
* Broke the "prepare" methods up into smaller methods
* Removed the usage of linked lists and replaced them with arrays. Given
that themes won't be added/removed throughout the execution of the
program, we don't need to be able to dynamically add or remove elements
to the list. In addition, once you got to ~50 themes, it took about .2
seconds to iterate through the entire list, which, while it may not
sound like much, is a huge time sink when you're going through a list.
Being able to randomly access any element in the list at the same speed
is hugely beneficial. The downside to this is we need to keep track of
the number of themes/splashes at all times, and, for splashes, have to
do some weird type magic in order to properly iterate over it. However,
these negatives are outweighed by the speed improvements.
Combination of quality of life improvements, bugfixes and splash support:
* unzip_file now works with any file, not just a theme
* Made linked list nodes generic so they work for both splashes and themes
* Fixed bug in previous commit with deleting the zip file once it was unzipped
* All zips in /Splashes/ are now extracted, as with /Themes/
* Splashes are all added to the linked list properly
* Splashes can be installed given a path, but only works on Luma. Undecided as to whether or not I'm going to change this.
TODO:
* Automatically change the luma configuration to enable splash screens
* MAYBE add support for other CFWs (if there's an interest). Maybe set a folder to extract splashes to in some kind of user settings?