419 Commits

Author SHA1 Message Date
dark98 47ead35010 Track Universal-Core From DarkStore ORG 2022-07-01 05:21:13 +01:00
dark98 f7ef916c3c Update Credits Logo 2022-07-01 05:11:59 +01:00
Josh Shippam e1cf09be0a Update README.md
Universal-Updater -> DarkStore
2022-06-30 07:44:10 +01:00
Dark98 8f65ca00a7 More Univeraal-Updater -> DarkStore 2022-06-28 07:59:22 +01:00
Dark98 5b15ec9274 Initial GH Actions 2022-06-28 05:48:22 +01:00
Josh Shippam c042fb8ed1 Fix Initial Store Downloading 2022-06-28 05:45:22 +01:00
Pk11 af27709fc7 Add nightly auto-update
- Closes #121
2022-06-25 07:13:53 +01:00
Pk11 4474424695 Only error on rmdir if required true 2022-06-24 05:20:07 +01:00
Pk11 387dcba801 Derp fix
part 2...
2022-06-24 05:19:42 +01:00
Pk11 8de1f78ea8 Fix scrolling in online UniStore list 2022-06-24 05:19:18 +01:00
Pk11 1ed2403a11 Remove "message" from scripts
It's already almost completely unused, only used for 3dsx shortcuts, and basically always used for exactly this so better to just put it in UU since then it can be translated
2022-06-24 05:18:04 +01:00
Pk11 65d8ae7043 Fix short release notes not showing
First it's long ones now it's short ones lol
2022-06-24 05:14:27 +01:00
Pk11 470248f722 Left/right to scroll release notes faster 2022-06-24 05:14:02 +01:00
Pk11 a9490eaa5a Clean up formatting 2022-06-24 05:13:33 +01:00
Pk11 dd35c87590 Don't crash on really long release notes
Also wrap URLs and such and don't scroll past the end
2022-06-24 05:13:10 +01:00
Pk11 0a2848158c Add nightly/prerelease warnings 2022-06-24 05:12:16 +01:00
Pk11 c91372f66b Exit UU with START, switch START actions to SELECT 2022-06-24 05:09:35 +01:00
Pk11 6c16faeca7 Default to searching by title 2022-06-24 05:09:06 +01:00
Pk11 5a903adb7d Update for latest libctru 2022-06-24 05:00:55 +01:00
dark98 38e828c1f5 Update Credits 2021-09-17 18:31:02 +01:00
dark98 d8e616cdcb Make build Folder After Cleaning To Fix -j Make Flag 2021-09-16 02:13:57 +01:00
dark98 258936f274 Remove Universal-Updater .github Files 2021-09-16 02:11:47 +01:00
dark98 c894ff9924 Universal-Updater -> DarkStore Part 2
Renamed Strings For DarkStore
Made .store Files Useable
2021-09-09 16:23:22 +01:00
dark98 76b41884c5 Change Default NDS Path 2021-09-05 17:12:48 +01:00
dark98 68937d91dd Universal-Updater -> DarkStore Part 1 2021-09-05 17:11:31 +01:00
Pk11 becaeb4631 Add RetroArch Cores UniStore to list 2021-08-22 13:20:35 -05:00
Pk11 0da467bc66 Update URL for LinuxCat's Store 2021-08-12 05:34:45 -05:00
Pk11 33edafcd20 Update translations 2021-08-10 16:48:06 -05:00
Pk11 c7f3893a3f download.cpp needs to be rebuilt for make citra 2021-07-21 01:14:00 -05:00
Pk11 823f093a5f Add note about make citra 2021-07-21 01:12:09 -05:00
Pk11 b1796023ab Add "make citra" Makefile rule 2021-07-21 01:08:44 -05:00
Pk11 b4a9cffd9b Update issue templates 2021-07-21 00:56:41 -05:00
Pk11 18c5b1249a Fix Universal-DB URL 2021-07-16 23:50:53 -05:00
Pk11 c6da53a44e Fix empty files & directories not being extracted 2021-07-16 13:04:11 -05:00
Pk11 7ce230eb32 Update translations and enable Danish
Also rename "Português" to "Português (Portugal)"
2021-06-17 07:51:21 -05:00
Pk11 e1d16bcfd0 Actually update translations
Didn't stage the files oops lol
2021-06-15 19:51:25 -05:00
Pk11 a06f623cc3 Add Türkçe and update translations 2021-06-15 19:50:40 -05:00
Pk11 ec5e637ce6 Switch back to devkitPro docker (#94)
* Try switching back to devkitpro docker

* checkout@v2 still doesn't work

* Remove testing pacman version listing
2021-05-28 15:52:57 -05:00
Pk11 dcef7ac7ca Change to blender icon 2021-05-27 02:00:19 -05:00
Pk11 baa14561eb Add safety checks for low SD card space (#90)
* Some attempt.

* Enable some-safety-freespace-work nightlies

* Upload elf with nightly

* *Derp fixes.*

* Bye Bye testing things.

* Revert "Upload elf with nightly"

This reverts commit 303968cd78e466a3fcc010915565d8265acaa76a.

* Add safety checks to fcopy

Co-authored-by: StackZ <47382115+SuperSaiyajinStackZ@users.noreply.github.com>
2021-05-26 05:47:51 -05:00
Pk11 bfecbc86af Fix different signedness warning 2021-05-26 03:39:41 -05:00
Pk11 f365f8710d Add safety check to extracting 2021-05-25 22:17:20 -05:00
Pk11 791690fd5a Revert "Switch back to devkitPro docker"
This reverts commit a341f2f9b0.
2021-05-19 17:57:51 -05:00
Pk11 388fb08bc5 Replace 3DEins / 3DZwei sets with UT Game Sets 2021-05-17 04:51:12 -05:00
Pk11 4f01c52859 Update to bannertool 1.2.0 2021-05-13 14:39:06 -05:00
Pk11 a341f2f9b0 Switch back to devkitPro docker 2021-05-13 05:50:35 -05:00
Pk11 11238eea22 Don't track updates for uninstalled apps
Also clean up the funtion a bit
2021-05-01 19:58:46 -05:00
Pk11 376201c17e Rename libarchive headers to hpp (Part 2)
What do you mean these could've and should've been one commit? Clearly these need to be done in two parts and I didn't just forget about this
2021-04-29 23:18:29 -05:00
Pk11 45192c8ff7 Rename libarchive headers to hpp
They work in both, but gotta keep that 100% C++ label on the repo ;P
2021-04-29 23:16:40 -05:00
Pk11 5c9ae70258 Update translations 2021-04-23 20:26:48 -05:00
Pk11 bbb7a36d93 Add Korean to settings
Whoops used the wrong branch
2021-04-23 20:23:13 -05:00
StackZ 2b4e67e469 See desc for more.
[MAKEFILE]: Properly use PATH for Bannertool and Makerom instead of hardcoded to the root directory on Windows.

[QUEUE SYSTEM]: Do not allow going to Home Menu if queue isn't done. Or better said: Show the prompt message with the side effects.
2021-04-19 09:30:59 +02:00
Pk11 65616e8f58 Remove stray backtick 2021-03-29 01:42:44 -05:00
Pk11 936ae68603 Update pacman section 2021-03-29 01:41:52 -05:00
Pk11 279173d8fb Add cppcheck to Makefile
So you can run "make cppcheck" if you want to run it, it needs the $INCLUDE so it's nice in the makefile, and it doesn't affect the rest of building
2021-03-27 18:04:11 -05:00
Pk11 2825e361e3 Update compilation section 2021-03-27 17:58:50 -05:00
Pk11 4c792a1ea0 Fix fonts being too big on TWN/CHN/KOR consoles 2021-03-27 00:14:41 -05:00
Pk11 06086d92da Derp fix
Most of these weren't needed, and it definitely doesn't need to check <= 0 on an unsigned int, but a couple of these do need !empty() checks
2021-03-26 06:13:02 -05:00
Pk11 c95d66f0e4 A bunch of minor tweaks from cppcheck 2021-03-26 06:01:37 -05:00
Pk11 e06d475131 Switch to universalteam/devkitarm 2021-03-24 21:54:54 -05:00
Pk11 79aa09765d Update translations 2021-03-24 18:02:31 -05:00
StackZ 9922d29060 [THEME]: Add Description and show it on the Theme Selector. 2021-03-24 23:16:12 +01:00
StackZ 33866a53f2 Part 2. 2021-03-24 22:25:13 +01:00
StackZ 54447c2537 See desc for more.
- Blend Icons as the TextColor.

- Resize the `Add Selection to Queue` button.
2021-03-24 22:11:51 +01:00
Pk11 0f625eb67c Fix weird alpha in 日本語, 한국어, 中文 (简体), and 中文 (繁體) 2021-03-24 00:32:38 -05:00
Pk11 067be891d7 Allow lower case theme colors 2021-03-24 00:01:40 -05:00
Pk11 798a8bc668 Add touch screen buttons to prompt messages 2021-03-23 18:14:27 -05:00
Pk11 b45adba858 Make theme use objects instead of arrays
Also some minor tweaks to make things less redundant and safer
2021-03-23 18:00:04 -05:00
StackZ cabe2f13f4 Don't set Installed, if installation failed. 2021-03-23 16:49:01 -05:00
StackZ aa58e23c13 Also add Custom Themes to this branch.
I mean, cause why not i guess. xD
2021-03-23 16:46:10 -05:00
StackZ 2b455c2dd0 Improve prompts A LOT. 2021-03-23 13:54:01 +01:00
Pk11 77edd99749 Make JSON reading safer
- Check that the file actually opened before reading it
- If the JSON was discarded, then make just use an empty object
2021-03-23 04:47:49 -05:00
Pk11 5343661069 Don't call downloadFailed() in queue mode
That makes a waitMsg which starts a new frame... which is the same exact problem that caused the last "random" crashing xD
Fixes #76
2021-03-23 04:20:52 -05:00
Pk11 8d0712744e Shorten app description so it fits better in HBL 2021-03-20 20:38:32 -05:00
Pk11 19b0543182 Use images for 中文 (简体), 中文 (繁體), 日本語, and 한국어
Note: ko.png needs to be added to the t3s to be used
2021-03-20 20:16:26 -05:00
Pk11 c6d0f55ffc Update Universal-Core 2021-03-20 18:58:31 -05:00
Pk11 46b17521a7 Use system fonts for Chinese 2021-03-20 17:49:39 -05:00
Pk11 2d0e897dbc Use the correct font for args too 2021-03-19 16:48:04 -05:00
Pk11 40b981f44a Use system region's font instead of always USA 2021-03-19 16:40:19 -05:00
Pk11 36b5d9c528 Add Chinese and fix some bugs (see desc)
- Fix 3dsx in folder setting not being saved on exit
- Fix font download on language selection not having a progress bar
- Also update translations as to have something to test Chinese with
2021-03-19 05:49:53 -05:00
Pk11 cab050e4d9 Try force GitHub to recache the images - part 2 2021-03-18 17:18:47 -05:00
Pk11 0709114448 Try force GitHub to recache the images - part 1 2021-03-18 17:18:22 -05:00
Pk11 cb59e3251a Add alts to images and a couple minor tweaks 2021-03-18 17:15:56 -05:00
Pk11 802112ab62 Update README and remove screenshots from repo
also fix indentation in recommended unistores
2021-03-18 16:24:42 -05:00
StackZ 517d87cbcf Fix U-U not displayin' progress on self update. 2021-03-18 14:38:15 +01:00
Pk11 1014a74248 Derp fix 2021-03-17 18:10:01 -05:00
Pk11 b806e46f29 Properly fix commit messages
* bullet testing
2021-03-17 18:03:44 -05:00
Pk11 2613c07e6b New Crowdin updates (#60)
* New translations app.json (German)

* New translations app.json (Japanese)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (German)

* New translations app.json (Japanese)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Danish)

* New translations app.json (Hungarian)

* New translations app.json (Italian)

* New translations app.json (Lithuanian)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Ukrainian)

* New translations app.json (Bruh)

* New translations app.json (Japanese)

* New translations app.json (French)

* New translations app.json (Ukrainian)

* New translations app.json (Italian)

* New translations app.json (Hungarian)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Portuguese)

* New translations app.json (Portuguese)

* New translations app.json (Portuguese)

* New translations app.json (Bruh)

* New translations app.json (Polish)

* New translations app.json (Hebrew)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Danish)

* New translations app.json (German)

* New translations app.json (Hebrew)

* New translations app.json (Hungarian)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Ukrainian)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (Bruh)

* New translations app.json (German)

* New translations app.json (Hungarian)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Danish)

* New translations app.json (German)

* New translations app.json (Hebrew)

* New translations app.json (Hungarian)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Ukrainian)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Danish)

* New translations app.json (German)

* New translations app.json (Hebrew)

* New translations app.json (Hungarian)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Ukrainian)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (Bruh)

* New translations app.json (Japanese)

* New translations app.json (French)

* New translations app.json (Japanese)

* New translations app.json (French)

* New translations app.json (Italian)

* New translations app.json (Ukrainian)

* New translations app.json (Ukrainian)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Danish)

* New translations app.json (German)

* New translations app.json (Hebrew)

* New translations app.json (Hungarian)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Ukrainian)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Hungarian)

* New translations app.json (Japanese)

* New translations app.json (Spanish)

* Update translations
2021-03-17 00:21:44 -05:00
Pk11 ec5d0e7ab3 Re-enable Portuguese (Portugal) 2021-03-16 05:33:18 -05:00
StackZ eaf82d8849 See desc for more.
1.) Fix Themes touch position.

2.) Properly detect if battery is full charged using `PTMU_GetAdapterState()` and `PTMU_GetBatteryChargeState()` together.
2021-03-15 16:06:10 +01:00
Pk11 9eefef85d4 Fix extras releases not having the commit messages 2021-03-13 23:45:20 -06:00
StackZ afe9ef9aa5 Display Loading Screenshot... if fetching.
ALSO: Add Stack Theme and increase the  depth of the grid selector from 2 to 3.
2021-03-14 05:23:52 +01:00
Pk11 4f89ade8b4 Add token and ID things to crowdin yml 2021-03-13 20:57:57 -06:00
Pk11 bad78f6bb8 Make A open prompts and toggle mode in queue 2021-03-13 16:19:36 -06:00
Pk11 33c4688991 Say "failed", not "succeeded" if extract fails 2021-03-13 16:16:33 -06:00
Pk11 b04cc24b1d Remove unused strings 2021-03-13 02:51:38 -06:00
Pk11 623436598e Add option to put 3DSX files in a folder 2021-03-13 02:30:03 -06:00
Pk11 60e29ddb90 Add queue system with background downloading and much more (#73)
* Do not build here until it is merged.

* WIP: Queue System.

Right now crashes randomly for whatever reason..

* Animate queue spinner more slowly

* Use LightLocks to prevent crashing in the queue

(I hope it's fixed at least)

* Build nightlies in queue-system

* Use version.h for version and specify 7 digits

* Remove unneeded $(CURDIR)

I put that these for testing, but it's not needed

* Multiple Changes, see desc for more.

1.) Theme Implementation.
2.) Show Battery + Time.
3.) Some more work on Queue-System (might still be broke).
4.) Update Copyright to 2021.
5.) Add `%FIRM%` to regex.
6.) Mass Add to Queue.
7.) Search with AND / OR filter.

* Gaaah, not again...

* Remove DoNothing, some LightLock changes, etc

aka
Further improvements to overall system stability and other minor adjustments have been made to enhance the user experience.

* See desc for more.

- Current Queue Entry can now be canceled.

- Fix installed list.

- Display Download Speed.

- BYE BYE Queue LightLock!

* Various adjustments to the queue menu

- Make cancel button slightly smaller
- Right align "Steps: ..." text
- Remove "Current Operation:" text
- Change KB/MB/GB to KiB/MiB/GiB
- Lots of little positioning tweaks
- Fix bug where you could get stuck in the prompt
- Make spinny thing have a ! when action is needed
- Make extracting file increment at the start instead of the end
- Delete dumb VS Code file and gitignore it

* Change to hollow full charge plugged in icon

* Fix the settings positions a bit

* Fix custom font download not having prompt

Also tweak the text positions, I forgot to change them

Co-authored-by: StackZ <47382115+SuperSaiyajinStackZ@users.noreply.github.com>
2021-03-13 01:28:23 -06:00
LinuxCat e52bd33905 adding a default option to the auto language selection (#65)
* adding a default option to the auto language selection

iirc NightScript suggested that a while ago or maybe it was giratina62 i don't remember exactly. 
also this is deleting untranslated languages cause they are useless now that there's a default option.

* Commenting untranslated languages
2021-02-15 19:17:52 +01:00
Pk11 fc26f885ba Don't try to write files if an achive error occurs
also free everything for other errors
2021-01-09 13:42:26 -06:00
Pk11 09d4de2f08 Update readme for recent changes 2021-01-02 23:53:49 -06:00
Pk11 0a1aa09a95 Print file separately from "Currently extracting" 2020-12-31 03:41:20 -06:00
Pk11 d413723968 Update libarchive.a
When I rebuilt using my proper patched version at epicpkmn11/pacman-packages it's different. Not sure why, but probably safer to use this one
2020-12-28 18:32:32 -06:00
Pk11 78f288dfee Update libarchive to v3.5.1 2020-12-28 16:39:40 -06:00
Pk11 b0655cea73 New Crowdin updates (#53)
* New translations app.json (Portuguese, Brazilian)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (Ukrainian)

* New translations app.json (Ukrainian)

* New translations app.json (Ukrainian)

* New translations app.json (Ukrainian)

* New translations app.json (Ukrainian)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Danish)

* New translations app.json (German)

* New translations app.json (Hungarian)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (Bruh)

* New translations app.json (Ukrainian)

* New translations app.json (Spanish)

* New translations app.json (Spanish)

* New translations app.json (Japanese)

* New translations app.json (Russian)

* New translations app.json (Ukrainian)

* New translations app.json (Ukrainian)

* New translations app.json (Ukrainian)

* New translations app.json (Hungarian)

* New translations app.json (Ukrainian)

* New translations app.json (Ukrainian)

* New translations app.json (Italian)

* New translations app.json (Danish)

* New translations app.json (Danish)

* New translations app.json (French)

* New translations app.json (Bruh)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Danish)

* New translations app.json (German)

* New translations app.json (Hungarian)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (Bruh)

* New translations app.json (Ukrainian)

* New translations app.json (German)

* New translations app.json (Hungarian)

* New translations app.json (German)

* New translations app.json (Hungarian)

* New translations app.json (Ukrainian)

* New translations app.json (Japanese)

* New translations app.json (Japanese)

* New translations app.json (Italian)

* New translations app.json (Spanish)

* New translations app.json (Spanish)

* New translations app.json (French)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Danish)

* New translations app.json (German)

* New translations app.json (Hungarian)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (Bruh)

* New translations app.json (Ukrainian)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Russian)

* New translations app.json (Ukrainian)

* New translations app.json (French)

* New translations app.json (Bruh)

* New translations app.json (Danish)

* New translations app.json (German)

* New translations app.json (Hungarian)

* New translations app.json (Spanish)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Danish)

* New translations app.json (German)

* New translations app.json (Hungarian)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (Bruh)

* New translations app.json (Ukrainian)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Ukrainian)

* New translations app.json (Japanese)

* New translations app.json (Ukrainian)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Danish)

* New translations app.json (German)

* New translations app.json (Hungarian)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (Bruh)

* New translations app.json (Ukrainian)

* New translations app.json (Japanese)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Russian)

* New translations app.json (Ukrainian)

* New translations app.json (Spanish)

* New translations app.json (Hungarian)

* New translations app.json (French)

* New translations app.json (French)

* New translations app.json (French)

* New translations app.json (Bruh)

* New translations app.json (Polish)

* New translations app.json (Polish)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (Portuguese, Brazilian)
2020-12-25 02:43:52 -06:00
StackZ 03a562721b Derp fix on spritesheet loadin'. 2020-12-24 22:25:13 +01:00
StackZ c72a6f11b3 See desc for more.
- Update Screenshots.

- Display screenshot / notes icon only, if available.

- Disable languages with small progress.

- Screenshot key is now `Y` instead of `SELECT`.
2020-12-24 03:14:33 +01:00
StackZ 6d0a923186 MainScreen: check this->entries.size() > 0. 2020-12-24 00:20:14 +01:00
StackZ 871d0722eb Just: Release Changelog notes + derp fix. 2020-12-23 23:40:04 +01:00
StackZ a8aae7379b Cancel Shortcut creation if Name == "". 2020-12-23 12:53:03 +01:00
StackZ 07577b0fe2 \n\n's no more break. 2020-12-21 11:00:31 +01:00
StackZ a82491a63d Fix grid scrolling. 2020-12-17 19:27:54 +01:00
Pk11 ded6d4234d Add parental controls (same level as FBI/HBL) 2020-12-06 19:09:38 -06:00
Pk11 f68c6242f5 Fix incorrect alpha in PNG loading
They're actually ABGR, not BGRA, so the left side had missing pixels every few rows
2020-12-03 01:21:27 -06:00
StackZ 64977911e6 See desc for more.
- Add WAV playback back with 10 MiB as max limit.

- Some more Screenshot Menu checks.
2020-12-03 07:19:02 +01:00
Pk11 78d0dad604 UniStore list and screenshots (#54)
* Initial push.

* Fix png loading

* Remove unneeded casts

* Push my progress.

* Improve screenshot display

* Hopefully last commit here before merge?

Co-authored-by: StackZ <47382115+SuperSaiyajinStackZ@users.noreply.github.com>
2020-12-02 14:23:15 -06:00
StackZ 2e2acf819e See desc for more.
- Download Entry can now be an object for having "size".

- Show little box on the top on download list to display the entry, icon + size.

- Add Shortcut icon on download list.
2020-11-24 23:32:26 +01:00
StackZ 0ac9d6f448 Slight changes. 2020-11-16 15:20:35 +01:00
StackZ f08bed5813 WIP: Argument | Shortcut support. 2020-11-16 13:28:45 +01:00
Pk11 24a7b90dea Switch to colored toggle buttons 2020-11-12 14:33:07 -06:00
Pk11 05a9e35032 Spell Українська with latin ï to work in sys font 2020-11-11 12:51:01 -06:00
StackZ cd24742621 Add Custom Font option.
Mostly for proper Ukrainian support.
2020-11-11 02:48:05 +01:00
StackZ 0dc8369bff Woops, fixes and defines. :P 2020-11-07 10:52:08 +01:00
StackZ ee2769b294 Some more ~~insect~~ bug fixes. 2020-11-07 10:03:03 +01:00
StackZ ddbea3ab36 Some inline + remove useless const&. 2020-11-06 02:10:58 +01:00
StackZ 689192e902 Fix an out of bounds access. 2020-11-04 00:23:31 +01:00
Pk11 674a1d2307 New Crowdin updates (#40)
* New translations app.json (Italian)

* New translations app.json (Italian)

* New translations app.json (Spanish)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Polish)

* New translations app.json (French)

* New translations app.json (Russian)

* New translations app.json (Danish)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (Italian)

* New translations app.json (Russian)

* New translations app.json (Polish)

* New translations app.json (Polish)

* New translations app.json (Japanese)

* New translations app.json (Japanese)

* New translations app.json (Italian)

* New translations app.json (Italian)

* New translations app.json (Bruh)

* New translations app.json (Russian)

* New translations app.json (Italian)

* New translations app.json (German)

* New translations app.json (German)

* New translations app.json (German)

* New translations app.json (Portuguese)

* New translations app.json (Portuguese)

* New translations app.json (Hungarian)

* New translations app.json (Hungarian)

* New translations app.json (Hungarian)

* New translations app.json (Hungarian)

* New translations app.json (Hungarian)

* New translations app.json (Hungarian)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Danish)

* New translations app.json (German)

* New translations app.json (Hungarian)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Bruh)

* New translations app.json (German)

* New translations app.json (Japanese)

* New translations app.json (Bruh)

* New translations app.json (Japanese)

* New translations app.json (Japanese)

* New translations app.json (Russian)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Danish)

* New translations app.json (German)

* New translations app.json (Hungarian)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (Polish)

* New translations app.json (Bruh)

* New translations app.json (German)

* New translations app.json (Japanese)

* New translations app.json (French)

* New translations app.json (Russian)

* New translations app.json (French)

* New translations app.json (French)

* New translations app.json (Italian)

* New translations app.json (Italian)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Danish)

* New translations app.json (German)

* New translations app.json (Hungarian)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Bruh)

* New translations app.json (German)

* New translations app.json (Japanese)

* New translations app.json (German)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (French)

* New translations app.json (French)

* New translations app.json (French)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (French)

* New translations app.json (Hungarian)

* New translations app.json (Hungarian)

* New translations app.json (Hungarian)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Danish)

* New translations app.json (German)

* New translations app.json (Hungarian)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Bruh)

* New translations app.json (Japanese)

* New translations app.json (Spanish)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (French)

* New translations app.json (Bruh)

* New translations app.json (Hungarian)

* New translations app.json (Hungarian)

* New translations app.json (Italian)

* New translations app.json (Italian)

* New translations app.json (Russian)

* New translations app.json (Russian)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (Portuguese)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (Portuguese, Brazilian)

* New translations app.json (Spanish)

* New translations app.json (Spanish)

* New translations app.json (Spanish)

* New translations app.json (Spanish)
2020-11-03 17:30:09 +01:00
StackZ fe271afd6c Fix logic of the grid. 2020-11-03 14:53:37 +01:00
StackZ 466fe27d51 See desc for more.
- Removed "beta" of Universal-DB. NOTE: This will only work at 12:00 UTC.

- Fixed downloadFile caused an error, when the folder did not exist.

- Removed sheet.png of the spritesheet, because unneeded.
2020-11-03 08:49:38 +01:00
StackZ b6d1de03c1 See desc for more.
- Add `skip` function.
- Fix dirSelect.
- Move LangSelect to settings.
- Add bars, to keep the U-U style.
2020-11-03 02:41:38 +01:00
Pk11 0748574516 Add Português (Brasil) 2020-11-02 14:46:08 -06:00
StackZ 67f1c6f32c See desc for more.
- Delete file, if download failed. This avoids having a useless file on the SD Card, when the download is not finished.

- Add a spritesheet download icon on Store Selection.
2020-11-02 01:14:10 +01:00
StackZ 06706e00c7 Check if directory exist first on directorySettings.
Also update Screenshots + ReadMe.
2020-11-01 11:53:50 +01:00
StackZ a2f3efc640 See desc for more.
- Added option, to have a 400x214px custom Image as the Background on a UniStore.

- Added a header bar on almost all menus.

- Added GUI Settings.
2020-11-01 04:31:04 +01:00
StackZ c5282a5767 WIP: Copy Progressbar.
Also: More MaxWidth & DownloadRelease JSON accept check.
2020-10-31 07:48:29 +01:00
Pk11 270f683de0 Add Hungarian to settings 2020-10-31 00:35:15 -05:00
Pk11 a187c758b7 Put screenshots in a <details> 2020-10-30 23:42:37 -05:00
Pk11 f95bd4ce6e Change Discord link & spaces between screenshots 2020-10-30 23:26:54 -05:00
StackZ 5a89bc7dca SuperSaiyajinStackZ* 2020-10-31 05:25:10 +01:00
StackZ 7f3f859194 Next progress.
- Added a Toggle Menu for auto updates.

- Left / Right can now scroll on grid to the last / next row.

- Check on MainScreen constructor, if UniStore is valid. If not, download Universal-DB, if not found.

- Reworked the menus some bit.

- Update Screenshots.
2020-10-31 05:00:20 +01:00
StackZ 6aec8dac77 Properly add slash check and fix JPN Lang selection. 2020-10-30 19:16:37 +01:00
StackZ b7fa9c2ba5 Update Screenshot links of ReadMe. 2020-10-30 10:42:20 +01:00
StackZ 400acf94c8 See desc for stuff.
Added Max Width to missing stuff.

Added Screenshots and string fix.

Added Missing Regex stuff.

Added skipCount to promptMessage + added exit function.
2020-10-30 09:23:24 +01:00
Pk11 8e369d2d1f *actually* fix extraction directory making 2020-10-30 02:05:24 -05:00
Pk11 19368872c5 Revert "Fix extraction directory making"
This reverts commit 67a7a8af91.
2020-10-30 01:50:26 -05:00
Pk11 67a7a8af91 Fix extraction directory making 2020-10-30 01:32:09 -05:00
Pk11 6679f01c13 Fix extraction regex
Accidentally removed this in the commit...
2020-10-30 00:12:50 -05:00
Pk11 c20261794e Make extract progress be of the full file 2020-10-30 00:06:24 -05:00
NightScript 4479bdb956 Update README.md 2020-10-29 20:07:33 -07:00
NightScript f0d5d0fca7 ReadME Remake 2020-10-29 20:05:36 -07:00
StackZ 913475eabf Universal-Updater Full Rewrite based of UniStore v3.0.0. (#51)
* No Nightlies for the Full-Rewrite.

* Initial push, i guess.

* Forgot to push the Test UniStore + T3X...

* Use C2D flags for wrapping and centering

* gitignore t3x correctly

* Remove Test Store and hardcode to `sdmc:/3ds/Universal-Updater/stores/Universal-DB.unistore` for now.

* Is functional now.

* *More special checks and work.*

* const <typename T> &.

* Universal-DB, not Universal DB.

* Derp.

* Make 3DSX, NDS & Archive path configurable.

* Last fixes + Fade out screen on exit.

* See Desc. for more.

- Add QR Code scan for downloading UniStores.
- Add new Graphics.
- Some fixes + improvements.

* Fix search filtering, re-sort after search

* Fix update check

* Clear search items with X, not just reset results

* The next progress.

* PLEASE tell me, this is the only error..

Co-authored-by: Pk11 <epicpkmn11@outlook.com>
2020-10-30 03:31:20 +01:00
NightScript 5d38c98698 Ignore readme changes in GA 2020-10-11 21:40:05 -07:00
NightScript c6bb8e6eec Update README.md
- Switch "Discord Channel" to contain the actual name
- Switch to Github Actions instead of Azure Pipelines
- Switch command list to merge devkitarm and libctru into 3ds-dev
2020-10-11 20:28:11 -07:00
Pk11 4393765902 Remove unused variable 2020-09-17 19:18:05 -05:00
Pk11 897faa939e Rename publish_build_twlbot to publish_build 2020-09-17 19:16:42 -05:00
Pk11 2068c7a314 What did I even do
bottom text
2020-09-17 19:00:24 -05:00
Pk11 ede44c2ee7 Clean up unneeed quotes
test
2020-09-17 18:59:16 -05:00
Pk11 da3fb31036 Fix quote marks 2020-09-17 18:49:22 -05:00
Pk11 f76835e25e Whoops, had two commit_message's 2020-09-17 18:41:53 -05:00
Pk11 6bf04f7b74 Always use latest devkitARM image
If it breaks badly we can do an old one, but better to just fix it
2020-09-17 18:40:38 -05:00
Pk11 ec8934bdca Remove checkouts from jobs after first 2020-09-17 18:39:33 -05:00
Manuel Graña 4a5777495e Fixed typo (#48) 2020-09-16 13:40:00 -05:00
Pk11 5ddf089940 Fix a couple things 2020-09-16 13:38:25 -05:00
NightScript 7a4899a425 Merge webhook jobs 2020-09-16 11:01:29 -07:00
Pk11 fb6896c593 Add submodule info 2020-08-23 08:21:48 -05:00
Pk11 966fb4098f Remove azure-pipelines.yml 2020-08-21 10:31:05 -05:00
Pk11 72d5a274ee Fix screenshots & add a bit more to Compiliation 2020-08-21 10:28:46 -05:00
Pk11 982ce3ef9a Update build.yml 2020-08-04 12:39:45 -05:00
Pk11 8b6e6aab58 Use latest dkA docker image 2020-08-04 12:31:46 -05:00
Pk11 a6a467d111 Oops, don't have branches and branches-ignore 2020-07-24 14:49:18 -05:00
Pk11 815c94268a Ignore translation branch 2020-07-24 05:02:22 -05:00
LinuxCat c7340d02bb Set system language to the app on first launch (#42)
* add language on first launch

* add language on first launch

Editing the hpp aswell
2020-07-21 05:19:24 +02:00
NightScript 294cb9d201 Update README.md 2020-07-19 12:37:55 -07:00
StackZ 3557ec936a Keyboard: Use Native System Keyboard. 2020-07-16 23:21:35 +02:00
NightScript aa6dbc30c7 Revert previous commit
I'm dumb
2020-07-15 16:57:43 -07:00
NightScript 4c7ef04c98 Remove 7zip stuff and fix qrcode
AKA: Fix apt packaging
2020-07-15 16:55:26 -07:00
NightScript 32adb06410 Fix TWLBot stuff 2020-07-15 15:50:40 -07:00
NightScript 81199344ff Use older bannertool 2020-07-15 15:43:50 -07:00
NightScript f0d43187e5 Move files to /usr/local/bin
Credits to StackZ for telling me
2020-07-15 15:28:57 -07:00
NightScript 638b6557de Try removing the env stuff (as test) 2020-07-15 15:18:19 -07:00
NightScript d166a5dcca Update dependencies and add in path 2020-07-15 15:15:41 -07:00
NightScript 17ab58809d WIP Github Action workflow 2020-07-15 15:02:05 -07:00
StackZ 2f0c07df6e Add Description to UniStorev2 List. 2020-07-15 23:38:48 +02:00
StackZ dcb7bd66ee Add "showGrid" to UniStoreV2 to select the initial layout. 2020-07-15 21:39:49 +02:00
StackZ dc64c2e2a7 ColorSelection.cpp -> RGBSelection.cpp. 2020-07-15 20:51:17 +02:00
StackZ a145c20a91 Some more RGB overlay stuff. 2020-07-15 20:40:11 +02:00
StackZ 5d89f79d07 Use Bottom BG Color + 0, 0, 0, 190. 2020-07-15 18:45:26 +02:00
StackZ fe15239ac1 Port over new RGB Selection from 3DEins! 2020-07-15 18:23:16 +02:00
Pk11 31b65ee988 v2.5.1 Crowdin Translations.
* New translations app.json (Italian)

* New translations app.json (Italian)

* New translations app.json (Portuguese)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (Danish)

* New translations app.json (Lithuanian)

* New translations app.json (Russian)

* New translations app.json (French)

* New translations app.json (Polish)

* New translations app.json (French)

* New translations app.json (Russian)

* New translations app.json (Japanese)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Spanish)
2020-07-02 15:41:17 +02:00
StackZ 80afbbe19f Increase Script version, add citra to config.
The Citra entry allows to skip the wifi check.
2020-07-01 15:07:29 +02:00
StackZ 54c426032b Add %ARCHIVE_DEFAULT%. 2020-07-01 00:27:04 +02:00
Pk11 ba57bb743b Fix pacman link 2020-06-30 16:24:10 -05:00
StackZ 86b6adef8f Begin to add variables for 3DSX & NDS. 2020-06-30 23:20:47 +02:00
StackZ 85a18eb031 Do Download Speed optional.
Cause I cannot properly fix that now.
2020-06-29 19:28:52 +02:00
StackZ 81f0b0d070 Derp fix and remove FTP from ReadMe. 2020-06-29 01:45:18 +02:00
StackZ 1e2afdaf96 Remove FTP, and fix Download speed crash...? 2020-06-29 01:37:52 +02:00
StackZ 15602637cc In hope to fix the config crashes. 2020-06-28 22:08:52 +02:00
Pk11 cd4db23b85 Fix GBAtemp casing 2020-06-28 01:54:35 -05:00
Pk11 77da0a7139 Add Crowdin badge to readme 2020-06-28 01:54:10 -05:00
StackZ 4ba5682dae Update Credits. 2020-06-27 14:53:40 +02:00
Pk11 02e3114ad8 Universal-Updater v2.5.0 Translations v2.
* New translations app.json (Spanish)

* New translations app.json (Spanish)
2020-06-27 13:45:10 +02:00
StackZ f68613ef06 Some, uhh.. changes? 2020-06-27 09:15:29 +02:00
Pk11 e3cda40b38 Universal-Updater v2.5.0 Translations.
* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Danish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Bruh)

* New translations app.json (Polish)

* New translations app.json (Japanese)

* New translations app.json (Polish)

* New translations app.json (Russian)

* New translations app.json (Russian)

* New translations app.json (Russian)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Danish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Bruh)

* New translations app.json (Russian)

* New translations app.json (French)

* New translations app.json (Japanese)

* New translations app.json (Polish)

* New translations app.json (Spanish)

* New translations app.json (Russian)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Danish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (French)

* New translations app.json (Bruh)

* New translations app.json (Russian)

* New translations app.json (Russian)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Danish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Bruh)

* New translations app.json (Russian)

* New translations app.json (French)

* New translations app.json (Japanese)

* New translations app.json (Japanese)

* New translations app.json (Polish)

* New translations app.json (Bruh)

* New translations app.json (German)

* New translations app.json (Spanish)

* New translations app.json (Spanish)

* New translations app.json (Italian)

* New translations app.json (Portuguese)

* New translations app.json (Italian)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (Danish)

* New translations app.json (Lithuanian)

* New translations app.json (Russian)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (Danish)

* New translations app.json (Lithuanian)

* New translations app.json (Russian)

* New translations app.json (Polish)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (Danish)

* New translations app.json (Lithuanian)

* New translations app.json (Russian)

* New translations app.json (French)

* New translations app.json (Russian)

* New translations app.json (Polish)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (Danish)

* New translations app.json (Lithuanian)

* New translations app.json (Russian)

* New translations app.json (Polish)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (Danish)

* New translations app.json (Lithuanian)

* New translations app.json (Russian)

* New translations app.json (French)

* New translations app.json (French)

* New translations app.json (Japanese)

* New translations app.json (Japanese)

* New translations app.json (Japanese)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (Danish)

* New translations app.json (Lithuanian)

* New translations app.json (Russian)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (Danish)

* New translations app.json (Lithuanian)

* New translations app.json (Russian)

* New translations app.json (Japanese)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (French)

* New translations app.json (Danish)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Polish)

* New translations app.json (Portuguese)

* New translations app.json (Bruh)

* New translations app.json (Lithuanian)

* New translations app.json (Russian)

* New translations app.json (German)

* New translations app.json (Japanese)

* New translations app.json (German)

* New translations app.json (French)

* New translations app.json (Bruh)

* New translations app.json (Polish)

* New translations app.json (Polish)

* New translations app.json (Russian)

* New translations app.json (Russian)

* New translations app.json (Russian)
2020-06-26 15:19:31 +02:00
StackZ b7f1f6d736 Add support for all script-functions. 2020-06-21 18:31:24 +02:00
StackZ 91615d7891 WIP: Script-Creator! 2020-06-21 16:41:48 +02:00
StackZ 984d363533 Add startup splash on first boot of U-U. 2020-06-21 12:46:32 +02:00
StackZ 83656cff2e damnit. 2020-06-21 09:13:08 +02:00
StackZ d6d2c5a185 Probably last actual UniStore v2 work? 2020-06-21 08:32:08 +02:00
StackZ cd6b01d4d1 update nlohmann::json to v3.8.0. 2020-06-21 07:14:17 +02:00
StackZ 9f23dba636 Fix touch on Category selection. 2020-06-21 07:07:27 +02:00
StackZ 79f60bd365 Switch to []. 2020-06-20 23:59:23 +02:00
StackZ 9435249694 Switch over to last_updated. 2020-06-20 23:30:51 +02:00
StackZ 34ade17556 WIP: Display if update is available on UniStore v2!
Use `updates.json` for it in `sd:/3ds/Universal-Updater/`.
2020-06-20 23:17:28 +02:00
StackZ 4004cb9e25 Do not add +1 now. 2020-06-20 21:10:28 +02:00
StackZ c1feda24ad Access new UniStore with version == 2. 2020-06-20 21:06:16 +02:00
StackZ 9860ea9719 Add Category search menu. 👀 2020-06-20 16:37:03 +02:00
StackZ 7de012c2a2 UniStore V2 grid fixes. 2020-06-20 15:52:59 +02:00
StackZ 05e6e7bd55 Derp fix. 2020-06-20 15:29:21 +02:00
StackZ 50e4aa99e0 Fully rewrite config. 2020-06-20 15:22:50 +02:00
StackZ 7972fd483a Add search menu. 2020-06-19 16:48:05 +02:00
StackZ 6163891c63 Do search & reset to dropdown menu. 2020-06-19 15:52:20 +02:00
StackZ a5ea3087b1 Do some stuff.
- Display Background for DropDownMenu.
- Fix copy paste dropdown touch mistake.
- Display 15 Entries on the grid.
- If possible, keep selector on the same position on page switch.
2020-06-19 14:47:11 +02:00
StackZ e03cf47b67 Add Searching in UniStore v2! 2020-06-19 12:56:12 +02:00
StackZ 62e16be262 support any size up to 48px. 2020-06-19 12:10:11 +02:00
StackZ eed89ca54a Add support for 32x32 images. 2020-06-19 11:30:24 +02:00
StackZ e8421ae69f Initial sorting commit.
This is not perfect yet and still needs work.
2020-06-19 10:32:17 +02:00
StackZ c6f0798196 I do not like if(..). 2020-06-19 05:13:20 +02:00
StackZ 2641e4922b UniStore v2! (#36)
* Do not build here.

* WIP: UniStoreV2!

This implementation is ugly and a big cleanup is needed.

* [UniStoreV2]: Add `Lang::get(...)`.

* Add back UniStore autobooting.

* UniStoreV2: Add List Layout.

* Some more UniStore work.

Also constify vector's.

* Some more spritesheet checks.

* oops.. forgot to do `Config::fading`.

* Display UniStore version on the Store list bar.

* version now needs to be `0` or `1` or not included.

versions with 2, 3, 4 and up shows an error now.

* You can now also scroll to the next page with D-Pad Left/D-Pad Right!

* Last fix before merge?
2020-06-19 04:54:05 +02:00
Pk11 d86f612d09 Update credits 2020-06-07 01:45:13 -05:00
Stackie a08c0afa62 Make progressbar optional. 2020-06-03 15:03:28 +02:00
Stackie 9e84ed3423 First try on cURL download speed display.
Needs testing tho and I hope I did it right?
2020-05-31 13:37:36 +02:00
Stackie b746d7a4aa Add ## Translations to the ReadMe. 2020-05-30 05:07:36 +01:00
StackZ 965eeba3a9 Oops, FTP Screen didn't had a return;. 2020-05-29 08:14:24 +02:00
Stackie a0251da39f Crash fix attempt - Successfully! (#32)
* Do not build here, since this could potential crash more things.

* Crash fix!

Co-authored-by: StackZ <47382115+SuperSaiyajinStackZ@users.noreply.github.com>
2020-05-29 07:28:08 +02:00
StackZ 8a16751a8f Do NOT allow fade effects for now. 2020-05-27 14:38:14 +02:00
StackZ a320b5770e Oops. 2020-05-27 13:52:33 +02:00
StackZ 779a7c6479 Add Fade effects.
Also change me to `SuperSaiyajinStackie`.

Also update for latest Universal-Core changes.
2020-05-27 13:49:37 +02:00
StackZ 6e085dddcb Oops, fix Get Scripts crash. 2020-05-13 23:08:33 +02:00
StackZ 7ce398cc23 Fix the multiple definitions error.
I don't know why it worked before like that.. but after updating devkitARM etc it seems to cause compilation issues.
2020-05-11 02:24:12 +02:00
StackZ 0d0647038b 00ps. 2020-05-06 06:41:39 +02:00
StackZ c8289ff632 Press L/R for page forward scroll.
Also do keyDelay as a setting instead of hardcode to 3 (fast) 6 (slow).
2020-05-06 06:27:25 +02:00
StackZ 1c2a0de856 Make Polish selectable. 2020-05-06 05:30:50 +02:00
Pk11 6183e3f5f4 New Crowdin translations (#28)
* New translations app.json (Polish)

* New translations app.json (Polish)
2020-05-05 15:08:36 -05:00
Pk11 45afa9300f New translations app.json (Spanish) (#27)
Forgot to sync Crowdin 🤦‍♀️
2020-04-28 14:59:28 -05:00
Pk11 df45580365 New Crowdin translations (#21)
* New translations app.json (French)

* New translations app.json (Russian)

* New translations app.json (Russian)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (French)

* New translations app.json (Japanese)

* New translations app.json (Bruh)

* New translations app.json (Spanish)

* New translations app.json (Danish)

* New translations app.json (Danish)

* New translations app.json (Danish)

* New translations app.json (Russian)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Danish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (Danish)

* New translations app.json (German)

* New translations app.json (Japanese)

* New translations app.json (Portuguese)

* New translations app.json (Japanese)

* New translations app.json (Russian)

* New translations app.json (Bruh)
2020-04-28 14:57:17 -05:00
StackZ 0980cc969e Make updateSelf a optional boolean.
Should fix sometimes booting into TWiLight Menu++ for some reason.
2020-04-28 14:51:37 +02:00
StackZ 7d8fb7eb5d Display Percentage on Installing & Extracting.
Also add progressbar for Installing & convert `cia.c` to `cia.cpp` for `new`.
2020-04-28 14:35:42 +02:00
Epicpkmn11 59dda01f00 Only increase filesExtracted once per file... 2020-04-27 23:37:22 -05:00
Epicpkmn11 c84ef3dca5 Improve extraction 2020-04-27 23:25:20 -05:00
StackZ ce4c6bd6d4 Brug. 2020-04-24 03:19:21 +02:00
StackZ b16296af60 Improve Extracting & Add progressbar. 2020-04-24 03:01:25 +02:00
StackZ 994f62799c WIP: Credits & Language Screen Rewrite. 2020-04-09 04:06:02 +02:00
StackZ 6bab9b0e32 Update Credits. 2020-04-05 19:51:02 +02:00
StackZ 7197487d2d See Description for changes.
- Remove GodMode & deleteTitle function.
- Add a new Bar & Selector Graphic.
- Change Color Selector UI.
2020-04-04 16:50:18 +02:00
StackZ cae6dc5160 Properly refresh SelectFilePath(...);. 2020-03-26 23:11:42 +01:00
Pk11 d24a8e476e v2.3.1 Crowdin Translations.
* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (German)

* New translations app.json (Japanese)

* New translations app.json (Japanese)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (Japanese)

* New translations app.json (Japanese)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (Spanish)

* New translations app.json (Spanish)

* New translations app.json (Japanese)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (German)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (German)

* New translations app.json (Japanese)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (Bruh)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (German)

* New translations app.json (Japanese)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Japanese)

* New translations app.json (Bruh)
2020-03-23 16:20:31 +01:00
StackZ 44db400cbc Add copy & move & more error checks. 2020-03-21 06:48:05 +01:00
StackZ 3fc7aa93a3 Derp fix on SelectRelease. 2020-03-21 05:21:07 +01:00
StackZ 37748b8e22 Some changes. 2020-03-21 05:02:16 +01:00
StackZ 73c495db4f Begin to add checks for Scripts. 2020-03-21 03:49:21 +01:00
Pk11 23aab6ada9 Download previous versions (#20)
* WIP: Start adding downloading pervious versions

* Oops this was in here

* Properly add Download previous Releases.

* Finally fix it.

Co-authored-by: StackZ <47382115+SuperSaiyajinStackZ@users.noreply.github.com>
2020-03-20 03:46:09 -05:00
StackZ 95cb91cc5d WIP: DropDown Menu. 2020-03-11 16:18:54 +01:00
StackZ 696612757f Fix FlameKat53 in Credits. 2020-03-10 20:21:31 +01:00
StackZ 4a1528af01 Derp. 2020-03-10 12:13:54 +01:00
StackZ 8892ae8613 Add Universal-Core & current StackZ Image. 2020-03-10 12:05:39 +01:00
StackZ b0851e788f Refresh the ScriptBrowse!
Also derpy.
2020-03-10 11:04:45 +01:00
StackZ ff2226c4c0 Add delete Icon. 2020-03-10 10:47:42 +01:00
StackZ 95a714012e More Customizable colors! 2020-03-09 20:28:33 +01:00
StackZ 6c26f2ae05 Whoops, forgot about the autoboot ones. 2020-03-09 16:28:56 +01:00
StackZ becb99cdd3 Only save config if changes are made. 2020-03-09 16:25:56 +01:00
StackZ 1a20cc50f3 WIP: Add Glossary and some cleanup. 2020-03-08 17:03:21 +01:00
StackZ 9998748baa DERP. 2020-03-06 18:14:19 +01:00
StackZ 3a659fd768 Add Autoboot into a script. 2020-03-06 18:10:02 +01:00
StackZ 05d809e0bc Read description for changes.
- Add Script Deletion.
- Display "This script does not exist." if script does not exist on ScriptBrowse.
- Display "Refreshing List..." if you have more scripts.
2020-03-06 15:59:14 +01:00
StackZ 331a348846 Dangit. 2020-03-04 09:34:58 +01:00
StackZ 526cecadfd Add Autoboot UniStore. 2020-03-04 09:31:27 +01:00
StackZ 1c2c3dc675 Add Enable GodMode setting.
BE CAREFUL WITH THIS!!!
2020-03-01 23:11:48 +01:00
StackZ 2142c1eb9c Only allow deleteTitle when GodMode is enabled. 2020-03-01 21:34:13 +01:00
StackZ 1bdcf008bf Add deleteTitle and bootTitle.
**ONLY USE "DELETE TITLE" WHEN NEEDED!!!!!!!!!!!!!**
2020-03-01 10:42:59 +01:00
Pk11 3c2ee7adb2 v.2.3.0 Crowdin Translations.
* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (German)

* New translations app.json (Japanese)

* New translations app.json (Bruh)

* New translations app.json (Lithuanian)

* New translations app.json (Lithuanian)

* New translations app.json (Spanish)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Portuguese)

* New translations app.json (Portuguese)

* New translations app.json (French)

* New translations app.json (Bruh)
2020-02-17 20:59:56 +01:00
SuperSaiyajinStackZ 126a46ffd7 Use the new Scripts repo. 2020-02-17 19:41:50 +01:00
Epicpkmn11 ba16c88113 Fix release QR using extras repo tag 2020-02-08 01:44:13 -06:00
StackZ 09be8e0b94 Switch over to Universal-Core. (#18)
* Don't build here.

* WIP: Switch to Universal-Core.

* Update Submodule repo & azure-pipelines.
2020-02-08 06:20:50 +01:00
StackZ 0ef5d2c5ab Improve CIA installing speed. 2020-01-27 20:32:30 +01:00
StackZ dfda5c5088 Add Contributions Section to ReadMe. 2020-01-27 02:10:50 +01:00
StackZ f00334b9da Merge pull request #17 from mariohackandglitch/master
Improved download code. (Multithreaded)
2020-01-27 01:49:58 +01:00
PabloMK7 c8bfedee76 Improved download code. (Multithreaded) 2020-01-27 01:36:19 +01:00
Pk11 0ca7cf6cb9 Make release QE 2020-01-19 22:15:45 -06:00
SuperSaiyajinStackZ 47bbcf2917 Animation time? 😛
I just ripped the animation selector code from LeafEdit for it, because it's basically the same like LeafEdit because of Rectangles.
2020-01-14 18:24:39 +01:00
StackZ 021f1ebabd Delete Stores with <SELECT>. 2020-01-06 08:46:52 +01:00
StackZ 3121f82d61 Update Copyright Year. 2020-01-05 13:48:20 +01:00
StackZ b69bb9d768 UniStore changes. 2020-01-05 13:22:38 +01:00
Pk11 d5a8844891 v2.2.0 Crowdin Translations.
* New translations app.json (Portuguese)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (German)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (German)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (Italian)

* New translations app.json (Italian)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (German)

* New translations app.json (Bruh)

* New translations app.json (Russian)

* New translations app.json (Italian)

* New translations app.json (Italian)

* New translations app.json (Spanish)

* New translations app.json (Japanese)

* New translations app.json (Japanese)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (German)

* New translations app.json (Russian)

* New translations app.json (Japanese)

* New translations app.json (Bruh)

* New translations app.json (Spanish)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (French)

* New translations app.json (French)

* New translations app.json (Italian)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (German)

* New translations app.json (Russian)

* New translations app.json (French)

* New translations app.json (Japanese)

* New translations app.json (Bruh)

* New translations app.json (Spanish)

* New translations app.json (Portuguese)

* New translations app.json (Portuguese)
2020-01-04 02:10:47 +01:00
StackZ a3a1fd38dd Remove TAB cause useless in U-U's case. 2020-01-04 00:13:38 +01:00
StackZ 5551317158 Add Unicode Symbols for Keyboard.
And fix Settings.
2020-01-03 23:41:05 +01:00
StackZ 21f7f2e355 Custom Buttons possible! ( ͡° ͜ʖ ͡°) 2020-01-03 09:39:54 +01:00
StackZ 772896f721 Ughh.. sorry. ^^" 2020-01-03 07:32:50 +01:00
StackZ 8fd1c9ad60 Hopefully *Center* everything properly. 2020-01-03 07:19:28 +01:00
Pk11 9803bdc90a Fix centered draws without a max width
(probably ;P)
2020-01-02 23:50:31 -06:00
StackZ f24e7375fe custom Store BG support! ( ͡° ͜ʖ ͡°) 2020-01-02 23:18:16 +01:00
StackZ a509accd12 oopsie.. I did draw it after the Title/entry amount. ;P 2020-01-02 12:15:48 +01:00
StackZ 7a8dbea050 Draw Icons first, then the text to allow a possible background. ;P 2020-01-02 12:12:57 +01:00
StackZ fab73fc363 Do Credits extern from Settings. 2020-01-02 10:00:36 +01:00
StackZ 5705ad10e2 Add WiFi Checks for things, which need it.
For example by updating Stores or the store search download functions.
2020-01-02 08:44:27 +01:00
StackZ aa85ea9104 Some Keyboard changes. 2020-01-02 08:28:13 +01:00
StackZ 82c15755b4 Ehh.. do the same for Full URL, because otherwise it looks weird. 2020-01-02 08:04:34 +01:00
StackZ 250499ce37 Last new implemented thing for v2.2.0. 2020-01-02 07:25:00 +01:00
StackZ 6c3b5fc31a WIP Credits Screen Rewrite. 2020-01-01 03:45:14 +01:00
StackZ bc07670b6e update the Script Creator screen for the latest GUI changes.
**Still not usable! I have to figure out a lot of things.**
2019-12-31 20:31:07 +01:00
StackZ 3ed4f9afe6 Add Feature Request & Bug report template. 2019-12-31 03:01:28 +01:00
StackZ a10b9daa97 Remove leftovers from the old TinyDB screen.
forgot to remove it, because the part is already in gui.cpp.
2019-12-30 07:15:01 +01:00
StackZ e95b48011a ~~Cleanup~~ Changes. (#14)
* No builds allowed here as always on other branches, lmao.

* Changes. ;)
2019-12-30 04:59:16 +01:00
StackZ cfd5a54b1a Fix and remove unneded strings. 2019-12-29 21:32:56 +01:00
StackZ d28194d28c Implement Universal-Store [UniStore] 3DS side. (#13)
* WIP App store. ;P

* Make the FileBrowse look like Scripts Screen.

* Add *all* Script Functions for the App Store.

* WIP; Store Selection & Store Screen.

To-Do: Big cleanup and remove of duplicate stuff.

* Some UniStore work.

* :bigBruh:.

* Add Spritesheet with Icon support.

* Add a Store Prepare message, just in case it takes longer.

* ~~Not really Camera stuff, just UniStore work.~~ (#12)

* We don't want Nightly builds here.

* Add UniStore Icon.

* New banner by https://github.com/TotallyNotGuy

* Add Buttons for a prompt & update icon.

* Update README.md to be more descriptive and stuff

* Update README.md

* Add updating the spritesheet too.

* Only update stores, if needed things exist!

* Make Storepath changeable.

* Change App Description.

* Display `Title` as well.

* You can now download .unistore files by entering a URL!

Co-authored-by: FlameKat53 <flame9804@yahoo.com>

* This should fix all warnings.

Also add posX and posY for the Icons in UniStore.

* Last changes for UniStore.

Co-authored-by: FlameKat53 <flame9804@yahoo.com>
2019-12-29 07:52:45 +01:00
StackZ b6d6e6357a Add second Settingspage and make bars changeable. 2019-12-25 23:18:09 +01:00
StackZ 0fb5d03a87 Add Script path Selection inside U-U!
Press <Y> inside the Settings Sub Menu to select it.
2019-12-25 21:35:20 +01:00
StackZ 6db2c2ab41 Move Many Thanks to: a little bit above. 2019-12-24 06:08:21 +01:00
StackZ 491eda5e23 Fix credits screen. ;P 2019-12-24 06:04:26 +01:00
StackZ c544143fcf v2.1.0 can come! 2019-12-24 05:28:22 +01:00
StackZ 2a652ca97c Add touch for Color page rectangles. 2019-12-24 04:00:34 +01:00
StackZ f3d5706159 Fix a few problems. 2019-12-24 03:53:02 +01:00
Pk11 1ef274988e Crowdin Translations for v2.1.0.
* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Bruh)

* New translations app.json (Japanese)

* New translations app.json (Japanese)

* New translations app.json (Spanish)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Bruh)

* New translations app.json (Spanish)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Bruh)

* New translations app.json (Italian)

* New translations app.json (Italian)

* New translations app.json (Lithuanian)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (German)

* New translations app.json (Bruh)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Bruh)

* New translations app.json (Lithuanian)

* New translations app.json (Italian)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Japanese)

* New translations app.json (Bruh)

* New translations app.json (Spanish)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Bruh)

* New translations app.json (Italian)

* New translations app.json (Italian)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Bruh)

* New translations app.json (Japanese)

* New translations app.json (Spanish)

* New translations app.json (Lithuanian)

* New translations app.json (Russian)

* New translations app.json (French)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (Bruh)

* New translations app.json (German)

* New translations app.json (Japanese)

* New translations app.json (Spanish)

* New translations app.json (Russian)

* New translations app.json (Bruh)

* New translations app.json (German)

* New translations app.json (Spanish)

* New translations app.json (Italian)

* New translations app.json (Italian)

* New translations app.json (Lithuanian)

* New translations app.json (French)

* New translations app.json (French)

* New translations app.json (Portuguese)

* New translations app.json (Portuguese)
2019-12-24 02:01:44 +01:00
StackZ 71e4ff0939 Fix Crashes when touching non existing entry positions. 2019-12-24 01:03:43 +01:00
StackZ c092c63efe Add viewMode change icon. 2019-12-24 00:21:46 +01:00
StackZ 7351204b9a my latest work. 2019-12-23 21:10:22 +01:00
SuperSaiyajinStackZ 350401b357 Remove downloadToRAM param.
And make Universal-Updater fully touch usable.
2019-12-23 01:10:26 +01:00
SuperSaiyajinStackZ 34bcfd113b ScriptBrowse: Press Y to download all Scripts.
TinyDB: Downloads under 30 MB will download to RAM.
2019-12-23 00:01:41 +01:00
SuperSaiyajinStackZ 5284f8c961 Uhh.. derpy on TinyDB Screen, lol. 2019-12-22 22:43:00 +01:00
SuperSaiyajinStackZ 14b93d286e Add touch for: Scriptlist, Get Scripts and TinyDB. 2019-12-22 22:37:08 +01:00
SuperSaiyajinStackZ b723836397 Fix crash. 2019-12-22 21:47:44 +01:00
SuperSaiyajinStackZ 3ebdb7e95d *Only* open valid Scripts. 2019-12-22 17:49:23 +01:00
SuperSaiyajinStackZ 11e7664706 Add downloadToRAM as a param.
To-Do: Maybe cleanup or something?
2019-12-22 16:14:55 +01:00
SuperSaiyajinStackZ 9e87033aff Change the way, how the extract progress looks. 2019-12-22 03:25:12 +01:00
SuperSaiyajinStackZ 5f5fcc3f24 Add Arrows for Entry Selection stuff. 2019-12-22 00:21:53 +01:00
Epicpkmn11 fb1d00049c Improve spacing of 7 entries/screen lists 2019-12-21 16:30:24 -06:00
Epicpkmn11 e8c5e345c5 Set extractingFile to name of current file
(forgot since was unused)
2019-12-21 16:27:21 -06:00
Epicpkmn11 ccf19f777d Extraction should be working better now 2019-12-20 15:36:43 -06:00
StackZ 0a308c43e8 A little Script Creator work and little checks. (#9)
* No builds allowed here.

* Try something.

* Next work.

* Add some Logging stuff for testing purpose.

* Ok, this should log it priperly.

* Replace MainMenu with Screen Selection.

* Redo Screen Logic.

* Switch back to old MainMenu.

* Only access Scriptlist, when Scripts are found.

Hopefully avoid crashes with that.

* Remove unused String, because we use the MainMenu again.
2019-12-17 19:22:39 +01:00
SuperSaiyajinStackZ 5d80ec6111 It's StackZ now, not VoltZ. 2019-11-25 13:57:14 +01:00
VoltZ 8fb5b7b711 Add new bars and fix Text Positions for it.
-> Bar Textures from Universal-Manager. Thanks TotallyNotGuy for the awesome Bar Textures!
2019-11-22 23:17:21 +01:00
VoltZ 0c300aed09 Some cleanup. 2019-11-20 20:41:29 +01:00
VoltZ 348b29910a Whoopsie.. Fix files not deleting on TinyDB Screen? 2019-11-20 19:57:58 +01:00
VoltZ f00de2807c Add a Fade in Effect for Startup. 2019-11-17 23:43:42 +01:00
VoltZ 5e5658cb75 Music Path can be changed in the JSON now. 2019-11-17 23:03:52 +01:00
VoltZ 5f5669678d Add Initial Music Playback, because I just feel like doing it. 😛
Put `Music.wav` to `sdmc:/3ds/Universal-Updater/`. **Warning**: The Wav File should not be larger than 13 / 14 MB, otherwise it will crash.
2019-11-17 22:34:04 +01:00
VoltZ 2921ce0b2d Make the progressbar color Customizable.
Scripts can have their own progressbar color as well.
2019-11-17 04:59:33 +01:00
Stefan Schnitzler 99e09bd17c simple visual progress bar (#7)
* download files directly to sd instead of a buffer

- this fixes running out of memory while downloading large files

* simple visual download progressbar
2019-11-17 02:30:30 +01:00
Stefan Schnitzler 3e626f1046 download files directly to sd instead of a buffer (#6)
- this fixes running out of memory while downloading large files
2019-11-16 22:26:14 +01:00
VoltZ ddda8464f8 My work until I got extremly annoyed.
Next work on the Script Creator maybe tomorrow or so.
2019-11-16 01:39:20 +01:00
VoltZ bd25846c4d Simulate a progressbar. (For testing purpose) ( ͡° ͜ʖ ͡°)
Press Select in the MainMenu, to show the progressbar. This will get removed after the download progressbar is implemented.
2019-11-15 19:13:41 +01:00
VoltZ bb2cecc622 Add "VIEWMODE" to config. 2019-11-13 23:33:59 +01:00
VoltZ 6a12495e59 Fixes from mister Whoopsie. 2019-11-13 23:02:54 +01:00
VoltZ c71c3c2c66 TinyDB Screen work!
Display much more informations! :)
2019-11-13 21:46:11 +01:00
VoltZ 1a50afbbed Some next TinyDB Screen work.
To-Do: Figure out how to handle that info stuff from the arrays.
2019-11-12 17:45:00 +01:00
VoltZ 9100258f9e Derp. 2019-11-12 10:29:07 +01:00
VoltZ ce426bb7bb Add Credits Screen and a Spritesheet. ;P 2019-11-12 10:24:38 +01:00
VoltZ 67694a5f96 The progress which I did.
I continue later.
2019-11-11 19:43:00 +01:00
Epicpkmn11 955b644ad4 Fix regex file names in extract
~~this code kinda sucks and should be redone~~
2019-11-10 13:06:17 -06:00
VoltZ 08b962b560 Switch to JSON.
Custom Path's and Colors needs to be redo for this.
2019-11-10 15:53:04 +01:00
VoltZ 18733e7a9b Do the same mode on the ScriptBrowse as well! 2019-11-10 13:48:11 +01:00
VoltZ 1933017e60 Add a new mode for the Scriptlist. :P 2019-11-10 13:12:38 +01:00
VoltZ 2a0c6f73f0 Cleanup! 2019-11-09 13:25:06 +01:00
Pk11 bbf8c0f21a New Crowdin translations (#3)
* New translations app.json (Portuguese)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Italian)

* New translations app.json (Italian)

* New translations app.json (Bruh)

* Bruh

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Bruh)

* New translations app.json (German)

* New translations app.json (German)

* New translations app.json (Russian)

* New translations app.json (Russian)

* New translations app.json (French)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (Italian)

* New translations app.json (Lithuanian)

* New translations app.json (Lithuanian)
2019-11-09 03:10:19 +01:00
VoltZ c645e87c4b Update ScriptBrowse. ;P
I think this is a better Design of it?
2019-11-09 02:32:17 +01:00
VoltZ 292a980041 Add timeMsg Function. 2019-11-09 01:47:55 +01:00
Epicpkmn11 27a393217d Fix script browse colors 2019-11-07 23:30:45 -06:00
VoltZ a0ee0481ec Add FTP. 2019-11-08 03:20:30 +01:00
VoltZ b10cc33a99 Woopsie.. haha. 2019-11-08 01:48:49 +01:00
VoltZ 4024901a6b Update Language Screen for Bruh and Русский. 2019-11-08 01:30:46 +01:00
VoltZ 1715b957a8 Properly update the outdated Rectangles, after downloading. Thanks Pk11! 2019-11-07 05:16:55 +01:00
VoltZ efdfda7d78 Fast Scroll! 2019-11-07 03:59:04 +01:00
Pk11 a74a91590c Crowdin Language Pack Number 2. (#2)
* New translations app.json (Lithuanian)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Spanish)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Lithuanian)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Italian)

* New translations app.json (Italian)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Spanish)

* New translations app.json (Portuguese)

* New translations app.json (Portuguese)

* New translations app.json (Japanese)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Spanish)

* New translations app.json (Lithuanian)

* New translations app.json (Japanese)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Japanese)
2019-11-07 03:15:38 +01:00
VoltZ 973e739f1a Show Red/Green Rectangles in 20x20, to see the current state. 2019-11-07 02:55:26 +01:00
VoltZ ec37b92b23 Derp fix. screenPos+selection caused it to softcrash for me. 2019-11-07 01:39:16 +01:00
Epicpkmn11 17480e8105 Update script info json path 2019-11-06 14:56:38 -06:00
Epicpkmn11 330d3e43c5 Wait for a VBlank at the end of each frame 2019-11-06 14:28:28 -06:00
Epicpkmn11 ea40de7130 Revert "Set keyRepeatDelay to 12 instead of 6"
This reverts commit 2e0b5352ae.
2019-11-06 14:27:49 -06:00
Epicpkmn11 2e0b5352ae Set keyRepeatDelay to 12 instead of 6 2019-11-06 14:23:11 -06:00
Epicpkmn11 36e8d2dc0b Remove debug message 2019-11-06 14:22:58 -06:00
Epicpkmn11 e97d4a73b3 Get current file revisions 2019-11-06 14:14:20 -06:00
VoltZ f702a94573 This should fix the Issues.
Also: Don't do anything when pressed `A` on folders.
2019-11-06 17:03:59 +01:00
VoltZ d8531aa1fd Check for an Int for real on the Script version. 2019-11-06 15:14:11 +01:00
VoltZ eb8788d78d Woopsie. I derpy forgot something haha. 2019-11-06 14:28:09 +01:00
VoltZ 715c09179b Implement Script Downloading and parsing of the Informations.
To-Do: Revision checking of the current and new Scripts.
2019-11-06 13:54:45 +01:00
VoltZ 77680d2a78 Add a fourth button for the Script Browse Feature. 2019-11-05 04:17:35 +01:00
Epicpkmn11 54e7236b91 Check that it's actually a boolean 2019-11-04 02:15:27 -06:00
Epicpkmn11 ec2849708a Add (optional) option to include pre-releaes 2019-11-04 02:12:18 -06:00
Epicpkmn11 644855efcf Dont enforce max width if 0
And shrink version number a bit
2019-11-03 19:03:48 -06:00
VoltZ 14f8d11359 My last work for today. 2019-11-03 23:58:58 +01:00
VoltZ 99a1b09e25 Don't show those notes with the json stuff and get rid of pase.cpp/.hpp Part 3/3. 2019-11-03 21:14:27 +01:00
VoltZ b2e6e48ea4 Don't show those notes with the json stuff and get rid of pase.cpp/.hpp Part 2/3. 2019-11-03 21:14:04 +01:00
VoltZ fcf6fbd2d3 Don't show those notes with the json stuff and get rid of pase.cpp/.hpp Part 1/3. 2019-11-03 21:13:09 +01:00
VoltZ 891195828b Some changes. ;P 2019-11-03 20:54:03 +01:00
VoltZ aab5e46c41 Hardcode Universal-Updater's Title ID to the Install Function, so updating it works properly. 2019-11-03 18:15:08 +01:00
VoltZ 16e84aa412 The Language Screen should work properly now. 2019-11-03 07:16:46 +01:00
Pk11 1a8c63d9d4 New Crowdin translations (#1)
* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Korean)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Korean)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (French)

* New translations app.json (French)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Japanese)

* New translations app.json (Lithuanian)

* New translations app.json (Lithuanian)

* New translations app.json (Lithuanian)

* New translations app.json (Lithuanian)

* New translations app.json (French)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Italian)

* New translations app.json (Japanese)

* New translations app.json (Korean)

* New translations app.json (Lithuanian)

* New translations app.json (Portuguese)

* New translations app.json (Russian)

* New translations app.json (Spanish)

* New translations app.json (German)

* New translations app.json (Japanese)

* Delete Russian app.json.

* Delete Korean app.json.
2019-11-03 07:15:01 +01:00
VoltZ 382352776a Implement Custom Colors for Scripts. 2019-11-03 06:48:32 +01:00
VoltZ 7b16ed5c77 I think the last missing work for v1.0.0? :) 2019-11-03 03:09:43 +01:00
VoltZ 1246809b53 Woopsie. 2019-11-02 07:15:24 +01:00
VoltZ 1969456af4 Add version checking and don't let it crash, if no files are found. 2019-11-02 06:51:42 +01:00
Pk11 a23ec8fed0 /extras 2019-11-02 00:19:09 -05:00
VoltZ 9a0b123127 Little centering stuff, I guess. 2019-11-02 05:48:59 +01:00
Epicpkmn11 dc5c93eff6 Remove -lmad from Makefile 2019-11-01 23:26:09 -05:00
Epicpkmn11 1a835e0726 pls actually fail this time 2019-11-01 23:23:16 -05:00
Epicpkmn11 86f52e1526 Merge branch 'master' of https://github.com/Universal-Team/Universal-Updater 2019-11-01 23:19:36 -05:00
Epicpkmn11 e9ea993f95 Add .gitignore and crowdin.yml 2019-11-01 23:19:33 -05:00
Pk11 c1989b818a Install all devkitPro things 2019-11-01 23:13:44 -05:00
Pk11 d7f77cb792 Switch to BetterDex yml as base 2019-11-01 23:12:34 -05:00
Pk11 0966453aaa Set up CI with Azure Pipelines
[skip ci]
2019-11-01 23:10:22 -05:00
Epicpkmn11 132855b160 Add azure-pipelines,yml 2019-11-01 23:06:37 -05:00
VoltZ 0b5bcc0d3c Implement error checking. Thanks Pk11! 2019-11-02 04:54:36 +01:00
VoltZ eb88282782 Better Numpad! xD 2019-11-02 04:38:22 +01:00
VoltZ 570739c0c7 Woopsie. 2019-11-02 04:33:59 +01:00
VoltZ 7ee50d5418 Add Settings Stuff. :P 2019-11-02 04:32:23 +01:00
VoltZ 44c31c46d5 Working stuff! :) Last steps -> Add error checking. 2019-11-02 02:01:53 +01:00
VoltZ da49c38c9f Add Scrolling. 2019-11-01 20:50:00 +01:00
VoltZ deaab6b9ed Next work. 2019-11-01 02:20:47 +01:00
VoltZ c548cca57a UNIVERSAL-UPDATER IS BACK! Lmao. 2019-10-31 03:23:05 +01:00
VoltZ f64ab53907 Initial commit 2019-10-31 03:19:37 +01:00
248 changed files with 54117 additions and 51675 deletions
+139
View File
@@ -0,0 +1,139 @@
name: Build DarkStore
on:
push:
branches-ignore: [translation]
paths-ignore:
- 'README.md'
pull_request:
branches: ["*"]
paths-ignore:
- 'README.md'
release:
types: [published]
jobs:
build:
runs-on: ubuntu-latest
container: devkitpro/devkitarm
name: Build with Docker using devkitARM
outputs:
commit_tag: ${{ steps.build.outputs.commit_tag }}
commit_hash: ${{ steps.build.outputs.commit_hash }}
author_name: ${{ steps.build.outputs.author_name }}
committer_name: ${{ steps.build.outputs.committer_name }}
commit_subject: ${{ steps.build.outputs.commit_subject }}
commit_message: ${{ steps.build.outputs.commit_message }}
steps:
- name: Checkout repo
uses: actions/checkout@v1
with:
submodules: recursive
- name: Install tools
run: |
sudo apt-get update
sudo apt-get install p7zip-full -y
curl -L https://github.com/Steveice10/bannertool/releases/download/1.2.0/bannertool.zip -o bannertool.zip
sudo 7z e bannertool.zip linux-x86_64/bannertool
sudo chmod +x bannertool
mv bannertool /usr/local/bin
rm bannertool.zip
curl -L https://github.com/3DSGuy/Project_CTR/releases/download/makerom-v0.17/makerom-v0.17-ubuntu_x86_64.zip -o makerom-v0.17-ubuntu_x86_64.zip
sudo 7z e makerom-v0.17-ubuntu_x86_64.zip
sudo chmod +x makerom
mv makerom /usr/local/bin
rm makerom-v0.17-ubuntu_x86_64.zip
- name: Build
id: build
run: |
make clean
make -j$(nproc --all)
mkdir -p ~/artifacts
cp DarkStore.3dsx ~/artifacts
cp DarkStore.cia ~/artifacts
make clean
make -j$(nproc --all) citra
cp DarkStore.3dsx ~/artifacts/DarkStore-Citra.3dsx
cp DarkStore.cia ~/artifacts/DarkStore-Citra.cia
echo ::set-output name=commit_tag::$(git describe --abbrev=0 --tags)
echo ::set-output name=commit_hash::$(git log --format=%h -1)
# Webhook info
echo "::set-output name=author_name::$(git log -1 $GITHUB_SHA --pretty=%aN)"
echo "::set-output name=committer_name::$(git log -1 $GITHUB_SHA --pretty=%cN)"
echo "::set-output name=commit_subject::$(git log -1 $GITHUB_SHA --pretty=%s)"
echo "::set-output name=commit_message::$(git log -1 $GITHUB_SHA --pretty=%b)"
- name: Publish build to GH Actions
uses: actions/upload-artifact@v2
with:
path: ~/artifacts/*
name: build
# Only run this for non-PR jobs.
publish_build:
runs-on: ubuntu-latest
name: Publish build to DarkStore/extras
if: ${{ success() && !startsWith(github.ref, 'refs/pull') }}
needs: build
env:
COMMIT_TAG: ${{ needs.build.outputs.commit_tag }}
COMMIT_HASH: ${{ needs.build.outputs.commit_hash }}
AUTHOR_NAME: ${{ needs.build.outputs.author_name }}
COMMIT_SUBJECT: ${{ needs.build.outputs.commit_subject }}
COMMIT_MESSAGE: ${{ needs.build.outputs.commit_message }}
outputs:
current_date: ${{ steps.commit.outputs.current_date }}
steps:
- name: Install tools
run: |
sudo apt-get update
sudo apt-get install qrencode -y
- name: Download artifacts
uses: actions/download-artifact@v2
with:
name: build
path: build
- name: Upload to ${{ github.repository }} release
if: ${{ startsWith(github.ref, 'refs/tags') }}
run: |
ID=$(jq --raw-output '.release.id' $GITHUB_EVENT_PATH)
for file in ${{ github.workspace }}/build/*; do
AUTH_HEADER="Authorization: token ${{ secrets.GITHUB_TOKEN }}"
CONTENT_LENGTH="Content-Length: $(stat -c%s $file)"
CONTENT_TYPE="Content-Type: application/7z-x-compressed"
UPLOAD_URL="https://uploads.github.com/repos/${{ github.repository }}/releases/$ID/assets?name=$(basename $file)"
curl -XPOST -H "$AUTH_HEADER" -H "$CONTENT_LENGTH" -H "$CONTENT_TYPE" --upload-file "$file" "$UPLOAD_URL"
done
- name: Commit and push to DarkStore-3DS/extras
id: commit
run: |
CURRENT_DATE=$(date +"%Y%m%d-%H%M%S")
echo ::set-output name=current_date::$CURRENT_DATE
git config --global user.email "bot@darkstore.com"
git config --global user.name "DarkStoreBot"
git clone --depth 1 https://${{ secrets.DSBOT_TOKEN }}@github.com/DarkStore-3DS/extras.git
mkdir -p extras/builds/DarkStore/
cd extras/builds/DarkStore/
qrencode -o DarkStore.png https://github.com/DarkStore-3DS/extras/raw/v$CURRENT_DATE/builds/DarkStore/DarkStore.cia
qrencode -o DarkStore-release.png https://github.com/DarkStore-3DS/DarkStore/releases/download/$COMMIT_TAG/DarkStore.cia
cp ${{ github.workspace }}/build/* .
git stage .
git commit -m "DarkStore | $COMMIT_HASH"
git tag v$CURRENT_DATE
git push origin master v$CURRENT_DATE
- name: Release to DarkStore-3DS/extras
run: |
AUTH_HEADER="Authorization: token ${{ secrets.DSBOT_TOKEN }}"
CONTENT_TYPE="Content-Type: application/json"
API_URL="https://api.github.com/repos/DarkStore-3DS/extras/releases"
RELEASE_INFO="{\"tag_name\": \"v${{ steps.commit.outputs.current_date }}\", \"name\": \"DarkStore | $COMMIT_HASH\", \"body\": \"$AUTHOR_NAME - $COMMIT_SUBJECT\n\n$COMMIT_MESSAGE\", \"prerelease\": true}"
RESPONSE=$(curl -XPOST -H "$AUTH_HEADER" -H "$CONTENT_TYPE" "$API_URL" -d "$RELEASE_INFO")
ID=$(echo $RESPONSE | jq --raw-output '.id')
for file in ${{ github.workspace }}/build/*; do
AUTH_HEADER="Authorization: token ${{ secrets.DSBOT_TOKEN }}"
CONTENT_LENGTH="Content-Length: $(stat -c%s $file)"
CONTENT_TYPE="Content-Type: application/7z-x-compressed"
UPLOAD_URL="https://uploads.github.com/repos/DarkStore-3DS/extras/releases/$ID/assets?name=$(basename $file)"
curl -XPOST -H "$AUTH_HEADER" -H "$CONTENT_LENGTH" -H "$CONTENT_TYPE" --upload-file "$file" "$UPLOAD_URL"
done
+22 -11
View File
@@ -1,11 +1,22 @@
*.bin
*.d *.bin
*.o *.d
*.smdh *.o
*.elf *.smdh
*.cia *.elf
*.3dsx *.cia
*/build *.3dsx
build/sprites.h *build
*.map *.map
*.lst *.lst
.vscode
*.DS_Store
romfs/gfx/*.t3x
include/version.hpp
cppcheck.log
bannertool*
makerom*
*.pfs0
*.nso
*.nacp
+3
View File
@@ -0,0 +1,3 @@
[submodule "Universal-Core"]
path = Universal-Core
url = https://github.com/DarkStore-3DS/Universal-Core.git
-92
View File
@@ -1,92 +0,0 @@
{
"files.associations": {
"*.tcc": "cpp",
"cctype": "cpp",
"clocale": "cpp",
"cmath": "cpp",
"cstdarg": "cpp",
"cstddef": "cpp",
"cstdio": "cpp",
"cstdlib": "cpp",
"cstring": "cpp",
"ctime": "cpp",
"cwchar": "cpp",
"cwctype": "cpp",
"exception": "cpp",
"fstream": "cpp",
"iosfwd": "cpp",
"iostream": "cpp",
"istream": "cpp",
"limits": "cpp",
"memory": "cpp",
"new": "cpp",
"ostream": "cpp",
"sstream": "cpp",
"stdexcept": "cpp",
"streambuf": "cpp",
"typeinfo": "cpp",
"valarray": "cpp",
"array": "cpp",
"atomic": "cpp",
"bit": "cpp",
"cstdint": "cpp",
"deque": "cpp",
"forward_list": "cpp",
"map": "cpp",
"unordered_map": "cpp",
"vector": "cpp",
"algorithm": "cpp",
"functional": "cpp",
"iterator": "cpp",
"memory_resource": "cpp",
"numeric": "cpp",
"optional": "cpp",
"random": "cpp",
"string": "cpp",
"string_view": "cpp",
"system_error": "cpp",
"tuple": "cpp",
"type_traits": "cpp",
"utility": "cpp",
"initializer_list": "cpp",
"bitset": "cpp",
"chrono": "cpp",
"condition_variable": "cpp",
"ratio": "cpp",
"regex": "cpp",
"shared_mutex": "cpp"
},
"terminal.integrated.shell.windows": "C:\\msys64\\usr\\bin\\bash.exe",
"terminal.integrated.env.windows":
{
"MSYSTEM": "MINGW64",
//"MSYS2_PATH_TYPE": "inherit",
"MSVSCODE": "1"
},
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"icon": "terminal-powershell"
},
"Test": {
"path": [
"C:\\sys64\\sys2_shell.exe"
],
"args": [],
"icon": "terminal-cmd"
},
"Command Prompt": {
"path": [
"${env:windir}\\Sysnative\\cmd.exe",
"${env:windir}\\System32\\cmd.exe"
],
"args": [],
"icon": "terminal-cmd"
},
"Git Bash": {
"source": "Git Bash"
}
}
}
+18 -18
View File
@@ -1,19 +1,19 @@
{ {
// See https://go.microsoft.com/fwlink/?LinkId=733558 // See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format // for the documentation about the tasks.json format
"version": "2.0.0", "version": "2.0.0",
"tasks": [ "tasks": [
{ {
"label": "Make", "label": "Make",
"command": "make", "command": "make",
"args": ["-s"], "args": ["-s"],
"group": { "group": {
"kind": "build", "kind": "build",
"isDefault": true "isDefault": true
}, },
"presentation": { "presentation": {
"reveal": "silent" "reveal": "silent"
} }
} }
] ]
} }
+674 -674
View File
File diff suppressed because it is too large Load Diff
+79 -60
View File
@@ -2,44 +2,41 @@
.SUFFIXES: .SUFFIXES:
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
DEVKITPRO=/opt/devkitpro
DEVKITARM=/opt/devkitpro/devkitARM
ifeq ($(strip $(DEVKITARM)),) ifeq ($(strip $(DEVKITARM)),)
$(error "Veuillez régler DEVKITARM dans votre environnement. export DEVKITARM = <chemin vers> devkitARM") $(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM")
endif endif
TOPDIR ?= $(CURDIR) TOPDIR ?= $(CURDIR)
include $(DEVKITARM)/3ds_rules include $(DEVKITARM)/3ds_rules
# ------------------------------------------------- -------------------------------- #---------------------------------------------------------------------------------
# TARGET est le nom de la sortie # TARGET is the name of the output
# BUILD est le répertoire dans lequel les fichiers objets et les fichiers intermédiaires seront placés # BUILD is the directory where object files & intermediate files will be placed
# SOURCES est une liste de répertoires contenant le code source # SOURCES is a list of directories containing source code
# DATA est une liste de répertoires contenant des fichiers de données # DATA is a list of directories containing data files
# INCLUDES est une liste de répertoires contenant des fichiers d'en-tête # INCLUDES is a list of directories containing header files
# GRAPHICS est une liste de répertoires contenant des fichiers graphiques # GRAPHICS is a list of directories containing graphics files
# GFXBUILD est le répertoire dans lequel les fichiers graphiques convertis seront placés # GFXBUILD is the directory where converted graphics files will be placed
# S'il est défini sur $ (BUILD), il sera lié statiquement dans le fichier converti # If set to $(BUILD), it will statically link in the converted
# fichiers comme s'il s'agissait de fichiers de données. # files as if they were data files.
# #
# NO_SMDH: s'il est défini sur quelque chose, aucun fichier SMDH n'est généré. # NO_SMDH: if set to anything, no SMDH file is generated.
# ROMFS est le répertoire qui contient le RomFS, relatif au Makefile (facultatif) # ROMFS is the directory which contains the RomFS, relative to the Makefile (Optional)
# APP_TITLE est le nom de l'application stockée dans le fichier SMDH (facultatif) # APP_TITLE is the name of the app stored in the SMDH file (Optional)
# APP_DESCRIPTION est la description de l'application stockée dans le fichier SMDH (facultatif) # APP_DESCRIPTION is the description of the app stored in the SMDH file (Optional)
# APP_AUTHOR est l'auteur de l'application stockée dans le fichier SMDH (facultatif) # APP_AUTHOR is the author of the app stored in the SMDH file (Optional)
# ICON est le nom de fichier de l'icône (.png), relatif au dossier du projet. # ICON is the filename of the icon (.png), relative to the project folder.
# S'il n'est pas défini, il tente d'utiliser l'un des éléments suivants (dans cet ordre): # If not set, it attempts to use one of the following (in this order):
# - <Nom du projet> .png # - <Project name>.png
# - icon.png # - icon.png
# - <dossier libctru> /default_icon.png # - <libctru folder>/default_icon.png
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# Outils externes # External tools
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
ifeq ($(OS),Windows_NT) ifeq ($(OS),Windows_NT)
MAKEROM ?= ../makerom.exe MAKEROM ?= makerom.exe
BANNERTOOL ?= ../bannertool.exe BANNERTOOL ?= bannertool.exe
else else
MAKEROM ?= makerom MAKEROM ?= makerom
@@ -49,11 +46,25 @@ endif
CURRENT_VERSION := $(shell git describe --abbrev=0 --tags) CURRENT_VERSION := $(shell git describe --abbrev=0 --tags)
# Si sur un commit taggé, utilisez le tag au lieu du commit GIT_TAG := $(shell git describe --abbrev=0 --tags)
GIT_SHA := $(shell git rev-parse --short=7 HEAD)
# If on a tagged commit, use just the tag
ifneq ($(shell echo $(shell git tag -l --points-at HEAD) | head -c 1),) ifneq ($(shell echo $(shell git tag -l --points-at HEAD) | head -c 1),)
GIT_VER := $(shell git tag -l --points-at HEAD) GIT_VER := $(GIT_TAG)
else else
GIT_VER := $(shell git describe --abbrev=0 --tags)-$(shell git rev-parse --short HEAD) GIT_VER := $(GIT_TAG)-$(GIT_SHA)
endif
# Ensure version.hpp exists
ifeq (,$(wildcard include/version.hpp))
$(shell mkdir -p include)
$(shell touch include/version.hpp)
endif
# Print new version if changed
ifeq (,$(findstring $(GIT_VER), $(shell cat include/version.hpp)))
$(shell printf "#ifndef VERSION_HPP\n#define VERSION_HPP\n\n#define VER_NUMBER \"$(GIT_VER)\"\n#define GIT_SHA \"$(GIT_SHA)\"\n\n#endif\n" > include/version.hpp)
endif endif
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
@@ -80,52 +91,51 @@ endif
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
TARGET := DarkStore TARGET := DarkStore
BUILD := build BUILD := build
UNIVCORE := Universal-Core UNIVCORE := Universal-Core
SOURCES := $(UNIVCORE) source source/download source/gui source/lang source/menu source/overlays \ SOURCES := $(UNIVCORE) source source/download source/gui source/lang source/menu source/overlays \
source/qr source/screens source/store source/utils source/qr source/screens source/store source/utils
DATA := data DATA := data
INCLUDES := $(UNIVCORE) include include/download include/gui include/lang include/overlays include/qr include/screens \ INCLUDES := $(UNIVCORE) include include/download include/gui include/lang include/overlays include/qr include/screens \
include/store include/utils include/store include/utils
GRAPHICS := assets/gfx GRAPHICS := assets/gfx
ROMFS := romfs ROMFS := romfs
GFXBUILD := $(ROMFS)/gfx GFXBUILD := $(ROMFS)/gfx
APP_AUTHOR := Dark98, Universal Team APP_AUTHOR := Dark98
APP_DESCRIPTION := An Alternative eShop for Nintendo 3DS APP_DESCRIPTION := A simple 3DS software downloader
ICON := app/icon.png ICON := app/icon.png
BNR_IMAGE := app/banner.png BNR_IMAGE := app/banner.png
BNR_AUDIO := app/BannerAudio.wav BNR_AUDIO := app/BannerAudio.wav
RSF_FILE := app/build-cia.rsf RSF_FILE := app/build-cia.rsf
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# options de génération de code # options for code generation
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
ARCH := -march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft ARCH := -march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft
CFLAGS := -g -Wall -Wno-psabi -O2 -mword-relocations \ CFLAGS := -g -Wall -Wno-psabi -O2 -mword-relocations \
-DV_STRING=\"$(GIT_VER)\" \
-DC_V=\"$(CURRENT_VERSION)\" \ -DC_V=\"$(CURRENT_VERSION)\" \
-fomit-frame-pointer -ffunction-sections \ -fomit-frame-pointer -ffunction-sections \
$(ARCH) $(ARCH)
CFLAGS += $(INCLUDE) -DARM11 -D_3DS -D_GNU_SOURCE=1 CFLAGS += $(INCLUDE) -D__3DS__ -D_GNU_SOURCE=1
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++17 CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++17 $(CITRA)
ASFLAGS := -g $(ARCH) ASFLAGS := -g $(ARCH)
LDFLAGS = -specs=3dsx.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) LDFLAGS = -specs=3dsx.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
LIBS := -lcurl -lmbedtls -lmbedx509 -lmbedcrypto -larchive -lbz2 -llzma -lm -lz -lcitro2d -lcitro3d -lctru -lstdc++ LIBS := -lcurl -lmbedtls -lmbedx509 -lmbedcrypto -larchive -lbz2 -llzma -lz -lcitro2d -lcitro3d -lctru -lstdc++
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# liste de répertoires contenant des bibliothèques, ce doit être le niveau supérieur contenant # list of directories containing libraries, this must be the top level containing
# include et lib # include and lib
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
LIBDIRS := $(PORTLIBS) $(CTRULIB) LIBDIRS := $(CURDIR)/libs $(PORTLIBS) $(CTRULIB)
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# pas vraiment besoin de modifier quoi que ce soit au-delà de ce point, sauf si vous devez ajouter des # no real need to edit anything past this point unless you need to add additional
# règles pour différentes extensions de fichiers # rules for different file extensions
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
ifneq ($(BUILD),$(notdir $(CURDIR))) ifneq ($(BUILD),$(notdir $(CURDIR)))
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
@@ -148,7 +158,7 @@ GFXFILES := $(foreach dir,$(GRAPHICS),$(notdir $(wildcard $(dir)/*.t3s)))
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# utiliser CXX pour lier des projets C ++, CC pour le C standard # use CXX for linking C++ projects, CC for standard C
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
ifeq ($(strip $(CPPFILES)),) ifeq ($(strip $(CPPFILES)),)
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
@@ -213,21 +223,25 @@ ifneq ($(ROMFS),)
export _3DSXFLAGS += --romfs=$(CURDIR)/$(ROMFS) export _3DSXFLAGS += --romfs=$(CURDIR)/$(ROMFS)
endif endif
.PHONY: all clean .PHONY: all citra clean cppcheck
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
all: $(BUILD) $(GFXBUILD) $(DEPSDIR) $(ROMFS_T3XFILES) $(T3XHFILES) all: $(BUILD) $(GFXBUILD) $(DEPSDIR) $(ROMFS_T3XFILES) $(T3XHFILES)
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
#---------------------------------------------------------------------------------
citra: $(BUILD) $(GFXBUILD) $(DEPSDIR) $(ROMFS_T3XFILES) $(T3XHFILES)
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile CITRA=-DCITRA
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
clean: clean:
@echo clean ... @echo clean ...
@rm -fr DarkStore.elf @rm -fr $(BUILD) $(TARGET).3dsx
@rm -fr DarkStore.cia @rm -fr $(BUILD) $(TARGET).cia
@rm -fr DarkStore.3dsx @rm -fr $(BUILD) $(TARGET).elf
@rm -fr DarkStore.smdh @rm -fr $(BUILD) $(TARGET).smdh
@rm -fr $(OUTDIR) @mkdir -p build
@rm -fr $(BUILD)
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
cia: $(BUILD) cia: $(BUILD)
@@ -251,21 +265,21 @@ $(BUILD):
else else
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# cibles principales # main targets
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
all: $(OUTPUT).cia $(OUTPUT).elf $(OUTPUT).3dsx all: $(OUTPUT).cia $(OUTPUT).elf $(OUTPUT).3dsx
$(OUTPUT).elf : $(OFILES) $(OUTPUT).elf : $(OFILES)
$(OUTPUT).cia : $(OUTPUT).elf $(OUTPUT).smdh $(OUTPUT).cia : $(OUTPUT).elf $(OUTPUT).smdh
$(BANNERTOOL) makebanner -i "../app/banner.png" -a "../app/BannerAudio.wav" -o "../app/banner.bin" @$(BANNERTOOL) makebanner -i "../app/banner.png" -a "../app/BannerAudio.wav" -o "../app/banner.bin"
$(BANNERTOOL) makesmdh -i "../app/icon.png" -s "$(TARGET)" -l "$(APP_DESCRIPTION)" -p "$(APP_AUTHOR)" -o "../app/icon.bin" \ @$(BANNERTOOL) makesmdh -i "../app/icon.png" -s "$(TARGET)" -l "$(APP_DESCRIPTION)" -p "$(APP_AUTHOR)" -o "../app/icon.bin" \
--flags visible,ratingrequired,recordusage --cero 153 --esrb 153 --usk 153 --pegigen 153 --pegiptr 153 --pegibbfc 153 --cob 153 --grb 153 --cgsrr 153 --flags visible,ratingrequired,recordusage --cero 153 --esrb 153 --usk 153 --pegigen 153 --pegiptr 153 --pegibbfc 153 --cob 153 --grb 153 --cgsrr 153
$(MAKEROM) -f cia -target t -exefslogo -o "../$(TARGET).cia" -elf "../$(TARGET).elf" -rsf "../app/build-cia.rsf" -banner "../app/banner.bin" -icon "../app/icon.bin" -logo "../app/logo.bcma.lz" -DAPP_ROMFS="$(TOPDIR)/$(ROMFS)" -major $(VERSION_MAJOR) -minor $(VERSION_MINOR) -DAPP_VERSION_MAJOR="$(VERSION_MAJOR)" @$(MAKEROM) -f cia -target t -exefslogo -o "../$(TARGET).cia" -elf "../$(TARGET).elf" -rsf "../app/build-cia.rsf" -banner "../app/banner.bin" -icon "../app/icon.bin" -logo "../app/logo.bcma.lz" -DAPP_ROMFS="$(TOPDIR)/$(ROMFS)" -major $(VERSION_MAJOR) -minor $(VERSION_MINOR) -micro $(VERSION_MICRO) -DAPP_VERSION_MAJOR="$(VERSION_MAJOR)"
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# vous avez besoin d'une règle comme celle-ci pour chaque extension que vous utilisez comme données binaires # you need a rule like this for each extension you use as binary data
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
%.bin.o %_bin.h : %.bin %.bin.o %_bin.h : %.bin
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
@@ -281,7 +295,7 @@ $(OUTPUT).cia : $(OUTPUT).elf $(OUTPUT).smdh
@$(bin2o) @$(bin2o)
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
# règles d'assemblage de shaders GPU # rules for assembling GPU shaders
#--------------------------------------------------------------------------------- #---------------------------------------------------------------------------------
define shader-as define shader-as
$(eval CURBIN := $*.shbin) $(eval CURBIN := $*.shbin)
@@ -317,3 +331,8 @@ endef
#--------------------------------------------------------------------------------------- #---------------------------------------------------------------------------------------
endif endif
#--------------------------------------------------------------------------------------- #---------------------------------------------------------------------------------------
cppcheck:
@rm -f cppcheck.log
@cppcheck . --enable=all $(INCLUDE) -UJSON_CATCH_USER -U_Check_return_ -U_MSC_VER -U_Ret_notnull_ -U__INTEL_COMPILER -U__PGI -U__SUNPRO_CC -UJSON_INTERNAL_CATCH_USER -UJSON_THROW_USER -UJSON_TRY_USER -U__IBMCPP__ -U__SUNPRO_CC -D__GNUC__=9 -D__GNUC_MINOR__=1 -DNULL=nullptr --force 2> cppcheck.log
@echo cppcheck.log file created...
+72
View File
@@ -0,0 +1,72 @@
<p align="center">
<a href="https://ds.dark98.co.uk"><img src="https://ds.dark98.co.uk/images/banner.png"></a><br>
<b>An easy to use app for downloading game backups</b><br>
<a href="https://github.com/DarkStore-3DS/DarkStore/actions?query=workflow%3A%22Build+DarkStore%22" style="padding-left: 5px; padding-right: 5px;">
<img src="https://github.com/DarkStore-3DS/DarkStore/workflows/Build%20DarkStore/badge.svg" height="20" alt="Build status on GitHub Actions">
</a>
</p>
WE DO NOT SUPPORT PIRACY! This Homebrew is for people who dont have access to the tools needed to dump their copy of the game.
DarkStore is a homebrew application for the Nintendo 3DS with the intention to make downloading game backups easy. No need to manually copy files or go through installation processes, as it does that all for you.
## Features
- A store format with a concept similar to the Cydia Repositories
- The default is [DarkStore-Homebrew](https://ds.dark98.co.uk/store_content.php?store=homebrew)
- Want to add more? Go to settings, choose "Select Store", click the + icon and select one from the list, enter a URL, or scan a QR code
- Customization in sorting and display
- Several sorting keys: "Title", "Author", and "Last Updated"
- Direction can be Ascending or Descending
- App display can be shown in either a grid or rows
- Background downloads so you can keep using the rest of the app while downloading
- Searching and markings to make finding games easy
- Viewing screenshots and release notes for games
- Translations planned(Currently Only Supports English!)
- To request a new language, join our [Discord Server](https://discord.com/invite/eFE6ZqpczY) or contact a project manager on Crowdin
## Compilation
### Setting up your environment
To build DarkStore from source, you will need to install devkitARM and some libraries. Follow devkitPro's [Getting Started](https://devkitpro.org/wiki/Getting_Started) page to install pacman, then run the following command to install everything you need:
```
(sudo dkp-)pacman -S 3ds-dev 3ds-curl 3ds-bzip2 3ds-liblzma
```
(The `sudo dkp-` may not be needed depending on your OS)
You will also need [bannertool](https://github.com/Steveice10/bannertool/releases/latest) and [makerom](https://github.com/profi200/Project_CTR/releases/latest) in your PATH.
### Cloning the repository
To download the source you will need to clone the repository with submodules, this can be done by running:
```
git clone --recursive https://github.com/DarkStore-3DS/DarkStore.git
```
If you've already cloned it, you can use the following command to update all of the submodules:
```
git submodule update --init --recursive
```
### Building
Once you've cloned the repository (with submodules), simply run `make` in the root of the repository.
If you're testing in Citra, run `make citra` instead of just `make` to disable the Wi-Fi check. (Note: `source/utils/download.cpp` must be rebuilt for this to take affect, save the file if it's already been built)
## DarkStore Credits
- [Dark98](https://github.com/Dark98) - Lead developer
## Universal-Updater Credits
- [SuperSaiyajinStackZ](https://github.com/SuperSaiyajinStackZ) - Lead developer, reworked quirc to C++
- [Pk11](https://github.com/Epicpkmn11) - Mockup Designer, Website Maintainer
- [NightScript](https://github.com/NightYoshi370) - Concept Creator & Planner
- [dlbeer](https://github.com/dlbeer) - Original developer of [quirc](https://github.com/dlbeer/quirc)
- [FlagBrew](https://github.com/FlagBrew): Original QR Code Scanner code
- [Icons8](https://icons8.com/): Icon Designer
- [lvandeve](https://github.com/lvandeve): For [LodePNG](https://github.com/lvandeve/lodepng)
- [PabloMK7](https://github.com/mariohackandglitch): Download Code Improvements
+1
Submodule Universal-Core added at 45eb4f7894
-5
View File
@@ -1,5 +0,0 @@
{
"files.associations": {
"string": "cpp"
}
}
-674
View File
@@ -1,674 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
-9
View File
@@ -1,9 +0,0 @@
# Universal-Core by Universal-Team
This contains the GUI & Core part for our 3DS Applications.
Logo created by: [TotallyNotGuy](https://github.com/TotallyNotGuy).
![Universal-Core-Logo](https://github.com/Universal-Team/Universal-Core/blob/master/universal-core-logo.png)
Licensing:
This software is licensed under the terms of the GPLv3. You can find a copy of the license in the LICENSE file.
-501
View File
@@ -1,501 +0,0 @@
/*
* This file is part of Universal-Core
* Copyright (C) 2020 Universal-Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version.
*/
#include "gui.hpp"
#include "screenCommon.hpp"
#include <3ds.h>
#include <stack>
#include <unistd.h>
#include <vector>
C3D_RenderTarget *Top, *TopRight, *Bottom;
C2D_TextBuf TextBuf;
C2D_Font Font;
std::unique_ptr<Screen> usedScreen, tempScreen; // tempScreen used for "fade" effects.
std::stack<std::unique_ptr<Screen>> screens;
bool currentScreen = false;
bool fadeout = false, fadein = false, fadeout2 = false, fadein2 = false;
int fadealpha = 0;
int fadecolor = 0;
/*
Clear the Text Buffer.
*/
void Gui::clearTextBufs(void) { C2D_TextBufClear(TextBuf); };
/*
Draw a sprite from the sheet.
C2D_SpriteSheet sheet: The SpriteSheet.
size_t imgindex: The image index.
int x: The X-Position where to draw the sprite.
int y: The Y-Position where to draw the sprite.
float ScaleX: The X-Scale of the sprite.
float ScaleY: The Y-Scale of the sprite.
If the spritesheet is nullptr or image index goes out of scope, this doesn't do anything.
*/
void Gui::DrawSprite(C2D_SpriteSheet sheet, size_t imgindex, int x, int y, float ScaleX, float ScaleY) {
if (sheet) {
if (C2D_SpriteSheetCount(sheet) >= imgindex) {
C2D_DrawImageAt(C2D_SpriteSheetGetImage(sheet, imgindex), x, y, 0.5f, nullptr, ScaleX, ScaleY);
}
}
}
/*
Initialize the GUI.
Contains initializing Citro2D, Citro3D and the screen targets.
Call this when initing the app.
*/
Result Gui::init(void) {
C3D_Init(C3D_DEFAULT_CMDBUF_SIZE);
C2D_Init(C2D_DEFAULT_MAX_OBJECTS);
C2D_Prepare();
/* Create Screen Targets. */
Top = C2D_CreateScreenTarget(GFX_TOP, GFX_LEFT);
TopRight = C2D_CreateScreenTarget(GFX_TOP, GFX_RIGHT);
Bottom = C2D_CreateScreenTarget(GFX_BOTTOM, GFX_LEFT);
/* Load Textbuffer. */
TextBuf = C2D_TextBufNew(4096);
Font = C2D_FontLoadSystem(CFG_REGION_USA); // Load System font.
return 0;
}
/*
Load a bcfnt font.
C2D_Font &fnt: The reference to the C2D_Font variable.
const char *Path: The path to the file.
*/
Result Gui::loadFont(C2D_Font &fnt, const char *Path) {
if (access(Path, F_OK) == 0) fnt = C2D_FontLoad(Path); // Only load if found.
return 0;
}
/*
Unload a Font.
C2D_Font &fnt: The reference to the C2D_Font variable.
*/
Result Gui::unloadFont(C2D_Font &fnt) {
if (fnt) C2D_FontFree(fnt); // Make sure to only unload if not nullptr.
return 0;
}
/*
Load a t3x SpriteSheet.
const char *Path: The path to the file.
C2D_SpriteSheet &sheet: The reference to the C2D_SpriteSheet variable.
*/
Result Gui::loadSheet(const char *Path, C2D_SpriteSheet &sheet) {
if (access(Path, F_OK) == 0) sheet = C2D_SpriteSheetLoad(Path); // Only load if found.
return 0;
}
/*
Unload a SpriteSheet.
C2D_SpriteSheet &sheet: The reference to the C2D_SpriteSheet variable.
*/
Result Gui::unloadSheet(C2D_SpriteSheet &sheet) {
if (sheet) C2D_SpriteSheetFree(sheet); // Make sure to only unload if not nullptr.
return 0;
}
/*
Exit the GUI.
Contains deinitializing Citro2D, Citro3D and clearing the textbuffer.
Call this when exiting the app.
*/
void Gui::exit(void) {
C2D_TextBufDelete(TextBuf);
C2D_Fini();
C3D_Fini();
if (usedScreen) usedScreen = nullptr;
}
/*
Reinitialize the GUI.
*/
Result Gui::reinit(void) {
C2D_TextBufDelete(TextBuf);
C2D_Fini();
C3D_Fini();
return Gui::init();
}
/*
Draw a Centered String.
float x: The X-Addition offset for the position from 200 (top) or 160 (bottom).
float y: The Y-Position where to draw.
float size: The size for the Font.
u32 color: The Text Color.
std::string Text: The Text which should be drawn.
int maxWidth: (Optional) The max width of the Text.
int maxHeight: (Optional) The max height of the Text.
C2D_Font fnt: (Optional) The wanted C2D_Font. Is nullptr by default.
int flags: (Optional) C2D text flags to use.
*/
void Gui::DrawStringCentered(float x, float y, float size, u32 color, std::string Text, int maxWidth, int maxHeight, C2D_Font fnt, int flags) {
Gui::DrawString(x +(currentScreen ? 200 : 160), y, size, color, Text, maxWidth, maxHeight, fnt, flags | C2D_AlignCenter);
}
/*
Draw a String.
float x: The X-Position where to draw.
float y: The Y-Position where to draw.
float size: The size for the Font.
u32 color: The Text Color.
std::string Text: The Text which should be drawn.
int maxWidth: (Optional) The max width of the Text.
int maxHeight: (Optional) The max height of the Text.
C2D_Font fnt: (Optional) The wanted C2D_Font. Is nullptr by default.
int flags: (Optional) C2D text flags to use.
*/
void Gui::DrawString(float x, float y, float size, u32 color, std::string Text, int maxWidth, int maxHeight, C2D_Font fnt, int flags) {
C2D_Text c2d_text;
if (fnt) C2D_TextFontParse(&c2d_text, fnt, TextBuf, Text.c_str());
else C2D_TextFontParse(&c2d_text, Font, TextBuf, Text.c_str());
C2D_TextOptimize(&c2d_text);
float heightScale;
if (maxHeight == 0) {
heightScale = size;
} else {
if (fnt) heightScale = std::min(size, size*(maxHeight/Gui::GetStringHeight(size, Text, fnt)));
else heightScale = std::min(size, size*(maxHeight/Gui::GetStringHeight(size, Text)));
}
if (maxWidth == 0) {
C2D_DrawText(&c2d_text, C2D_WithColor | flags, x, y, 0.5f, size, heightScale, color);
} else if (flags & C2D_WordWrap) {
C2D_DrawText(&c2d_text, C2D_WithColor | flags, x, y, 0.5f, size, heightScale, color, (float)maxWidth);
} else {
if (fnt) C2D_DrawText(&c2d_text, C2D_WithColor | flags, x, y, 0.5f, std::min(size, size*(maxWidth/Gui::GetStringWidth(size, Text, fnt))), heightScale, color);
else C2D_DrawText(&c2d_text, C2D_WithColor | flags, x, y, 0.5f, std::min(size, size*(maxWidth/Gui::GetStringWidth(size, Text))), heightScale, color);
}
}
/*
Get String or Text Width.
float size: The Textsize.
std::string Text: The Text.
C2D_Font fnt: (Optional) The wanted C2D_Font. Is nullptr by default.
*/
float Gui::GetStringWidth(float size, std::string Text, C2D_Font fnt) {
float width = 0;
if (fnt) GetStringSize(size, &width, NULL, Text, fnt);
else GetStringSize(size, &width, NULL, Text);
return width;
}
/*
Get String or Text Size.
float size: The Textsize.
float *width: Pointer where to store the width.
float *height: Pointer where to store the height.
std::string Text: The Text.
C2D_Font fnt: (Optional) The wanted C2D_Font. Is nullptr by default.
*/
void Gui::GetStringSize(float size, float *width, float *height, std::string Text, C2D_Font fnt) {
C2D_Text c2d_text;
if (fnt) C2D_TextFontParse(&c2d_text, fnt, TextBuf, Text.c_str());
else C2D_TextFontParse(&c2d_text, Font, TextBuf, Text.c_str());
C2D_TextGetDimensions(&c2d_text, size, size, width, height);
}
/*
Get String or Text Height.
float size: The Textsize.
std::string Text: The Text.
C2D_Font fnt: (Optional) The wanted C2D_Font. Is nullptr by default.
*/
float Gui::GetStringHeight(float size, std::string Text, C2D_Font fnt) {
float height = 0;
if (fnt) GetStringSize(size, NULL, &height, Text.c_str(), fnt);
else GetStringSize(size, NULL, &height, Text.c_str());
return height;
}
/*
Draw a Rectangle.
float x: The X-Position where to draw.
float y: The Y-Position where to draw.
float w: The width of the rectangle.
float h: The height of the rectangle.
u32 color: The color.
*/
bool Gui::Draw_Rect(float x, float y, float w, float h, u32 color) {
return C2D_DrawRectSolid(x, y, 0.5f, w, h, color);
}
/*
Draw's the current screen's draw.
bool stack: If using the stack-screens or not.
*/
void Gui::DrawScreen(bool stack) {
if (!stack) {
if (usedScreen) usedScreen->Draw();
} else {
if (!screens.empty()) screens.top()->Draw();
}
}
/*
Do the current screen's logic.
u32 hDown: The hidKeysDown() variable.
u32 hHeld: The hidKeysHeld() variable.
touchPosition touch: The touchPosition variable.
bool waitFade: If waiting for the fade until control of the screen or not.
bool stack: If using the stack-screens.
*/
void Gui::ScreenLogic(u32 hDown, u32 hHeld, touchPosition touch, bool waitFade, bool stack) {
if (waitFade) {
if (!fadein && !fadeout && !fadein2 && !fadeout2) {
if (!stack) if (usedScreen) usedScreen->Logic(hDown, hHeld, touch);
} else {
if (!screens.empty()) screens.top()->Logic(hDown, hHeld, touch);
}
} else {
if (!stack) {
if (usedScreen) usedScreen->Logic(hDown, hHeld, touch);
} else {
if (!screens.empty()) screens.top()->Logic(hDown, hHeld, touch);
}
}
}
/*
Move's the tempScreen to the used one.
bool stack: If using the stack-screens or not.
*/
void Gui::transferScreen(bool stack) {
if (!stack) {
if (tempScreen) usedScreen = std::move(tempScreen);
} else {
if (tempScreen) screens.push(std::move(tempScreen));
}
}
/*
Set the current Screen.
std::unique_ptr<Screen> screen: The screen class.
bool fade: If doing a fade effect or not.
bool stack: If using the stack-screens or not.
*/
void Gui::setScreen(std::unique_ptr<Screen> screen, bool fade, bool stack) {
tempScreen = std::move(screen);
/* Switch screen without fade. */
if (!fade) {
Gui::transferScreen(stack);
} else {
/* Fade, then switch. */
fadeout = true;
}
}
/*
Fade's the screen in and out and transfer the screen.
Credits goes to RocketRobz & SavvyManager.
int fadeoutFrames: The fadeout frames.
int fadeinFrames: The fadein frames.
bool stack: If using the stack-screens or not. (Used to properly transfer screens).
*/
void Gui::fadeEffects(int fadeoutFrames, int fadeinFrames, bool stack) {
if (fadein) {
fadealpha -= fadeinFrames;
if (fadealpha < 0) {
fadealpha = 0;
fadecolor = 255;
fadein = false;
}
}
if (stack) {
if (fadein2) {
fadealpha -= fadeinFrames;
if (fadealpha < 0) {
fadealpha = 0;
fadecolor = 255;
fadein2 = false;
}
}
}
if (fadeout) {
fadealpha += fadeoutFrames;
if (fadealpha > 255) {
fadealpha = 255;
Gui::transferScreen(stack); // Transfer Temp screen to the stack / used one.
fadein = true;
fadeout = false;
}
}
if (stack) {
if (fadeout2) {
fadealpha += fadeoutFrames;
if (fadealpha > 255) {
fadealpha = 255;
Gui::screenBack2(); // Go screen back.
fadein2 = true;
fadeout2 = false;
}
}
}
}
/*
Go a screen back. (Stack only!)
bool fade: If doing a fade or not.
*/
void Gui::screenBack(bool fade) {
if (!fade) {
if (screens.size() > 0) screens.pop();
} else {
if (screens.size() > 0) fadeout2 = true;
}
}
void Gui::screenBack2() { if (screens.size() > 0) screens.pop(); };
/*
Select, on which Screen should be drawn.
C3D_RenderTarget *screen: The render target.
*/
void Gui::ScreenDraw(C3D_RenderTarget *screen) {
C2D_SceneBegin(screen);
currentScreen = (screen == Top || screen == TopRight) ? 1 : 0;
}
/*
Draw a grid.
float xPos: The X-Position of the grid.
float yPos: The Y-Position of the grid.
float Width: The width of the grid.
float Height: The height of the grid.
u32 color: The color of the grid.
u32 bgColor: The BG Color of the grid.
*/
void Gui::drawGrid(float xPos, float yPos, float Width, float Height, u32 color, u32 bgColor) {
static constexpr int w = 1;
/* BG Color for the Grid. (Transparent by default.) */
Gui::Draw_Rect(xPos, yPos, Width, Height, bgColor);
/* Grid part, Top. */
Gui::Draw_Rect(xPos, yPos, Width, w, color);
/* Left. */
Gui::Draw_Rect(xPos, yPos + w, w, Height - 2 * w, color);
/* Right. */
Gui::Draw_Rect(xPos + Width - w, yPos + w, w, Height - 2 * w, color);
/* Bottom. */
Gui::Draw_Rect(xPos, yPos + Height - w, Width, w, color);
}
/*
Draw an animated selector.
float xPos: The X-Position of the selector.
float yPos: The Y-Position of the selector.
float Width: The width of the selector.
float Height: The height of the selector.
float speed: The selector animation speed. Use .030f or so.
u32 SelectorColor: The selector fade color.
u32 bgColor: The selector BG color.
*/
void Gui::drawAnimatedSelector(float xPos, float yPos, float Width, float Height, float speed, u32 SelectorColor, u32 bgColor) {
static constexpr int w = 2;
static float timer = 0.0f;
float highlight_multiplier = fmax(0.0, fabs(fmod(timer, 1.0) - 0.5) / 0.5);
u8 r = SelectorColor & 0xFF;
u8 g = (SelectorColor >> 8) & 0xFF;
u8 b = (SelectorColor >> 16) & 0xFF;
u32 color = C2D_Color32(r + (255 - r) * highlight_multiplier, g + (255 - g) * highlight_multiplier, b + (255 - b) * highlight_multiplier, 255);
/* BG Color for the Selector. */
Gui::Draw_Rect(xPos, yPos, Width, Height, bgColor);
/* Selector part, Top. */
Gui::Draw_Rect(xPos, yPos, Width, w, color);
/* Left. */
Gui::Draw_Rect(xPos, yPos + w, w, Height - 2 * w, color);
/* Right. */
Gui::Draw_Rect(xPos + Width - w, yPos + w, w, Height - 2 * w, color);
/* Bottom. */
Gui::Draw_Rect(xPos, yPos + Height - w, Width, w, color);
timer += speed;
}
-246
View File
@@ -1,246 +0,0 @@
/*
* This file is part of Universal-Core
* Copyright (C) 2020 Universal-Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version.
*/
#ifndef _UNIVERSAL_CORE_GUI_HPP
#define _UNIVERSAL_CORE_GUI_HPP
#include "screen.hpp"
#include <3ds.h>
#include <citro2d.h>
#include <citro3d.h>
namespace Gui {
/*
Clear the Text Buffer.
*/
void clearTextBufs(void);
/*
Draw a sprite from a SpriteSheet.
sheet: The SpriteSheet which should be used.
imgIndex: The index of the sprite from the sheet which should be drawn.
x: The X Position where the sprite should be drawn.
y: The Y Position where the sprite should be drawn.
ScaleX: The X-Scale for the sprite. (Optional!)
ScaleY: The Y-Scale for the sprite. (Optional!)
*/
void DrawSprite(C2D_SpriteSheet sheet, size_t imgindex, int x, int y, float ScaleX = 1, float ScaleY = 1);
/*
Initialize the GUI with Citro2D & Citro3D and initialize the Textbuffer.
call this when initializing.
*/
Result init(void);
/*
Load a Font. (BCFNT)
fnt: The C2D_Font variable which should be initialized.
Path: Path to the BCFNT file.
if you're unsure, just call 'Gui::init();' and it will load the system font.
*/
Result loadFont(C2D_Font &fnt, const char *Path = "");
/*
Unload a Font. (BCFNT)
fnt: The C2D_Font variable which should be unloaded.
*/
Result unloadFont(C2D_Font &fnt);
/*
Load a spritesheet.
Path: Path to the SpriteSheet file. (T3X)
sheet: Reference to the C2D_SpriteSheet declaration.
*/
Result loadSheet(const char *Path, C2D_SpriteSheet &sheet);
/*
Unload a spritesheet.
sheet: Reference to the C2D_SpriteSheet which should be free'd.
*/
Result unloadSheet(C2D_SpriteSheet &sheet);
/*
Exit the GUI.
Call this at exit.
*/
void exit(void);
/*
Reinit the GUI.
*/
Result reinit(void);
/*
Draws a centered String.
x: The X Offset from center. (Center: 200 px on top, 160 px on Bottom.)
y: The Y Position of the Text.
size: The size of the Text.
color: The Color of the Text.
Text: The Text which should be displayed.
maxWidth: The maxWidth for the Text. (Optional!)
maxHeight: The maxHeight of the Text. (Optional!)
fnt: The Font which should be used. Uses SystemFont by default. (Optional!)
int flags: C2D text flags to use. (Optional!)
*/
void DrawStringCentered(float x, float y, float size, u32 color, std::string Text, int maxWidth = 0, int maxHeight = 0, C2D_Font fnt = nullptr, int flags = 0);
/*
Draws a String.
x: The X Position where the Text should be drawn.
y: The Y Position where the Text should be drawn.
size: The size of the Text.
color: The Color of the Text.
Text: The Text which should be displayed.
maxWidth: The maxWidth for the Text. (Optional!)
maxHeight: The maxHeight of the Text. (Optional!)
fnt: The Font which should be used. Uses SystemFont by default. (Optional!)
flags: C2D text flags to use.
*/
void DrawString(float x, float y, float size, u32 color, std::string Text, int maxWidth = 0, int maxHeight = 0, C2D_Font fnt = nullptr, int flags = 0);
/*
Get the width of a String.
size: The size of the Text.
Text: The Text where the width should be getted from.
fnt: The Font which should be used. Uses SystemFont by default. (Optional!)
*/
float GetStringWidth(float size, std::string Text, C2D_Font fnt = nullptr);
/*
Get the size of a String.
size: The size of the Text.
width: The width of the Text.
height: The height of the Text.
Text: The Text where the size should be getted from.
fnt: The Font which should be used. Uses SystemFont by default. (Optional!)
*/
void GetStringSize(float size, float *width, float *height, std::string Text, C2D_Font fnt = nullptr);
/*
Get the height of a String.
size: The size of the Text.
Text: The Text where the height should be getted from.
fnt: The Font which should be used. Uses SystemFont by default. (Optional!)
*/
float GetStringHeight(float size, std::string Text, C2D_Font fnt = nullptr);
/*
Draw a Rectangle.
x: X Position of the Rectangle.
y: Y Position of the Rectangle.
w: The width of the rectangle.
h: The height of the rectangle.
color: The color of the rectangle.
*/
bool Draw_Rect(float x, float y, float w, float h, u32 color);
/*
Used for the current Screen's Draw. (Optional!)
stack: Is it the stack variant?
*/
void DrawScreen(bool stack = false);
/*
Used for the current Screen's Logic. (Optional!)
hDown: the hidKeysDown() variable.
hHeld: the HidKeysHeld() variable.
touch: The TouchPosition variable.
waitFade: Wheter to wait until the fade ends.
stack: Is it the stack variant?
*/
void ScreenLogic(u32 hDown, u32 hHeld, touchPosition touch, bool waitFade = true, bool stack = false);
/*
Transfer the Temp Screen to the used one. (Optional!)
stack: Is it the stack variant?
It will check, if the tempScreen variable is not nullptr, so don't worry.
*/
void transferScreen(bool stack = false);
/*
Set a specific Screen with switch function. (Optional!)
screen: unique_ptr of the screen. (Optional by using the screen class.)
screenSwitch: Wheter to switch to the current screen.
stack: Is it the stack variant?
*/
void setScreen(std::unique_ptr<Screen> screen, bool fade = false, bool stack = false);
/*
Fades into screens and calls the constructor after it. (Optional!)
fadeoutFrames: Amount of frames for fadeout.
fadeinFrames: Amount of frames for fadein.
stack: Is it the stack variant?
*/
void fadeEffects(int fadeoutFrames = 6, int fadeinFrames = 6, bool stack = false);
void screenBack(bool fade = false); // Goes a screen back. (Set!) (Stack only!)
void screenBack2(); // Goes a screen back.(Action!) (Stack only!)
/*
Set on which screen to draw.
screen: The render target. (Targets are inside the screenCommon.hpp file.)
*/
void ScreenDraw(C3D_RenderTarget * screen);
/*
Draws a grid.
xPos: X Position of the grid.
yPos: Y Position of the grid.
Width: Width of the grid.
Height: Height of the grid.
color: Color of the grid.
bgColor: The BG Color from the grid. (Optional! It's transparent by default.)
*/
void drawGrid(float xPos, float yPos, float Width, float Height, u32 color, u32 bgColor = C2D_Color32(0, 0, 0, 0));
/*
Draws an animated selector.
xPos: X Position of the selector.
yPos: Y Position of the Selector.
Width: Width of the Selector.
Height: Height of the Selector.
speed: The speed of the animation. (Use .030f or something by default.)
SelectorColor: The Color of the Selector outline.
bgColor: The BG Color from the selector. (Optional! It's transparent by default.)
*/
void drawAnimatedSelector(float xPos, float yPos, float Width, float Height, float speed, u32 SelectorColor, u32 bgColor = C2D_Color32(0, 0, 0, 0));
};
#endif
-40
View File
@@ -1,40 +0,0 @@
/*
* This file is part of Universal-Core
* Copyright (C) 2020 Universal-Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version.
*/
#ifndef _UNIVERSAL_CORE_SCREEN_HPP
#define _UNIVERSAL_CORE_SCREEN_HPP
#include <3ds.h>
#include <memory>
class Screen {
public:
virtual ~Screen() {}
virtual void Logic(u32 hDown, u32 hHeld, touchPosition touch) = 0;
virtual void Draw() const = 0;
};
#endif
-37
View File
@@ -1,37 +0,0 @@
/*
* This file is part of Universal-Core
* Copyright (C) 2020 Universal-Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version.
*/
#ifndef _UNIVERSAL_CORE_SCREENCOMMON_HPP
#define _UNIVERSAL_CORE_SCREENCOMMON_HPP
#include "gui.hpp"
#include "structs.hpp"
extern C3D_RenderTarget *Top, *TopRight, *Bottom;
extern bool fadeout, fadein, fadeout2, fadein2;
extern int fadealpha, fadecolor;
#endif
-49
View File
@@ -1,49 +0,0 @@
/*
* This file is part of Universal-Core
* Copyright (C) 2020 Universal-Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version.
*/
#ifndef _UNIVERSAL_CORE_STRUCTS_HPP
#define _UNIVERSAL_CORE_STRUCTS_HPP
#include <string>
class Structs {
public:
struct ButtonPos {
int x;
int y;
int w;
int h;
};
struct Key {
std::string character;
int x;
int y;
int w;
};
};
#endif
Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.
+24 -24
View File
@@ -11,28 +11,28 @@ TitleInfo:
UniqueId : 0x42042 UniqueId : 0x42042
Option: Option:
UseOnSD : true # true si l'application doit être installée sur SD UseOnSD : true # true if App is to be installed to SD
FreeProductCode : true # Supprime les limitations sur ProductCode FreeProductCode : true # Removes limitations on ProductCode
MediaFootPadding : false # Si de vrais fichiers CCI sont créés avec un remplissage MediaFootPadding : false # If true CCI files are created with padding
EnableCrypt : false # Active le cryptage pour NCCH et CIA EnableCrypt : false # Enables encryption for NCCH and CIA
EnableCompress : true # Compresse le cas échéant (actuellement uniquement exefs: /. Code) EnableCompress : true # Compresses where applicable (currently only exefs:/.code)
AccessControlInfo: AccessControlInfo:
CoreVersion : 2 CoreVersion : 2
# Version du format Exheader # Exheader Format Version
DescVersion : 2 DescVersion : 2
# Version minimale requise du noyau (ci-dessous est pour 4.5.0) # Minimum Required Kernel Version (below is for 4.5.0)
ReleaseKernelMajor : "02" ReleaseKernelMajor : "02"
ReleaseKernelMinor : "33" ReleaseKernelMinor : "33"
# ExtData # ExtData
UseExtSaveData : false # active ExtData UseExtSaveData : false # enables ExtData
#ExtSaveDataId : 0x300 # définissez ceci uniquement lorsque l'ID est différent de UniqueId #ExtSaveDataId : 0x300 # only set this when the ID is different to the UniqueId
# FS: autorisations d'accès aux archives USER # FS:USER Archive Access Permissions
# commenter si nécessaire # Uncomment as required
FileSystemAccess: FileSystemAccess:
- CategorySystemApplication - CategorySystemApplication
- CategoryHardwareCheck - CategoryHardwareCheck
@@ -66,13 +66,13 @@ AccessControlInfo:
#- CreateSeed #- CreateSeed
- UseCardSpi - UseCardSpi
# Paramètres de processus # Process Settings
MemoryType : Application # Application/System/Base MemoryType : Application # Application/System/Base
SystemMode : 64MB # 64MB(Defaut)/96MB/80MB/72MB/32MB SystemMode : 64MB # 64MB(Default)/96MB/80MB/72MB/32MB
IdealProcessor : 0 IdealProcessor : 0
AffinityMask : 1 AffinityMask : 1
Priority : 16 Priority : 16
MaxCpu : 0x9E # Defaut MaxCpu : 0x9E # Default
HandleTableSize : 0x200 HandleTableSize : 0x200
DisableDebug : false DisableDebug : false
EnableForceDebug : false EnableForceDebug : false
@@ -84,19 +84,19 @@ AccessControlInfo:
RunnableOnSleep : false RunnableOnSleep : false
SpecialMemoryArrange : true SpecialMemoryArrange : true
# Paramètres de processus exclusifs New3DS # New3DS Exclusive Process Settings
SystemModeExt : Legacy # Legacy (par défaut) / 124 Mo / 178 Mo Legacy: utilisez le mode système Old3DS SystemModeExt : Legacy # Legacy(Default)/124MB/178MB Legacy:Use Old3DS SystemMode
CpuSpeed : 804MHz # 268MHz(Defaut)/804MHz CpuSpeed : 804MHz # 268MHz(Default)/804MHz
EnableL2Cache : true # false (par défaut) / true EnableL2Cache : true # false(default)/true
CanAccessCore2 : true CanAccessCore2 : true
# Correspondances dadresses virtuelles # Virtual Address Mappings
IORegisterMapping: IORegisterMapping:
- 1ff00000-1ff7ffff # DSP memory - 1ff00000-1ff7ffff # DSP memory
MemoryMapping: MemoryMapping:
- 1f000000-1f5fffff:r # VRAM - 1f000000-1f5fffff:r # VRAM
# SVC accessibles, <Name>:<ID> # Accessible SVCs, <Name>:<ID>
SystemCallAccess: SystemCallAccess:
ControlMemory: 1 ControlMemory: 1
QueryMemory: 2 QueryMemory: 2
@@ -206,8 +206,8 @@ AccessControlInfo:
KernelSetState: 124 KernelSetState: 124
QueryProcessMemory: 125 QueryProcessMemory: 125
# Liste des services # Service List
# 34 services maximum (32 si le micrologiciel est antérieur à la version 9.6.0) # Maximum 34 services (32 if firmware is prior to 9.6.0)
ServiceAccessControl: ServiceAccessControl:
- APT:U - APT:U
- ac:u - ac:u
@@ -246,8 +246,8 @@ SystemControlInfo:
RemasterVersion: $(APP_VERSION_MAJOR) RemasterVersion: $(APP_VERSION_MAJOR)
StackSize: 0x40000 StackSize: 0x40000
# Les modules qui exécutent les services énumérés ci-dessus doivent être inclus sous # Modules that run services listed above should be included below
# 48 dépendances maximum # Maximum 48 dependencies
# <module name>:<module titleid> # <module name>:<module titleid>
Dependency: Dependency:
ac: 0x0004013000002402 ac: 0x0004013000002402
+50 -37
View File
@@ -1,37 +1,50 @@
--atlas -f rgba -z auto --atlas -f rgba -z auto
sprites/add.png sprites/add.png
sprites/add_font.png sprites/add_font.png
sprites/arrow.png sprites/arrow.png
sprites/checked.png sprites/battery/battery_0.png
sprites/delete.png sprites/battery/battery_1.png
sprites/download.png sprites/battery/battery_2.png
sprites/info.png sprites/battery/battery_3.png
sprites/keyboard.png sprites/battery/battery_4.png
sprites/list.png sprites/battery/battery_blink.png
sprites/noIcon.png sprites/battery/battery_charge.png
sprites/notes.png sprites/battery/battery_charge_full.png
sprites/qr_code.png sprites/cancel.png
sprites/queue0.png sprites/checked.png
sprites/queue1.png sprites/delete.png
sprites/queue2.png sprites/download.png
sprites/queue3.png sprites/info.png
sprites/queue4.png sprites/installed.png
sprites/queue5.png sprites/keyboard.png
sprites/queue6.png sprites/langs/jp.png
sprites/queue7.png sprites/langs/ko.png
sprites/screenshot.png sprites/langs/zh-CN.png
sprites/search.png sprites/langs/zh-TW.png
sprites/settings.png sprites/list.png
sprites/shortcut.png sprites/noIcon.png
sprites/sort.png sprites/notes.png
sprites/sort_checked.png sprites/qr_code.png
sprites/sort_unchecked.png sprites/queue0.png
sprites/toggle_off.png sprites/queue1.png
sprites/toggle_on.png sprites/queue2.png
sprites/unchecked.png sprites/queue3.png
sprites/DarkStore.png sprites/queue4.png
sprites/DarkStore-core.png sprites/queue5.png
sprites/update.png sprites/queue6.png
sprites/update_app.png sprites/queue7.png
sprites/update_filter.png sprites/screenshot.png
sprites/search.png
sprites/settings.png
sprites/shortcut.png
sprites/sort.png
sprites/sort_checked.png
sprites/sort_unchecked.png
sprites/toggle_off.png
sprites/toggle_on.png
sprites/unchecked.png
sprites/darkstore_banner.png
sprites/update.png
sprites/update_app.png
sprites/update_filter.png
Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 951 B

After

Width:  |  Height:  |  Size: 641 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 894 B

After

Width:  |  Height:  |  Size: 612 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 525 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 532 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 960 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 426 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 669 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 726 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 978 B

After

Width:  |  Height:  |  Size: 669 B

BIN
View File
Binary file not shown.
+2
View File
@@ -0,0 +1,2 @@
@echo off
make clean
+7 -3
View File
@@ -1,3 +1,7 @@
files: "project_id_env": "UU_CROWDIN_ID"
- source: /romfs/lang/en/app.json "api_token_env": "CROWDIN_TOKEN"
translation: /romfs/lang/%two_letters_code%/app.json preserve_hierarchy: true
files:
- source: /romfs/lang/en/app.json
translation: /romfs/lang/%two_letters_code%/app.json
+47 -45
View File
@@ -1,46 +1,48 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_COMMON_HPP #ifndef _DARKSTORE_COMMON_HPP
#define _DARKSTORE_COMMON_HPP #define _DARKSTORE_COMMON_HPP
#include <3ds.h> #include "config.hpp"
#include "config.hpp" #include "gfx.hpp"
#include "gfx.hpp" #include "lang.hpp"
#include "lang.hpp" #include "msg.hpp"
#include "msg.hpp" #include "screenCommon.hpp"
#include "screenCommon.hpp" #include <3ds.h>
#include <vector>
#define _STORE_PATH "sdmc:/3ds/DarkStore/stores/"
#define _META_PATH "sdmc:/3ds/DarkStore/MetaData.json" #define _STORE_PATH "sdmc:/3ds/DarkStore/stores/"
#define _ESHOP_VERSION 4 #define _META_PATH "sdmc:/3ds/DarkStore/MetaData.json"
#define _THEME_AMOUNT 2
inline std::unique_ptr<Config> config; #define _STORE_VERSION 4
inline uint32_t hRepeat, hDown, hHeld;
inline touchPosition touch; inline std::unique_ptr<Config> config;
inline C2D_Font font; inline uint32_t hRepeat, hDown, hHeld;
inline touchPosition touch;
inline C2D_Font font;
#endif #endif
+56 -80
View File
@@ -1,81 +1,57 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_GFX_HPP #ifndef _DARKSTORE_GFX_HPP
#define _DARKSTORE_GFX_HPP #define _DARKSTORE_GFX_HPP
#include "common.hpp" #include "common.hpp"
#include "sprites.h" #include "sprites.h"
#include <citro2d.h> #include "theme.hpp"
#include <string> #include <citro2d.h>
#include <string>
/*
Définissez toutes les couleurs utilisées, pour des changements plus faciles. extern std::unique_ptr<Theme> UIThemes;
*/
/* Standard Colors. */
/* Couleurs Standard. */ #define WHITE C2D_Color32(255, 255, 255, 255)
#define WHITE C2D_Color32(255, 255, 255, 255) #define BLACK C2D_Color32(0, 0, 0, 255)
#define BLACK C2D_Color32(0, 0, 0, 255) #define TRANSPARENT C2D_Color32(0, 0, 0, 0)
#define TRANSPARENT C2D_Color32(0, 0, 0, 0) #define DIM_COLOR C2D_Color32(0, 0, 0, 190)
#define DIM_COLOR C2D_Color32(0, 0, 0, 190)
namespace GFX {
/* Barres, Textes, BG Couleurs. */ void DrawTop(void);
#define TEXT_COLOR WHITE void DrawBottom();
#define BAR_COLOR C2D_Color32(50, 73, 98, 255) void DrawSprite(int img, int x, int y, float ScaleX = 1, float ScaleY = 1);
#define BAR_OUTL_COLOR C2D_Color32(25, 30, 53, 255) void DrawBox(float xPos, float yPos, float width = 50, float height = 50, bool selected = false, uint32_t clr = UIThemes->BoxInside());
#define BG_COLOR C2D_Color32(255, 125, 0, 255) void DrawCheckbox(float xPos, float yPos, bool selected);
void DrawToggle(float xPos, float yPos, bool toggled);
/* Entrée Des Couleurs. */ void DrawTime();
#define ENTRY_BAR_COLOR BAR_COLOR void DrawBattery();
#define ENTRY_BAR_OUTL_COLOR BAR_OUTL_COLOR void HandleBattery();
void DrawIcon(const int Idx, int X, int Y, uint32_t Color = UIThemes->SideBarIconColor(), float BlendPower = 1.0f, float ScaleX = 1, float ScaleY = 1);
/* Entrée Des Couleurs De La Boîte. */ };
#define BOX_INSIDE_COLOR C2D_Color32(28, 33, 58, 255)
#define BOX_SELECTED_COLOR C2D_Color32(108, 130, 155, 255)
#define BOX_UNSELECTED_COLOR BLACK
/* Couleurs De La Barre De Progression. */
#define PROGRESSBAR_OUT_COLOR BOX_INSIDE_COLOR
#define PROGRESSBAR_IN_COLOR SIDEBAR_UNSELECTED_COLOR
/* Couleurs du menu de recherche. */
#define SEARCH_BAR_COLOR C2D_Color32(51, 75, 102, 255)
#define SEARCH_BAR_OUTL_COLOR BAR_OUTL_COLOR
/* Sidebar Couleurs. */
#define SIDEBAR_SELECTED_COLOR C2D_Color32(108, 130, 155, 255)
#define SIDEBAR_UNSELECTED_COLOR C2D_Color32(77, 101, 128, 255)
namespace GFX {
void DrawTop(void);
void DrawBottom();
void DrawSprite(int img, int x, int y, float ScaleX = 1, float ScaleY = 1);
void DrawBox(float xPos, float yPos, float width = 50, float height = 50, bool selected = false, uint32_t clr = BOX_INSIDE_COLOR);
void DrawCheckbox(float xPos, float yPos, bool selected);
void DrawToggle(float xPos, float yPos, bool toggled);
};
#endif #endif
+38 -38
View File
@@ -1,39 +1,39 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_MSG_HPP #ifndef _DARKSTORE_MSG_HPP
#define _DARKSTORE_MSG_HPP #define _DARKSTORE_MSG_HPP
#include <string> #include <string>
namespace Msg { namespace Msg {
void DisplayMsg(const std::string &Text); void DisplayMsg(const std::string &Text);
void DisplayWarnMsg(const std::string &Text); void DisplayWarnMsg(const std::string &Text);
bool promptMsg(const std::string &promptMsg); bool promptMsg(const std::string &promptMsg);
void waitMsg(const std::string &msg); void waitMsg(const std::string &msg);
}; };
#endif #endif
+40 -40
View File
@@ -1,41 +1,41 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_INIT_HPP #ifndef _DARKSTORE_INIT_HPP
#define _DARKSTORE_INIT_HPP #define _DARKSTORE_INIT_HPP
#include <3ds.h> #include <3ds.h>
namespace Init { namespace Init {
Result Initialize(); Result Initialize();
Result MainLoop(); Result MainLoop();
Result Exit(); Result Exit();
void LoadFont(); void LoadFont();
void UnloadFont(); void UnloadFont();
}; };
#endif #endif
+36 -36
View File
@@ -1,37 +1,37 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_KEYBOARD_HPP #ifndef _DARKSTORE_KEYBOARD_HPP
#define _DARKSTORE_KEYBOARD_HPP #define _DARKSTORE_KEYBOARD_HPP
#include "storeEntry.hpp" #include "storeEntry.hpp"
#include <string> #include <string>
namespace Input { namespace Input {
std::string setkbdString(uint maxLength, const std::string &Text, const std::vector<std::unique_ptr<StoreEntry>> &entries); std::string setkbdString(uint maxLength, const std::string &Text, const std::vector<std::unique_ptr<StoreEntry>> &entries);
}; };
#endif #endif
+40 -41
View File
@@ -1,42 +1,41 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_OVERLAY_HPP #ifndef _DARKSTORE_OVERLAY_HPP
#define _DARKSTORE_OVERLAY_HPP #define _DARKSTORE_OVERLAY_HPP
#include "common.hpp" #include "common.hpp"
#include "store.hpp" #include <3ds.h>
#include "storeEntry.hpp"
#include <3ds.h> namespace Overlays {
void SelectStore();
namespace Overlays { void SelectLanguage();
void SelectStore(std::unique_ptr<Store> &store, std::vector<std::unique_ptr<StoreEntry>> &entries, std::unique_ptr<Meta> &meta); void ShowCredits();
void SelectLanguage(const std::unique_ptr<Store> &store); std::string SelectDir(const std::string &oldDir, const std::string &msg);
void ShowCredits(); void SelectTheme();
std::string SelectDir(const std::string &oldDir, const std::string &msg, const std::unique_ptr<Store> &store); };
};
#endif #endif
+99 -125
View File
@@ -1,126 +1,100 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
/* /*
* This file is part of Universal-Updater * This file is part of PKSM
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2016-2020 Bernardo Giordano, Admiral Fish, piepie62
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
/* #ifndef _DARKSTORE_QR_CODE_HPP
* This file is part of PKSM #define _DARKSTORE_QR_CODE_HPP
* Copyright (C) 2016-2020 Bernardo Giordano, Admiral Fish, piepie62
* #include "common.hpp"
* This program is free software: you can redistribute it and/or modify #include "quirc.hpp"
* it under the terms of the GNU General Public License as published by #include <atomic>
* the Free Software Foundation, either version 3 of the License, or #include <3ds.h>
* (at your option) any later version. #include <array>
* #include <vector>
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of class QRCode {
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the public:
* GNU General Public License for more details. QRCode();
* ~QRCode();
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. void drawThread();
* void captureThread();
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: void handler(std::string &result);
* * Requiring preservation of specified reasonable legal notices or bool done() const { return this->finished; };
* author attributions in that material or in the Appropriate Legal bool cancelled() const { return this->cancel; };
* Notices displayed by works containing it. void List(bool v) { this->displayList = v; };
* * Prohibiting misrepresentation of the origin of that material, private:
* or requiring that modified versions of such material be marked in void buffToImage();
* reasonable ways as different from the original version. void finish();
*/ std::array<u16, 400 * 240> cameraBuffer;
LightLock bufferLock;
#ifndef _DARKSTORE_QR_CODE_HPP C2D_Image image;
#define _DARKSTORE_QR_CODE_HPP LightLock imageLock;
quirc *qrData;
#include "common.hpp" Handle exitEvent;
#include "quirc.hpp" static constexpr Tex3DS_SubTexture subtex = { 512, 256, 0.0f, 1.0f, 1.0f, 0.0f };
#include <atomic> std::atomic<bool> finished = false;
#include <3ds.h> bool capturing = false;
#include <array> bool cancel = false;
#include <vector> bool displayList = false;
int selectedStore = 0, sPos = 0;
class QRCode { std::vector<StoreList> stores = { };
public: std::vector<u8> out;
QRCode(); };
~QRCode();
/*
void drawThread(); This is, what should get called.
void captureThread(); */
void handler(std::string &result); namespace QR_Scanner {
bool done() const { return this->finished; }; std::string StoreHandle();
bool cancelled() const { return this->cancel; }; };
void List(bool v) { this->displayList = v; };
private:
void buffToImage();
void finish();
std::array<u16, 400 * 240> cameraBuffer;
LightLock bufferLock;
C2D_Image image;
LightLock imageLock;
quirc *qrData;
Handle exitEvent;
static constexpr Tex3DS_SubTexture subtex = { 512, 256, 0.0f, 1.0f, 1.0f, 0.0f };
std::atomic<bool> finished = false;
bool capturing = false;
bool cancel = false;
bool displayList = false;
int selectedStore = 0, sPos = 0;
std::vector<StoreList> stores = { };
std::vector<u8> out;
};
/*
This is, what should get called.
*/
namespace QR_Scanner {
std::string StoreHandle();
};
#endif #endif
+164 -190
View File
@@ -1,191 +1,165 @@
/* /* quirc -- QR-code recognition library
* This file is part of Universal-Updater * Copyright (C) 2010-2012 Daniel Beer <dlbeer@gmail.com>
* Copyright (C) 2019-2020 Universal-Team *
* * Permission to use, copy, modify, and/or distribute this software for any
* This program is free software: you can redistribute it and/or modify * purpose with or without fee is hereby granted, provided that the above
* it under the terms of the GNU General Public License as published by * copyright notice and this permission notice appear in all copies.
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* This program is distributed in the hope that it will be useful, * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* but WITHOUT ANY WARRANTY; without even the implied warranty of * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* GNU General Public License for more details. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
* You should have received a copy of the GNU General Public License */
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* #ifndef QUIRC_HPP
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: #define QUIRC_HPP
* * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal #include <stdint.h>
* Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, struct quirc;
* or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. /* Obtain the library version string. */
*/ const char *quirc_version(void);
/* quirc -- QR-code recognition library /* Construct a new QR-code recognizer. This function will return NULL
* Copyright (C) 2010-2012 Daniel Beer <dlbeer@gmail.com> * if sufficient memory could not be allocated.
* */
* Permission to use, copy, modify, and/or distribute this software for any struct quirc *quirc_new(void);
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies. /* Destroy a QR-code recognizer. */
* void quirc_destroy(struct quirc *q);
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF /* Resize the QR-code recognizer. The size of an image must be
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * specified before codes can be analyzed.
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES *
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * This function returns 0 on success, or -1 if sufficient memory could
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * not be allocated.
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
*/ int quirc_resize(struct quirc *q, int w, int h);
#ifndef QUIRC_HPP /* These functions are used to process images for QR-code recognition.
#define QUIRC_HPP * quirc_begin() must first be called to obtain access to a buffer into
* which the input image should be placed. Optionally, the current
#include <stdint.h> * width and height may be returned.
*
struct quirc; * After filling the buffer, quirc_end() should be called to process
* the image for QR-code recognition. The locations and content of each
/* Obtain the library version string. */ * code may be obtained using accessor functions described below.
const char *quirc_version(void); */
uint8_t *quirc_begin(struct quirc *q, int *w, int *h);
/* Construct a new QR-code recognizer. This function will return NULL void quirc_end(struct quirc *q);
* if sufficient memory could not be allocated.
*/ /* This structure describes a location in the input image buffer. */
struct quirc *quirc_new(void); struct quirc_point {
int x;
/* Destroy a QR-code recognizer. */ int y;
void quirc_destroy(struct quirc *q); };
/* Resize the QR-code recognizer. The size of an image must be /* This enum describes the various decoder errors which may occur. */
* specified before codes can be analyzed. typedef enum {
* QUIRC_SUCCESS = 0,
* This function returns 0 on success, or -1 if sufficient memory could QUIRC_ERROR_INVALID_GRID_SIZE,
* not be allocated. QUIRC_ERROR_INVALID_VERSION,
*/ QUIRC_ERROR_FORMAT_ECC,
int quirc_resize(struct quirc *q, int w, int h); QUIRC_ERROR_DATA_ECC,
QUIRC_ERROR_UNKNOWN_DATA_TYPE,
/* These functions are used to process images for QR-code recognition. QUIRC_ERROR_DATA_OVERFLOW,
* quirc_begin() must first be called to obtain access to a buffer into QUIRC_ERROR_DATA_UNDERFLOW
* which the input image should be placed. Optionally, the current } quirc_decode_error_t;
* width and height may be returned.
* /* Return a string error message for an error code. */
* After filling the buffer, quirc_end() should be called to process const char *quirc_strerror(quirc_decode_error_t err);
* the image for QR-code recognition. The locations and content of each
* code may be obtained using accessor functions described below. /* Limits on the maximum size of QR-codes and their content. */
*/ #define QUIRC_MAX_BITMAP 3917
uint8_t *quirc_begin(struct quirc *q, int *w, int *h); #define QUIRC_MAX_PAYLOAD 8896
void quirc_end(struct quirc *q);
/* QR-code ECC types. */
/* This structure describes a location in the input image buffer. */ #define QUIRC_ECC_LEVEL_M 0
struct quirc_point { #define QUIRC_ECC_LEVEL_L 1
int x; #define QUIRC_ECC_LEVEL_H 2
int y; #define QUIRC_ECC_LEVEL_Q 3
};
/* QR-code data types. */
/* This enum describes the various decoder errors which may occur. */ #define QUIRC_DATA_TYPE_NUMERIC 1
typedef enum { #define QUIRC_DATA_TYPE_ALPHA 2
QUIRC_SUCCESS = 0, #define QUIRC_DATA_TYPE_BYTE 4
QUIRC_ERROR_INVALID_GRID_SIZE, #define QUIRC_DATA_TYPE_KANJI 8
QUIRC_ERROR_INVALID_VERSION,
QUIRC_ERROR_FORMAT_ECC, /* Common character encodings */
QUIRC_ERROR_DATA_ECC, #define QUIRC_ECI_ISO_8859_1 1
QUIRC_ERROR_UNKNOWN_DATA_TYPE, #define QUIRC_ECI_IBM437 2
QUIRC_ERROR_DATA_OVERFLOW, #define QUIRC_ECI_ISO_8859_2 4
QUIRC_ERROR_DATA_UNDERFLOW #define QUIRC_ECI_ISO_8859_3 5
} quirc_decode_error_t; #define QUIRC_ECI_ISO_8859_4 6
#define QUIRC_ECI_ISO_8859_5 7
/* Return a string error message for an error code. */ #define QUIRC_ECI_ISO_8859_6 8
const char *quirc_strerror(quirc_decode_error_t err); #define QUIRC_ECI_ISO_8859_7 9
#define QUIRC_ECI_ISO_8859_8 10
/* Limits on the maximum size of QR-codes and their content. */ #define QUIRC_ECI_ISO_8859_9 11
#define QUIRC_MAX_BITMAP 3917 #define QUIRC_ECI_WINDOWS_874 13
#define QUIRC_MAX_PAYLOAD 8896 #define QUIRC_ECI_ISO_8859_13 15
#define QUIRC_ECI_ISO_8859_15 17
/* QR-code ECC types. */ #define QUIRC_ECI_SHIFT_JIS 20
#define QUIRC_ECC_LEVEL_M 0 #define QUIRC_ECI_UTF_8 26
#define QUIRC_ECC_LEVEL_L 1
#define QUIRC_ECC_LEVEL_H 2 /* This structure is used to return information about detected QR codes
#define QUIRC_ECC_LEVEL_Q 3 * in the input image.
*/
/* QR-code data types. */ struct quirc_code {
#define QUIRC_DATA_TYPE_NUMERIC 1 /* The four corners of the QR-code, from top left, clockwise */
#define QUIRC_DATA_TYPE_ALPHA 2 struct quirc_point corners[4];
#define QUIRC_DATA_TYPE_BYTE 4
#define QUIRC_DATA_TYPE_KANJI 8 /* The number of cells across in the QR-code. The cell bitmap
* is a bitmask giving the actual values of cells. If the cell
/* Common character encodings */ * at (x, y) is black, then the following bit is set:
#define QUIRC_ECI_ISO_8859_1 1 *
#define QUIRC_ECI_IBM437 2 * cell_bitmap[i << 3] & (1 << (i & 7))
#define QUIRC_ECI_ISO_8859_2 4 *
#define QUIRC_ECI_ISO_8859_3 5 * where i = (y * size) + x.
#define QUIRC_ECI_ISO_8859_4 6 */
#define QUIRC_ECI_ISO_8859_5 7 int size;
#define QUIRC_ECI_ISO_8859_6 8 uint8_t cell_bitmap[QUIRC_MAX_BITMAP];
#define QUIRC_ECI_ISO_8859_7 9 };
#define QUIRC_ECI_ISO_8859_8 10
#define QUIRC_ECI_ISO_8859_9 11 /* This structure holds the decoded QR-code data */
#define QUIRC_ECI_WINDOWS_874 13 struct quirc_data {
#define QUIRC_ECI_ISO_8859_13 15 /* Various parameters of the QR-code. These can mostly be
#define QUIRC_ECI_ISO_8859_15 17 * ignored if you only care about the data.
#define QUIRC_ECI_SHIFT_JIS 20 */
#define QUIRC_ECI_UTF_8 26 int version;
int ecc_level;
/* This structure is used to return information about detected QR codes int mask;
* in the input image.
*/ /* This field is the highest-valued data type found in the QR
struct quirc_code { * code.
/* The four corners of the QR-code, from top left, clockwise */ */
struct quirc_point corners[4]; int data_type;
/* The number of cells across in the QR-code. The cell bitmap /* Data payload. For the Kanji datatype, payload is encoded as
* is a bitmask giving the actual values of cells. If the cell * Shift-JIS. For all other datatypes, payload is ASCII text.
* at (x, y) is black, then the following bit is set: */
* uint8_t payload[QUIRC_MAX_PAYLOAD];
* cell_bitmap[i << 3] & (1 << (i & 7)) int payload_len;
*
* where i = (y * size) + x. /* ECI assignment number */
*/ uint32_t eci;
int size; };
uint8_t cell_bitmap[QUIRC_MAX_BITMAP];
}; /* Return the number of QR-codes identified in the last processed
* image.
/* This structure holds the decoded QR-code data */ */
struct quirc_data { int quirc_count(const struct quirc *q);
/* Various parameters of the QR-code. These can mostly be
* ignored if you only care about the data. /* Extract the QR-code specified by the given index. */
*/ void quirc_extract(const struct quirc *q, int index,
int version; struct quirc_code *code);
int ecc_level;
int mask; /* Decode a QR-code, returning the payload data. */
quirc_decode_error_t quirc_decode(const struct quirc_code *code,
/* This field is the highest-valued data type found in the QR struct quirc_data *data);
* code.
*/
int data_type;
/* Data payload. For the Kanji datatype, payload is encoded as
* Shift-JIS. For all other datatypes, payload is ASCII text.
*/
uint8_t payload[QUIRC_MAX_PAYLOAD];
int payload_len;
/* ECI assignment number */
uint32_t eci;
};
/* Return the number of QR-codes identified in the last processed
* image.
*/
int quirc_count(const struct quirc *q);
/* Extract the QR-code specified by the given index. */
void quirc_extract(const struct quirc *q, int index,
struct quirc_code *code);
/* Decode a QR-code, returning the payload data. */
quirc_decode_error_t quirc_decode(const struct quirc_code *code,
struct quirc_data *data);
#endif #endif
+113 -139
View File
@@ -1,140 +1,114 @@
/* /* quirc -- QR-code recognition library
* This file is part of Universal-Updater * Copyright (C) 2010-2012 Daniel Beer <dlbeer@gmail.com>
* Copyright (C) 2019-2020 Universal-Team *
* * Permission to use, copy, modify, and/or distribute this software for any
* This program is free software: you can redistribute it and/or modify * purpose with or without fee is hereby granted, provided that the above
* it under the terms of the GNU General Public License as published by * copyright notice and this permission notice appear in all copies.
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* This program is distributed in the hope that it will be useful, * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* but WITHOUT ANY WARRANTY; without even the implied warranty of * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* GNU General Public License for more details. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
* You should have received a copy of the GNU General Public License */
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* #ifndef QUIRC_INTERNAL_HPP
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: #define QUIRC_INTERNAL_HPP
* * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal #include "quirc.hpp"
* Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, #define QUIRC_PIXEL_WHITE 0
* or requiring that modified versions of such material be marked in #define QUIRC_PIXEL_BLACK 1
* reasonable ways as different from the original version. #define QUIRC_PIXEL_REGION 2
*/
#ifndef QUIRC_MAX_REGIONS
/* quirc -- QR-code recognition library #define QUIRC_MAX_REGIONS 254
* Copyright (C) 2010-2012 Daniel Beer <dlbeer@gmail.com> #endif
* #define QUIRC_MAX_CAPSTONES 32
* Permission to use, copy, modify, and/or distribute this software for any #define QUIRC_MAX_GRIDS 8
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies. #define QUIRC_PERSPECTIVE_PARAMS 8
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES #if QUIRC_MAX_REGIONS < UINT8_MAX
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF typedef uint8_t quirc_pixel_t;
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR #elif QUIRC_MAX_REGIONS < UINT16_MAX
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES typedef uint16_t quirc_pixel_t;
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN #else
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF #error "QUIRC_MAX_REGIONS > 65534 is not supported"
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #endif
*/
struct quirc_region {
#ifndef QUIRC_INTERNAL_HPP struct quirc_point seed;
#define QUIRC_INTERNAL_HPP int count;
int capstone;
#include "quirc.hpp" };
#define QUIRC_PIXEL_WHITE 0 struct quirc_capstone {
#define QUIRC_PIXEL_BLACK 1 int ring;
#define QUIRC_PIXEL_REGION 2 int stone;
#ifndef QUIRC_MAX_REGIONS struct quirc_point corners[4];
#define QUIRC_MAX_REGIONS 254 struct quirc_point center;
#endif double c[QUIRC_PERSPECTIVE_PARAMS];
#define QUIRC_MAX_CAPSTONES 32
#define QUIRC_MAX_GRIDS 8 int qr_grid;
};
#define QUIRC_PERSPECTIVE_PARAMS 8
struct quirc_grid {
#if QUIRC_MAX_REGIONS < UINT8_MAX /* Capstone indices */
typedef uint8_t quirc_pixel_t; int caps[3];
#elif QUIRC_MAX_REGIONS < UINT16_MAX
typedef uint16_t quirc_pixel_t; /* Alignment pattern region and corner */
#else int align_region;
#error "QUIRC_MAX_REGIONS > 65534 is not supported" struct quirc_point align;
#endif
/* Timing pattern endpoints */
struct quirc_region { struct quirc_point tpep[3];
struct quirc_point seed; int hscan;
int count; int vscan;
int capstone;
}; /* Grid size and perspective transform */
int grid_size;
struct quirc_capstone { double c[QUIRC_PERSPECTIVE_PARAMS];
int ring; };
int stone;
struct quirc {
struct quirc_point corners[4]; uint8_t *image;
struct quirc_point center; quirc_pixel_t *pixels;
double c[QUIRC_PERSPECTIVE_PARAMS]; int w;
int h;
int qr_grid;
}; int num_regions;
struct quirc_region regions[QUIRC_MAX_REGIONS];
struct quirc_grid {
/* Capstone indices */ int num_capstones;
int caps[3]; struct quirc_capstone capstones[QUIRC_MAX_CAPSTONES];
/* Alignment pattern region and corner */ int num_grids;
int align_region; struct quirc_grid grids[QUIRC_MAX_GRIDS];
struct quirc_point align; };
/* Timing pattern endpoints */ /************************************************************************
struct quirc_point tpep[3]; * QR-code version information database
int hscan; */
int vscan;
#define QUIRC_MAX_VERSION 40
/* Grid size and perspective transform */ #define QUIRC_MAX_ALIGNMENT 7
int grid_size;
double c[QUIRC_PERSPECTIVE_PARAMS]; struct quirc_rs_params {
}; int bs; /* Block size */
int dw; /* Data words */
struct quirc { int ce; /* Correctable errors */
uint8_t *image; };
quirc_pixel_t *pixels;
int w; struct quirc_version_info {
int h; int data_bytes;
int apat[QUIRC_MAX_ALIGNMENT];
int num_regions; struct quirc_rs_params ecc[4];
struct quirc_region regions[QUIRC_MAX_REGIONS]; };
int num_capstones; extern const struct quirc_version_info quirc_version_db[QUIRC_MAX_VERSION + 1];
struct quirc_capstone capstones[QUIRC_MAX_CAPSTONES];
int num_grids;
struct quirc_grid grids[QUIRC_MAX_GRIDS];
};
/************************************************************************
* QR-code version information database
*/
#define QUIRC_MAX_VERSION 40
#define QUIRC_MAX_ALIGNMENT 7
struct quirc_rs_params {
int bs; /* Block size */
int dw; /* Data words */
int ce; /* Correctable errors */
};
struct quirc_version_info {
int data_bytes;
int apat[QUIRC_MAX_ALIGNMENT];
struct quirc_rs_params ecc[4];
};
extern const struct quirc_version_info quirc_version_db[QUIRC_MAX_VERSION + 1];
#endif #endif
+70 -73
View File
@@ -1,74 +1,71 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_MAIN_SCREEN_HPP #ifndef _DARKSTORE_MAIN_SCREEN_HPP
#define _DARKSTORE_MAIN_SCREEN_HPP #define _DARKSTORE_MAIN_SCREEN_HPP
#include "common.hpp" #include "common.hpp"
#include "store.hpp" #include "store.hpp"
#include "storeEntry.hpp" #include "storeEntry.hpp"
#include "storeUtils.hpp" #include "storeUtils.hpp"
/* /*
Modes: Modes:
0: Entry Info. 0: Entry Info.
1: Download List. 1: Download List.
2: Queue. 2: Queue.
3: Search + Favorites. 3: Search + Favorites.
4: Sorting. 4: Sorting.
5: Settings / Credits(?). 5: Settings / Credits(?).
6: Screenshot Menu. 6: Screenshot Menu.
7: Release Notes. 7: Release Notes.
*/ */
class MainScreen : public Screen { class MainScreen : public Screen {
public: public:
MainScreen(); MainScreen();
void Draw(void) const override; void Draw(void) const override;
void Logic(u32 hDown, u32 hHeld, touchPosition touch) override; void Logic(u32 hDown, u32 hHeld, touchPosition touch) override;
private: private:
std::unique_ptr<Store> store = nullptr; std::vector<std::string> dwnldList, dwnldSizes, dwnldTypes;
std::unique_ptr<Meta> meta = nullptr;
std::vector<std::unique_ptr<StoreEntry>> entries; bool initialized = false, fetchDown = false, showMarks = false, showSettings = false,
std::vector<std::string> dwnldList, dwnldSizes; ascending = false, updateFilter = false, screenshotFetch = false, canDisplay = false, isAND = true;
bool initialized = false, fetchDown = false, showMarks = false, showSettings = false, int storeMode = 0, marks = 0, markIndex = 0, sPage = 0, lMode = 0, sSelection = 0,
ascending = false, updateFilter = false, screenshotFetch = false, canDisplay = false; lastMode = 0, smallDelay = 0, sPos = 0, screenshotIndex = 0, sSize = 0, zoom = 0, scrollIndex = 0, queueIndex = 0;
int storeMode = 0, marks = 0, markIndex = 0, sPage = 0, lMode = 0, sSelection = 0, SortType sorttype = SortType::LAST_UPDATED;
lastMode = 0, smallDelay = 0, sPos = 0, screenshotIndex = 0, sSize = 0, zoom = 0, scrollIndex = 0, queueIndex = 0;
/* Title, Author, Category, Console. */
SortType sorttype = SortType::LAST_UPDATED; std::vector<bool> searchIncludes = { true, false, false, false }, installs = { };
std::string searchResult = "", screenshotName = "";
/* Titre, Auteur, Catégorie, Console. */
std::vector<bool> searchIncludes = { false, false, false, false }; C2D_Image Screenshot = { nullptr, nullptr };
std::string searchResult = "", screenshotName = ""; };
C2D_Image Screenshot = { nullptr, nullptr };
};
#endif #endif
+99 -63
View File
@@ -1,64 +1,100 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_META_HPP #ifndef _DARKSTORE_META_HPP
#define _DARKSTORE_META_HPP #define _DARKSTORE_META_HPP
#include "json.hpp" #include "json.hpp"
#include <string> #include <string>
#include <vector>
enum favoriteMarks {
STAR = 1 << 0, enum favoriteMarks {
HEART = 1 << 1, STAR = 1 << 0,
DIAMOND = 1 << 2, HEART = 1 << 1,
CLUBS = 1 << 3, DIAMOND = 1 << 2,
SPADE = 1 << 4 CLUBS = 1 << 3,
}; SPADE = 1 << 4
};
class Meta {
public: class Meta {
Meta(); public:
~Meta() { this->SaveCall(); }; Meta();
~Meta() { this->SaveCall(); };
std::string GetUpdated(const std::string &EshopName, const std::string &entry) const;
int GetMarks(const std::string &EshopName, const std::string &entry) const; std::string GetUpdated(const std::string &storeName, const std::string &entry) const;
bool UpdateAvailable(const std::string &EshopName, const std::string &entry, const std::string &updated) const; int GetMarks(const std::string &storeName, const std::string &entry) const;
bool UpdateAvailable(const std::string &storeName, const std::string &entry, const std::string &updated) const;
void SetUpdated(const std::string &EshopName, const std::string &entry, const std::string &updated) { std::vector<std::string> GetInstalled(const std::string &storeName, const std::string &entry) const;
this->metadataJson[EshopName][entry]["updated"] = updated;
}; void SetUpdated(const std::string &storeName, const std::string &entry, const std::string &updated) {
this->metadataJson[storeName][entry]["updated"] = updated;
void SetMarks(const std::string &EshopName, const std::string &entry, int marks) { };
this->metadataJson[EshopName][entry]["marks"] = marks;
}; void SetMarks(const std::string &storeName, const std::string &entry, int marks) {
this->metadataJson[storeName][entry]["marks"] = marks;
void ImportMetadata(); };
void SaveCall();
private: /* TODO: Handle this better. */
nlohmann::json metadataJson = nullptr; void SetInstalled(const std::string &storeName, const std::string &entry, const std::string &name) {
}; const std::vector<std::string> installs = this->GetInstalled(storeName, entry);
bool write = true;
if (!installs.empty()) {
write = !installs.empty();
for (int i = 0; i < (int)installs.size(); i++) {
if (installs[i] == name) {
write = false;
break;
}
}
}
if (write) this->metadataJson[storeName][entry]["installed"] += name;
}
/* Remove installed state from a download list entry. */
void RemoveInstalled(const std::string &storeName, const std::string &entry, const std::string &name) {
const std::vector<std::string> installs = this->GetInstalled(storeName, entry);
if (installs.empty()) return;
for (int i = 0; i < (int)installs.size(); i++) {
if (installs[i] == name) {
this->metadataJson[storeName][entry]["installed"].erase(i);
break;
}
}
if (this->metadataJson[storeName][entry]["installed"].empty() && this->metadataJson[storeName][entry].contains("updated")) this->metadataJson[storeName][entry].erase("updated");
}
void ImportMetadata();
void SaveCall();
private:
nlohmann::json metadataJson = nullptr;
};
#endif #endif
+100 -100
View File
@@ -1,101 +1,101 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_STORE_HPP #ifndef _DARKSTORE_STORE_HPP
#define _DARKSTORE_STORE_HPP #define _DARKSTORE_STORE_HPP
#include "json.hpp" #include "json.hpp"
#include <citro2d.h> #include <citro2d.h>
#include <string> #include <string>
class Store { class Store {
public: public:
Store(const std::string &file, const std::string &file2, bool ARGMode = false); Store(const std::string &file, const std::string &file2, bool ARGMode = false);
~Store(); ~Store();
void LoadFromFile(const std::string &file); void LoadFromFile(const std::string &file);
void loadSheets(); void loadSheets();
void unloadSheets(); void unloadSheets();
void update(const std::string &file); void update(const std::string &file);
/* Obtenir des informations sur leShop lui-même. */ /* Get Information of the Store itself. */
std::string GetEshopTitle() const; std::string GetStoreTitle() const;
std::string GetEshopAuthor() const; std::string GetStoreAuthor() const;
/* Obtenir des informations sur les entrées eShop. */ /* Get Information of the SStore entries. */
std::string GetTitleEntry(int index) const; std::string GetTitleEntry(int index) const;
std::string GetAuthorEntry(int index) const; std::string GetAuthorEntry(int index) const;
std::string GetDescriptionEntry(int index) const; std::string GetDescriptionEntry(int index) const;
std::vector<std::string> GetCategoryIndex(int index) const; std::vector<std::string> GetCategoryIndex(int index) const;
std::string GetVersionEntry(int index) const; std::string GetVersionEntry(int index) const;
std::vector<std::string> GetConsoleEntry(int index) const; std::vector<std::string> GetConsoleEntry(int index) const;
std::string GetLastUpdatedEntry(int index) const; std::string GetLastUpdatedEntry(int index) const;
std::string GetSizeEntry(int index) const; std::string GetLicenseEntry(int index) const;
std::string GetAdditionalcontentEntry(int index) const; C2D_Image GetIconEntry(int index) const;
C2D_Image GetIconEntry(int index) const; std::string GetFileSizes(int index, const std::string &entry) const;
std::string GetFileSizes(int index, const std::string &entry) const; std::string GetFileTypes(int index, const std::string &entry) const;
std::vector<std::string> GetScreenshotList(int index) const; std::vector<std::string> GetScreenshotList(int index) const;
std::vector<std::string> GetScreenshotNames(int index) const; std::vector<std::string> GetScreenshotNames(int index) const;
std::string GetReleaseNotes(int index) const; std::string GetReleaseNotes(int index) const;
std::vector<std::string> GetDownloadList(int index) const; std::vector<std::string> GetDownloadList(int index) const;
int GetStoreSize() const { return (int)this->storeJson["storeContent"].size(); }; int GetStoreSize() const { return (int)this->storeJson["storeContent"].size(); };
int GetScreenIndx() const { return this->screenIndex; }; int GetScreenIndx() const { return this->screenIndex; };
void SetScreenIndx(int v) { this->screenIndex = v; }; void SetScreenIndx(int v) { this->screenIndex = v; };
int GetEntry() const { return this->entry; }; int GetEntry() const { return this->entry; };
void SetEntry(int v) { this->entry = v; }; void SetEntry(int v) { this->entry = v; };
int GetBox() const { return this->box; }; int GetBox() const { return this->box; };
void SetBox(int v) { this->box = v; }; void SetBox(int v) { this->box = v; };
int GetDownloadSIndex() const { return this->downIndex; }; int GetDownloadSIndex() const { return this->downIndex; };
void SetDownloadSIndex(int v) { this->downIndex = v; }; void SetDownloadSIndex(int v) { this->downIndex = v; };
int GetDownloadIndex() const { return this->downEntry; }; int GetDownloadIndex() const { return this->downEntry; };
void SetDownloadIndex(int v) { this->downEntry = v; }; void SetDownloadIndex(int v) { this->downEntry = v; };
nlohmann::json &GetJson() { return this->storeJson; }; nlohmann::json &GetJson() { return this->storeJson; };
bool GetValid() const { return this->valid; }; bool GetValid() const { return this->valid; };
/* Ces deux choses sont utilisées pour le support BG personnalisé. */ /* Both of these things are used for custom BG support. */
C2D_Image GetStoreImg() const { return this->storeBG; }; C2D_Image GetStoreImg() const { return this->storeBG; };
bool customBG() const { return this->hasCustomBG; }; bool customBG() const { return this->hasCustomBG; };
/* Renvoie le nom du fichier eShop. */ /* Return filename of the Store. */
std::string GetFileName() const { return this->fileName; }; std::string GetFileName() const { return this->fileName; };
private: private:
void SetC2DBGImage(); void SetC2DBGImage();
nlohmann::json storeJson = nullptr; nlohmann::json storeJson = nullptr;
std::vector<C2D_SpriteSheet> sheets; std::vector<C2D_SpriteSheet> sheets;
C2D_Image storeBG = { nullptr }; C2D_Image storeBG = { nullptr };
bool valid = false, hasSheet = false, hasCustomBG = false; bool valid = false, hasSheet = false, hasCustomBG = false;
int screenIndex = 0, entry = 0, box = 0, downEntry = 0, downIndex = 0; int screenIndex = 0, entry = 0, box = 0, downEntry = 0, downIndex = 0;
std::string fileName = ""; std::string fileName = "";
}; };
#endif #endif
+76 -76
View File
@@ -1,77 +1,77 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_STORE_ENTRY_HPP #ifndef _DARKSTORE_STORE_ENTRY_HPP
#define _DARKSTORE_STORE_ENTRY_HPP #define _DARKSTORE_STORE_ENTRY_HPP
#include "meta.hpp" #include "meta.hpp"
#include "store.hpp" #include "store.hpp"
#include "stringutils.hpp" #include "stringutils.hpp"
class StoreEntry { class StoreEntry {
public: public:
StoreEntry(const std::unique_ptr<Store> &store, const std::unique_ptr<Meta> &meta, int index); StoreEntry(const std::unique_ptr<Store> &store, const std::unique_ptr<Meta> &meta, int index);
std::string GetTitle() const { return this->Title; }; std::string GetTitle() const { return this->Title; };
std::string GetAuthor() const { return this->Author; }; std::string GetAuthor() const { return this->Author; };
std::string GetDescription() const { return this->Description; }; std::string GetDescription() const { return this->Description; };
std::string GetCategory() const { return this->Category; }; std::string GetCategory() const { return this->Category; };
std::string GetVersion() const { return this->Version; }; std::string GetVersion() const { return this->Version; };
std::string GetConsole() const { return this->Console; }; std::string GetConsole() const { return this->Console; };
std::string GetLastUpdated() const { return this->LastUpdated; }; std::string GetLastUpdated() const { return this->LastUpdated; };
std::string GetSize() const { return this->Size; }; std::string GetLicense() const { return this->License; };
std::string GetAdditionalcontent() const { return this->Additional; }; int GetMarks() const { return this->Marks; };
int GetMarks() const { return this->Marks; };
C2D_Image GetIcon() const { return this->Icon; };
C2D_Image GetIcon() const { return this->Icon; };
int GetSheetIndex() const { return this->SheetIndex; };
int GetSheetIndex() const { return this->SheetIndex; }; int GetEntryIndex() const { return this->EntryIndex; };
int GetEntryIndex() const { return this->EntryIndex; };
std::vector<std::string> GetCategoryFull() const { return this->FullCategory; };
std::vector<std::string> GetCategoryFull() const { return this->FullCategory; }; std::vector<std::string> GetConsoleFull() const { return this->FullConsole; };
std::vector<std::string> GetConsoleFull() const { return this->FullConsole; }; std::vector<std::string> GetSizes() const { return this->Sizes; };
std::vector<std::string> GetSizes() const { return this->Sizes; }; std::vector<std::string> GetTypes() const { return this->Types; };
std::vector<std::string> GetScreenshots() const { return this->Screenshots; }; std::vector<std::string> GetScreenshots() const { return this->Screenshots; };
std::vector<std::string> GetScreenshotNames() const { return this->ScreenshotNames; }; std::vector<std::string> GetScreenshotNames() const { return this->ScreenshotNames; };
std::string GetReleaseNotes() const { return this->ReleaseNotes; }; std::string GetReleaseNotes() const { return this->ReleaseNotes; };
bool GetUpdateAvl() const { return this->UpdateAvailable; }; bool GetUpdateAvl() const { return this->UpdateAvailable; };
void SetUpdateAvl(bool v) { this->UpdateAvailable = v; }; void SetUpdateAvl(bool v) { this->UpdateAvailable = v; };
void SetMark(int marks) { void SetMark(int marks) {
this->Marks = marks; this->Marks = marks;
this->MarkString = StringUtils::GetMarkString(this->Marks); this->MarkString = StringUtils::GetMarkString(this->Marks);
}; };
private: private:
std::string Title, Author, Description, Category, Version, Console, LastUpdated, Size, MarkString, Additional, ReleaseNotes; std::string Title, Author, Description, Category, Version, Console, LastUpdated, License, MarkString, ReleaseNotes;
C2D_Image Icon; C2D_Image Icon;
int SheetIndex, EntryIndex, Marks; int SheetIndex, EntryIndex, Marks;
std::vector<std::string> FullCategory, FullConsole, Sizes, Screenshots, ScreenshotNames; std::vector<std::string> FullCategory, FullConsole, Sizes, Types, Screenshots, ScreenshotNames;
bool UpdateAvailable; bool UpdateAvailable;
}; };
#endif #endif
+120 -110
View File
@@ -1,111 +1,121 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_STORE_UTILS_HPP #ifndef _DARKSTORE_STORE_UTILS_HPP
#define _DARKSTORE_STORE_UTILS_HPP #define _DARKSTORE_STORE_UTILS_HPP
#include "common.hpp" #include "meta.hpp"
#include "store.hpp" #include "store.hpp"
#include "storeEntry.hpp" #include "storeEntry.hpp"
#include <vector> #include <vector>
enum class SortType : uint8_t { enum class SortType : uint8_t {
TITLE, TITLE,
AUTHOR, AUTHOR,
LAST_UPDATED LAST_UPDATED
}; };
namespace StoreUtils { namespace StoreUtils {
/* Grille. */ extern std::unique_ptr<Meta> meta;
void DrawGrid(const std::unique_ptr<Store> &store, const std::vector<std::unique_ptr<StoreEntry>> &entries); extern std::unique_ptr<Store> store;
void GridLogic(std::unique_ptr<Store> &store, std::vector<std::unique_ptr<StoreEntry>> &entries, int &currentMode, int &lastMode, bool &fetch, int &smallDelay); extern std::vector<std::unique_ptr<StoreEntry>> entries;
/* Top Liste. */ /* Grid. */
void DrawList(const std::unique_ptr<Store> &store, const std::vector<std::unique_ptr<StoreEntry>> &entries); void DrawGrid();
void ListLogic(std::unique_ptr<Store> &store, std::vector<std::unique_ptr<StoreEntry>> &entries, int &currentMode, int &lastMode, bool &fetch, int &smallDelay); void GridLogic(int &currentMode, int &lastMode, bool &fetch, int &smallDelay);
/* Infos Sur L'Entrée. */ /* Top List. */
void DrawEntryInfo(const std::unique_ptr<Store> &store, const std::unique_ptr<StoreEntry> &entry); void DrawList();
void EntryHandle(bool &showMark, bool &fetch, bool &sFetch, int &mode, const std::unique_ptr<StoreEntry> &entry); void ListLogic(int &currentMode, int &lastMode, bool &fetch, int &smallDelay);
/* Menu Latéral. */ /* Entry Info. */
void DrawSideMenu(int currentMenu); void DrawEntryInfo(const std::unique_ptr<StoreEntry> &entry);
void SideMenuHandle(int &currentMenu, bool &fetch, int &lastMenu); void EntryHandle(bool &showMark, bool &fetch, bool &sFetch, int &mode, const std::unique_ptr<StoreEntry> &entry);
/* Entrées Des Téléchargements. */ /* Side Menu. */
void DrawDownList(const std::unique_ptr<Store> &store, const std::vector<std::string> &entries, bool fetch, const std::unique_ptr<StoreEntry> &entry, const std::vector<std::string> &sizes); void DrawSideMenu(int currentMenu);
void DownloadHandle(const std::unique_ptr<Store> &store, const std::unique_ptr<StoreEntry> &entry, const std::vector<std::string> &entries, int &currentMenu, std::unique_ptr<Meta> &meta, const int &lastMode, int &smallDelay); void SideMenuHandle(int &currentMenu, bool &fetch, int &lastMenu);
/* Queue System. */ /* Download entries. */
void DrawQueueMenu(const int queueIndex); void DrawDownList(const std::vector<std::string> &entries, bool fetch, const std::unique_ptr<StoreEntry> &entry, const std::vector<std::string> &sizes, const std::vector<bool> &installs);
void QueueMenuHandle(int &queueIndex); void DownloadHandle(const std::unique_ptr<StoreEntry> &entry, const std::vector<std::string> &entries, int &currentMenu, const int &lastMode, int &smallDelay, std::vector<bool> &installs, const std::vector<std::string> &types);
/* Recherche + Menu Favoris. */ /* Queue System. */
void DrawSearchMenu(const std::vector<bool> &searchIncludes, const std::string &searchResult, int marks, bool updateFilter); void DrawQueueMenu(const int queueIndex);
void SearchHandle(std::unique_ptr<Store> &store, std::vector<std::unique_ptr<StoreEntry>> &entries, std::vector<bool> &searchIncludes, std::unique_ptr<Meta> &meta, std::string &searchResult, int &marks, bool &updateFilter, bool ascending, SortType sorttype); void QueueMenuHandle(int &queueIndex, int &storeMode);
/* Menu Marquer. */ /* Search + Favorite Menu. */
void DisplayMarkBox(int marks); void DrawSearchMenu(const std::vector<bool> &searchIncludes, const std::string &searchResult, int marks, bool updateFilter, bool isAND);
void MarkHandle(std::unique_ptr<StoreEntry> &entry, const std::unique_ptr<Store> &store, bool &showMark, std::unique_ptr<Meta> &meta); void SearchHandle(std::vector<bool> &searchIncludes, std::string &searchResult, int &marks, bool &updateFilter, bool ascending, SortType sorttype, bool &isAND);
/* Crédits. */ /* Mark Menu. */
void DrawCredits(); void DisplayMarkBox(int marks);
void MarkHandle(std::unique_ptr<StoreEntry> &entry, bool &showMark);
/* Screenshot menu. */
void DrawScreenshotMenu(const C2D_Image &img, const int sIndex, const bool sFetch, const int screenshotSize, const std::string &name, const int zoom, const bool canDisplay); /* Credits. */
void ScreenshotMenu(C2D_Image &img, int &sIndex, bool &sFetch, int &storeMode, const int screenshotSize, int &zoom, bool &canDisplay); void DrawCredits();
/* Paramètres. */ /* Screenshot menu. */
void DrawSettings(int page, int selection, int sPos); void DrawScreenshotMenu(const C2D_Image &img, const int sIndex, const bool sFetch, const int screenshotSize, const std::string &name, const int zoom, const bool canDisplay);
void SettingsHandle(int &page, bool &dspSettings, int &storeMode, int &selection, std::unique_ptr<Store> &store, std::vector<std::unique_ptr<StoreEntry>> &entries, std::unique_ptr<Meta> &meta, int &sPos); void ScreenshotMenu(C2D_Image &img, int &sIndex, bool &sFetch, int &storeMode, const int screenshotSize, int &zoom, bool &canDisplay);
/* Trie. */ /* Settings. */
void DrawSorting(bool asc, SortType st); void DrawSettings(int page, int selection, int sPos);
void SortHandle(std::unique_ptr<Store> &store, std::vector<std::unique_ptr<StoreEntry>> &entries, bool &asc, SortType &st); void SettingsHandle(int &page, bool &dspSettings, int &storeMode, int &selection, int &sPos);
/* Release Notes. */ /* Sorting. */
void DrawReleaseNotes(const int &scrollIndex, const std::unique_ptr<StoreEntry> &entry, const std::unique_ptr<Store> &store); void DrawSorting(bool asc, SortType st);
void ReleaseNotesLogic(int &scrollIndex, int &storeMode); void SortHandle(bool &asc, SortType &st);
bool compareTitleDescending(const std::unique_ptr<StoreEntry> &a, const std::unique_ptr<StoreEntry> &b); /* Release Notes. */
bool compareTitleAscending(const std::unique_ptr<StoreEntry> &a, const std::unique_ptr<StoreEntry> &b); size_t FindSplitPoint(const std::string &str, const std::vector<std::string> splitters);
void ProcessReleaseNotes(std::string ReleaseNotes);
bool compareAuthorDescending(const std::unique_ptr<StoreEntry> &a, const std::unique_ptr<StoreEntry> &b);
bool compareAuthorAscending(const std::unique_ptr<StoreEntry> &a, const std::unique_ptr<StoreEntry> &b); void DrawReleaseNotes(const int &scrollIndex, const std::unique_ptr<StoreEntry> &entry);
void ReleaseNotesLogic(int &scrollIndex, int &storeMode);
bool compareUpdateDescending(const std::unique_ptr<StoreEntry> &a, const std::unique_ptr<StoreEntry> &b);
bool compareUpdateAscending(const std::unique_ptr<StoreEntry> &a, const std::unique_ptr<StoreEntry> &b); bool compareTitleDescending(const std::unique_ptr<StoreEntry> &a, const std::unique_ptr<StoreEntry> &b);
bool compareTitleAscending(const std::unique_ptr<StoreEntry> &a, const std::unique_ptr<StoreEntry> &b);
void SortEntries(bool Ascending, SortType sorttype, std::vector<std::unique_ptr<StoreEntry>> &entries);
bool compareAuthorDescending(const std::unique_ptr<StoreEntry> &a, const std::unique_ptr<StoreEntry> &b);
void search(std::vector<std::unique_ptr<StoreEntry>> &entries, const std::string &query, bool title, bool author, bool category, bool console, int selectedMarks, bool updateAvl); bool compareAuthorAscending(const std::unique_ptr<StoreEntry> &a, const std::unique_ptr<StoreEntry> &b);
void FilterUpdateAvailable(std::vector<std::unique_ptr<StoreEntry>> &entries); bool compareUpdateDescending(const std::unique_ptr<StoreEntry> &a, const std::unique_ptr<StoreEntry> &b);
bool compareUpdateAscending(const std::unique_ptr<StoreEntry> &a, const std::unique_ptr<StoreEntry> &b);
void ResetAll(const std::unique_ptr<Store> &store, const std::unique_ptr<Meta> &meta, std::vector<std::unique_ptr<StoreEntry>> &entries);
}; void SortEntries(bool Ascending, SortType sorttype);
void search(const std::string &query, bool title, bool author, bool category, bool console, int selectedMarks, bool updateAvl, bool isAND);
void ResetAll();
void RefreshUpdateAVL();
void AddToQueue(int index, const std::string &entry, const std::string &entryName, const std::string &lUpdated);
void AddAllToQueue();
};
#endif #endif
+53 -47
View File
@@ -1,48 +1,54 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_ANIMATION_HPP #ifndef _DARKSTORE_ANIMATION_HPP
#define _DARKSTORE_ANIMATION_HPP #define _DARKSTORE_ANIMATION_HPP
#include <3ds.h> #include <3ds.h>
#include <string> #include <string>
enum class ProgressBar { enum class ProgressBar {
Downloading, Downloading,
Extracting, Extracting,
Installing, Installing,
Copying Copying
}; };
namespace Animation { namespace Animation {
void DrawProgressBar(u64 currentProgress, u64 totalProgress); extern int DisplayY, DisplayDelay;
void displayProgressBar(); extern bool MoveUp, DoDelay;
void DrawQueue(int x, int y); void DrawProgressBar(u64 currentProgress, u64 totalProgress);
void QueueAnimHandle(); void displayProgressBar();
};
void DrawQueue(int x, int y);
void QueueAnimHandle();
void QueueEntryDone();
void HandleQueueEntryDone();
};
#endif #endif
+46 -46
View File
@@ -1,47 +1,47 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_ARGUMENT_PARSER_HPP #ifndef _DARKSTORE_ARGUMENT_PARSER_HPP
#define _DARKSTORE_ARGUMENT_PARSER_HPP #define _DARKSTORE_ARGUMENT_PARSER_HPP
#include "json.hpp" #include "json.hpp"
#include "store.hpp" #include "store.hpp"
#include <string> #include <string>
class ArgumentParser { class ArgumentParser {
public: public:
ArgumentParser(const std::string &file, const std::string &entry, int dlIndex); ArgumentParser(const std::string &file, const std::string &entry, int dlIndex);
void Load(); void Load();
void Execute(); void Execute();
bool GetValid() const { return this->isValid; }; bool GetValid() const { return this->isValid; };
private: private:
std::unique_ptr<Store> store = nullptr; std::unique_ptr<Store> store = nullptr;
bool isValid = false; bool isValid = false;
std::string file = "", executeEntry = "", entry = ""; std::string file = "", executeEntry = "", entry = "";
int dlIndex = -1, entryIndex = -1; int dlIndex = -1, entryIndex = -1;
}; };
#endif #endif
+39 -39
View File
@@ -1,40 +1,40 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_CIA_HPP #ifndef _DARKSTORE_CIA_HPP
#define _DARKSTORE_CIA_HPP #define _DARKSTORE_CIA_HPP
#include "common.hpp" #include "common.hpp"
#include <3ds.h> #include <3ds.h>
namespace Title { namespace Title {
Result Launch(u64 titleId, FS_MediaType mediaType); Result Launch(u64 titleId, FS_MediaType mediaType);
Result DeletePrevious(u64 titleid, FS_MediaType media); Result DeletePrevious(u64 titleid, FS_MediaType media);
Result Install(const char *ciaPath, bool updateSelf); Result Install(const char *ciaPath, bool updateSelf);
}; };
#endif #endif
+128 -113
View File
@@ -1,113 +1,128 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_CONFIG_HPP #ifndef _DARKSTORE_CONFIG_HPP
#define _DARKSTORE_CONFIG_HPP #define _DARKSTORE_CONFIG_HPP
#include "json.hpp" #include "json.hpp"
#include <3ds.h> #include <3ds.h>
#include <string> #include <string>
class Config { class Config {
public: public:
Config(); Config();
void save(); void save();
void initialize(); void initialize();
void sysLang(); void sysLang();
/* Language. */ /* Language. */
std::string language() const { return this->v_language; }; std::string language() const { return this->v_language; };
void language(const std::string &v) { this->v_language = v; if (!this->changesMade) this->changesMade = true; }; void language(const std::string &v) { this->v_language = v; if (!this->changesMade) this->changesMade = true; };
/* Dernier Magasin. */ /* Last Store. */
std::string lastStore() const { return this->v_lastStore; }; std::string lastStore() const { return this->v_lastStore; };
void lastStore(const std::string &v) { this->v_lastStore = v; if (!this->changesMade) this->changesMade = true; }; void lastStore(const std::string &v) { this->v_lastStore = v; if (!this->changesMade) this->changesMade = true; };
/* Utilisation De La Liste Supérieure. */ /* Using Top List. */
bool list() const { return this->v_list; }; bool list() const { return this->v_list; };
void list(bool v) { this->v_list = v; if (!this->changesMade) this->changesMade = true; }; void list(bool v) { this->v_list = v; if (!this->changesMade) this->changesMade = true; };
/* Mise à Jour Automatique Au Démarrage. */ /* Auto update on boot. */
bool autoupdate() const { return this->v_autoUpdate; }; bool autoupdate() const { return this->v_autoUpdate; };
void autoupdate(bool v) { this->v_autoUpdate = v; if (!this->changesMade) this->changesMade = true; }; void autoupdate(bool v) { this->v_autoUpdate = v; if (!this->changesMade) this->changesMade = true; };
std::string _3dsxPath() const { return this->v_3dsxPath; }; bool _3dsxInFolder() const { return this->v_3dsxInFolder; };
void _3dsxPath(const std::string &v) { this->v_3dsxPath = v; if (!this->changesMade) this->changesMade = true; }; void _3dsxInFolder(bool v) { this->v_3dsxInFolder = v; if (!this->changesMade) this->changesMade = true; };
std::string ndsPath() const { return this->v_ndsPath; }; std::string _3dsxPath() const { return this->v_3dsxPath; };
void ndsPath(const std::string &v) { this->v_ndsPath = v; if (!this->changesMade) this->changesMade = true; }; void _3dsxPath(const std::string &v) { this->v_3dsxPath = v; if (!this->changesMade) this->changesMade = true; };
std::string gbaPath() const { return this->v_gbaPath; }; std::string ndsPath() const { return this->v_ndsPath; };
void gbaPath(const std::string &v) { this->v_gbaPath = v; if (!this->changesMade) this->changesMade = true; }; void ndsPath(const std::string &v) { this->v_ndsPath = v; if (!this->changesMade) this->changesMade = true; };
std::string archPath() const { return this->v_archivePath; }; std::string archPath() const { return this->v_archivePath; };
void archPath(const std::string &v) { this->v_archivePath = v; if (!this->changesMade) this->changesMade = true; }; void archPath(const std::string &v) { this->v_archivePath = v; if (!this->changesMade) this->changesMade = true; };
/* Récupération d'anciennes métadonnées. */ std::string firmPath() const { return this->v_firmPath; };
bool metadata() const { return this->v_metadata; }; void firmPath(const std::string &v) { this->v_firmPath = v; if (!this->changesMade) this->changesMade = true; };
void metadata(bool v) { this->v_metadata = v; if (!this->changesMade) this->changesMade = true; };
/* Fetching old metadata. */
/* Vérification des Mises à Jour de DarkStore au Démarrage. */ bool metadata() const { return this->v_metadata; };
bool updatecheck() const { return this->v_updateCheck; }; void metadata(bool v) { this->v_metadata = v; if (!this->changesMade) this->changesMade = true; };
void updatecheck(bool v) { this->v_updateCheck = v; if (!this->changesMade) this->changesMade = true; };
/* DarkStore Update check on startup. */
/* Vérification des Mises à Jour de DarkStore au Démarrage. */ bool updatecheck() const { return this->v_updateCheck; };
bool usebg() const { return this->v_showBg; }; void updatecheck(bool v) { this->v_updateCheck = v; if (!this->changesMade) this->changesMade = true; };
void usebg(bool v) { this->v_showBg = v; if (!this->changesMade) this->changesMade = true; };
/* Check for nightly/release on startup. */
/* Si vous utilisez une police personnalisée. */ bool updatenightly() const { return this->v_updateNightly; };
bool customfont() const { return this->v_customFont; }; void updatenightly(bool v) { this->v_updateNightly = v; if (!this->changesMade) this->changesMade = true; };
void customfont(bool v) { this->v_customFont = v; if (!this->changesMade) this->changesMade = true; };
/* DarkStore Update check on startup. */
/* Le chemin du raccourci. */ bool usebg() const { return this->v_showBg; };
std::string shortcut() const { return this->v_shortcutPath; }; void usebg(bool v) { this->v_showBg = v; if (!this->changesMade) this->changesMade = true; };
void shortcut(const std::string &v) { this->v_shortcutPath = v; if (!this->changesMade) this->changesMade = true; };
/* If using custom Font. */
/* If displaying changelog. */ bool customfont() const { return this->v_customFont; };
bool changelog() const { return this->v_changelog; }; void customfont(bool v) { this->v_customFont = v; if (!this->changesMade) this->changesMade = true; };
void changelog(bool v) { this->v_changelog = v; if (!this->changesMade) this->changesMade = true; };
private: /* The shortcut path. */
/* Principalement aide. */ std::string shortcut() const { return this->v_shortcutPath; };
bool getBool(const std::string &key); void shortcut(const std::string &v) { this->v_shortcutPath = v; if (!this->changesMade) this->changesMade = true; };
void setBool(const std::string &key, bool v);
int getInt(const std::string &key); /* If displaying changelog. */
void setInt(const std::string &key, int v); bool changelog() const { return this->v_changelog; };
std::string getString(const std::string &key); void changelog(bool v) { this->v_changelog = v; if (!this->changesMade) this->changesMade = true; };
void setString(const std::string &key, const std::string &v);
/* The active Theme. */
nlohmann::json json; std::string theme() const { return this->v_theme; };
bool changesMade = false; void theme(const std::string &v) { this->v_theme = v; if (!this->changesMade) this->changesMade = true; };
std::string v_language = "en", v_lastStore = "darkstore-homebrew.eshop", /* If showing prompt if action failed / succeeded. */
v_3dsxPath = "sdmc:/3ds", v_ndsPath = "sdmc:/roms/nds", v_gbaPath = "sdmc:/roms/gba", v_archivePath = "sdmc:", bool prompt() const { return this->v_prompt; };
v_shortcutPath = "sdmc:/3ds/DarkStore/shortcuts"; void prompt(bool v) { this->v_prompt = v; if (!this->changesMade) this->changesMade = true; };
private:
bool v_list = false, v_autoUpdate = true, v_metadata = true, v_updateCheck = true, /* Mainly helper. */
v_showBg = false, v_customFont = false, v_changelog = true; bool getBool(const std::string &key);
}; void setBool(const std::string &key, bool v);
int getInt(const std::string &key);
#endif void setInt(const std::string &key, int v);
std::string getString(const std::string &key);
void setString(const std::string &key, const std::string &v);
nlohmann::json json;
bool changesMade = false;
std::string v_language = "en", v_lastStore = "darkstore-homebrew.unistore",
v_3dsxPath = "sdmc:/3ds", v_ndsPath = "sdmc:/roms/nds", v_archivePath = "sdmc:",
v_shortcutPath = "sdmc:/3ds/DarkStore/shortcuts", v_firmPath = "sdmc:/luma/payloads", v_theme = "Default";
bool v_list = false, v_autoUpdate = true, v_metadata = true, v_updateCheck = true, v_updateNightly = false,
v_showBg = false, v_customFont = false, v_changelog = true, v_prompt = true, v_3dsxInFolder = false;
};
#endif
+89 -90
View File
@@ -1,90 +1,89 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_DOWNLOAD_HPP #ifndef _DARKSTORE_DOWNLOAD_HPP
#define _DARKSTORE_DOWNLOAD_HPP #define _DARKSTORE_DOWNLOAD_HPP
#include "common.hpp" #include "common.hpp"
#define APP_TITLE "DarkStore" #define APP_TITLE "DarkStore"
#define VERSION_STRING "12.0"
enum DownloadError {
enum DownloadError { DL_ERROR_NONE = 0,
DL_ERROR_NONE = 0, DL_ERROR_WRITEFILE,
DL_ERROR_WRITEFILE, DL_ERROR_ALLOC,
DL_ERROR_ALLOC, DL_ERROR_STATUSCODE,
DL_ERROR_STATUSCODE, DL_ERROR_GIT,
DL_ERROR_GIT, DL_CANCEL, // No clue if that's needed tho.
DL_CANCEL, // Aucune idée si cest nécessaire. };
};
struct StoreList {
struct StoreList { std::string Title;
std::string Title; std::string Author;
std::string Author; std::string URL;
std::string URL; std::string Description;
std::string Description; };
};
struct DSUpdate {
struct DSUpdate { bool Available = false;
bool Available = false; std::string Notes = "";
std::string Notes = ""; std::string Version = "";
std::string Version = ""; };
};
Result downloadToFile(const std::string &url, const std::string &path);
Result downloadToFile(const std::string &url, const std::string &path); Result downloadFromRelease(const std::string &url, const std::string &asset, const std::string &path, bool includePrereleases);
Result downloadFromRelease(const std::string &url, const std::string &asset, const std::string &path, bool includePrereleases);
/*
/* Check Wi-Fi status.
Vérifiez l’état du Wi-Fi. @return True if Wi-Fi is connected; false if not.
@return True si le Wi-Fi est connecté ; false si non. */
*/ bool checkWifiStatus(void);
bool checkWifiStatus(void);
/*
/* Display "Please connect to Wi-Fi" for 2s.
Afficher "Veuillez vous connecter au Wi-Fi" pour 2s. */
*/ void notConnectedMsg(void);
void notConnectedMsg(void);
/*
/* Display "Not Implemented Yet" for 2s.
Affiche "Not Implemented Yet" pour 2s. */
*/ void notImplemented(void);
void notImplemented(void);
/*
/* Display the done msg.
Afficher le msg done. */
*/ void doneMsg(void);
void doneMsg(void);
bool IsUpdateAvailable(const std::string &URL, int revCurrent);
bool IsUpdateAvailable(const std::string &URL, int revCurrent); bool DownloadStore(const std::string &URL, int currentRev, std::string &fl, bool isDownload = false, bool isDS = false);
bool DownloadEshop(const std::string &URL, int currentRev, std::string &fl, bool isDownload = false, bool isUDB = false); bool DownloadSpriteSheet(const std::string &URL, const std::string &file);
bool DownloadSpriteSheet(const std::string &URL, const std::string &file); DSUpdate IsDSUpdateAvailable();
DSUpdate IsDSUpdateAvailable(); void UpdateAction();
void UpdateAction(); std::vector<StoreList> FetchStores();
std::vector<StoreList> FetchStores(); C2D_Image FetchScreenshot(const std::string &URL);
C2D_Image FetchScreenshot(const std::string &URL); std::string GetChangelog();
std::string GetChangelog();
#endif
#endif
+45 -45
View File
@@ -1,46 +1,46 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_EXTRACT_HPP #ifndef _DARKSTORE_EXTRACT_HPP
#define _DARKSTORE_EXTRACT_HPP #define _DARKSTORE_EXTRACT_HPP
#include "common.hpp" #include "common.hpp"
enum ExtractError { enum ExtractError {
EXTRACT_ERROR_NONE = 0, EXTRACT_ERROR_NONE = 0,
EXTRACT_ERROR_ARCHIVE, EXTRACT_ERROR_ARCHIVE,
EXTRACT_ERROR_ALLOC, EXTRACT_ERROR_ALLOC,
EXTRACT_ERROR_FIND, EXTRACT_ERROR_FIND,
EXTRACT_ERROR_READFILE, EXTRACT_ERROR_READFILE,
EXTRACT_ERROR_OPENFILE, EXTRACT_ERROR_OPENFILE,
EXTRACT_ERROR_WRITEFILE, EXTRACT_ERROR_WRITEFILE,
}; };
Result getExtractedSize(const std::string &archivePath, const std::string &wantedFile); Result getExtractedSize(const std::string &archivePath, const std::string &wantedFile);
Result extractArchive(const std::string &archivePath, const std::string &wantedFile, const std::string &outputPath); Result extractArchive(const std::string &archivePath, const std::string &wantedFile, const std::string &outputPath);
#endif #endif
+64 -65
View File
@@ -1,66 +1,65 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_FILE_BROWSE_HPP #ifndef _DARKSTORE_FILE_BROWSE_HPP
#define _DARKSTORE_FILE_BROWSE_HPP #define _DARKSTORE_FILE_BROWSE_HPP
#include <dirent.h> #include <dirent.h>
#include <string> #include <string>
#include <sys/stat.h> #include <sys/stat.h>
#include <vector> #include <vector>
struct DirEntry { struct DirEntry {
std::string name; std::string name;
std::string path; std::string path;
bool isDirectory; bool isDirectory;
}; };
/* /*
Information de la structure de l'eShop Store Info struct.
*/ */
struct EshopInfo { struct StoreInfo {
std::string Title; std::string Title;
std::string Author; std::string Author;
std::string URL; std::string URL;
std::string File; // Permet de vérifier si le fichier ne contient PAS de barre oblique. std::string File; // Used to check, if File does NOT contain a slash or so.
std::string FileName; std::string FileName;
std::string Description; std::string Description;
int Version; int Version;
int Revision; int Revision;
int StoreSize; int StoreSize;
}; };
bool nameEndsWith(const std::string &name, const std::vector<std::string> &extensionList); bool nameEndsWith(const std::string &name, const std::vector<std::string> &extensionList);
void getDirectoryContents(std::vector<DirEntry> &dirContents, const std::vector<std::string> &extensionList); void getDirectoryContents(std::vector<DirEntry> &dirContents, const std::vector<std::string> &extensionList);
void getDirectoryContents(std::vector<DirEntry> &dirContents); void getDirectoryContents(std::vector<DirEntry> &dirContents);
std::vector<std::string> getContents(const std::string &name, const std::vector<std::string> &extensionList);
std::vector<StoreInfo> GetStoreInfo(const std::string &path);
std::vector<EshopInfo> GetEshopInfo(const std::string &path);
void dirCopy(DirEntry *entry, const char *destinationPath, const char *sourcePath);
void dirCopy(DirEntry *entry, const char *destinationPath, const char *sourcePath); int fcopy(const char *sourcePath, const char *destinationPath);
int fcopy(const char *sourcePath, const char *destinationPath);
#endif #endif
+38 -37
View File
@@ -1,38 +1,39 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_FILES_HPP #ifndef _DARKSTORE_FILES_HPP
#define _DARKSTORE_FILES_HPP #define _DARKSTORE_FILES_HPP
#include "common.hpp" #include "common.hpp"
Result makeDirs(const char *path); Result makeDirs(const char *path);
Result openFile(Handle *fileHandle, const char *path, bool write); Result openFile(Handle *fileHandle, const char *path, bool write);
Result deleteFile(const char *path); Result deleteFile(const char *path);
Result removeDir(const char *path); Result removeDir(const char *path);
Result removeDirRecursive(const char *path); Result removeDirRecursive(const char *path);
u64 getAvailableSpace();
#endif #endif
+25447 -25473
View File
File diff suppressed because it is too large Load Diff
+37 -37
View File
@@ -1,38 +1,38 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_LANG_HPP #ifndef _DARKSTORE_LANG_HPP
#define _DARKSTORE_LANG_HPP #define _DARKSTORE_LANG_HPP
#include "json.hpp" #include "json.hpp"
#include <string> #include <string>
namespace Lang { namespace Lang {
std::string get(const std::string &key); std::string get(const std::string &key);
void load(const std::string &lang); void load(const std::string &lang);
}; };
#endif #endif
+1977 -2003
View File
File diff suppressed because it is too large Load Diff
+81 -67
View File
@@ -1,68 +1,82 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_QUEUE_SYSTEM_HPP #ifndef _DARKSTORE_QUEUE_SYSTEM_HPP
#define _DARKSTORE_QUEUE_SYSTEM_HPP #define _DARKSTORE_QUEUE_SYSTEM_HPP
#include "json.hpp" #include "json.hpp"
#include <citro2d.h> #include <citro2d.h>
#include <deque> #include <deque>
#include <memory> #include <memory>
/* /* Extend this, if more statuses are neccessary. */
Extend this, if more statuses are neccessary. enum class QueueStatus {
*/ None,
enum class QueueStatus { Copying,
None, Deleting,
Downloading, Downloading,
Extracting, Extracting,
Installing, Installing,
Failed, Moving,
Done Request, // For User needed Requests.
}; Failed,
Done
class Queue { };
public:
Queue(nlohmann::json object, C2D_Image img, std::string name) : obj(object), icn(img), name(name) { }; enum RequestType {
QueueStatus status = QueueStatus::None; PROMPT_RET = -3,
nlohmann::json obj; NO_REQUEST = -1,
C2D_Image icn; RMDIR_REQUEST = 1, // remove dir prompt request.
int total, current; PROMPT_REQUEST = 2, // skip prompt request.
std::string name = ""; PROMPT_ERROR = 3 // Error message prompt. Unused right now.
}; };
/* /* Of course also a namespace to that part, so we can do that in a Thread. */
Of course also a namespace to that part, so we can do that in a Thread. namespace QueueSystem {
*/ extern int RequestNeeded, RequestAnswer;
namespace QueueSystem { extern std::string RequestMsg, EndMsg;
void QueueHandle(); // Handles the Queue. extern int LastElement;
void AddToQueue(nlohmann::json obj, C2D_Image icn, std::string name); // Adds to Queue. extern bool Wait, Popup, CancelCallback;
void ClearQueue(); // Clears the Queue.
void QueueHandle(); // Handles the Queue.
extern LightLock lock; void AddToQueue(nlohmann::json obj, const C2D_Image &icn, const std::string &name, const std::string &uName, const std::string &eName, const std::string &lUpdated); // Adds to Queue.
}; void ClearQueue(); // Clears the Queue.
void Resume();
};
class Queue {
public:
Queue(nlohmann::json object, const C2D_Image &img, const std::string &name, const std::string &uName, const std::string &eName, const std::string &lUpdated) :
obj(object), icn(img), total(object.size()), current(QueueSystem::LastElement), name(name), storeName(uName), entryName(eName), lastUpdated(lUpdated) { };
QueueStatus status = QueueStatus::None;
nlohmann::json obj;
C2D_Image icn;
int total, current;
std::string name = "", storeName = "", entryName = "", lastUpdated = "";
};
#endif #endif
+38 -38
View File
@@ -1,39 +1,39 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_SCREENSHOT_HPP #ifndef _DARKSTORE_SCREENSHOT_HPP
#define _DARKSTORE_SCREENSHOT_HPP #define _DARKSTORE_SCREENSHOT_HPP
#include <citro2d.h> #include <citro2d.h>
#include <string> #include <string>
#include <vector> #include <vector>
namespace Screenshot { namespace Screenshot {
C2D_Image Convert(const std::string &filename); C2D_Image Convert(const std::string &filename);
C2D_Image ConvertFromBuffer(const std::vector<u8> &buffer); C2D_Image ConvertFromBuffer(const std::vector<u8> &buffer);
}; };
#endif #endif
+60 -59
View File
@@ -1,60 +1,61 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_SCRIPT_UTILS_HPP #ifndef _DARKSTORE_SCRIPT_UTILS_HPP
#define _DARKSTORE_SCRIPT_UTILS_HPP #define _DARKSTORE_SCRIPT_UTILS_HPP
#include "json.hpp" #include "json.hpp"
#include <3ds.h> #include <3ds.h>
#include <string> #include <string>
enum ScriptState { enum ScriptState {
NONE = 0, NONE = 0,
FAILED_DOWNLOAD, FAILED_DOWNLOAD,
SCRIPT_CANCELED, SCRIPT_CANCELED,
SYNTAX_ERROR, SYNTAX_ERROR,
COPY_ERROR, COPY_ERROR,
MOVE_ERROR, MOVE_ERROR,
DELETE_ERROR DELETE_ERROR,
}; EXTRACT_ERROR
};
namespace ScriptUtils {
bool matchPattern(const std::string &pattern, const std::string &tested); namespace ScriptUtils {
bool matchPattern(const std::string &pattern, const std::string &tested);
Result removeFile(const std::string &file, const std::string &message);
void bootTitle(const std::string &TitleID, bool isNAND, const std::string &message); Result removeFile(const std::string &file, bool isARG = false);
Result prompt(const std::string &message); void bootTitle(const std::string &TitleID, bool isNAND, bool isARG = false);
Result copyFile(const std::string &source, const std::string &destination, const std::string &message, bool isARG = false); Result prompt(const std::string &message);
Result renameFile(const std::string &oldName, const std::string &newName, const std::string &message); Result copyFile(const std::string &source, const std::string &destination, const std::string &message, bool isARG = false);
Result downloadRelease(const std::string &repo, const std::string &file, const std::string &output, bool includePrereleases, const std::string &message, bool isARG = false); Result renameFile(const std::string &oldName, const std::string &newName, bool isARG = false);
Result downloadFile(const std::string &file, const std::string &output, const std::string &message, bool isARG = false); Result downloadRelease(const std::string &repo, const std::string &file, const std::string &output, bool includePrereleases, const std::string &message, bool isARG = false);
void installFile(const std::string &file, bool updatingSelf, const std::string &message, bool isARG = false); Result downloadFile(const std::string &file, const std::string &output, const std::string &message, bool isARG = false);
void extractFile(const std::string &file, const std::string &input, const std::string &output, const std::string &message, bool isARG = false); void installFile(const std::string &file, bool updatingSelf, const std::string &message, bool isARG = false);
Result extractFile(const std::string &file, const std::string &input, const std::string &output, const std::string &message, bool isARG = false);
Result runFunctions(nlohmann::json storeJson, int selection, const std::string &entry);
}; Result runFunctions(nlohmann::json storeJson, int selection, const std::string &entry);
};
#endif #endif
+46 -46
View File
@@ -1,47 +1,47 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Additional Terms 7.b and 7.c of GPLv3 apply to this file: * Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or * * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal * author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it. * Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material, * * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in * or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version. * reasonable ways as different from the original version.
*/ */
#ifndef _DARKSTORE_SOUND_HPP #ifndef _DARKSTORE_SOUND_HPP
#define _DARKSTORE_SOUND_HPP #define _DARKSTORE_SOUND_HPP
#include <3ds.h> #include <3ds.h>
#include <string> #include <string>
class Sound { class Sound {
public: public:
Sound(const std::string &path, const int channel = 1, const bool toloop = true); Sound(const std::string &path, const int channel = 1, const bool toloop = true);
~Sound(); ~Sound();
void play(); void play();
void stop(); void stop();
private: private:
u32 dataSize; u32 dataSize;
bool good = true; bool good = true;
ndspWaveBuf waveBuf; ndspWaveBuf waveBuf;
u8 *data = nullptr; u8 *data = nullptr;
int chnl; int chnl;
}; };
#endif #endif
+4 -3
View File
@@ -1,6 +1,6 @@
/* /*
* This file is part of Universal-Updater * This file is part of DarkStore
* Copyright (C) 2019-2020 Universal-Team * Copyright (C) 2019-2021 Universal-Team
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@@ -34,9 +34,10 @@
namespace StringUtils { namespace StringUtils {
std::string lower_case(const std::string &str); std::string lower_case(const std::string &str);
std::string FetchStringsFromVector(const std::vector<std::string> &fetch); std::string FetchStringsFromVector(const std::vector<std::string> &fetch);
std::string formatBytes(int bytes); std::string formatBytes(u64 bytes);
std::string GetMarkString(int marks); std::string GetMarkString(int marks);
std::vector<std::string> GetMarks(int marks); std::vector<std::string> GetMarks(int marks);
std::string format(const char *fmt_str, ...);
}; };
#endif #endif
+72
View File
@@ -0,0 +1,72 @@
/*
* This file is part of DarkStore
* Copyright (C) 2019-2021 Universal-Team
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Additional Terms 7.b and 7.c of GPLv3 apply to this file:
* * Requiring preservation of specified reasonable legal notices or
* author attributions in that material or in the Appropriate Legal
* Notices displayed by works containing it.
* * Prohibiting misrepresentation of the origin of that material,
* or requiring that modified versions of such material be marked in
* reasonable ways as different from the original version.
*/
#ifndef _DARKSTORE_THEME_HPP
#define _DARKSTORE_THEME_HPP
#include "json.hpp"
#include <citro2d.h>
#include <string>
class Theme {
public:
Theme(const std::string &ThemeJSON = "sdmc:/3ds/DarkStore/Themes.json");
nlohmann::json InitWithDefaultColors(const std::string &ThemePath = "sdmc:/3ds/DarkStore/Themes.json");
void LoadTheme(const std::string &ThemeName);
std::vector<std::pair<std::string, std::string>> ThemeNames();
uint32_t GetThemeColor(const std::string &ThemeName, const std::string &Key, const uint32_t DefaultColor);
uint32_t BarColor() const { return this->vBarColor; };
uint32_t BGColor() const { return this->vBGColor; };
uint32_t BarOutline() const { return this->vBarOutline; };
uint32_t TextColor() const { return this->vTextColor; };
uint32_t EntryBar() const { return this->vEntryBar; };
uint32_t EntryOutline() const { return this->vEntryOutline; };
uint32_t BoxInside() const { return this->vBoxInside; };
uint32_t BoxSelected() const { return this->vBoxSelected; };
uint32_t BoxUnselected() const { return this->vBoxUnselected; };
uint32_t ProgressbarOut() const { return this->vProgressbarOut; };
uint32_t ProgressbarIn() const { return this->vProgressbarIn; };
uint32_t SearchBar() const { return this->vSearchBar; };
uint32_t SearchBarOutline() const { return this->vSearchBarOutline; };
uint32_t SideBarSelected() const { return this->vSideBarSelected; };
uint32_t SideBarUnselected() const { return this->vSideBarUnselected; };
uint32_t MarkSelected() const { return this->vMarkSelected; };
uint32_t MarkUnselected() const { return this->vMarkUnselected; };
uint32_t DownListPrev() const { return this->vDownListPrev; };
uint32_t SideBarIconColor() const { return this->vSideBarIconColor; };
private:
uint32_t vBarColor = 0, vBGColor = 0, vBarOutline = 0, vTextColor = 0, vEntryBar = 0, vEntryOutline = 0,
vBoxInside = 0, vBoxSelected = 0, vBoxUnselected = 0, vProgressbarOut = 0, vProgressbarIn = 0,
vSearchBar = 0, vSearchBarOutline = 0, vSideBarSelected = 0, vSideBarUnselected = 0,
vMarkSelected = 0, vMarkUnselected = 0, vDownListPrev = 0, vSideBarIconColor = 0;
int SelectedTheme = 0;
bool Loaded = false;
nlohmann::json json = nullptr;
};
#endif
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Regular → Executable
+41 -41
View File
@@ -1,41 +1,41 @@
# libarchive.la - a libtool library file # libarchive.la - a libtool library file
# Generated by libtool (GNU libtool) 2.4.6 Debian-2.4.6-14 # Generated by libtool (GNU libtool) 2.4.6 Debian-2.4.6-14
# #
# Please DO NOT delete this file! # Please DO NOT delete this file!
# It is necessary for linking the library. # It is necessary for linking the library.
# The name that we can dlopen(3). # The name that we can dlopen(3).
dlname='' dlname=''
# Names of this library. # Names of this library.
library_names='' library_names=''
# The name of the static archive. # The name of the static archive.
old_library='libarchive.a' old_library='libarchive.a'
# Linker flags that cannot go in dependency_libs. # Linker flags that cannot go in dependency_libs.
inherited_linker_flags='' inherited_linker_flags=''
# Libraries that this one depends upon. # Libraries that this one depends upon.
dependency_libs=' -L/opt/devkitpro/portlibs/3ds/lib -L/opt/devkitpro/libctru/lib /opt/devkitpro/portlibs/3ds/lib/liblzma.la -lbz2 -lz -lctru' dependency_libs=' -L/opt/devkitpro/portlibs/3ds/lib -L/opt/devkitpro/libctru/lib /opt/devkitpro/portlibs/3ds/lib/liblzma.la -lbz2 -lz -lctru'
# Names of additional weak libraries provided by this library # Names of additional weak libraries provided by this library
weak_library_names='' weak_library_names=''
# Version information for libarchive. # Version information for libarchive.
current=18 current=18
age=5 age=5
revision=1 revision=1
# Is this an already installed library? # Is this an already installed library?
installed=yes installed=yes
# Should we warn about portability when linking against -modules? # Should we warn about portability when linking against -modules?
shouldnotlink=no shouldnotlink=no
# Files to dlopen/dlpreopen # Files to dlopen/dlpreopen
dlopen='' dlopen=''
dlpreopen='' dlpreopen=''
# Directory that this library needs to be installed in: # Directory that this library needs to be installed in:
libdir='/opt/devkitpro/portlibs/3ds/lib' libdir='/opt/devkitpro/portlibs/3ds/lib'
+12 -12
View File
@@ -1,12 +1,12 @@
prefix=/opt/devkitpro/portlibs/3ds prefix=/opt/devkitpro/portlibs/3ds
exec_prefix=${prefix} exec_prefix=${prefix}
libdir=${exec_prefix}/lib libdir=${exec_prefix}/lib
includedir=${prefix}/include includedir=${prefix}/include
Name: libarchive Name: libarchive
Description: library that can create and read several streaming archive formats Description: library that can create and read several streaming archive formats
Version: 3.5.1 Version: 3.5.1
Cflags: -I${includedir} Cflags: -I${includedir}
Cflags.private: -DLIBARCHIVE_STATIC Cflags.private: -DLIBARCHIVE_STATIC
Libs: -L${libdir} -larchive Libs: -L${libdir} -larchive
Libs.private: -llzma -lbz2 -lz -lctru Libs.private: -llzma -lbz2 -lz -lctru
BIN
View File
Binary file not shown.
+15
View File
@@ -0,0 +1,15 @@
{
"DarkStore HomeBrew": {
"title": "DarkStore HomeBrew",
"author": "Dark98",
"url": "https://ds.dark98.co.uk/app/darkstore-homebrew.unistore",
"description": "DarkStore 3DS HomeBrew"
},
"DarkStore-NDS":{
"title":"DarkStore-NDS",
"author":"Dark98",
"url":"https://ds.dark98.co.uk/app/darkstore-nds.unistore",
"description":"NDS Stuff"
}
}
+24
View File
@@ -0,0 +1,24 @@
{
"Default": {
"BGColor": "#262C4D",
"BarColor": "#324962",
"BarOutline": "#191E35",
"BoxInside": "#1C213A",
"BoxSelected": "#6C829B",
"BoxUnselected": "#000000",
"Description": "DarkStore's default Theme.\n\nBy: Universal-Team",
"DownListPrev": "#1C213A",
"EntryBar": "#324962",
"EntryOutline": "#191E35",
"MarkSelected": "#4D6580",
"MarkUnselected": "#1C213A",
"ProgressbarIn": "#4D6580",
"ProgressbarOut": "#1C213A",
"SearchBar": "#334B66",
"SearchBarOutline": "#191E35",
"SideBarIconColor": "#ADCCEF",
"SideBarSelected": "#6C829B",
"SideBarUnselected": "#4D6580",
"TextColor": "#FFFFFF"
}
}
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 KiB

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