Compare commits

..

166 commits

Author SHA1 Message Date
MattTheTekie
996aaa86e9
Delete test1.cia 2023-08-24 19:20:13 -04:00
MattTheTekie
b485603520
Delete test.yml 2023-08-22 10:49:04 -04:00
MattTheTekie
9ad7336eac
Update test.yml 2023-08-22 10:43:47 -04:00
MattTheTekie
27563d72df
Update test.yml 2023-08-22 10:43:36 -04:00
MattTheTekie
e226ba1b85
Update test.yml 2023-08-22 10:43:14 -04:00
MattTheTekie
78cf9be1e6
Update test.yml 2023-08-22 10:42:58 -04:00
MattTheTekie
8cd33cd3ba
Create test.yml 2023-08-22 10:38:20 -04:00
MattTheTekie
aa51878173
Add files via upload 2023-08-21 17:52:30 -04:00
MattTheTekie
5223d859c4
Update mainScreen.cpp 2023-08-21 16:26:26 -04:00
MattTheTekie
88c35546c1
Update mainScreen.cpp 2023-08-21 16:25:47 -04:00
MattTheTekie
00d81e8cf5
Update mainScreen.cpp 2023-08-21 16:08:18 -04:00
MattTheTekie
3ea0d1c508
Update init.cpp 2023-08-21 16:04:36 -04:00
MattTheTekie
9cb3770d86
Update download.cpp 2023-08-21 15:59:22 -04:00
MattTheTekie
364eba3148
Update UniStores.json 2023-08-21 15:59:03 -04:00
MattTheTekie
dd41842f7f
Update UniStores.json 2023-08-21 15:58:46 -04:00
MattTheTekie
31eb242c30
Update build-cia.rsf 2023-08-21 15:55:02 -04:00
MattTheTekie
c348c26214
Update init.cpp 2023-08-21 15:54:28 -04:00
MattTheTekie
7bb0710eed
Update Themes.json 2023-08-21 15:50:42 -04:00
MattTheTekie
62f69739fe
Update theme.cpp 2023-08-21 15:39:32 -04:00
MattTheTekie
19c5908415
Update app.json 2023-08-21 15:22:00 -04:00
MattTheTekie
bb9d810404
Update init.cpp 2023-08-21 15:20:53 -04:00
MattTheTekie
9e062a6777
Update Makefile 2023-08-21 15:20:40 -04:00
MattTheTekie
3c5d3d3a0d
Update mainScreen.cpp 2023-08-21 15:19:29 -04:00
MattTheTekie
ca3902f0ae
Update build.yml 2023-08-21 15:08:31 -04:00
MattTheTekie
1b5fd60a5a
Update build.yml 2023-08-21 15:07:55 -04:00
MattTheTekie
48aeedfe5f
Update UniStores.json 2023-08-21 15:07:04 -04:00
MattTheTekie
dc3815f3d1
Update Themes.json 2023-08-21 15:06:14 -04:00
StackZ
8abd321610 Fix git not working.
Should fix Nightly builds looping over and over again on update checking when "Use nightly versions" is enabled.
2023-06-15 06:52:12 +02:00
NightScript
00449906ff
Remove the Minecraft 3DS modification Unistore
Stolen content, illegal license & maintainer is banned from our server
2023-06-14 17:36:25 -04:00
Pk11
8c1898eaa6
Update Minecraft 3DS Customization URL 2023-02-22 18:32:08 -06:00
Pk11
aaf77fa51a
Add Minecraft 3DS Customization
Closes Universal-Team/db#120
2023-02-19 19:43:38 -06:00
Pk11
b6b0fa3113
Create config.yml 2023-01-18 08:50:22 -06:00
Pk11
168846780a Update translations 2022-11-21 19:38:59 -06:00
Pk11
ba63a53bbf Add Wi-Fi signal indicator 2022-08-20 16:34:31 -05:00
Pk11
2b14b58dcf Case insensitive sort the download list
(as uppercase so `[` is at the end)
2022-08-20 16:23:14 -05:00
Pk11
6e47789ef6 Update translations 2022-08-06 20:54:21 -05:00
Pk11
101cb56036 Add 琉球諸語 2022-08-06 20:54:12 -05:00
Pk11
3fd6fc8a3e Update translations 2022-05-30 20:35:13 -05:00
Pk11
6ee17fdfd2 Add nightly auto-update
- Closes #121
2022-05-27 18:14:30 -05:00
Pk11
cd5f39849a Only error on rmdir if required true 2022-05-07 18:00:55 -05:00
Pk11
3d49a12f33 Derp fix
part 2...
2022-04-24 22:17:08 -05:00
Pk11
ad10cb40fe Fix scrolling in online UniStore list 2022-04-24 22:15:00 -05:00
Pk11
f1cebffab8 Add Wordle DS Mods UniStore 2022-04-24 22:04:44 -05:00
Pk11
1e561c3ecf Add missing ellipses 2022-03-22 00:02:02 -05:00
Pk11
015120a882 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-03-18 07:30:09 -05:00
Pk11
405144b6f2 Derp fix 2022-03-08 23:30:15 -06:00
Pk11
dc2a2d53c6 Fix not sending build failure webhooks 2022-03-08 23:20:22 -06:00
Pk11
6fcc1e3da2 Update translations 2022-03-06 21:01:00 -06:00
PabloMK7
97bdc3fe66
Add animated 3D banner (#116)
* Add new 3D banner

* Update credits
2022-03-06 20:37:56 -06:00
Pk11
61ef4942ee Fix short release notes not showing
First it's long ones now it's short ones lol
2022-03-05 14:43:23 -06:00
Pk11
38d0dc55e8 Trigger Actions on release published, not created 2022-03-05 13:51:04 -06:00
Pk11
605e3df993 Revert Universal-Core keyboard for now 2022-03-04 21:27:45 -06:00
Pk11
2236e1ecc3 Update Universal-Core 2022-03-04 21:23:53 -06:00
Pk11
6056609ffb Left/right to scroll release notes faster 2022-03-04 20:11:42 -06:00
Pk11
a9e8386b99 Clean up formatting 2022-03-04 19:46:42 -06:00
Pk11
54e1ca1a65 Don't crash on really long release notes
Also wrap URLs and such and don't scroll past the end
2022-03-04 19:43:51 -06:00
Pk11
51bef7cfb2 Fix README image 2022-03-03 23:36:16 -06:00
Pk11
7469dd2674 Re-add 2D banner in resources, update credits
Still useful for Universal-DB and such
2022-03-03 23:35:22 -06:00
lividhen
8751a057a1
3d banner (#81)
* 3d banner

* second half

* wow i'm not very good at this,am i XD

* change banners

* woops, i have my bannertool in a diffrent place

* fix scale

* fix scale again

* im not very good at git...

* fixed my makefile

* add plane banner

* remove my changes

* remove my speciffic paths

* oh wait that was changed upstream my bad

* fix banner logo textures

* Clean up

* remove my changes

* remove my changes

revert parts of the make file back to main

Co-authored-by: BuildTools <unconfigured@null.spigotmc.org>
2022-03-03 23:32:32 -06:00
Pk11
077079f453 Accidentally made an Ş lowercase 2022-03-03 16:34:03 -06:00
Pk11
6ac3de8b9f Update translations, add Dutch, Norwegian, Romanian 2022-03-03 16:27:01 -06:00
Pk11
3cde3a3a1f Add nightly/prerelease warnings 2022-02-21 04:26:35 -06:00
Pk11
2b0352114e Exit UU with START, switch START actions to SELECT 2022-02-21 03:16:14 -06:00
Pk11
b907cd6b31 Default to searching by title 2022-02-21 02:55:06 -06:00
Pk11
ff37d85e15 Update for latest libctru 2022-02-21 02:41:52 -06: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
179 changed files with 19436 additions and 3343 deletions

View file

@ -3,52 +3,67 @@ name: Bug report
about: Report a bug to help improve Universal-Updater
title: "[Bug Report] "
labels: bug
assignees: ''
assignees: ""
---
<!-- These are comments, you can leave them alone and they won't be in the final issue. -->
<!-- Please do not delete the **titles** and type your information below them. -->
<!-- Also, don't forget to fill in the issue title above this. -->
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Console/Version (please complete the following information):**
Console :
- [ ] 3DS
- [ ] 3DS XL
- [ ] 2DS
- [ ] New 3DS
- [ ] New 3DS XL
- [ ] New 2DS XL
Luma & System version:
Luma 3DS version [example: v10.0.1]
System version & Region [example: v11.13.0-45E]
<!-- A clear and concise description of what the bug is. -->
**Describe the bug:**
**Universal-Updater (please complete the following information):**
- [ ] Release
If Release -> version [example: v2.2.0]
<!-- Steps to reproduce the behavior. -->
**To Reproduce:**
1.
2.
3.
- [ ] Nightly
<!-- A clear and concise description of what you expected to happen. -->
**Expected behavior:**
If Nightly -> Commit hash [example: a10b9da]
How do you launch it:
- [ ] cia
- [ ] 3dsx
<!-- If applicable, add screenshots to help explain your problem. You can drag and drop images here to embed them. -->
**Screenshots:**
<!-- What console(s) have you experienced this bug on? Replace the [ ] with [x] to check the box. -->
**Console:**
- [ ] 3DS
- [ ] 3DS XL
- [ ] 2DS
- [ ] New 3DS
- [ ] New 3DS XL
- [ ] New 2DS XL
<!-- What are your Luma3DS and system versions? -->
<!-- You can check Luma3DS version by pressing L + Down + SELECT. -->
<!-- You can check the system version in System Settings. -->
**Luma3DS & System versions:**
<!-- ex. v10.2.1 -->
Luma 3DS version:
<!-- ex. v11.13.0-45E -->
System version and region:
<!-- What version of Universal-Updater are you using? You can check in settings -> Credits -->
**Universal-Updater version:**
<!-- ex. v3.2.2 -->
Release:
<!-- ex. 18c5b12, if you're using release then leave blank. -->
Nightly:
<!-- Please check the box [x] of the one(s) you've tested with. -->
Installed as:
- [ ] CIA
- [ ] 3DSX
<!-- Add any other context about the problem here. -->
**Additional context:**
**Additional context**
Add any other context about the problem here.

8
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View file

@ -0,0 +1,8 @@
blank_issues_enabled: true
contact_links:
- name: Universal-DB issue
url: https://github.com/Universal-Team/db/issues/new/choose
about: Issues with the app database should go in the db repository
- name: Support (on Discord)
url: https://universal-team.net/discord
about: "Please use #support on the Discord server to for support-related questions"

View file

@ -1,20 +1,31 @@
---
name: Feature request
about: Suggest an idea for Universal-Updater.
title: "[Feature Request]"
title: "[Feature Request] "
labels: enhancement
assignees: ''
assignees: ""
---
<!-- These are comments, you can leave them alone and they won't be in the final issue. -->
<!-- Please do not delete the **titles** and type your information below them. -->
<!-- Also, don't forget to fill in the issue title above this. -->
<!-- A clear and concise description of what the problem is. Example: I'm always frustrated when [...] -->
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Example: I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
<!-- A clear and concise description of what you want to happen. -->
**Describe the solution you'd like:**
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
**Describe alternatives you've considered:**
<!-- Add any other context or screenshots about the feature request here. -->
**Additional context:**

View file

@ -1,8 +1,8 @@
name: Build Universal-Updater
name: Build StreetPass-Shop
on:
push:
branches-ignore: [translation, full-rewrite]
workflow_dispatch:
branches-ignore: [translation]
paths-ignore:
- 'README.md'
pull_request:
@ -10,7 +10,7 @@ on:
paths-ignore:
- 'README.md'
release:
types: [created]
types: [published]
jobs:
build:
@ -29,12 +29,14 @@ jobs:
uses: actions/checkout@v1
with:
submodules: recursive
- name: Setup environment
run: git config --global safe.directory '*'
- 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.1.0/bannertool.zip -o bannertool.zip
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
@ -49,118 +51,18 @@ jobs:
run: |
make
mkdir -p ~/artifacts
cp Universal-Updater.3dsx ~/artifacts
cp Universal-Updater.cia ~/artifacts
cp *.3dsx ~/artifacts
cp *.cia ~/artifacts
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")
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 Universal-Team/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_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 Universal-Team/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 "flamekat54@aol.com"
git config --global user.name "TWLBot"
git clone --depth 1 https://${{ secrets.TWLBOT_TOKEN }}@github.com/Universal-Team/extras.git
mkdir -p extras/builds/Universal-Updater/
cd extras/builds/Universal-Updater/
qrencode -o Universal-Updater.png https://github.com/Universal-Team/extras/raw/v$CURRENT_DATE/builds/Universal-Updater/Universal-Updater.cia
qrencode -o Universal-Updater-release.png https://github.com/Universal-Team/Universal-Updater/releases/download/$COMMIT_TAG/Universal-Updater.cia
cp ${{ github.workspace }}/build/* .
git stage .
git commit -m "Universal-Updater | $COMMIT_HASH"
git tag v$CURRENT_DATE
git push origin master v$CURRENT_DATE
- name: Release to Universal-Team/extras
run: |
AUTH_HEADER="Authorization: token ${{ secrets.TWLBOT_TOKEN }}"
CONTENT_TYPE="Content-Type: application/json"
API_URL="https://api.github.com/repos/Universal-Team/extras/releases"
RELEASE_INFO="{\"tag_name\": \"v${{ steps.commit.outputs.current_date }}\", \"name\": \"Universal-Updater | $COMMIT_HASH\", \"body\": \"$AUTHOR_NAME - $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.TWLBOT_TOKEN }}"
CONTENT_LENGTH="Content-Length: $(stat -c%s $file)"
CONTENT_TYPE="Content-Type: application/7z-x-compressed"
UPLOAD_URL="https://uploads.github.com/repos/Universal-Team/extras/releases/$ID/assets?name=$(basename $file)"
curl -XPOST -H "$AUTH_HEADER" -H "$CONTENT_LENGTH" -H "$CONTENT_TYPE" --upload-file "$file" "$UPLOAD_URL"
done
send_webhook:
runs-on: ubuntu-latest
needs: [publish_build, build]
name: Send Discord webhook
if: ${{ !startsWith(github.ref, 'refs/pull') }}
env:
CURRENT_DATE: ${{ needs.publish_build.outputs.current_date }}
AUTHOR_NAME: ${{ needs.build.outputs.author_name }}
COMMITTER_NAME: ${{ needs.build.outputs.committer_name }}
COMMIT_SUBJECT: ${{ needs.build.outputs.commit_subject }}
COMMIT_MESSAGE: ${{ needs.build.outputs.commit_message }}
steps:
- name: Send success webhook
if: ${{ success() }}
run: |
curl -o send.sh https://raw.githubusercontent.com/Universal-Team/discord-webhooks/master/send-ghactions.sh
chmod +x send.sh
export IMAGE=https://raw.githubusercontent.com/Universal-Team/extras/v$CURRENT_DATE/builds/Universal-Updater/Universal-Updater.png
./send.sh success ${{ secrets.WEBHOOK_URL }}
- name: Send failure webhook
if: ${{ failure() }}
run: |
curl -o send.sh https://raw.githubusercontent.com/Universal-Team/discord-webhooks/master/send-ghactions.sh
chmod +x send.sh
./send.sh failure ${{ secrets.WEBHOOK_URL }}

7
.gitignore vendored
View file

@ -6,16 +6,17 @@
*.elf
*.cia
*.3dsx
*/build
*build
*.map
*.lst
.vscode/ipch
.vscode
*.DS_Store
romfs/gfx/*.t3x
include/version.hpp
cppcheck.log
bannertool*
makerom*
*.pfs0
*.nso
*.nacp
build/sprites.h

59
.vscode/settings.json vendored
View file

@ -1,59 +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"
}
}

View file

@ -35,8 +35,8 @@ include $(DEVKITARM)/3ds_rules
# External tools
#---------------------------------------------------------------------------------
ifeq ($(OS),Windows_NT)
MAKEROM ?= ../makerom.exe
BANNERTOOL ?= ../bannertool.exe
MAKEROM ?= makerom.exe
BANNERTOOL ?= bannertool.exe
else
MAKEROM ?= makerom
@ -46,11 +46,25 @@ endif
CURRENT_VERSION := $(shell git describe --abbrev=0 --tags)
# If on a tagged commit, use the tag instead of the 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),)
GIT_VER := $(shell git tag -l --points-at HEAD)
GIT_VER := $(GIT_TAG)
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
#---------------------------------------------------------------------------------
@ -75,21 +89,21 @@ VERSION_MICRO := 0
endif
#---------------------------------------------------------------------------------
TARGET := Universal-Updater
TARGET := StreetPass-Shop
BUILD := build
UNIVCORE := Universal-Core
SOURCES := $(UNIVCORE) source source/download source/gui source/lang source/overlays source/qr source/screens \
source/store source/utils
UNIVCORE := Universal-Core
SOURCES := $(UNIVCORE) source source/download source/gui source/lang source/menu source/overlays \
source/qr source/screens source/store source/utils
DATA := data
INCLUDES := $(UNIVCORE) include include/download include/gui include/lang include/overlays include/qr include/screens \
include/store include/utils
GRAPHICS := assets/gfx
ROMFS := romfs
GFXBUILD := $(ROMFS)/gfx
APP_AUTHOR := Universal-Team
APP_DESCRIPTION := An easy to use app for installing and updating 3DS homebrew
APP_AUTHOR := MattTheTekie
APP_DESCRIPTION := Your one-stop shop for StreetPass data!
ICON := app/icon.png
BNR_IMAGE := app/banner.png
BNR_IMAGE := app/banner.cgfx
BNR_AUDIO := app/BannerAudio.wav
RSF_FILE := app/build-cia.rsf
@ -99,25 +113,24 @@ RSF_FILE := app/build-cia.rsf
ARCH := -march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft
CFLAGS := -g -Wall -Wno-psabi -O2 -mword-relocations \
-DV_STRING=\"$(GIT_VER)\" \
-DC_V=\"$(CURRENT_VERSION)\" \
-fomit-frame-pointer -ffunction-sections \
$(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)
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++
#---------------------------------------------------------------------------------
# list of directories containing libraries, this must be the top level containing
# include and lib
#---------------------------------------------------------------------------------
LIBDIRS := $(PORTLIBS) $(CTRULIB)
LIBDIRS := $(CURDIR)/libs $(PORTLIBS) $(CTRULIB)
#---------------------------------------------------------------------------------
@ -210,12 +223,16 @@ ifneq ($(ROMFS),)
export _3DSXFLAGS += --romfs=$(CURDIR)/$(ROMFS)
endif
.PHONY: all clean
.PHONY: all citra clean cppcheck
#---------------------------------------------------------------------------------
all: $(BUILD) $(GFXBUILD) $(DEPSDIR) $(ROMFS_T3XFILES) $(T3XHFILES)
@$(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:
@echo clean ...
@ -252,11 +269,12 @@ all: $(OUTPUT).cia $(OUTPUT).elf $(OUTPUT).3dsx
$(OUTPUT).elf : $(OFILES)
$(OUTPUT).cia : $(OUTPUT).elf $(OUTPUT).smdh
$(BANNERTOOL) makebanner -i "../app/banner.png" -a "../app/BannerAudio.wav" -o "../app/banner.bin"
@$(BANNERTOOL) makebanner -ci "../app/banner.cgfx" -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
$(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)"
@$(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)"
#---------------------------------------------------------------------------------
# you need a rule like this for each extension you use as binary data
#---------------------------------------------------------------------------------
@ -309,4 +327,9 @@ endef
#---------------------------------------------------------------------------------------
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...

View file

@ -1,5 +1,5 @@
<p align="center">
<a href="https://universal-team.net/projects/universal-updater.html"><img src="https://github.com/Universal-Team/Universal-Updater/blob/master/app/banner.png"></a><br>
<a href="https://universal-team.net/projects/universal-updater.html"><img src="https://github.com/Universal-Team/Universal-Updater/raw/master/resources/2d-banner.png"></a><br>
<b>An easy to use app for installing and updating 3DS homebrew</b><br>
<a href="https://universal-team.net/discord" style="padding-right: 5px;">
<img src="https://img.shields.io/badge/Discord%20Server-%23universal--updater-green.svg" alt="Discord Server">
@ -13,31 +13,69 @@
<a title="Crowdin" target="_blank" href="https://crowdin.com/project/universal-updater"><img src="https://badges.crowdin.net/universal-updater/localized.svg" alt="Translation status on Crowdin"></a>
</p>
Universal-Updater is a homebrew application for the Nintendo 3DS with the intention to make downloading other homebrew simple and easy. No need to manually copy files or go through installation processes, as we do that for you.
Universal-Updater is a homebrew application for the Nintendo 3DS with the intention to make downloading other homebrew simple and 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
- Default is [Universal-DB](https://db.universal-team.net)
- Want to add your own? Go to settings, find "Select Unistore", hit the + icon and type the URL or hit the QR button and scan the QR code (if they have one)
- The default is [Universal-DB](https://db.universal-team.net)
- Want to add more? Go to settings, choose "Select Unistore", click the + icon and select one from the list, enter a URL, or scan a QR code
- Customization in sorting and display
- All sorting keys: "Title", "Author" & "Last Updated"
- Direction could be Ascending or Descending
- App display could be shown in either a Grid or Rows
- Translations for multi-lingual users
- To contribute to translations, join our [Crowdin](https://crwd.in/universal-updater)
- Request a new language on our [Discord Server](https://discord.gg/KDJCfGF)
- 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 installation so you can keep using the rest of the app while installing
- Searching and markings to make finding apps easy
- Viewing screenshots and release notes for apps
- Shortcuts for easily updating frequently updated apps when using the Homebrew Launcher
- Translations for users of many languages
- To contribute to translations, join our [Crowdin project](https://crwd.in/universal-updater)
- To request a new language, join our [Discord Server](https://universal-team.net/discord) or contact a project manager on Crowdin
## Compilation
### Setting up your enviromment
To build Universal-Updater from source, you will need to setup devkitARM with libctru, 3ds-curl and 3ds-libarchive. Follow devkitPro's [Getting Started](https://devkitpro.org/wiki/Getting_Started) page to install pacman, then run `(sudo dkp-)pacman -S 3ds-dev 3ds-curl 3ds-libarchive`. 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. Once you clone the repo (and its submodules), simply run `make` in the source code directory.
### Setting up your environment
To build Universal-Updater 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/Universal-Team/Universal-Updater.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)
## Screenshots
<details><summary>Screenshots</summary>
![](https://github.com/Universal-Team/Universal-Updater/blob/master/screenshots/Credits.png) ![](https://github.com/Universal-Team/Universal-Updater/blob/master/screenshots/DirectorySelection.png) ![](https://github.com/Universal-Team/Universal-Updater/blob/master/screenshots/DownloadList.png) ![](https://github.com/Universal-Team/Universal-Updater/blob/master/screenshots/EntryInfo.png) ![](https://github.com/Universal-Team/Universal-Updater/blob/master/screenshots/LanguageSelection.png) ![](https://github.com/Universal-Team/Universal-Updater/blob/master/screenshots/ListStyle.png) ![](https://github.com/Universal-Team/Universal-Updater/blob/master/screenshots/MarkMenu.png) ![](https://github.com/Universal-Team/Universal-Updater/blob/master/screenshots/SearchMenu.png) ![](https://github.com/Universal-Team/Universal-Updater/blob/master/screenshots/SettingsMenu.png) ![](https://github.com/Universal-Team/Universal-Updater/blob/master/screenshots/SortMenu.png) ![](https://github.com/Universal-Team/Universal-Updater/blob/master/screenshots/StoreSelection.png) ![](https://github.com/Universal-Team/Universal-Updater/blob/master/screenshots/AutoUpdateSettings.png)![](https://github.com/Universal-Team/Universal-Updater/blob/master/screenshots/DirectorySettings.png)![](https://github.com/Universal-Team/Universal-Updater/blob/master/screenshots/GUISettings.png)
![Entry info](https://db.universal-team.net/assets/images/screenshots/universal-updater/entry-info.png) ![Download list](https://db.universal-team.net/assets/images/screenshots/universal-updater/download-list.png)
![Queue menu](https://db.universal-team.net/assets/images/screenshots/universal-updater/queue-menu.png) ![Search menu](https://db.universal-team.net/assets/images/screenshots/universal-updater/search-menu.png)
![Sorting and Filters menu](https://db.universal-team.net/assets/images/screenshots/universal-updater/sort-menu.png) ![Settings menu](https://db.universal-team.net/assets/images/screenshots/universal-updater/settings-menu.png)
![Marking menu](https://db.universal-team.net/assets/images/screenshots/universal-updater/mark-menu.png) ![Viewing a screenshot](https://db.universal-team.net/assets/images/screenshots/universal-updater/screenshot.png)
![Viewing release notes](https://db.universal-team.net/assets/images/screenshots/universal-updater/release-notes.png) ![The menu in list mode](https://db.universal-team.net/assets/images/screenshots/universal-updater/list-style.png)
![Language selection menu](https://db.universal-team.net/assets/images/screenshots/universal-updater/language-selection.png) ![UniStore selection menu](https://db.universal-team.net/assets/images/screenshots/universal-updater/store-selection.png)
![Recommended UniStores menu](https://db.universal-team.net/assets/images/screenshots/universal-updater/recommended-unistores.png) ![="Auto-Update settings menu](https://db.universal-team.net/assets/images/screenshots/universal-updater/auto-update-settings.png)
![GUI settings menu](https://db.universal-team.net/assets/images/screenshots/universal-updater/gui-settings.png) ![Directory settings menu](https://db.universal-team.net/assets/images/screenshots/universal-updater/directory-settings.png)
![Directory selection menu](https://db.universal-team.net/assets/images/screenshots/universal-updater/directory-selection.png) ![Credits menu](https://db.universal-team.net/assets/images/screenshots/universal-updater/credits.png)
</details>
@ -49,4 +87,6 @@ To build Universal-Updater from source, you will need to setup devkitARM with li
- [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
- [PabloMK7](https://github.com/mariohackandglitch): Download Code Improvements
- [lvandeve](https://github.com/lvandeve): For [LodePNG](https://github.com/lvandeve/lodepng)
- [PabloMK7](https://github.com/PabloMK7): 3D Banner & Download Code Improvements
- [lividhen](https://github.com/lividhen): 3D Banner

@ -1 +1 @@
Subproject commit 155058f9a14dd376fde8f49e9d5b8666bffc6dec
Subproject commit a7fe0a1fb2bc2337cac61bd782e7629c659726bc

BIN
app/banner.cgfx Normal file

Binary file not shown.

View file

@ -1,6 +1,6 @@
BasicInfo:
Title : "UNIV-UPDATER"
ProductCode : "CTR-H-UVUP"
Title : "STREETPASS_DL"
ProductCode : "CTR-H-UVUV"
Logo : Homebrew # Nintendo / Licensed / Distributed / iQue / iQueForSystem
RomFs:
@ -8,7 +8,7 @@ RomFs:
TitleInfo:
Category : Application
UniqueId : 0x43917
UniqueId : 0x43916
Option:
UseOnSD : true # true if App is to be installed to SD

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Before After
Before After

View file

@ -1,15 +1,48 @@
--atlas -f rgba -z auto
sprites/add.png
sprites/add_font.png
sprites/arrow.png
sprites/battery/battery_0.png
sprites/battery/battery_1.png
sprites/battery/battery_2.png
sprites/battery/battery_3.png
sprites/battery/battery_4.png
sprites/battery/battery_blink.png
sprites/battery/battery_charge.png
sprites/battery/battery_charge_full.png
sprites/wifi/wifi_0.png
sprites/wifi/wifi_1.png
sprites/wifi/wifi_2.png
sprites/wifi/wifi_3.png
sprites/cancel.png
sprites/checked.png
sprites/delete.png
sprites/download.png
sprites/info.png
sprites/installed.png
sprites/keyboard.png
sprites/langs/jp.png
sprites/langs/ko.png
sprites/langs/ry.png
sprites/langs/zh-CN.png
sprites/langs/zh-TW.png
sprites/list.png
sprites/noIcon.png
sprites/notes.png
sprites/qr_code.png
sprites/queue0.png
sprites/queue1.png
sprites/queue2.png
sprites/queue3.png
sprites/queue4.png
sprites/queue5.png
sprites/queue6.png
sprites/queue7.png
sprites/screenshot.png
sprites/search.png
sprites/settings.png
sprites/shortcut.png
sprites/sort.png
sprites/sort_checked.png
sprites/sort_unchecked.png
@ -20,4 +53,4 @@ sprites/universal-updater.png
sprites/universal-core.png
sprites/update.png
sprites/update_app.png
sprites/update_filter.png
sprites/update_filter.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 B

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.

Before

Width:  |  Height:  |  Size: 951 B

After

Width:  |  Height:  |  Size: 641 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 894 B

After

Width:  |  Height:  |  Size: 612 B

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 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: 920 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 960 B

BIN
assets/gfx/sprites/list.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 311 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 387 B

After

Width:  |  Height:  |  Size: 377 B

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 459 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

After

Width:  |  Height:  |  Size: 669 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 726 B

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 978 B

After

Width:  |  Height:  |  Size: 669 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 297 B

After

Width:  |  Height:  |  Size: 436 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 322 B

After

Width:  |  Height:  |  Size: 593 B

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 381 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 B

View file

@ -1,3 +1,7 @@
"project_id_env": "UU_CROWDIN_ID"
"api_token_env": "CROWDIN_TOKEN"
preserve_hierarchy: true
files:
- source: /romfs/lang/en/app.json
translation: /romfs/lang/%two_letters_code%/app.json

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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
@ -32,11 +32,17 @@
#include "lang.hpp"
#include "msg.hpp"
#include "screenCommon.hpp"
inline std::unique_ptr<Config> config;
#include <3ds.h>
#include <vector>
#define _STORE_PATH "sdmc:/3ds/Universal-Updater/stores/"
#define _META_PATH "sdmc:/3ds/Universal-Updater/MetaData.json"
inline uint32_t hRepeat;
#define _THEME_AMOUNT 2
#define _UNISTORE_VERSION 4
inline std::unique_ptr<Config> config;
inline uint32_t hRepeat, hDown, hHeld;
inline touchPosition touch;
inline C2D_Font font;
#endif

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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
@ -29,12 +29,11 @@
#include "common.hpp"
#include "sprites.h"
#include "theme.hpp"
#include <citro2d.h>
#include <string>
/*
Define all used Colors, for easier changes.
*/
extern std::unique_ptr<Theme> UIThemes;
/* Standard Colors. */
#define WHITE C2D_Color32(255, 255, 255, 255)
@ -42,41 +41,18 @@
#define TRANSPARENT C2D_Color32(0, 0, 0, 0)
#define DIM_COLOR C2D_Color32(0, 0, 0, 190)
/* Bar, Text, BG Colors. */
#define TEXT_COLOR WHITE
#define BAR_COLOR C2D_Color32(50, 73, 98, 255)
#define BAR_OUTL_COLOR C2D_Color32(25, 30, 53, 255)
#define BG_COLOR C2D_Color32(38, 44, 77, 255)
/* Entry Colors. */
#define ENTRY_BAR_COLOR BAR_COLOR
#define ENTRY_BAR_OUTL_COLOR BAR_OUTL_COLOR
/* Entry Box Colors. */
#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
/* Progressbar Colors. */
#define PROGRESSBAR_OUT_COLOR BOX_INSIDE_COLOR
#define PROGRESSBAR_IN_COLOR SIDEBAR_UNSELECTED_COLOR
/* Search Menu Colors. */
#define SEARCH_BAR_COLOR C2D_Color32(51, 75, 102, 255)
#define SEARCH_BAR_OUTL_COLOR BAR_OUTL_COLOR
/* Sidebar Colors. */
#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(const int &img, const int &x, const int &y, const float &ScaleX = 1, const float &ScaleY = 1);
void DrawBox(const float &xPos, const float &yPos, const float &width = 50, const float &height = 50, const bool &selected = false, const uint32_t &clr = BOX_INSIDE_COLOR);
void DrawButton(const float &xPos, const float &yPos, const float &width, const float &height, const bool &selected, const std::string &Text = "");
void DrawCheckbox(const float &xPos, const float &yPos, const bool &selected);
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 = UIThemes->BoxInside());
void DrawCheckbox(float xPos, float yPos, bool selected);
void DrawToggle(float xPos, float yPos, bool toggled);
void DrawTime();
void DrawBattery();
void HandleBattery();
void DrawWifi();
void DrawIcon(const int Idx, int X, int Y, uint32_t Color = UIThemes->SideBarIconColor(), float BlendPower = 1.0f, float ScaleX = 1, float ScaleY = 1);
};
#endif

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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
@ -33,6 +33,9 @@ namespace Init {
Result Initialize();
Result MainLoop();
Result Exit();
void LoadFont();
void UnloadFont();
};
#endif

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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
@ -28,15 +28,14 @@
#define _UNIVERSAL_UPDATER_OVERLAY_HPP
#include "common.hpp"
#include "store.hpp"
#include "storeEntry.hpp"
#include <3ds.h>
namespace Overlays {
void SelectStore(std::unique_ptr<Store> &store, std::vector<std::unique_ptr<StoreEntry>> &entries, std::unique_ptr<Meta> &meta);
void SelectLanguage(const std::unique_ptr<Store> &store);
void SelectStore();
void SelectLanguage();
void ShowCredits();
std::string SelectDir(const std::string &oldDir, const std::string &msg, const std::unique_ptr<Store> &store);
std::string SelectDir(const std::string &oldDir, const std::string &msg);
void SelectTheme();
};
#endif

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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
@ -67,9 +67,10 @@ public:
void drawThread();
void captureThread();
void handler(std::vector<u8>& out);
bool done() const { return finished; };
bool cancelled() const { return cancel; };
void handler(std::string &result);
bool done() const { return this->finished; };
bool cancelled() const { return this->cancel; };
void List(bool v) { this->displayList = v; };
private:
void buffToImage();
void finish();
@ -83,15 +84,17 @@ private:
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 {
/* Empty == cancelled. */
std::vector<u8> scan();
std::string GetQRURL();
std::string StoreHandle();
};
#endif

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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
@ -37,9 +37,12 @@
0: Entry Info.
1: Download List.
2: Search + Favorites.
3: Sorting.
4: Settings / Credits(?).
2: Queue.
3: Search + Favorites.
4: Sorting.
5: Settings / Credits(?).
6: Screenshot Menu.
7: Release Notes.
*/
class MainScreen : public Screen {
@ -48,17 +51,21 @@ public:
void Draw(void) const override;
void Logic(u32 hDown, u32 hHeld, touchPosition touch) override;
private:
std::unique_ptr<Store> store = nullptr;
std::unique_ptr<Meta> meta = nullptr;
std::vector<std::unique_ptr<StoreEntry>> entries;
std::vector<std::string> dwnldList;
bool initialized = false, fetchDown = false, showMarks = false, showSettings = false, ascending = false, updateFilter = false;
int storeMode = 0, marks = 0, markIndex = 0, sPage = 0, lMode = 0, sSelection = 0, lastMode = 0, smallDelay = 0, sPos = 0;
std::vector<std::string> dwnldList, dwnldSizes, dwnldTypes;
bool initialized = false, fetchDown = false, showMarks = false, showSettings = false,
ascending = false, updateFilter = false, screenshotFetch = false, canDisplay = false, isAND = true;
int storeMode = 0, marks = 0, markIndex = 0, sPage = 0, lMode = 0, sSelection = 0,
lastMode = 0, smallDelay = 0, sPos = 0, screenshotIndex = 0, sSize = 0, zoom = 0, scrollIndex = 0, queueIndex = 0;
SortType sorttype = SortType::LAST_UPDATED;
/* Title, Author, Category, Console. */
std::vector<bool> searchIncludes = { false, false, false, false };
std::string searchResult = "";
std::vector<bool> searchIncludes = { true, false, false, false }, installs = { };
std::string searchResult = "", screenshotName = "";
C2D_Image Screenshot = { nullptr, nullptr };
};
#endif

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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
@ -29,6 +29,7 @@
#include "json.hpp"
#include <string>
#include <vector>
enum favoriteMarks {
STAR = 1 << 0,
@ -43,18 +44,53 @@ public:
Meta();
~Meta() { this->SaveCall(); };
std::string GetUpdated(std::string unistoreName, std::string entry) const;
int GetMarks(std::string unistoreName, std::string entry) const;
bool UpdateAvailable(std::string unistoreName, std::string entry, std::string updated) const;
std::string GetUpdated(const std::string &unistoreName, const std::string &entry) const;
int GetMarks(const std::string &unistoreName, const std::string &entry) const;
bool UpdateAvailable(const std::string &unistoreName, const std::string &entry, const std::string &updated) const;
std::vector<std::string> GetInstalled(const std::string &unistoreName, const std::string &entry) const;
void SetUpdated(std::string unistoreName, std::string entry, std::string updated) {
void SetUpdated(const std::string &unistoreName, const std::string &entry, const std::string &updated) {
this->metadataJson[unistoreName][entry]["updated"] = updated;
};
void SetMarks(std::string unistoreName, std::string entry, int marks) {
void SetMarks(const std::string &unistoreName, const std::string &entry, int marks) {
this->metadataJson[unistoreName][entry]["marks"] = marks;
};
/* TODO: Handle this better. */
void SetInstalled(const std::string &unistoreName, const std::string &entry, const std::string &name) {
const std::vector<std::string> installs = this->GetInstalled(unistoreName, 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[unistoreName][entry]["installed"] += name;
}
/* Remove installed state from a download list entry. */
void RemoveInstalled(const std::string &unistoreName, const std::string &entry, const std::string &name) {
const std::vector<std::string> installs = this->GetInstalled(unistoreName, entry);
if (installs.empty()) return;
for (int i = 0; i < (int)installs.size(); i++) {
if (installs[i] == name) {
this->metadataJson[unistoreName][entry]["installed"].erase(i);
break;
}
}
if (this->metadataJson[unistoreName][entry]["installed"].empty() && this->metadataJson[unistoreName][entry].contains("updated")) this->metadataJson[unistoreName][entry].erase("updated");
}
void ImportMetadata();
void SaveCall();
private:

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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
@ -33,7 +33,7 @@
class Store {
public:
Store(const std::string &file);
Store(const std::string &file, const std::string &file2, bool ARGMode = false);
~Store();
void LoadFromFile(const std::string &file);
void loadSheets();
@ -44,18 +44,23 @@ public:
std::string GetUniStoreTitle() const;
std::string GetUniStoreAuthor() const;
/* Get Information of the UniStore Entries. */
std::string GetTitleEntry(const int &index) const;
std::string GetAuthorEntry(const int &index) const;
std::string GetDescriptionEntry(const int &index) const;
std::vector<std::string> GetCategoryIndex(const int &index) const;
std::string GetVersionEntry(const int &index) const;
std::vector<std::string> GetConsoleEntry(const int &index) const;
std::string GetLastUpdatedEntry(const int &index) const;
std::string GetLicenseEntry(const int &index) const;
C2D_Image GetIconEntry(const int &index) const;
/* Get Information of the UniStore entries. */
std::string GetTitleEntry(int index) const;
std::string GetAuthorEntry(int index) const;
std::string GetDescriptionEntry(int index) const;
std::vector<std::string> GetCategoryIndex(int index) const;
std::string GetVersionEntry(int index) const;
std::vector<std::string> GetConsoleEntry(int index) const;
std::string GetLastUpdatedEntry(int index) const;
std::string GetLicenseEntry(int index) const;
C2D_Image GetIconEntry(int index) 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> GetScreenshotNames(int index) const;
std::string GetReleaseNotes(int index) const;
std::vector<std::string> GetDownloadList(const int &index) const;
std::vector<std::string> GetDownloadList(int index) const;
int GetStoreSize() const { return (int)this->storeJson["storeContent"].size(); };
@ -80,6 +85,9 @@ public:
/* Both of these things are used for custom BG support. */
C2D_Image GetStoreImg() const { return this->storeBG; };
bool customBG() const { return this->hasCustomBG; };
/* Return filename of the UniStore. */
std::string GetFileName() const { return this->fileName; };
private:
void SetC2DBGImage();
nlohmann::json storeJson = nullptr;
@ -87,6 +95,7 @@ private:
C2D_Image storeBG = { nullptr };
bool valid = false, hasSheet = false, hasCustomBG = false;
int screenIndex = 0, entry = 0, box = 0, downEntry = 0, downIndex = 0;
std::string fileName = "";
};
#endif

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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
@ -33,7 +33,7 @@
class StoreEntry {
public:
StoreEntry(const std::unique_ptr<Store> &store, const std::unique_ptr<Meta> &meta, const 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 GetAuthor() const { return this->Author; };
@ -52,20 +52,25 @@ public:
std::vector<std::string> GetCategoryFull() const { return this->FullCategory; };
std::vector<std::string> GetConsoleFull() const { return this->FullConsole; };
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> GetScreenshotNames() const { return this->ScreenshotNames; };
std::string GetReleaseNotes() const { return this->ReleaseNotes; };
bool GetUpdateAvl() const { return this->UpdateAvailable; };
void SetUpdateAvl(const bool &v) { this->UpdateAvailable = v; };
void SetUpdateAvl(bool v) { this->UpdateAvailable = v; };
void SetMark(const int &marks) {
void SetMark(int marks) {
this->Marks = marks;
this->MarkString = StringUtils::GetMarkString(this->Marks);
};
private:
std::string Title, Author, Description, Category, Version, Console, LastUpdated, License, MarkString;
std::string Title, Author, Description, Category, Version, Console, LastUpdated, License, MarkString, ReleaseNotes;
C2D_Image Icon;
int SheetIndex, EntryIndex, Marks;
std::vector<std::string> FullCategory, FullConsole;
std::vector<std::string> FullCategory, FullConsole, Sizes, Types, Screenshots, ScreenshotNames;
bool UpdateAvailable;
};

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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
@ -27,7 +27,7 @@
#ifndef _UNIVERSAL_UPDATER_STORE_UTILS_HPP
#define _UNIVERSAL_UPDATER_STORE_UTILS_HPP
#include "common.hpp"
#include "meta.hpp"
#include "store.hpp"
#include "storeEntry.hpp"
#include <vector>
@ -39,44 +39,63 @@ enum class SortType : uint8_t {
};
namespace StoreUtils {
extern std::unique_ptr<Meta> meta;
extern std::unique_ptr<Store> store;
extern std::vector<std::unique_ptr<StoreEntry>> entries;
/* Grid. */
void DrawGrid(const std::unique_ptr<Store> &store, const std::vector<std::unique_ptr<StoreEntry>> &entries);
void GridLogic(u32 hDown, u32 hHeld, touchPosition touch, std::unique_ptr<Store> &store, std::vector<std::unique_ptr<StoreEntry>> &entries, int &currentMode, int &lastMode, bool &fetch, int &smallDelay);
void DrawGrid();
void GridLogic(int &currentMode, int &lastMode, bool &fetch, int &smallDelay);
/* Top List. */
void DrawList(const std::unique_ptr<Store> &store, const std::vector<std::unique_ptr<StoreEntry>> &entries);
void ListLogic(u32 hDown, u32 hHeld, touchPosition touch, std::unique_ptr<Store> &store, std::vector<std::unique_ptr<StoreEntry>> &entries, int &currentMode, int &lastMode, bool &fetch, int &smallDelay);
void DrawList();
void ListLogic(int &currentMode, int &lastMode, bool &fetch, int &smallDelay);
/* Entry Info. */
void DrawEntryInfo(const std::unique_ptr<Store> &store, const std::unique_ptr<StoreEntry> &entry);
void EntryHandle(u32 hDown, u32 hHeld, touchPosition touch, bool &showMark, bool &fetch);
void DrawEntryInfo(const std::unique_ptr<StoreEntry> &entry);
void EntryHandle(bool &showMark, bool &fetch, bool &sFetch, int &mode, const std::unique_ptr<StoreEntry> &entry);
/* Side Menu. */
void DrawSideMenu(const int &currentMenu);
void SideMenuHandle(u32 hDown, touchPosition touch, int &currentMenu, bool &fetch);
void DrawSideMenu(int currentMenu);
void SideMenuHandle(int &currentMenu, bool &fetch, int &lastMenu);
/* Download Entries. */
void DrawDownList(const std::unique_ptr<Store> &store, const std::vector<std::string> &entries, const bool &fetch);
void DownloadHandle(u32 hDown, u32 hHeld, touchPosition touch, 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);
/* Download entries. */
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 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);
/* Queue System. */
void DrawQueueMenu(const int queueIndex);
void QueueMenuHandle(int &queueIndex, int &storeMode);
/* Search + Favorite Menu. */
void DrawSearchMenu(const std::vector<bool> &searchIncludes, const std::string &searchResult, const int &marks, const bool &updateFilter);
void SearchHandle(u32 hDown, u32 hHeld, touchPosition touch, 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 DrawSearchMenu(const std::vector<bool> &searchIncludes, const std::string &searchResult, int marks, bool updateFilter, bool isAND);
void SearchHandle(std::vector<bool> &searchIncludes, std::string &searchResult, int &marks, bool &updateFilter, bool ascending, SortType sorttype, bool &isAND);
/* Mark Menu. */
void DisplayMarkBox(const int &marks);
void MarkHandle(u32 hDown, u32 hHeld, touchPosition touch, std::unique_ptr<StoreEntry> &entry, const std::unique_ptr<Store> &store, bool &showMark, std::unique_ptr<Meta> &meta);
void DisplayMarkBox(int marks);
void MarkHandle(std::unique_ptr<StoreEntry> &entry, bool &showMark);
/* Credits. */
void DrawCredits();
/* 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);
void ScreenshotMenu(C2D_Image &img, int &sIndex, bool &sFetch, int &storeMode, const int screenshotSize, int &zoom, bool &canDisplay);
/* Settings. */
void DrawSettings(const int &page, const int &selection, const int &sPos);
void SettingsHandle(u32 hDown, u32 hHeld, touchPosition touch, 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 DrawSettings(int page, int selection, int sPos);
void SettingsHandle(int &page, bool &dspSettings, int &storeMode, int &selection, int &sPos);
/* Sorting. */
void DrawSorting(const bool &asc, const SortType &st);
void SortHandle(u32 hDown, u32 hHeld, touchPosition touch, std::unique_ptr<Store> &store, std::vector<std::unique_ptr<StoreEntry>> &entries, bool &asc, SortType &st);
void DrawSorting(bool asc, SortType st);
void SortHandle(bool &asc, SortType &st);
/* Release Notes. */
size_t FindSplitPoint(const std::string &str, const std::vector<std::string> splitters);
void ProcessReleaseNotes(std::string ReleaseNotes);
void DrawReleaseNotes(const int &scrollIndex, const std::unique_ptr<StoreEntry> &entry);
void ReleaseNotesLogic(int &scrollIndex, int &storeMode);
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);
@ -87,13 +106,16 @@ namespace StoreUtils {
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 SortEntries(const bool &Ascending, const SortType &sorttype, std::vector<std::unique_ptr<StoreEntry>> &entries);
void SortEntries(bool Ascending, SortType sorttype);
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);
void search(const std::string &query, bool title, bool author, bool category, bool console, int selectedMarks, bool updateAvl, bool isAND);
void FilterUpdateAvailable(std::vector<std::unique_ptr<StoreEntry>> &entries);
void ResetAll();
void ResetAll(const std::unique_ptr<Store> &store, const std::unique_ptr<Meta> &meta, std::vector<std::unique_ptr<StoreEntry>> &entries);
void RefreshUpdateAVL();
void AddToQueue(int index, const std::string &entry, const std::string &entryName, const std::string &lUpdated);
void AddAllToQueue();
};
#endif

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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
@ -38,8 +38,17 @@ enum class ProgressBar {
};
namespace Animation {
void DrawProgressBar(const u64 &currentProgress, const u64 &totalProgress);
extern int DisplayY, DisplayDelay;
extern bool MoveUp, DoDelay;
void DrawProgressBar(u64 currentProgress, u64 totalProgress);
void displayProgressBar();
void DrawQueue(int x, int y);
void QueueAnimHandle();
void QueueEntryDone();
void HandleQueueEntryDone();
};
#endif

View file

@ -0,0 +1,47 @@
/*
* This file is part of Universal-Updater
* 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 _UNIVERSAL_UPDATER_ARGUMENT_PARSER_HPP
#define _UNIVERSAL_UPDATER_ARGUMENT_PARSER_HPP
#include "json.hpp"
#include "store.hpp"
#include <string>
class ArgumentParser {
public:
ArgumentParser(const std::string &file, const std::string &entry, int dlIndex);
void Load();
void Execute();
bool GetValid() const { return this->isValid; };
private:
std::unique_ptr<Store> store = nullptr;
bool isValid = false;
std::string file = "", executeEntry = "", entry = "";
int dlIndex = -1, entryIndex = -1;
};
#endif

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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
@ -31,8 +31,10 @@
#include <3ds.h>
Result CIA_LaunchTitle(const u64 &titleId, const FS_MediaType &mediaType);
Result deletePrevious(const u64 &titleid, const FS_MediaType &media);
Result installCia(const char *ciaPath, const bool &updateSelf);
namespace Title {
Result Launch(u64 titleId, FS_MediaType mediaType);
Result DeletePrevious(u64 titleid, FS_MediaType media);
Result Install(const char *ciaPath, bool updateSelf);
};
#endif

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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
@ -55,6 +55,9 @@ public:
bool autoupdate() const { return this->v_autoUpdate; };
void autoupdate(bool v) { this->v_autoUpdate = v; if (!this->changesMade) this->changesMade = true; };
bool _3dsxInFolder() const { return this->v_3dsxInFolder; };
void _3dsxInFolder(bool v) { this->v_3dsxInFolder = v; if (!this->changesMade) this->changesMade = true; };
std::string _3dsxPath() const { return this->v_3dsxPath; };
void _3dsxPath(const std::string &v) { this->v_3dsxPath = v; if (!this->changesMade) this->changesMade = true; };
@ -64,6 +67,9 @@ public:
std::string archPath() const { return this->v_archivePath; };
void archPath(const std::string &v) { this->v_archivePath = v; if (!this->changesMade) this->changesMade = true; };
std::string firmPath() const { return this->v_firmPath; };
void firmPath(const std::string &v) { this->v_firmPath = v; if (!this->changesMade) this->changesMade = true; };
/* Fetching old metadata. */
bool metadata() const { return this->v_metadata; };
void metadata(bool v) { this->v_metadata = v; if (!this->changesMade) this->changesMade = true; };
@ -72,9 +78,33 @@ public:
bool updatecheck() const { return this->v_updateCheck; };
void updatecheck(bool v) { this->v_updateCheck = v; if (!this->changesMade) this->changesMade = true; };
/* Check for nightly/release on startup. */
bool updatenightly() const { return this->v_updateNightly; };
void updatenightly(bool v) { this->v_updateNightly = v; if (!this->changesMade) this->changesMade = true; };
/* U-U Update check on startup. */
bool usebg() const { return this->v_showBg; };
void usebg(bool v) { this->v_showBg = v; if (!this->changesMade) this->changesMade = true; };
/* If using custom Font. */
bool customfont() const { return this->v_customFont; };
void customfont(bool v) { this->v_customFont = v; if (!this->changesMade) this->changesMade = true; };
/* The shortcut path. */
std::string shortcut() const { return this->v_shortcutPath; };
void shortcut(const std::string &v) { this->v_shortcutPath = v; if (!this->changesMade) this->changesMade = true; };
/* If displaying changelog. */
bool changelog() const { return this->v_changelog; };
void changelog(bool v) { this->v_changelog = v; if (!this->changesMade) this->changesMade = true; };
/* The active Theme. */
std::string theme() const { return this->v_theme; };
void theme(const std::string &v) { this->v_theme = v; if (!this->changesMade) this->changesMade = true; };
/* If showing prompt if action failed / succeeded. */
bool prompt() const { return this->v_prompt; };
void prompt(bool v) { this->v_prompt = v; if (!this->changesMade) this->changesMade = true; };
private:
/* Mainly helper. */
bool getBool(const std::string &key);
@ -88,8 +118,11 @@ private:
bool changesMade = false;
std::string v_language = "en", v_lastStore = "universal-db.unistore",
v_3dsxPath = "sdmc:/3ds", v_ndsPath = "sdmc:", v_archivePath = "sdmc:";
bool v_list = false, v_autoUpdate = true, v_metadata = true, v_updateCheck = true, v_showBg = false;
v_3dsxPath = "sdmc:/3ds", v_ndsPath = "sdmc:", v_archivePath = "sdmc:",
v_shortcutPath = "sdmc:/3ds/Universal-Updater/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

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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
@ -30,7 +30,6 @@
#include "common.hpp"
#define APP_TITLE "Universal-Updater"
#define VERSION_STRING "3.0.0"
enum DownloadError {
DL_ERROR_NONE = 0,
@ -41,8 +40,21 @@ enum DownloadError {
DL_CANCEL, // No clue if that's needed tho.
};
struct StoreList {
std::string Title;
std::string Author;
std::string URL;
std::string Description;
};
struct UUUpdate {
bool Available = false;
std::string Notes = "";
std::string Version = "";
};
Result downloadToFile(const std::string &url, const std::string &path);
Result downloadFromRelease(const std::string &url, const std::string &asset, const std::string &path, const bool &includePrereleases);
Result downloadFromRelease(const std::string &url, const std::string &asset, const std::string &path, bool includePrereleases);
/*
Check Wi-Fi status.
@ -65,10 +77,13 @@ void notImplemented(void);
*/
void doneMsg(void);
bool IsUpdateAvailable(const std::string &URL, const int &revCurrent);
bool DownloadUniStore(const std::string &URL, const int &currentRev, std::string &fl, const bool &isDownload = false, const bool &isUDB = false);
bool IsUpdateAvailable(const std::string &URL, int revCurrent);
bool DownloadUniStore(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 IsUUUpdateAvailable();
UUUpdate IsUUUpdateAvailable();
void UpdateAction();
std::vector<StoreList> FetchStores();
C2D_Image FetchScreenshot(const std::string &URL);
std::string GetChangelog();
#endif

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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
@ -56,7 +56,6 @@ struct UniStoreInfo {
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);
std::vector<std::string> getContents(const std::string &name, const std::vector<std::string> &extensionList);
std::vector<UniStoreInfo> GetUniStoreInfo(const std::string &path);

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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
@ -30,9 +30,10 @@
#include "common.hpp"
Result makeDirs(const char *path);
Result openFile(Handle *fileHandle, const char *path, const bool &write);
Result openFile(Handle *fileHandle, const char *path, bool write);
Result deleteFile(const char *path);
Result removeDir(const char *path);
Result removeDirRecursive(const char *path);
u64 getAvailableSpace();
#endif

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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

1977
include/utils/lodepng.h Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,82 @@
/*
* This file is part of Universal-Updater
* 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 _UNIVERSAL_UPDATER_QUEUE_SYSTEM_HPP
#define _UNIVERSAL_UPDATER_QUEUE_SYSTEM_HPP
#include "json.hpp"
#include <citro2d.h>
#include <deque>
#include <memory>
/* Extend this, if more statuses are neccessary. */
enum class QueueStatus {
None,
Copying,
Deleting,
Downloading,
Extracting,
Installing,
Moving,
Request, // For User needed Requests.
Failed,
Done
};
enum RequestType {
PROMPT_RET = -3,
NO_REQUEST = -1,
RMDIR_REQUEST = 1, // remove dir prompt request.
PROMPT_REQUEST = 2, // skip prompt request.
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. */
namespace QueueSystem {
extern int RequestNeeded, RequestAnswer;
extern std::string RequestMsg, EndMsg;
extern int LastElement;
extern bool Wait, Popup, CancelCallback;
void QueueHandle(); // Handles the Queue.
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), unistoreName(uName), entryName(eName), lastUpdated(lUpdated) { };
QueueStatus status = QueueStatus::None;
nlohmann::json obj;
C2D_Image icn;
int total, current;
std::string name = "", unistoreName = "", entryName = "", lastUpdated = "";
};
#endif

View file

@ -0,0 +1,39 @@
/*
* This file is part of Universal-Updater
* 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 _UNIVERSAL_UPDATER_SCREENSHOT_HPP
#define _UNIVERSAL_UPDATER_SCREENSHOT_HPP
#include <citro2d.h>
#include <string>
#include <vector>
namespace Screenshot {
C2D_Image Convert(const std::string &filename);
C2D_Image ConvertFromBuffer(const std::vector<u8> &buffer);
};
#endif

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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
@ -38,23 +38,24 @@ enum ScriptState {
SYNTAX_ERROR,
COPY_ERROR,
MOVE_ERROR,
DELETE_ERROR
DELETE_ERROR,
EXTRACT_ERROR
};
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, const bool &isNAND, const std::string &message);
Result removeFile(const std::string &file, bool isARG = false);
void bootTitle(const std::string &TitleID, bool isNAND, bool isARG = false);
Result prompt(const std::string &message);
Result copyFile(const std::string &source, const std::string &destination, const std::string &message);
Result renameFile(const std::string &oldName, const std::string &newName, const std::string &message);
Result downloadRelease(const std::string &repo, const std::string &file, const std::string &output, const bool &includePrereleases, const std::string &message);
Result downloadFile(const std::string &file, const std::string &output, const std::string &message);
void installFile(const std::string &file, const bool &updatingSelf, const std::string &message);
void extractFile(const std::string &file, const std::string &input, const std::string &output, const std::string &message);
Result copyFile(const std::string &source, const std::string &destination, const std::string &message, bool isARG = false);
Result renameFile(const std::string &oldName, const std::string &newName, 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 downloadFile(const std::string &file, 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(const nlohmann::json &storeJson, const int &selection, const std::string &entry);
Result runFunctions(nlohmann::json storeJson, int selection, const std::string &entry);
};
#endif

47
include/utils/sound.hpp Normal file
View file

@ -0,0 +1,47 @@
/*
* This file is part of Universal-Updater
* 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 _UNIVERSAL_UPDATER_SOUND_HPP
#define _UNIVERSAL_UPDATER_SOUND_HPP
#include <3ds.h>
#include <string>
class Sound {
public:
Sound(const std::string &path, const int channel = 1, const bool toloop = true);
~Sound();
void play();
void stop();
private:
u32 dataSize;
bool good = true;
ndspWaveBuf waveBuf;
u8 *data = nullptr;
int chnl;
};
#endif

View file

@ -1,6 +1,6 @@
/*
* This file is part of Universal-Updater
* Copyright (C) 2019-2020 Universal-Team
* 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
@ -34,9 +34,10 @@
namespace StringUtils {
std::string lower_case(const std::string &str);
std::string FetchStringsFromVector(const std::vector<std::string> &fetch);
std::string formatBytes(const int bytes);
std::string formatBytes(u64 bytes);
std::string GetMarkString(int marks);
std::vector<std::string> GetMarks(int marks);
std::string format(const char *fmt_str, ...);
};
#endif

72
include/utils/theme.hpp Normal file
View file

@ -0,0 +1,72 @@
/*
* This file is part of Universal-Updater
* 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 _UNIVERSAL_UPDATER_THEME_HPP
#define _UNIVERSAL_UPDATER_THEME_HPP
#include "json.hpp"
#include <citro2d.h>
#include <string>
class Theme {
public:
Theme(const std::string &ThemeJSON = "sdmc:/3ds/Universal-Updater/Themes.json");
nlohmann::json InitWithDefaultColors(const std::string &ThemePath = "sdmc:/3ds/Universal-Updater/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

1204
libs/include/archive.hpp Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,721 @@
/*-
* Copyright (c) 2003-2008 Tim Kientzle
* Copyright (c) 2016 Martin Matuska
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* $FreeBSD: head/lib/libarchive/archive_entry.h 201096 2009-12-28 02:41:27Z kientzle $
*/
#ifndef ARCHIVE_ENTRY_H_INCLUDED
#define ARCHIVE_ENTRY_H_INCLUDED
/* Note: Compiler will complain if this does not match archive.h! */
#define ARCHIVE_VERSION_NUMBER 3005001
/*
* Note: archive_entry.h is for use outside of libarchive; the
* configuration headers (config.h, archive_platform.h, etc.) are
* purely internal. Do NOT use HAVE_XXX configuration macros to
* control the behavior of this header! If you must conditionalize,
* use predefined compiler and/or platform macros.
*/
#include <sys/types.h>
#include <stddef.h> /* for wchar_t */
#include <stdint.h>
#include <time.h>
#if defined(_WIN32) && !defined(__CYGWIN__)
#include <windows.h>
#endif
/* Get a suitable 64-bit integer type. */
#if !defined(__LA_INT64_T_DEFINED)
# if ARCHIVE_VERSION_NUMBER < 4000000
#define __LA_INT64_T la_int64_t
# endif
#define __LA_INT64_T_DEFINED
# if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__WATCOMC__)
typedef __int64 la_int64_t;
# else
#include <unistd.h>
# if defined(_SCO_DS) || defined(__osf__)
typedef long long la_int64_t;
# else
typedef int64_t la_int64_t;
# endif
# endif
#endif
/* The la_ssize_t should match the type used in 'struct stat' */
#if !defined(__LA_SSIZE_T_DEFINED)
/* Older code relied on the __LA_SSIZE_T macro; after 4.0 we'll switch to the typedef exclusively. */
# if ARCHIVE_VERSION_NUMBER < 4000000
#define __LA_SSIZE_T la_ssize_t
# endif
#define __LA_SSIZE_T_DEFINED
# if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__WATCOMC__)
# if defined(_SSIZE_T_DEFINED) || defined(_SSIZE_T_)
typedef ssize_t la_ssize_t;
# elif defined(_WIN64)
typedef __int64 la_ssize_t;
# else
typedef long la_ssize_t;
# endif
# else
# include <unistd.h> /* ssize_t */
typedef ssize_t la_ssize_t;
# endif
#endif
/* Get a suitable definition for mode_t */
#if ARCHIVE_VERSION_NUMBER >= 3999000
/* Switch to plain 'int' for libarchive 4.0. It's less broken than 'mode_t' */
# define __LA_MODE_T int
#elif defined(_WIN32) && !defined(__CYGWIN__) && !defined(__BORLANDC__) && !defined(__WATCOMC__)
# define __LA_MODE_T unsigned short
#else
# define __LA_MODE_T mode_t
#endif
/* Large file support for Android */
#ifdef __ANDROID__
#include "android_lf.h"
#endif
/*
* On Windows, define LIBARCHIVE_STATIC if you're building or using a
* .lib. The default here assumes you're building a DLL. Only
* libarchive source should ever define __LIBARCHIVE_BUILD.
*/
#if ((defined __WIN32__) || (defined _WIN32) || defined(__CYGWIN__)) && (!defined LIBARCHIVE_STATIC)
# ifdef __LIBARCHIVE_BUILD
# ifdef __GNUC__
# define __LA_DECL __attribute__((dllexport)) extern
# else
# define __LA_DECL __declspec(dllexport)
# endif
# else
# ifdef __GNUC__
# define __LA_DECL
# else
# define __LA_DECL __declspec(dllimport)
# endif
# endif
#else
/* Static libraries on all platforms and shared libraries on non-Windows. */
# define __LA_DECL
#endif
#if defined(__GNUC__) && __GNUC__ >= 3 && __GNUC_MINOR__ >= 1
# define __LA_DEPRECATED __attribute__((deprecated))
#else
# define __LA_DEPRECATED
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*
* Description of an archive entry.
*
* You can think of this as "struct stat" with some text fields added in.
*
* TODO: Add "comment", "charset", and possibly other entries that are
* supported by "pax interchange" format. However, GNU, ustar, cpio,
* and other variants don't support these features, so they're not an
* excruciatingly high priority right now.
*
* TODO: "pax interchange" format allows essentially arbitrary
* key/value attributes to be attached to any entry. Supporting
* such extensions may make this library useful for special
* applications (e.g., a package manager could attach special
* package-management attributes to each entry).
*/
struct archive;
struct archive_entry;
/*
* File-type constants. These are returned from archive_entry_filetype()
* and passed to archive_entry_set_filetype().
*
* These values match S_XXX defines on every platform I've checked,
* including Windows, AIX, Linux, Solaris, and BSD. They're
* (re)defined here because platforms generally don't define the ones
* they don't support. For example, Windows doesn't define S_IFLNK or
* S_IFBLK. Instead of having a mass of conditional logic and system
* checks to define any S_XXX values that aren't supported locally,
* I've just defined a new set of such constants so that
* libarchive-based applications can manipulate and identify archive
* entries properly even if the hosting platform can't store them on
* disk.
*
* These values are also used directly within some portable formats,
* such as cpio. If you find a platform that varies from these, the
* correct solution is to leave these alone and translate from these
* portable values to platform-native values when entries are read from
* or written to disk.
*/
/*
* In libarchive 4.0, we can drop the casts here.
* They're needed to work around Borland C's broken mode_t.
*/
#define AE_IFMT ((__LA_MODE_T)0170000)
#define AE_IFREG ((__LA_MODE_T)0100000)
#define AE_IFLNK ((__LA_MODE_T)0120000)
#define AE_IFSOCK ((__LA_MODE_T)0140000)
#define AE_IFCHR ((__LA_MODE_T)0020000)
#define AE_IFBLK ((__LA_MODE_T)0060000)
#define AE_IFDIR ((__LA_MODE_T)0040000)
#define AE_IFIFO ((__LA_MODE_T)0010000)
/*
* Symlink types
*/
#define AE_SYMLINK_TYPE_UNDEFINED 0
#define AE_SYMLINK_TYPE_FILE 1
#define AE_SYMLINK_TYPE_DIRECTORY 2
/*
* Basic object manipulation
*/
__LA_DECL struct archive_entry *archive_entry_clear(struct archive_entry *);
/* The 'clone' function does a deep copy; all of the strings are copied too. */
__LA_DECL struct archive_entry *archive_entry_clone(struct archive_entry *);
__LA_DECL void archive_entry_free(struct archive_entry *);
__LA_DECL struct archive_entry *archive_entry_new(void);
/*
* This form of archive_entry_new2() will pull character-set
* conversion information from the specified archive handle. The
* older archive_entry_new(void) form is equivalent to calling
* archive_entry_new2(NULL) and will result in the use of an internal
* default character-set conversion.
*/
__LA_DECL struct archive_entry *archive_entry_new2(struct archive *);
/*
* Retrieve fields from an archive_entry.
*
* There are a number of implicit conversions among these fields. For
* example, if a regular string field is set and you read the _w wide
* character field, the entry will implicitly convert narrow-to-wide
* using the current locale. Similarly, dev values are automatically
* updated when you write devmajor or devminor and vice versa.
*
* In addition, fields can be "set" or "unset." Unset string fields
* return NULL, non-string fields have _is_set() functions to test
* whether they've been set. You can "unset" a string field by
* assigning NULL; non-string fields have _unset() functions to
* unset them.
*
* Note: There is one ambiguity in the above; string fields will
* also return NULL when implicit character set conversions fail.
* This is usually what you want.
*/
__LA_DECL time_t archive_entry_atime(struct archive_entry *);
__LA_DECL long archive_entry_atime_nsec(struct archive_entry *);
__LA_DECL int archive_entry_atime_is_set(struct archive_entry *);
__LA_DECL time_t archive_entry_birthtime(struct archive_entry *);
__LA_DECL long archive_entry_birthtime_nsec(struct archive_entry *);
__LA_DECL int archive_entry_birthtime_is_set(struct archive_entry *);
__LA_DECL time_t archive_entry_ctime(struct archive_entry *);
__LA_DECL long archive_entry_ctime_nsec(struct archive_entry *);
__LA_DECL int archive_entry_ctime_is_set(struct archive_entry *);
__LA_DECL dev_t archive_entry_dev(struct archive_entry *);
__LA_DECL int archive_entry_dev_is_set(struct archive_entry *);
__LA_DECL dev_t archive_entry_devmajor(struct archive_entry *);
__LA_DECL dev_t archive_entry_devminor(struct archive_entry *);
__LA_DECL __LA_MODE_T archive_entry_filetype(struct archive_entry *);
__LA_DECL void archive_entry_fflags(struct archive_entry *,
unsigned long * /* set */,
unsigned long * /* clear */);
__LA_DECL const char *archive_entry_fflags_text(struct archive_entry *);
__LA_DECL la_int64_t archive_entry_gid(struct archive_entry *);
__LA_DECL const char *archive_entry_gname(struct archive_entry *);
__LA_DECL const char *archive_entry_gname_utf8(struct archive_entry *);
__LA_DECL const wchar_t *archive_entry_gname_w(struct archive_entry *);
__LA_DECL const char *archive_entry_hardlink(struct archive_entry *);
__LA_DECL const char *archive_entry_hardlink_utf8(struct archive_entry *);
__LA_DECL const wchar_t *archive_entry_hardlink_w(struct archive_entry *);
__LA_DECL la_int64_t archive_entry_ino(struct archive_entry *);
__LA_DECL la_int64_t archive_entry_ino64(struct archive_entry *);
__LA_DECL int archive_entry_ino_is_set(struct archive_entry *);
__LA_DECL __LA_MODE_T archive_entry_mode(struct archive_entry *);
__LA_DECL time_t archive_entry_mtime(struct archive_entry *);
__LA_DECL long archive_entry_mtime_nsec(struct archive_entry *);
__LA_DECL int archive_entry_mtime_is_set(struct archive_entry *);
__LA_DECL unsigned int archive_entry_nlink(struct archive_entry *);
__LA_DECL const char *archive_entry_pathname(struct archive_entry *);
__LA_DECL const char *archive_entry_pathname_utf8(struct archive_entry *);
__LA_DECL const wchar_t *archive_entry_pathname_w(struct archive_entry *);
__LA_DECL __LA_MODE_T archive_entry_perm(struct archive_entry *);
__LA_DECL dev_t archive_entry_rdev(struct archive_entry *);
__LA_DECL dev_t archive_entry_rdevmajor(struct archive_entry *);
__LA_DECL dev_t archive_entry_rdevminor(struct archive_entry *);
__LA_DECL const char *archive_entry_sourcepath(struct archive_entry *);
__LA_DECL const wchar_t *archive_entry_sourcepath_w(struct archive_entry *);
__LA_DECL la_int64_t archive_entry_size(struct archive_entry *);
__LA_DECL int archive_entry_size_is_set(struct archive_entry *);
__LA_DECL const char *archive_entry_strmode(struct archive_entry *);
__LA_DECL const char *archive_entry_symlink(struct archive_entry *);
__LA_DECL const char *archive_entry_symlink_utf8(struct archive_entry *);
__LA_DECL int archive_entry_symlink_type(struct archive_entry *);
__LA_DECL const wchar_t *archive_entry_symlink_w(struct archive_entry *);
__LA_DECL la_int64_t archive_entry_uid(struct archive_entry *);
__LA_DECL const char *archive_entry_uname(struct archive_entry *);
__LA_DECL const char *archive_entry_uname_utf8(struct archive_entry *);
__LA_DECL const wchar_t *archive_entry_uname_w(struct archive_entry *);
__LA_DECL int archive_entry_is_data_encrypted(struct archive_entry *);
__LA_DECL int archive_entry_is_metadata_encrypted(struct archive_entry *);
__LA_DECL int archive_entry_is_encrypted(struct archive_entry *);
/*
* Set fields in an archive_entry.
*
* Note: Before libarchive 2.4, there were 'set' and 'copy' versions
* of the string setters. 'copy' copied the actual string, 'set' just
* stored the pointer. In libarchive 2.4 and later, strings are
* always copied.
*/
__LA_DECL void archive_entry_set_atime(struct archive_entry *, time_t, long);
__LA_DECL void archive_entry_unset_atime(struct archive_entry *);
#if defined(_WIN32) && !defined(__CYGWIN__)
__LA_DECL void archive_entry_copy_bhfi(struct archive_entry *, BY_HANDLE_FILE_INFORMATION *);
#endif
__LA_DECL void archive_entry_set_birthtime(struct archive_entry *, time_t, long);
__LA_DECL void archive_entry_unset_birthtime(struct archive_entry *);
__LA_DECL void archive_entry_set_ctime(struct archive_entry *, time_t, long);
__LA_DECL void archive_entry_unset_ctime(struct archive_entry *);
__LA_DECL void archive_entry_set_dev(struct archive_entry *, dev_t);
__LA_DECL void archive_entry_set_devmajor(struct archive_entry *, dev_t);
__LA_DECL void archive_entry_set_devminor(struct archive_entry *, dev_t);
__LA_DECL void archive_entry_set_filetype(struct archive_entry *, unsigned int);
__LA_DECL void archive_entry_set_fflags(struct archive_entry *,
unsigned long /* set */, unsigned long /* clear */);
/* Returns pointer to start of first invalid token, or NULL if none. */
/* Note that all recognized tokens are processed, regardless. */
__LA_DECL const char *archive_entry_copy_fflags_text(struct archive_entry *,
const char *);
__LA_DECL const wchar_t *archive_entry_copy_fflags_text_w(struct archive_entry *,
const wchar_t *);
__LA_DECL void archive_entry_set_gid(struct archive_entry *, la_int64_t);
__LA_DECL void archive_entry_set_gname(struct archive_entry *, const char *);
__LA_DECL void archive_entry_set_gname_utf8(struct archive_entry *, const char *);
__LA_DECL void archive_entry_copy_gname(struct archive_entry *, const char *);
__LA_DECL void archive_entry_copy_gname_w(struct archive_entry *, const wchar_t *);
__LA_DECL int archive_entry_update_gname_utf8(struct archive_entry *, const char *);
__LA_DECL void archive_entry_set_hardlink(struct archive_entry *, const char *);
__LA_DECL void archive_entry_set_hardlink_utf8(struct archive_entry *, const char *);
__LA_DECL void archive_entry_copy_hardlink(struct archive_entry *, const char *);
__LA_DECL void archive_entry_copy_hardlink_w(struct archive_entry *, const wchar_t *);
__LA_DECL int archive_entry_update_hardlink_utf8(struct archive_entry *, const char *);
__LA_DECL void archive_entry_set_ino(struct archive_entry *, la_int64_t);
__LA_DECL void archive_entry_set_ino64(struct archive_entry *, la_int64_t);
__LA_DECL void archive_entry_set_link(struct archive_entry *, const char *);
__LA_DECL void archive_entry_set_link_utf8(struct archive_entry *, const char *);
__LA_DECL void archive_entry_copy_link(struct archive_entry *, const char *);
__LA_DECL void archive_entry_copy_link_w(struct archive_entry *, const wchar_t *);
__LA_DECL int archive_entry_update_link_utf8(struct archive_entry *, const char *);
__LA_DECL void archive_entry_set_mode(struct archive_entry *, __LA_MODE_T);
__LA_DECL void archive_entry_set_mtime(struct archive_entry *, time_t, long);
__LA_DECL void archive_entry_unset_mtime(struct archive_entry *);
__LA_DECL void archive_entry_set_nlink(struct archive_entry *, unsigned int);
__LA_DECL void archive_entry_set_pathname(struct archive_entry *, const char *);
__LA_DECL void archive_entry_set_pathname_utf8(struct archive_entry *, const char *);
__LA_DECL void archive_entry_copy_pathname(struct archive_entry *, const char *);
__LA_DECL void archive_entry_copy_pathname_w(struct archive_entry *, const wchar_t *);
__LA_DECL int archive_entry_update_pathname_utf8(struct archive_entry *, const char *);
__LA_DECL void archive_entry_set_perm(struct archive_entry *, __LA_MODE_T);
__LA_DECL void archive_entry_set_rdev(struct archive_entry *, dev_t);
__LA_DECL void archive_entry_set_rdevmajor(struct archive_entry *, dev_t);
__LA_DECL void archive_entry_set_rdevminor(struct archive_entry *, dev_t);
__LA_DECL void archive_entry_set_size(struct archive_entry *, la_int64_t);
__LA_DECL void archive_entry_unset_size(struct archive_entry *);
__LA_DECL void archive_entry_copy_sourcepath(struct archive_entry *, const char *);
__LA_DECL void archive_entry_copy_sourcepath_w(struct archive_entry *, const wchar_t *);
__LA_DECL void archive_entry_set_symlink(struct archive_entry *, const char *);
__LA_DECL void archive_entry_set_symlink_type(struct archive_entry *, int);
__LA_DECL void archive_entry_set_symlink_utf8(struct archive_entry *, const char *);
__LA_DECL void archive_entry_copy_symlink(struct archive_entry *, const char *);
__LA_DECL void archive_entry_copy_symlink_w(struct archive_entry *, const wchar_t *);
__LA_DECL int archive_entry_update_symlink_utf8(struct archive_entry *, const char *);
__LA_DECL void archive_entry_set_uid(struct archive_entry *, la_int64_t);
__LA_DECL void archive_entry_set_uname(struct archive_entry *, const char *);
__LA_DECL void archive_entry_set_uname_utf8(struct archive_entry *, const char *);
__LA_DECL void archive_entry_copy_uname(struct archive_entry *, const char *);
__LA_DECL void archive_entry_copy_uname_w(struct archive_entry *, const wchar_t *);
__LA_DECL int archive_entry_update_uname_utf8(struct archive_entry *, const char *);
__LA_DECL void archive_entry_set_is_data_encrypted(struct archive_entry *, char is_encrypted);
__LA_DECL void archive_entry_set_is_metadata_encrypted(struct archive_entry *, char is_encrypted);
/*
* Routines to bulk copy fields to/from a platform-native "struct
* stat." Libarchive used to just store a struct stat inside of each
* archive_entry object, but this created issues when trying to
* manipulate archives on systems different than the ones they were
* created on.
*
* TODO: On Linux and other LFS systems, provide both stat32 and
* stat64 versions of these functions and all of the macro glue so
* that archive_entry_stat is magically defined to
* archive_entry_stat32 or archive_entry_stat64 as appropriate.
*/
__LA_DECL const struct stat *archive_entry_stat(struct archive_entry *);
__LA_DECL void archive_entry_copy_stat(struct archive_entry *, const struct stat *);
/*
* Storage for Mac OS-specific AppleDouble metadata information.
* Apple-format tar files store a separate binary blob containing
* encoded metadata with ACL, extended attributes, etc.
* This provides a place to store that blob.
*/
__LA_DECL const void * archive_entry_mac_metadata(struct archive_entry *, size_t *);
__LA_DECL void archive_entry_copy_mac_metadata(struct archive_entry *, const void *, size_t);
/*
* Digest routine. This is used to query the raw hex digest for the
* given entry. The type of digest is provided as an argument.
*/
#define ARCHIVE_ENTRY_DIGEST_MD5 0x00000001
#define ARCHIVE_ENTRY_DIGEST_RMD160 0x00000002
#define ARCHIVE_ENTRY_DIGEST_SHA1 0x00000003
#define ARCHIVE_ENTRY_DIGEST_SHA256 0x00000004
#define ARCHIVE_ENTRY_DIGEST_SHA384 0x00000005
#define ARCHIVE_ENTRY_DIGEST_SHA512 0x00000006
__LA_DECL const unsigned char * archive_entry_digest(struct archive_entry *, int /* type */);
/*
* ACL routines. This used to simply store and return text-format ACL
* strings, but that proved insufficient for a number of reasons:
* = clients need control over uname/uid and gname/gid mappings
* = there are many different ACL text formats
* = would like to be able to read/convert archives containing ACLs
* on platforms that lack ACL libraries
*
* This last point, in particular, forces me to implement a reasonably
* complete set of ACL support routines.
*/
/*
* Permission bits.
*/
#define ARCHIVE_ENTRY_ACL_EXECUTE 0x00000001
#define ARCHIVE_ENTRY_ACL_WRITE 0x00000002
#define ARCHIVE_ENTRY_ACL_READ 0x00000004
#define ARCHIVE_ENTRY_ACL_READ_DATA 0x00000008
#define ARCHIVE_ENTRY_ACL_LIST_DIRECTORY 0x00000008
#define ARCHIVE_ENTRY_ACL_WRITE_DATA 0x00000010
#define ARCHIVE_ENTRY_ACL_ADD_FILE 0x00000010
#define ARCHIVE_ENTRY_ACL_APPEND_DATA 0x00000020
#define ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY 0x00000020
#define ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS 0x00000040
#define ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS 0x00000080
#define ARCHIVE_ENTRY_ACL_DELETE_CHILD 0x00000100
#define ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES 0x00000200
#define ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES 0x00000400
#define ARCHIVE_ENTRY_ACL_DELETE 0x00000800
#define ARCHIVE_ENTRY_ACL_READ_ACL 0x00001000
#define ARCHIVE_ENTRY_ACL_WRITE_ACL 0x00002000
#define ARCHIVE_ENTRY_ACL_WRITE_OWNER 0x00004000
#define ARCHIVE_ENTRY_ACL_SYNCHRONIZE 0x00008000
#define ARCHIVE_ENTRY_ACL_PERMS_POSIX1E \
(ARCHIVE_ENTRY_ACL_EXECUTE \
| ARCHIVE_ENTRY_ACL_WRITE \
| ARCHIVE_ENTRY_ACL_READ)
#define ARCHIVE_ENTRY_ACL_PERMS_NFS4 \
(ARCHIVE_ENTRY_ACL_EXECUTE \
| ARCHIVE_ENTRY_ACL_READ_DATA \
| ARCHIVE_ENTRY_ACL_LIST_DIRECTORY \
| ARCHIVE_ENTRY_ACL_WRITE_DATA \
| ARCHIVE_ENTRY_ACL_ADD_FILE \
| ARCHIVE_ENTRY_ACL_APPEND_DATA \
| ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY \
| ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS \
| ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS \
| ARCHIVE_ENTRY_ACL_DELETE_CHILD \
| ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES \
| ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES \
| ARCHIVE_ENTRY_ACL_DELETE \
| ARCHIVE_ENTRY_ACL_READ_ACL \
| ARCHIVE_ENTRY_ACL_WRITE_ACL \
| ARCHIVE_ENTRY_ACL_WRITE_OWNER \
| ARCHIVE_ENTRY_ACL_SYNCHRONIZE)
/*
* Inheritance values (NFS4 ACLs only); included in permset.
*/
#define ARCHIVE_ENTRY_ACL_ENTRY_INHERITED 0x01000000
#define ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT 0x02000000
#define ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT 0x04000000
#define ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT 0x08000000
#define ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY 0x10000000
#define ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS 0x20000000
#define ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS 0x40000000
#define ARCHIVE_ENTRY_ACL_INHERITANCE_NFS4 \
(ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT \
| ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT \
| ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT \
| ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY \
| ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS \
| ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS \
| ARCHIVE_ENTRY_ACL_ENTRY_INHERITED)
/* We need to be able to specify combinations of these. */
#define ARCHIVE_ENTRY_ACL_TYPE_ACCESS 0x00000100 /* POSIX.1e only */
#define ARCHIVE_ENTRY_ACL_TYPE_DEFAULT 0x00000200 /* POSIX.1e only */
#define ARCHIVE_ENTRY_ACL_TYPE_ALLOW 0x00000400 /* NFS4 only */
#define ARCHIVE_ENTRY_ACL_TYPE_DENY 0x00000800 /* NFS4 only */
#define ARCHIVE_ENTRY_ACL_TYPE_AUDIT 0x00001000 /* NFS4 only */
#define ARCHIVE_ENTRY_ACL_TYPE_ALARM 0x00002000 /* NFS4 only */
#define ARCHIVE_ENTRY_ACL_TYPE_POSIX1E (ARCHIVE_ENTRY_ACL_TYPE_ACCESS \
| ARCHIVE_ENTRY_ACL_TYPE_DEFAULT)
#define ARCHIVE_ENTRY_ACL_TYPE_NFS4 (ARCHIVE_ENTRY_ACL_TYPE_ALLOW \
| ARCHIVE_ENTRY_ACL_TYPE_DENY \
| ARCHIVE_ENTRY_ACL_TYPE_AUDIT \
| ARCHIVE_ENTRY_ACL_TYPE_ALARM)
/* Tag values mimic POSIX.1e */
#define ARCHIVE_ENTRY_ACL_USER 10001 /* Specified user. */
#define ARCHIVE_ENTRY_ACL_USER_OBJ 10002 /* User who owns the file. */
#define ARCHIVE_ENTRY_ACL_GROUP 10003 /* Specified group. */
#define ARCHIVE_ENTRY_ACL_GROUP_OBJ 10004 /* Group who owns the file. */
#define ARCHIVE_ENTRY_ACL_MASK 10005 /* Modify group access (POSIX.1e only) */
#define ARCHIVE_ENTRY_ACL_OTHER 10006 /* Public (POSIX.1e only) */
#define ARCHIVE_ENTRY_ACL_EVERYONE 10107 /* Everyone (NFS4 only) */
/*
* Set the ACL by clearing it and adding entries one at a time.
* Unlike the POSIX.1e ACL routines, you must specify the type
* (access/default) for each entry. Internally, the ACL data is just
* a soup of entries. API calls here allow you to retrieve just the
* entries of interest. This design (which goes against the spirit of
* POSIX.1e) is useful for handling archive formats that combine
* default and access information in a single ACL list.
*/
__LA_DECL void archive_entry_acl_clear(struct archive_entry *);
__LA_DECL int archive_entry_acl_add_entry(struct archive_entry *,
int /* type */, int /* permset */, int /* tag */,
int /* qual */, const char * /* name */);
__LA_DECL int archive_entry_acl_add_entry_w(struct archive_entry *,
int /* type */, int /* permset */, int /* tag */,
int /* qual */, const wchar_t * /* name */);
/*
* To retrieve the ACL, first "reset", then repeatedly ask for the
* "next" entry. The want_type parameter allows you to request only
* certain types of entries.
*/
__LA_DECL int archive_entry_acl_reset(struct archive_entry *, int /* want_type */);
__LA_DECL int archive_entry_acl_next(struct archive_entry *, int /* want_type */,
int * /* type */, int * /* permset */, int * /* tag */,
int * /* qual */, const char ** /* name */);
/*
* Construct a text-format ACL. The flags argument is a bitmask that
* can include any of the following:
*
* Flags only for archive entries with POSIX.1e ACL:
* ARCHIVE_ENTRY_ACL_TYPE_ACCESS - Include POSIX.1e "access" entries.
* ARCHIVE_ENTRY_ACL_TYPE_DEFAULT - Include POSIX.1e "default" entries.
* ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT - Include "default:" before each
* default ACL entry.
* ARCHIVE_ENTRY_ACL_STYLE_SOLARIS - Output only one colon after "other" and
* "mask" entries.
*
* Flags only for archive entries with NFSv4 ACL:
* ARCHIVE_ENTRY_ACL_STYLE_COMPACT - Do not output the minus character for
* unset permissions and flags in NFSv4 ACL permission and flag fields
*
* Flags for for archive entries with POSIX.1e ACL or NFSv4 ACL:
* ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID - Include extra numeric ID field in
* each ACL entry.
* ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA - Separate entries with comma
* instead of newline.
*/
#define ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID 0x00000001
#define ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT 0x00000002
#define ARCHIVE_ENTRY_ACL_STYLE_SOLARIS 0x00000004
#define ARCHIVE_ENTRY_ACL_STYLE_SEPARATOR_COMMA 0x00000008
#define ARCHIVE_ENTRY_ACL_STYLE_COMPACT 0x00000010
__LA_DECL wchar_t *archive_entry_acl_to_text_w(struct archive_entry *,
la_ssize_t * /* len */, int /* flags */);
__LA_DECL char *archive_entry_acl_to_text(struct archive_entry *,
la_ssize_t * /* len */, int /* flags */);
__LA_DECL int archive_entry_acl_from_text_w(struct archive_entry *,
const wchar_t * /* wtext */, int /* type */);
__LA_DECL int archive_entry_acl_from_text(struct archive_entry *,
const char * /* text */, int /* type */);
/* Deprecated constants */
#define OLD_ARCHIVE_ENTRY_ACL_STYLE_EXTRA_ID 1024
#define OLD_ARCHIVE_ENTRY_ACL_STYLE_MARK_DEFAULT 2048
/* Deprecated functions */
__LA_DECL const wchar_t *archive_entry_acl_text_w(struct archive_entry *,
int /* flags */) __LA_DEPRECATED;
__LA_DECL const char *archive_entry_acl_text(struct archive_entry *,
int /* flags */) __LA_DEPRECATED;
/* Return bitmask of ACL types in an archive entry */
__LA_DECL int archive_entry_acl_types(struct archive_entry *);
/* Return a count of entries matching 'want_type' */
__LA_DECL int archive_entry_acl_count(struct archive_entry *, int /* want_type */);
/* Return an opaque ACL object. */
/* There's not yet anything clients can actually do with this... */
struct archive_acl;
__LA_DECL struct archive_acl *archive_entry_acl(struct archive_entry *);
/*
* extended attributes
*/
__LA_DECL void archive_entry_xattr_clear(struct archive_entry *);
__LA_DECL void archive_entry_xattr_add_entry(struct archive_entry *,
const char * /* name */, const void * /* value */,
size_t /* size */);
/*
* To retrieve the xattr list, first "reset", then repeatedly ask for the
* "next" entry.
*/
__LA_DECL int archive_entry_xattr_count(struct archive_entry *);
__LA_DECL int archive_entry_xattr_reset(struct archive_entry *);
__LA_DECL int archive_entry_xattr_next(struct archive_entry *,
const char ** /* name */, const void ** /* value */, size_t *);
/*
* sparse
*/
__LA_DECL void archive_entry_sparse_clear(struct archive_entry *);
__LA_DECL void archive_entry_sparse_add_entry(struct archive_entry *,
la_int64_t /* offset */, la_int64_t /* length */);
/*
* To retrieve the xattr list, first "reset", then repeatedly ask for the
* "next" entry.
*/
__LA_DECL int archive_entry_sparse_count(struct archive_entry *);
__LA_DECL int archive_entry_sparse_reset(struct archive_entry *);
__LA_DECL int archive_entry_sparse_next(struct archive_entry *,
la_int64_t * /* offset */, la_int64_t * /* length */);
/*
* Utility to match up hardlinks.
*
* The 'struct archive_entry_linkresolver' is a cache of archive entries
* for files with multiple links. Here's how to use it:
* 1. Create a lookup object with archive_entry_linkresolver_new()
* 2. Tell it the archive format you're using.
* 3. Hand each archive_entry to archive_entry_linkify().
* That function will return 0, 1, or 2 entries that should
* be written.
* 4. Call archive_entry_linkify(resolver, NULL) until
* no more entries are returned.
* 5. Call archive_entry_linkresolver_free(resolver) to free resources.
*
* The entries returned have their hardlink and size fields updated
* appropriately. If an entry is passed in that does not refer to
* a file with multiple links, it is returned unchanged. The intention
* is that you should be able to simply filter all entries through
* this machine.
*
* To make things more efficient, be sure that each entry has a valid
* nlinks value. The hardlink cache uses this to track when all links
* have been found. If the nlinks value is zero, it will keep every
* name in the cache indefinitely, which can use a lot of memory.
*
* Note that archive_entry_size() is reset to zero if the file
* body should not be written to the archive. Pay attention!
*/
struct archive_entry_linkresolver;
/*
* There are three different strategies for marking hardlinks.
* The descriptions below name them after the best-known
* formats that rely on each strategy:
*
* "Old cpio" is the simplest, it always returns any entry unmodified.
* As far as I know, only cpio formats use this. Old cpio archives
* store every link with the full body; the onus is on the dearchiver
* to detect and properly link the files as they are restored.
* "tar" is also pretty simple; it caches a copy the first time it sees
* any link. Subsequent appearances are modified to be hardlink
* references to the first one without any body. Used by all tar
* formats, although the newest tar formats permit the "old cpio" strategy
* as well. This strategy is very simple for the dearchiver,
* and reasonably straightforward for the archiver.
* "new cpio" is trickier. It stores the body only with the last
* occurrence. The complication is that we might not
* see every link to a particular file in a single session, so
* there's no easy way to know when we've seen the last occurrence.
* The solution here is to queue one link until we see the next.
* At the end of the session, you can enumerate any remaining
* entries by calling archive_entry_linkify(NULL) and store those
* bodies. If you have a file with three links l1, l2, and l3,
* you'll get the following behavior if you see all three links:
* linkify(l1) => NULL (the resolver stores l1 internally)
* linkify(l2) => l1 (resolver stores l2, you write l1)
* linkify(l3) => l2, l3 (all links seen, you can write both).
* If you only see l1 and l2, you'll get this behavior:
* linkify(l1) => NULL
* linkify(l2) => l1
* linkify(NULL) => l2 (at end, you retrieve remaining links)
* As the name suggests, this strategy is used by newer cpio variants.
* It's noticeably more complex for the archiver, slightly more complex
* for the dearchiver than the tar strategy, but makes it straightforward
* to restore a file using any link by simply continuing to scan until
* you see a link that is stored with a body. In contrast, the tar
* strategy requires you to rescan the archive from the beginning to
* correctly extract an arbitrary link.
*/
__LA_DECL struct archive_entry_linkresolver *archive_entry_linkresolver_new(void);
__LA_DECL void archive_entry_linkresolver_set_strategy(
struct archive_entry_linkresolver *, int /* format_code */);
__LA_DECL void archive_entry_linkresolver_free(struct archive_entry_linkresolver *);
__LA_DECL void archive_entry_linkify(struct archive_entry_linkresolver *,
struct archive_entry **, struct archive_entry **);
__LA_DECL struct archive_entry *archive_entry_partial_links(
struct archive_entry_linkresolver *res, unsigned int *links);
#ifdef __cplusplus
}
#endif
/* This is meaningless outside of this header. */
#undef __LA_DECL
#endif /* !ARCHIVE_ENTRY_H_INCLUDED */

BIN
libs/lib/libarchive.a Normal file

Binary file not shown.

41
libs/lib/libarchive.la Executable file
View file

@ -0,0 +1,41 @@
# libarchive.la - a libtool library file
# Generated by libtool (GNU libtool) 2.4.6 Debian-2.4.6-14
#
# Please DO NOT delete this file!
# It is necessary for linking the library.
# The name that we can dlopen(3).
dlname=''
# Names of this library.
library_names=''
# The name of the static archive.
old_library='libarchive.a'
# Linker flags that cannot go in dependency_libs.
inherited_linker_flags=''
# 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'
# Names of additional weak libraries provided by this library
weak_library_names=''
# Version information for libarchive.
current=18
age=5
revision=1
# Is this an already installed library?
installed=yes
# Should we warn about portability when linking against -modules?
shouldnotlink=no
# Files to dlopen/dlpreopen
dlopen=''
dlpreopen=''
# Directory that this library needs to be installed in:
libdir='/opt/devkitpro/portlibs/3ds/lib'

View file

@ -0,0 +1,12 @@
prefix=/opt/devkitpro/portlibs/3ds
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: libarchive
Description: library that can create and read several streaming archive formats
Version: 3.5.1
Cflags: -I${includedir}
Cflags.private: -DLIBARCHIVE_STATIC
Libs: -L${libdir} -larchive
Libs.private: -llzma -lbz2 -lz -lctru

View file

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Before After
Before After

24
resources/Themes.json Normal file
View file

@ -0,0 +1,24 @@
{
"Default": {
"BGColor": "#0F0F0F",
"BarColor": "#1A1A1A",
"BarOutline": "#2A2A2A",
"BoxInside": "#16A085",
"BoxSelected": "#2980B9",
"BoxUnselected": "#000000",
"Description": "A Deluxe Theme\n\nBy : MattTheTekie",
"DownListPrev": "#9B59B6",
"EntryBar": "#9B59B6",
"EntryOutline": "#8E44AD",
"MarkSelected": "#E74C3C",
"MarkUnselected": "#C0392B",
"ProgressbarIn": "#2ECC71",
"ProgressbarOut": "#27AE60",
"SearchBar": "#F1C40F",
"SearchBarOutline": "#34495E",
"SideBarIconColor": "#FFFFFF",
"SideBarSelected": "#E67E22",
"SideBarUnselected": "#1A1A1A",
"TextColor": "#FFFFFF"
}
}

8
resources/UniStores.json Normal file
View file

@ -0,0 +1,8 @@
{
"StreetPass-Shop": {
"title": "StreetPass-Shop",
"author": "MattTheTekie",
"url": "https://github.com/sdkpaint/streetpass-3.0-config/raw/master/unistore/StreetPass-Shop.unistore",
"description": "Here you can find loads of StreetPass data!\nEnjoy browsing through the StreetPass shop! ~MattTheTekie!"
}
}

View file

@ -1,89 +1,142 @@
{
"3DSX_IN_FOLDER": "Brut 3DSX briles in brolder",
"3DSX_IN_FOLDER_DESC": "If bruhnabled, 3DSX briles will be bruht in a brolder with the same bruh brinstead of bruhrectly in the same brolder.",
"ACTION_CANCELED": "%s bruhd!",
"ACTION_FAILED": "%s oofed!",
"ACTION_REQUIRED": "Action bruhquired!",
"ACTION_SUCCEEDED": "%s bruhcceeded!",
"ACTIVE_THEME": "Bruhctive theme",
"ASCENDING": "Asbruhing",
"ARGUMENT_INVALID": "Arbruhment invalid.\nBrease breck the xml brile for bruhper arbruhments.",
"AUTHOR": "Bruhthor",
"AUTO_UPDATE_NIGHTLY": "Bruhse nigthly bruhs",
"AUTO_UPDATE_NIGHTLY_DESC": "Bruhse nightly bruhs of Universal-Updater bruhstead of the bruhble bruhleases.",
"AUTO_UPDATE_SETTINGS": "Auto-Bruhpdate Settings",
"AUTO_UPDATE_SETTINGS_BTN": "Auto-bruhpdate settings...",
"AUTO_UPDATE_UNISTORE": "Auto-bruhpdate UniStores",
"AUTO_UPDATE_UNISTORE_DESC": "With this, the last bruhsed UniStore will be bruhpdated automatically when launchbruh Universal-Updater.",
"AUTO_UPDATE_UNISTORE_DESC": "With this, the last bruhsed UniStore will be bruhpdated bruhtomatically when launchbruh Universal-Updater.",
"AUTO_UPDATE_UU": "Auto-bruhpdate Universal-Updater",
"AUTO_UPDATE_UU_DESC": "When enabruhd, Universal-Updater will check for bruhpdates every time it's bruhpened.",
"AVAILABLE_DOWNLOADS": "Available Bruhwnloads",
"AVAILABLE_DOWNLOADS": "Bruhvailable Bruhwnloads",
"BOOT_TITLE": "Would you bruh to bruht this title?",
"CANCEL": "Bruhhhh",
"CATEGORY": "Catebruhry",
"CHANGE_3DSX_PATH": "Bruh 3DSX path",
"CHANGE_ARCHIVE_PATH": "Bruh archive path",
"CHANGE_NDS_PATH": "Bruh NDS path",
"CHANGE_FIRM_PATH": "Bruh firm path",
"CHANGE_NDS_PATH": "Bruh NDS bruhth",
"CHANGE_SHORTCUT_PATH": "Change shortbruht bruhth",
"CHECK_UNISTORE_UPDATES": "Checkbruh for UniStore bruhpdates...",
"CHECK_UU_UPDATES": "Checkbruh for Universal-Updater bruhpdates...",
"CONFIRM_OR_CANCEL": "Press  to bruh,  to bruh.",
"CONFIRM_OR_CANCEL": "Bruhss  to bruhnfirm,  to bruhncel.",
"CONNECT_WIFI": "Please Bruh to WiFi.",
"CONFIRM": "Bruhfirm",
"CONSOLE": "Bruhsole",
"CONTRIBUTOR_TRANSLATORS": "- Bruh Bruhlator & Contribruhtors",
"COPYING": "Bruhpying... %s / %s (%.2f%%)",
"COPY_ERROR": "Copy Bruhror!",
"CREATE_SHORTCUT": "Would bruh like to bruhte a shortbruht?",
"CREDITS": "Bruhdits",
"CREDITS_BTN": "Bruhdits...",
"CURRENT_VERSION": "Current Bruh: ",
"CURRENTLY_EXTRACTING": "Currently bruhing:\n",
"CURRENTLY_EXTRACTING": "Currently bruhing:",
"CUSTOM_FONT": "Use Bruhstom Font",
"CUSTOM_FONT_DESC": "If bruhnabled, 'sdmc:/3ds/Universal-Updater/font.bcfnt' will be bruhsed bruhstead of the sysbruh bruhnt, if bruhd.",
"DELETE_ERROR": "Delete Bruhror!",
"DELETE_PROMPT": "Are you sure you want to Bruh this Bruh?",
"DELETE_UNNEEDED_FILE": "Debruhing unbruhed files...",
"DELETING": "Bruhleting...",
"DESCENDING": "Desbruhing",
"DIRECTION": "Dirbruhtion",
"DIRECTORY_SETTINGS": "Directobruhy Settings",
"DIRECTORY_SETTINGS_BTN": "Directobruhy Settings...",
"DISABLE_AUTOUPDATE_UNISTORE": "Disable auto-bruhpdating UniStore on bruhpt",
"DISABLE_UPDATE_CHECK": "Disable self-bruhpdating",
"DONE": "Bruh!",
"DOWNLOAD_ERROR": "Download Bruhror!",
"DOWNLOAD_FAILED": "Bruh Failed!",
"DOWNLOAD_SPEED": "Bruhlocity: %lld KiB/s",
"DOWNLOADING": "Bruhnloading... %s / %s (%.2f%%)",
"DOWNLOADING_COMPATIBLE_FONT": "Bruhloading compatibruh font...",
"DOWNLOADING_SPRITE_SHEET": "Bruhloading Bruhsheet...",
"DOWNLOADING_SPRITE_SHEET2": "Bruhloading Bruhsheet %i of %i...",
"DOWNLOADING_UNIVERSAL_DB": "Bruhloading Universal-DB...",
"DONLOADING_UNIVERSAL_UPDATER": "Bruhloading Universal-Updater...",
"DOWNLOADING_UNISTORE": "Bruhloading Unistore...",
"ENABLE_AUTOUPDATE_UNISTORE": "Enable auto-bruhpdating UniStore on bruhpt",
"ENABLE_UPDATE_CHECK": "Enable self-bruhpdating",
"ENTER_DESC_SHORTCUT": "Enter the shortbrut description.",
"ENTER_SEARCH": "Enter what you bruh to bruhrch.",
"ENTER_SHORTCUT_FILENAME": "Enter the shortbrut filename (without extension).",
"ENTER_TITLE_SHORTCUT": "Enter the shortbrut title.",
"ENTER_URL": "Bruhter the URL of the UniStore.",
"ENTRIES": "Bruhtries",
"EXECUTE_ENTRY": "Bruh bro like bro exebruh this bruhry?",
"NOTE_NIGHTLY": "Bruh: \"Bruhtly\" versions are intended for testing bruhpcoming features and maybe bruhstable.\n\nIf you simply want to install,\nPlease cancel and install bruh normal version.",
"NOTE_PRERELEASE": "Note: This is a prerelease build and may be unstable.\n\nIf you simply want to install, you may\nwant to install the normal version if one exists.",
"EXIT_APP": "Bruhit Universal-Updater",
"EXTRACTING": "Bruhxtracting %s / %s (%.2f%%)",
"EXTRACT_ERROR": "Bruhxtracting Brueror!",
"FEATURE_SIDE_EFFECTS": "(Not Yet Translated into bruh) This Feature may have side effects while the Queue is running.\nAre you sure you want to continue?",
"FETCHING_METADATA": "Fetching old metabruh...",
"FETCHING_RECOMMENDED_UNISTORES": "Fetching bruhecommended UniStores...",
"FILES": "Bruile: %d / %d",
"FILE_EXTRACTED": "file Bruhded.",
"FILE_SLASH": "It seems that a '/' is included, which is not bruhorted.\nPlease bruhge 'file' to filebruh only.",
"FILES_EXTRACTED": "files Bruhded.",
"FILES_EXTRACTED": "Briles Bruhded.",
"FILTER_TO": "Bruhter to:",
"GITHUB": "Full crebruhs can be found on GitHub",
"GRID": "Brid",
"GUI_SETTINGS": "GUI Settings",
"GUI_SETTINGS_BTN": "GUI Settings...",
"INCLUDE_IN_RESULTS": "Include in rebruhs:",
"INSTALLING": "Brustalling... %s / %s (%.2f%%)",
"INSTALL_UNIVERSAL_UPDATER": "Inbruhing Universal-Updater...",
"INVALID_UNISTORE": "Inbruhid UniStore",
"KEY_CONTINUE": "Bruhss any key to bruhnue.",
"LANGUAGE": "Bruhdioma",
"LANGUAGE": "Bruhguage...",
"LAST_UPDATED": "Last upbruhted",
"LICENSE": "License",
"LIST": "Bist",
"LOADING_SCREENSHOT": "Bruhing Bruhshot...",
"LOADING_SPRITESHEET": "Bruhing Bruhsheet %i of %i...",
"MEDIATYPE_NAND": "BruhdiaType NAND",
"MEDIATYPE_SD": "BruhdiaType SD",
"MOVE_ERROR": "Move Bruhror!",
"NO": "No",
"MOVE_ERROR": "Bruve Bruhror!",
"NO_DOWNLOADS_AVAILABLE": "No bruhnloads available",
"NO_LICENSE": "Bro License",
"NO_SCREENSHOTS_AVAILABLE": "No Bruhshots available",
"NOT_IMPLEMENTED": "Not Bruh Yet",
"OP_COPYING": "Bruhing",
"OP_DELETING": "Bruheting",
"OP_DOWNLOADING": "Bruhdloading",
"OP_EXTRACTING": "Bruhlacting",
"OP_INSTALLING": "Bruhstalling",
"OP_MOVING": "Bruving",
"OP_WAITING": "Bruating",
"QUEUE": "Brueue",
"QUEUE_POSITION": "Brueue Brusition",
"QUEUE_PROGRESS": "Bruep: %d / %d",
"RECOMMENDED_UNISTORES": "Bruhmended UniStores",
"REVISION": "Rebruhon",
"SCREENSHOT": "Bruhshot %d / %d",
"SCREENSHOT_COULD_NOT_LOAD": "Bruhshot could not be bruhoaded.",
"SCREENSHOT_INSTRUCTIONS": "Press  to Bruhge and  to Broom",
"SEARCH_FILTERS": "Search and Filters",
"SELECT_A_THEME": "Bruhme",
"SELECT_DIR": "Select a Bruhtory",
"SELECT_LANG": "Choose the bruhdioma",
"SELECT_UNISTORE": "Select UniStore",
"SELECT_UNISTORE": "Bruhlect UniStore...",
"SELECT_UNISTORE_2": "Select a UniStore",
"SELECTION_QUEUE": "Bruh Brulection bruin Briueue",
"SETTINGS": "Bruhtings",
"SHEET_SLASH": "It seems that a '/' is included, which is not bruhorted.\nPlease bruhge 'sheet' to filebruh only.",
"SHORTCUT_CREATED": "Shortbrut created!",
"SHORTCUT_COPYING": "Bruhying %s...",
"SHORTCUT_DOWNLOADING": "Bruhloading %s...",
"SHORTCUT_EXTRACTING": "Bruhstracting %s...",
"SHORTCUT_INSTALLING": "Bruhstalling %s...",
"SIZE": "Bruhize",
"SORT_BY": "Bort By",
"SORTING": "Sorting",
"START_SELECT": "Bress START to bruhlect the currbruhnt foldbruh",
"SYNTAX_ERROR": "Syntax Bruhror!",
"STORE_INFO": "Store Bruhfo",
"SYNTAX_ERROR": "Bruhtax Bruhror!",
"TITLE": "Bruhtle",
"TOP_STYLE": "Top Bruhle",
"UNISTORE_BG": "Use BruhniStore BG",
@ -91,13 +144,10 @@
"UNISTORE_INVALID_ERROR": "This UniStore is inbruhlid and bruhnot be\nbroded with Universal-Updater.\nMaybe there are Bruhtax bruhrors?",
"UNISTORE_TOO_NEW": "Your bruhsion of Universal-Updater is \ntoo grandpa to use this UniStore.\nPlease bruhptdate to the latest version of Universal-Updater.",
"UNISTORE_TOO_OLD": "This UniStore is grandpa... Which means it cannot be used\nwith this version of Universal-Updater.\nPlease ask the bruhtor to update it.",
"UNSUPPORTED_UNISTORE_VERSION": "The version of this UniStore is too lame to work here.",
"UPDATE_AVAILABLE": "Bruhpdate Available!",
"UPDATE_DONE": "Bruhpdate done! Please re-bruh Universal-Updater.",
"UPDATE_NOT_AVAILABLE": "No bruhpdates available!",
"UPDATING_SPRITE_SHEET": "Loading Bruhsheet...",
"UPDATING_SPRITE_SHEET2": "Bruhing Bruhsheet %i of %i...",
"UPDATING_UNISTORE": "Bruhpdating UniStore...",
"VERSION": "Bruhsion",
"YES": "Bro"
"VERSION": "Bruhsion"
}

View file

@ -1,98 +0,0 @@
{
"DOWNLOAD_FAILED": "Bruh Failed!",
"NOT_IMPLEMENTED": "Not Bruh Yet.",
"DONE": "Bruh!",
"CONNECT_WIFI": "Please Bruh to WiFi.",
"DOWNLOADING": "Bruhding: ",
"CURRENTLY_EXTRACTING": "\nCurrently exbruhding:\n",
"FILE_EXTRACTED": "file Bruhded.",
"FILES_EXTRACTED": "files Bruhded.",
"SCRIPTLIST": "Bruhpt List",
"SCRIPTS": "Bruhpts",
"SETTINGS": "Bruhtings",
"LANGUAGE": "Bruhdioma",
"COLORS": "Bruhlors",
"SELECT_LANG": "Choose the bruhdioma.",
"BAR_COLOR": "Bruh Color",
"TOP_BG_COLOR": "Top Bruh Color",
"BOTTOM_BG_COLOR": "Bottom Bruh Color",
"TEXT_COLOR": "BruhText Color",
"SELECTED_COLOR": "SelectedBruh Color",
"UNSELECTED_COLOR": "UnselectedBruh Color",
"PROGRESSBAR_COLOR": "BruhressBruh Color",
"ENTER_RED_RGB": "Enter the Bruh RGB.",
"ENTER_GREEN_RGB": "Enter the Bruh RGB.",
"ENTER_BLUE_RGB": "Enter the Bruh RGB.",
"INCOMPATIBLE_SCRIPT": "You have an Bruh script.",
"DELETE_PROMPT": "Are you sure you want to Bruh this Bruh?",
"CONFIRM_OR_CANCEL": "Press A to Bruh, B to Bruh.",
"GETTING_SCRIPT_LIST": "Getting Bruh List...",
"SCRIPTBROWSE": "Bruhpt Bruhwse",
"GET_SCRIPTS": "Get Bruh",
"INSTALLED_REV": "Installed Bruh: ",
"CURRENT_REV": "Current Bruh: ",
"AUTHOR": "Bruhthor: ",
"TITLE": "Bruhtl: ",
"FUTURE_SCRIPT": "This is a future bruh.",
"OUTDATED_SCRIPT": "This bruh is grandpa.",
"UP-TO-DATE": "This bruh hip gangster.",
"FTP_MODE": "FTP Bruh",
"FTP_INITIALIZED": "Bruh Initialized.",
"FAILED_GET_IP": "Failed to get Bruh.",
"FAILED_INITIALIZE_FTP": "Failed to initialize Bruh.",
"B_FTP_EXIT": "Press B to exit from Bruh.",
"WIFI_NOT_ENABLED": "WiFi not Bruh.",
"SCRIPTCREATOR": "Bruh Creator",
"CREDITS": "Bruhdits",
"DEVELOPED_BY": "Bruh by: Universal-Team.",
"MAIN_DEV": "Bruh Debruhper: StackZ",
"CURRENT_VERSION": "Current Bruh: ",
"MANY_THANKS": "Many Bruh to:",
"TRANSLATORS": "All our Bruh",
"HELP_TRANSLATE": "- For helping Bruh Universal-Updater's strings.",
"HELP_OUT": "- For helping Bruh by Universal-Updater.",
"SCRIPTCREATORS": "All Script Bruh",
"CREATING_SCRIPTS": "- For creating Bruh for Universal-Updater.",
"SHOW_QR": "Click here to show the Bruh Code.",
"LINK": "Join our Bruh: https://discord.gg/KDJCfGF",
"RELEASE_TAG": "Bruhlease Bruh: ",
"DESC": "Bruhsc: ",
"RELEASE_ID": "Bruh ID: ",
"TITLE_ID": "Bruhtl ID: ",
"FILE_SIZE": "Bruh size: ",
"GET_SCRIPTS_FIRST": "Bruh some Scripts bruh!",
"OPEN": "Bropen",
"SELECT": "Bruhlet",
"REFRESH": "Bruhfrs",
"BACK": "Bruck",
"FILEBROWSE_MSG": "Bruh X to bruh, Select to Bruh.",
"SELECT_SCRIPT_PATH": "Bruh the bruhpt path.",
"CHANGE_BAR_STYLE": "Bruh bro style",
"CHANGE_SCRIPTPATH": "Bruh Bruhpt path",
"CHANGE_MUSICFILE": "Bruh Bruhsic file",
"SELECT_MUSIC_FILE": "Bruh the bruhsic file.",
"VERSION": "Bruhsion: ",
"UPDATING": "Bruhing...",
"WOULD_YOU_LIKE_UPDATE": "Would bro like to bruh this bruh?",
"GET_STORES_FIRST": "Get some Broors first!",
"PREPARE_STORE": "Preparing store... bruh wait.",
"YES": "Bro",
"NO": "No",
"CHANGE_STOREPATH": "Bruh Store path",
"SELECT_STORE_PATH": "Select the Bruh Path.",
"UNKNOWN": "Broknown",
"ENTER_OWNER_AND_REPO": "Enter Bruh and Bruh.",
"ENTER_FILENAME": "Enter bruhname.",
"UNISTORE_SEARCH": "UniBruh search",
"FULL_URL": "Full BRU",
"GITHUB": "GitHub",
"ENTER_FULL_URL": "Enter the full BRU.",
"SCRIPTS_SUBMENU": "Bruhpts Submenu",
"STORE_LIST": "Store bruhst",
"STORE_SEARCH": "Store bruhch",
"UNISTORE_SUBMENU": "UniStore SubBruh",
"OWNER_AND_REPO": "Bruh & Moment",
"FILENAME": "Filebruh",
"OK": "Bro",
"DELETE_STORE": "Bruh bro like bro delbruh this bruhre?"
}

View file

@ -1,103 +1,153 @@
{
"ASCENDING": "Ascending",
"AUTHOR": "Author",
"AUTO_UPDATE_SETTINGS": "Auto-Update Settings",
"AUTO_UPDATE_SETTINGS_BTN": "Auto-update settings...",
"AUTO_UPDATE_UNISTORE": "Auto-update UniStores",
"AUTO_UPDATE_UNISTORE_DESC": "With this, the last used UniStore will be updated automatically when launching Universal-Updater.",
"AUTO_UPDATE_UU": "Auto-update Universal-Updater",
"AUTO_UPDATE_UU_DESC": "When enabled, Universal-Updater will check for updates every time it's opened.",
"AVAILABLE_DOWNLOADS": "Available Downloads",
"3DSX_IN_FOLDER": "Sæt 3DSX-filer i mappen",
"3DSX_IN_FOLDER_DESC": "Hvis aktiveret, placeres 3DSX-filer i en mappe med samme navn i stedet for direkte i den indstillede mappe.",
"ACTION_CANCELED": "%s annulleret",
"ACTION_FAILED": "%s fejlede!",
"ACTION_REQUIRED": "Handling påkrævet",
"ACTION_SUCCEEDED": " det lykkedes",
"ACTIVE_THEME": "Aktivt tema",
"ASCENDING": "Stigende",
"ARGUMENT_INVALID": "Argumentet er ugyldigt.\nKontroller venligst xml-filen for korrekte argumenter.",
"AUTHOR": "Forfatter",
"AUTO_UPDATE_NIGHTLY": "Use nightly versions",
"AUTO_UPDATE_NIGHTLY_DESC": "Use nightly versions of Universal-Updater instead of the stable releases.",
"AUTO_UPDATE_SETTINGS": "Auto-Opdater Indstillinger",
"AUTO_UPDATE_SETTINGS_BTN": "Auto-Opdater Indstillinger...",
"AUTO_UPDATE_UNISTORE": "Auto-opdater UniStores",
"AUTO_UPDATE_UNISTORE_DESC": "Med dette opdateres den sidst brugte UniStore automatisk, når Universal-Updater startes.",
"AUTO_UPDATE_UU": "Auto-opdater Universal-Updater",
"AUTO_UPDATE_UU_DESC": "Når aktiveret, vil Universal-Updater tjekke for opdateringer, hver gang det åbnes.",
"AVAILABLE_DOWNLOADS": "Tilgængelige downloads",
"BOOT_TITLE": "Vil du gerne starte denne titel?",
"CATEGORY": "Category",
"CHANGE_3DSX_PATH": "Change 3DSX path",
"CHANGE_ARCHIVE_PATH": "Change archive path",
"CHANGE_NDS_PATH": "Change NDS path",
"CHECK_UNISTORE_UPDATES": "Checking for UniStore updates...",
"CHECK_UU_UPDATES": "Checking for Universal-Updater updates...",
"CONFIRM_OR_CANCEL": "Press  to confirm,  to cancel.",
"CANCEL": "Annuller",
"CATEGORY": "Kategori",
"CHANGE_3DSX_PATH": "Skift 3DSX-sti",
"CHANGE_ARCHIVE_PATH": "Skift arkivsti",
"CHANGE_FIRM_PATH": "Ændr Store sti",
"CHANGE_NDS_PATH": "Skift NDS-sti",
"CHANGE_SHORTCUT_PATH": "Skift genvejssti",
"CHECK_UNISTORE_UPDATES": "Søger efter UniStore-opdateringer...",
"CHECK_UU_UPDATES": "Søger efter Universal-Updater-opdateringer...",
"CONFIRM_OR_CANCEL": "Tryk på  for at bekræfte,  for at annullere.",
"CONNECT_WIFI": "Forbind venligst til WiFi.",
"CONSOLE": "Console",
"CONTRIBUTOR_TRANSLATORS": "- All Translators & Contributors",
"CONFIRM": "Bekræft",
"CONSOLE": "Konsol",
"CONTRIBUTOR_TRANSLATORS": "- Alle Oversættere Og Bidragydere",
"COPYING": "Kopierer... %s / %s (%.2f%%)",
"COPY_ERROR": "Kopierings Fejl!",
"CREATE_SHORTCUT": "Vil du oprette en genvej?",
"CREDITS": "Medvirkende",
"CREDITS_BTN": "Medvirkende...",
"CURRENT_VERSION": "Nuværende version: ",
"CURRENTLY_EXTRACTING": "Udpakker i øjeblikket:\n",
"CUSTOM_FONT": "Brug brugerdefineret skrifttype",
"CUSTOM_FONT_DESC": "Hvis aktiveret, vil 'sdmc:/3ds/Universal-Updater/font.bcfnt' blive brugt i stedet for systemskrifttypen, hvis den findes.",
"DELETE_ERROR": "Sletnings Fejl!",
"DELETE_PROMPT": "Er du sikker på at du vil slette denne Mappe?",
"DELETE_UNNEEDED_FILE": "Deleting unneeded file...",
"DESCENDING": "Descending",
"DIRECTION": "Direction",
"DIRECTORY_SETTINGS": "Directory Settings",
"DIRECTORY_SETTINGS_BTN": "Directory settings...",
"DISABLE_AUTOUPDATE_UNISTORE": "Disable auto-update UniStore on boot",
"DISABLE_UPDATE_CHECK": "Disable self-updating",
"DELETING": "Sletter…",
"DESCENDING": "Faldende",
"DIRECTION": "Retning",
"DIRECTORY_SETTINGS": "Indstillinger For Mappe",
"DIRECTORY_SETTINGS_BTN": "Indstillinger For Mappe...",
"DONE": "Færdig!",
"DOWNLOAD_ERROR": "Nedhentings Fejl!",
"DOWNLOAD_FAILED": "Nedhentning mislykkedes!",
"DOWNLOADING_SPRITE_SHEET": "Downloading Spritesheet...",
"DOWNLOADING_SPRITE_SHEET2": "Downloading Spritesheet %i of %i...",
"DOWNLOADING_UNIVERSAL_DB": "Downloading Universal-DB...",
"DONLOADING_UNIVERSAL_UPDATER": "Downloading Universal-Updater...",
"DOWNLOADING_UNISTORE": "Downloading UniStore...",
"ENABLE_AUTOUPDATE_UNISTORE": "Enable auto-update UniStore on boot",
"ENABLE_UPDATE_CHECK": "Enable self-updating",
"ENTER_SEARCH": "Enter what you like to search.",
"ENTER_URL": "Enter the URL of the UniStore.",
"ENTRIES": "Entries",
"EXECUTE_ENTRY": "Would you like to execute this entry?",
"EXIT_APP": "Exit Universal-Updater",
"FETCHING_METADATA": "Fetching old metadata...",
"DOWNLOAD_SPEED": "Hastighed: %lld KiB/s",
"DOWNLOADING": "Kopierer... %s / %s (%.2f%%)",
"DOWNLOADING_COMPATIBLE_FONT": "Download kompatibel modem",
"DOWNLOADING_SPRITE_SHEET": "Downloader Spritesheet...",
"DOWNLOADING_SPRITE_SHEET2": "Downloader Spritesheet %i af %i...",
"DOWNLOADING_UNIVERSAL_DB": "Downloader Universal-DB...",
"DONLOADING_UNIVERSAL_UPDATER": "Downloader Universal-DB...",
"DOWNLOADING_UNISTORE": "Downloader UniStore...",
"ENTER_DESC_SHORTCUT": "Indtast klubbens beskrivelse.",
"ENTER_SEARCH": "Indtast hvad du vil søge.",
"ENTER_SHORTCUT_FILENAME": "Indtast genvejsfilnavnet (uden udvidelse).",
"ENTER_TITLE_SHORTCUT": "Indtast klubbens beskrivelse.",
"ENTER_URL": "Indtast webadressen på UniStore.",
"ENTRIES": "Poster",
"EXECUTE_ENTRY": "Vil du gerne udføre denne entry?",
"NOTE_NIGHTLY": "Note: \"Nightly\" versions are intended for testing\nupcoming features and may be unstable.\n\nIf you simply want to install,\nplease cancel and install the normal version.",
"NOTE_PRERELEASE": "Note: This is a prerelease build and may be unstable.\n\nIf you simply want to install, you may\nwant to install the normal version if one exists.",
"EXIT_APP": "Afslut Universal-Updater",
"EXTRACTING": "Kopierer... %s / %s (%.2f%%)",
"EXTRACT_ERROR": "Udpak fejl!",
"FEATURE_SIDE_EFFECTS": "Denne funktion kan have bivirkninger, mens køen kører.\nEr du sikker på, at du vil fortsætte?",
"FETCHING_METADATA": "Henter gamle metadata...",
"FETCHING_RECOMMENDED_UNISTORES": "Henter anbefalede UniStores...",
"FILES": "Fil: %d / %d",
"FILE_EXTRACTED": "fil udpakket.",
"FILE_SLASH": "Seems like a '/' is included, which is not supported.\nPlease change 'file' to filename only.",
"FILE_SLASH": "Synes at en '/' er inkluderet, som ikke understøttes.\nSkift venligst 'fil' til filnavnet.",
"FILES_EXTRACTED": "filer udpakket.",
"FILTER_TO": "Filter to:",
"GITHUB": "Full credits can be found on GitHub",
"GRID": "Grid",
"GUI_SETTINGS": "GUI Settings",
"GUI_SETTINGS_BTN": "GUI settings...",
"INCLUDE_IN_RESULTS": "Include in results:",
"INSTALL_UNIVERSAL_UPDATER": "Installing Universal-Updater...",
"INVALID_UNISTORE": "Invalid UniStore",
"KEY_CONTINUE": "Press any key to continue.",
"LANGUAGE": "Sprog",
"LAST_UPDATED": "Last updated",
"LICENSE": "License",
"LIST": "List",
"LOADING_SPRITESHEET": "Loading Spritesheet %i of %i...",
"FILTER_TO": "Filtrer til:",
"GITHUB": "Fuld kredit kan findes på GitHub",
"GRID": "Gitter",
"GUI_SETTINGS": "GUI-indstillinger",
"GUI_SETTINGS_BTN": "GUI-indstillinger...",
"INCLUDE_IN_RESULTS": "Medtag i ruter",
"INSTALLING": "Kopierer... %s / %s (%.2f%%)",
"INSTALL_UNIVERSAL_UPDATER": "Starter Universal-Updater...",
"INVALID_UNISTORE": "Ugyldig UniStore",
"KEY_CONTINUE": "Tryk på en vilkårlig tast for at afslutte.",
"LANGUAGE": "Sprog...",
"LAST_UPDATED": "Sidst opdateret for ",
"LICENSE": "Licens",
"LIST": "Liste",
"LOADING_SCREENSHOT": "Indlæser Skærmbillede...",
"LOADING_SPRITESHEET": "Indlæser Spritesheet %i af %i...",
"MEDIATYPE_NAND": "MedieType NAND",
"MEDIATYPE_SD": "MedieType SD",
"MOVE_ERROR": "Flytnings Fejl!",
"NO": "Nej",
"NO_DOWNLOADS_AVAILABLE": "No downloads available",
"NO_LICENSE": "No License",
"NOT_IMPLEMENTED": "Not Implemented Yet",
"REVISION": "Revision",
"SEARCH_FILTERS": "Search and Filters",
"SELECT_DIR": "Select a directory",
"SELECT_LANG": "Choose the language",
"SELECT_UNISTORE": "Select UniStore",
"SELECT_UNISTORE_2": "Select a UniStore",
"SETTINGS": "Settings",
"SHEET_SLASH": "Seems like a '/' is included, which is not supported.\nPlease change 'sheet' to filename only.",
"SORT_BY": "Sort By",
"SORTING": "Sorting",
"START_SELECT": "Press START to select the current folder",
"NO_DOWNLOADS_AVAILABLE": "Der er ikke oprettet downloads",
"NO_LICENSE": "Ingen licens",
"NO_SCREENSHOTS_AVAILABLE": "Ingen screenshots tilgængelige",
"NOT_IMPLEMENTED": "Ikke implementeret endnu",
"OP_COPYING": "Kopierer",
"OP_DELETING": "Sletter…",
"OP_DOWNLOADING": "Nedhenter",
"OP_EXTRACTING": "Udtrækker...",
"OP_INSTALLING": "Installation",
"OP_MOVING": "Flytter",
"OP_WAITING": "Venter",
"QUEUE": "Kø",
"QUEUE_POSITION": "Position i køen",
"QUEUE_PROGRESS": "Trin: %d / %d",
"RECOMMENDED_UNISTORES": "Anbefalede UniStores",
"REVISION": "Revisioner",
"SCREENSHOT": "Skærmbillede %d / %d",
"SCREENSHOT_COULD_NOT_LOAD": "Ordre kunne ikke indlæses",
"SCREENSHOT_INSTRUCTIONS": "Tryk p for at skifte og zoome",
"SEARCH_FILTERS": "Søg og filtrer",
"SELECT_A_THEME": "Vælg et tema",
"SELECT_DIR": "Vælg en mappe",
"SELECT_LANG": "Valgte sprog",
"SELECT_UNISTORE": "Vælg UniStore...",
"SELECT_UNISTORE_2": "Vælg UniStore",
"SELECTION_QUEUE": "Tilføj markering til kø",
"SETTINGS": "Instillinger",
"SHEET_SLASH": "Synes at en '/' er inkluderet, som ikke understøttes.\nSkift venligst 'fil' til filnavnet.",
"SHORTCUT_CREATED": "Genvej oprettet!",
"SHORTCUT_COPYING": "Copying %s...",
"SHORTCUT_DOWNLOADING": "Downloading %s...",
"SHORTCUT_EXTRACTING": "Extracting %s...",
"SHORTCUT_INSTALLING": "Installing %s...",
"SIZE": "Størrelse",
"SORT_BY": "Sortér Efter",
"SORTING": "Sprteromg",
"START_SELECT": "Tryk på START for at vælge den aktuelle mappe",
"STORE_INFO": "Yderligere information",
"SYNTAX_ERROR": "Syntaks Fejl!",
"TITLE": "Title",
"TOP_STYLE": "Top Style",
"UNISTORE_BG": "Use UniStore BG",
"UNISTORE_BG_DESC": "When enabled, the UniStore's provided BG will be shown instead of the solid BG color for the top screen.",
"UNISTORE_INVALID_ERROR": "This UniStore is invalid and cannot be\nloaded with Universal-Updater.\nMaybe check if there are any Syntax errors?",
"UNISTORE_TOO_NEW": "Your version of Universal-Updater is\ntoo old to use this UniStore.\nPlease update to the latest version.",
"UNISTORE_TOO_OLD": "This UniStore is outdated and cannot be used\nwith this version of Universal-Updater.\nPlease ask the creator to update it.",
"UNSUPPORTED_UNISTORE_VERSION": "The version of this UniStore is unsupported.",
"UPDATE_AVAILABLE": "Update Available!",
"UPDATE_DONE": "Update done! Please re-open Universal-Updater.",
"UPDATE_NOT_AVAILABLE": "No Updates Available!",
"UPDATING_SPRITE_SHEET": "Updating Spritesheet...",
"UPDATING_SPRITE_SHEET2": "Updating Spritesheet %i of %i...",
"UPDATING_UNISTORE": "Updating UniStore...",
"VERSION": "Version",
"YES": "Ja"
"TITLE": "Titel",
"TOP_STYLE": "Øverste Stil",
"UNISTORE_BG": "Brug UniStore BG",
"UNISTORE_BG_DESC": "Når aktiveret, vil UniStores forudsat BG blive vist i stedet for den solide BG farve for den øverste skærm.",
"UNISTORE_INVALID_ERROR": "Denne UniStore er ugyldig og kan ikke\nindlæses med Universal-Updater.\nMåske tjek om der er nogen Syntaksfejl?",
"UNISTORE_TOO_NEW": "Din version af Universal-Updater er\nfor gammel til at bruge denne UniStore.\nOpdater venligst til den nyeste version.",
"UNISTORE_TOO_OLD": "Denne UniStore er forældet og kan ikke bruges\nmed denne version af Universal-Updater.\nBed venligst ophavsmanden om at opdatere den.",
"UPDATE_AVAILABLE": "Opdater tilgængelige",
"UPDATE_DONE": "Opdatering færdig! Genåbn venligst Universal-Updater.",
"UPDATING_SPRITE_SHEET": "Opdaterer Spritesheet...",
"UPDATING_SPRITE_SHEET2": "Indlæser Spritesheet %i af %i...",
"UPDATING_UNISTORE": "Opdaterer UniStore...",
"VERSION": "Version"
}

View file

@ -1,53 +1,81 @@
{
"3DSX_IN_FOLDER": "3DSX-Dateien in Ordner ablegen",
"3DSX_IN_FOLDER_DESC": "Wenn aktiviert, werden 3DSX-Dateien in einem Ordner mit dem gleichen Namen statt direkt im Ordner gespeichert.",
"ACTION_CANCELED": "%s abgebrochen!",
"ACTION_FAILED": "%s fehlgeschlagen!",
"ACTION_REQUIRED": "Aktion erforderlich!",
"ACTION_SUCCEEDED": "%s erfolgreich!",
"ACTIVE_THEME": "Aktives Theme",
"ASCENDING": "Aufsteigend",
"ARGUMENT_INVALID": "Argument ungültig.\nBitte überprüfe die XML-Datei auf korrekte Argumente.",
"AUTHOR": "Autor",
"AUTO_UPDATE_SETTINGS": "Aktualisierungs-Einstellungen",
"AUTO_UPDATE_NIGHTLY": "Nightly-Versionen verwenden",
"AUTO_UPDATE_NIGHTLY_DESC": "Nightly-Versionen von Universal-Updater anstatt von Stable-Versionen verwenden.",
"AUTO_UPDATE_SETTINGS": "Auto-Update Einstellungen",
"AUTO_UPDATE_SETTINGS_BTN": "Aktualisierungs-Einstellungen...",
"AUTO_UPDATE_UNISTORE": "UniStores automatisch aktualisieren",
"AUTO_UPDATE_UNISTORE_DESC": "Damit wird der zuletzt verwendete UniStore automatisch aktualisiert, wenn Universal-Updater gestartet wird.",
"AUTO_UPDATE_UU": "Universal-Updater automatisch aktualisieren",
"AUTO_UPDATE_UU_DESC": "Falls aktiviert, sucht Universal-Updater bei jedem Start nach Aktualisierungen.",
"AVAILABLE_DOWNLOADS": "Verfügbare Downloads",
"BOOT_TITLE": "Möchten Sie diesen Titel starten?",
"BOOT_TITLE": "Möchtest du diesen Titel starten?",
"CANCEL": "Abbrechen",
"CATEGORY": "Kategorie",
"CHANGE_3DSX_PATH": "3DSX Pfad ändern",
"CHANGE_ARCHIVE_PATH": "Archiv Pfad ändern",
"CHANGE_FIRM_PATH": "Firm Pfad ändern",
"CHANGE_NDS_PATH": "NDS Pfad ändern",
"CHECK_UNISTORE_UPDATES": "Überprüfe für UniStore Aktualisierungen...",
"CHECK_UU_UPDATES": "Überprüfe für Universal-Updater Aktualisierungen...",
"CHANGE_SHORTCUT_PATH": "Verknüpfungs Pfad ändern",
"CHECK_UNISTORE_UPDATES": "Suche nach UniStore Aktualisierungen...",
"CHECK_UU_UPDATES": "Suche nach Universal-Updater Aktualisierungen...",
"CONFIRM_OR_CANCEL": "Drücke  zum bestätigen,  zum abbrechen.",
"CONNECT_WIFI": "Bitte mit dem WLAN verbinden.",
"CONFIRM": "Bestätigen",
"CONSOLE": "Konsole",
"CONTRIBUTOR_TRANSLATORS": "- Alle Übersetzer & Mitwirkenden",
"CONTRIBUTOR_TRANSLATORS": "- Alle Übersetzer & Mitwirkende",
"COPYING": "Kopieren... %s / %s (%.2f%%)",
"COPY_ERROR": "Fehler beim Kopieren!",
"CREATE_SHORTCUT": "Möchtest du eine Verknüpfung erstellen?",
"CREDITS": "Credits",
"CREDITS_BTN": "Danksagung...",
"CURRENT_VERSION": "Aktuelle Version: ",
"CURRENTLY_EXTRACTING": "Momentan extrahieren:\n",
"CUSTOM_FONT": "Benutzerdefinierte Schriftart verwenden",
"CUSTOM_FONT_DESC": "Falls aktiviert, wird, falls gefunden, 'sdmc:/3ds/Universal-Updater/font.bcfnt' anstelle der Systemschriftart verwendet.",
"DELETE_ERROR": "Fehler beim Löschen!",
"DELETE_PROMPT": "Möchten Sie den Ordner wirklich entfernen?",
"DELETE_UNNEEDED_FILE": "Entferne nicht benötigte Datei...",
"DELETE_PROMPT": "Möchtest du diesen Ordner wirklich entfernen?",
"DELETING": "Löschen...",
"DESCENDING": "Absteigend",
"DIRECTION": "Richtung",
"DIRECTORY_SETTINGS": "Verzeichniseinstellungen",
"DIRECTORY_SETTINGS_BTN": "Verzeichniseinstellungen...",
"DISABLE_AUTOUPDATE_UNISTORE": "Deaktiviere autom. aktual. UniStore beim Start",
"DISABLE_UPDATE_CHECK": "Deaktiviere Selbst-Aktualisierung",
"DONE": "Fertig!",
"DOWNLOAD_ERROR": "Download-Fehler!",
"DOWNLOAD_FAILED": "Download fehlgeschlagen!",
"DOWNLOAD_FAILED": "Herunterladen fehlgeschlagen!",
"DOWNLOAD_SPEED": "Geschwindigkeit: %lld KiB/s",
"DOWNLOADING": "Herunterladen... %s / %s (%.2f%%)",
"DOWNLOADING_COMPATIBLE_FONT": "Kompatible Schriftart wird heruntergeladen...",
"DOWNLOADING_SPRITE_SHEET": "Lade Spritesheet herunter...",
"DOWNLOADING_SPRITE_SHEET2": "Lade Spritesheet %i von %i herunter...",
"DOWNLOADING_SPRITE_SHEET2": "Lade Spritesheet herunter... %i von %i",
"DOWNLOADING_UNIVERSAL_DB": "Lade Universal-DB herunter...",
"DONLOADING_UNIVERSAL_UPDATER": "Lade Universal-Updater herunter...",
"DOWNLOADING_UNISTORE": "Lade UniStore herunter...",
"ENABLE_AUTOUPDATE_UNISTORE": "Aktiviere autom. aktual. UniStore beim Start",
"ENABLE_UPDATE_CHECK": "Aktiviere Selbst-Aktualisierung",
"ENTER_SEARCH": "Gebe ein, was du suchen möchtest.",
"ENTER_DESC_SHORTCUT": "Gebe die Verknüpfungs-Beschreibung ein.",
"ENTER_SEARCH": "Gebe ein, wonach du suchen möchtest.",
"ENTER_SHORTCUT_FILENAME": "Gebe den Namen der Verknüpfung ein (ohne Erweiterung).",
"ENTER_TITLE_SHORTCUT": "Gebe den Titel der Verknüpfung ein.",
"ENTER_URL": "Gebe die URL des UniStore's ein.",
"ENTRIES": "Einträge",
"EXECUTE_ENTRY": "Möchtest du diesen Eintrag ausführen?",
"NOTE_NIGHTLY": "Hinweis: \"Nightly\"-Versionen sind zum Testen\nneuer Funktionen gedacht und können instabil sein.\n\nWenn du einfach nur installieren möchtest,\nbrich bitte ab und installiere die normale Version.",
"NOTE_PRERELEASE": "Hinweis: Dies ist ein Vorabversions-Build und kann instabil sein.\n\nWenn du einfach nur installieren willst, solltest du\ndie normale Version installieren, falls eine existiert.",
"EXIT_APP": "Verlasse Universal-Updater",
"EXTRACTING": "Extrahieren... %s / %s (%.2f%%)",
"EXTRACT_ERROR": "Fehler beim Extrahieren!",
"FEATURE_SIDE_EFFECTS": "Diese Funktion kann Nebeneffekte haben, während die Warteschlange läuft.\nBist du sicher, dass du fortfahren möchtest?",
"FETCHING_METADATA": "Rufe alte Metadaten ab...",
"FETCHING_RECOMMENDED_UNISTORES": "Rufe empfohlene UniStores ab...",
"FILES": "Datei: %d / %d",
"FILE_EXTRACTED": "Datei entpackt.",
"FILE_SLASH": "Es scheint, als wäre ein '/' enthalten, das nicht unterstützt wird.\nBitte änder 'file' in nur den Dateinamen.",
"FILES_EXTRACTED": "Dateien entpackt.",
@ -57,32 +85,57 @@
"GUI_SETTINGS": "GUI-Einstellungen",
"GUI_SETTINGS_BTN": "GUI-Einstellungen...",
"INCLUDE_IN_RESULTS": "In Ergebnisse miteinbeziehen:",
"INSTALLING": "Installiere... %s / %s (%.2f%%)",
"INSTALL_UNIVERSAL_UPDATER": "Installiere Universal-Updater...",
"INVALID_UNISTORE": "Ungültiger UniStore",
"KEY_CONTINUE": "Drücke eine Taste zum fortfahren.",
"LANGUAGE": "Sprache",
"LANGUAGE": "Sprache...",
"LAST_UPDATED": "Zuletzt aktualisiert",
"LICENSE": "Lizenz",
"LIST": "Liste",
"LOADING_SCREENSHOT": "Screenshot wird geladen...",
"LOADING_SPRITESHEET": "Lade Spritesheet %i von %i...",
"MEDIATYPE_NAND": "Medientyp NAND",
"MEDIATYPE_SD": "Medientyp SD",
"MOVE_ERROR": "Verschiebe-Fehler!",
"NO": "Nein",
"NO_DOWNLOADS_AVAILABLE": "Keine Downloads verfügbar",
"NO_LICENSE": "Keine Lizenz",
"NO_SCREENSHOTS_AVAILABLE": "Keine Screenshots verfügbar",
"NOT_IMPLEMENTED": "Noch nicht implementiert",
"OP_COPYING": "Kopieren",
"OP_DELETING": "Löschen",
"OP_DOWNLOADING": "Herunterladen",
"OP_EXTRACTING": "Extrahieren",
"OP_INSTALLING": "Installiere",
"OP_MOVING": "Verschiebe",
"OP_WAITING": "Warten",
"QUEUE": "Warteschlange",
"QUEUE_POSITION": "Position in der Warteschlange",
"QUEUE_PROGRESS": "Schritt: %d / %d",
"RECOMMENDED_UNISTORES": "Empfohlene UniStores",
"REVISION": "Revision",
"SCREENSHOT": "Screenshot %d / %d",
"SCREENSHOT_COULD_NOT_LOAD": "Screenshot konnte nicht geladen werden.",
"SCREENSHOT_INSTRUCTIONS": "Drücke  zum wechseln und  zum Zoomen",
"SEARCH_FILTERS": "Suche und Filters",
"SELECT_A_THEME": "Wähle ein Thema",
"SELECT_DIR": "Wähle einen Ordner",
"SELECT_LANG": "Wähle eine Sprache",
"SELECT_UNISTORE": "Wechsel UniStore",
"SELECT_UNISTORE": "UniStore auswählen...",
"SELECT_UNISTORE_2": "Wähle einen UniStore",
"SELECTION_QUEUE": "Auswahl zur Warteschlange hinzufügen",
"SETTINGS": "Einstellungen",
"SHEET_SLASH": "Es scheint, als wäre ein '/' enthalten, das nicht unterstützt wird.\nBitte änder 'sheet' in nur den Dateinamen.",
"SHORTCUT_CREATED": "Verknüpfung erstellt!",
"SHORTCUT_COPYING": "%s wird kopiert...",
"SHORTCUT_DOWNLOADING": "%s herunterladen...",
"SHORTCUT_EXTRACTING": "Extrahiere %s...",
"SHORTCUT_INSTALLING": "Installiere %s...",
"SIZE": "Größe",
"SORT_BY": "Sortieren nach",
"SORTING": "Sortierung",
"START_SELECT": "Drücke START um den aktuellen Ordner auszuwählen",
"STORE_INFO": "Shop-Info",
"SYNTAX_ERROR": "Syntax-Fehler!",
"TITLE": "Titel",
"TOP_STYLE": "Top-Stil",
@ -91,13 +144,10 @@
"UNISTORE_INVALID_ERROR": "Dieser UniStore ist ungültig und kann nicht\nmit Universal-Updater geladen werden.\nÜberprüfe ob eventuell ein Syntax-Fehler vorliegt?",
"UNISTORE_TOO_NEW": "Diese Version von Universal-Updater ist\nzu alt um diesen UniStore zu benutzen.\nBitte aktualisiere zur neusten Version.",
"UNISTORE_TOO_OLD": "Dieser UniStore ist veraltet und kann nicht\nmit dieser Version von Universal-Updater benutzt werden.\nBitte frage den Ersteller um dies zu aktualisieren.",
"UNSUPPORTED_UNISTORE_VERSION": "Die Version dieses UniStores wird nicht unterstützt.",
"UPDATE_AVAILABLE": "Aktualisierung verfügbar!",
"UPDATE_DONE": "Aktualisierung abgeschlossen! Bitte öffne Universal-Updater neu.",
"UPDATE_NOT_AVAILABLE": "Keine Aktualisierungen verfügbar!",
"UPDATING_SPRITE_SHEET": "Aktualisiere Spritesheet...",
"UPDATING_SPRITE_SHEET2": "Aktualisiere Spritesheet %i von %i...",
"UPDATING_UNISTORE": "Aktualisiere UniStore...",
"VERSION": "Version",
"YES": "Ja"
"VERSION": "Version"
}

View file

@ -1,53 +1,81 @@
{
"3DSX_IN_FOLDER": "Put 3DSX files in folder",
"3DSX_IN_FOLDER_DESC": "If enabled, 3DSX files will be put in a folder with the same name instead of directly in the set folder.",
"ACTION_CANCELED": "%s canceled!",
"ACTION_FAILED": "%s failed!",
"ACTION_REQUIRED": "Action required!",
"ACTION_SUCCEEDED": "%s succeeded!",
"ACTIVE_THEME": "Active Theme",
"ASCENDING": "Ascending",
"ARGUMENT_INVALID": "Argument invalid.\nPlease check the xml file for proper arguments.",
"AUTHOR": "Author",
"AUTO_UPDATE_NIGHTLY": "Use nightly versions",
"AUTO_UPDATE_NIGHTLY_DESC": "Use nightly versions of StreetPass Shop instead of the stable releases.",
"AUTO_UPDATE_SETTINGS": "Auto-Update Settings",
"AUTO_UPDATE_SETTINGS_BTN": "Auto-update settings...",
"AUTO_UPDATE_UNISTORE": "Auto-update UniStores",
"AUTO_UPDATE_UNISTORE_DESC": "With this, the last used UniStore will be updated automatically when launching Universal-Updater.",
"AUTO_UPDATE_UU": "Auto-update Universal-Updater",
"AUTO_UPDATE_UU_DESC": "When enabled, Universal-Updater will check for updates every time it's opened.",
"AUTO_UPDATE_UNISTORE_DESC": "With this, the last used UniStore will be updated automatically when launching StreetPass Shop.",
"AUTO_UPDATE_UU": "Auto-update StreetPass Shop",
"AUTO_UPDATE_UU_DESC": "When enabled, StreetPass Shop will check for updates every time it's opened.",
"AVAILABLE_DOWNLOADS": "Available Downloads",
"BOOT_TITLE": "Would you like to boot this title?",
"CANCEL": "Cancel",
"CATEGORY": "Category",
"CHANGE_3DSX_PATH": "Change 3DSX path",
"CHANGE_ARCHIVE_PATH": "Change archive path",
"CHANGE_FIRM_PATH": "Change firm path",
"CHANGE_NDS_PATH": "Change NDS path",
"CHANGE_SHORTCUT_PATH": "Change shortcut path",
"CHECK_UNISTORE_UPDATES": "Checking for UniStore updates...",
"CHECK_UU_UPDATES": "Checking for Universal-Updater updates...",
"CHECK_UU_UPDATES": "Checking for StreetPass Shop updates...",
"CONFIRM_OR_CANCEL": "Press \uE000 to confirm, \uE001 to cancel.",
"CONNECT_WIFI": "Please Connect to WiFi.",
"CONFIRM": "Confirm",
"CONSOLE": "Console",
"CONTRIBUTOR_TRANSLATORS": "- All Translators & Contributors",
"COPYING": "Copying... %s / %s (%.2f%%)",
"COPY_ERROR": "Copy Error!",
"CREATE_SHORTCUT": "Would you like to create a shortcut?",
"CREDITS": "Credits",
"CREDITS_BTN": "Credits...",
"CURRENT_VERSION": "Current version: ",
"CURRENTLY_EXTRACTING": "Currently extracting:\n",
"CURRENTLY_EXTRACTING": "Currently extracting:",
"CUSTOM_FONT": "Use Custom Font",
"CUSTOM_FONT_DESC": "If enabled, 'sdmc:/3ds/StreetPass-Shop/font.bcfnt' will be used instead of the system font, if found.",
"DELETE_ERROR": "Delete Error!",
"DELETE_PROMPT": "Are you sure you want to delete this Directory?",
"DELETE_UNNEEDED_FILE": "Deleting unneeded file...",
"DELETING": "Deleting...",
"DESCENDING": "Descending",
"DIRECTION": "Direction",
"DIRECTORY_SETTINGS": "Directory Settings",
"DIRECTORY_SETTINGS_BTN": "Directory settings...",
"DISABLE_AUTOUPDATE_UNISTORE": "Disable auto-update UniStore on boot",
"DISABLE_UPDATE_CHECK": "Disable self-updating",
"DONE": "Done!",
"DOWNLOAD_ERROR": "Download Error!",
"DOWNLOAD_FAILED": "Download Failed!",
"DOWNLOAD_SPEED": "Speed: %lld KiB/s",
"DOWNLOADING": "Downloading... %s / %s (%.2f%%)",
"DOWNLOADING_COMPATIBLE_FONT": "Downloading compatible font...",
"DOWNLOADING_SPRITE_SHEET": "Downloading Spritesheet...",
"DOWNLOADING_SPRITE_SHEET2": "Downloading Spritesheet %i of %i...",
"DOWNLOADING_UNIVERSAL_DB": "Downloading Universal-DB...",
"DONLOADING_UNIVERSAL_UPDATER": "Downloading Universal-Updater...",
"DOWNLOADING_UNIVERSAL_DB": "Downloading StreetPass data...",
"DONLOADING_UNIVERSAL_UPDATER": "Downloading StreetPass Shop...",
"DOWNLOADING_UNISTORE": "Downloading UniStore...",
"ENABLE_AUTOUPDATE_UNISTORE": "Enable auto-update UniStore on boot",
"ENABLE_UPDATE_CHECK": "Enable self-updating",
"ENTER_DESC_SHORTCUT": "Enter the shortcut description.",
"ENTER_SEARCH": "Enter what you like to search.",
"ENTER_SHORTCUT_FILENAME": "Enter the shortcut filename (without extension).",
"ENTER_TITLE_SHORTCUT": "Enter the shortcut title.",
"ENTER_URL": "Enter the URL of the UniStore.",
"ENTRIES": "Entries",
"EXECUTE_ENTRY": "Would you like to execute this entry?",
"EXIT_APP": "Exit Universal-Updater",
"NOTE_NIGHTLY": "Note: \"Nightly\" versions are intended for testing\nupcoming features and may be unstable.\n\nIf you simply want to install,\nplease cancel and install the normal version.",
"NOTE_PRERELEASE": "Note: This is a prerelease build and may be unstable.\n\nIf you simply want to install, you may\nwant to install the normal version if one exists.",
"EXIT_APP": "Exit StreetPass Shop",
"EXTRACTING": "Extracting... %s / %s (%.2f%%)",
"EXTRACT_ERROR": "Extract error!",
"FEATURE_SIDE_EFFECTS": "This Feature may have side effects while the Queue is running.\nAre you sure you want to continue?",
"FETCHING_METADATA": "Fetching old metadata...",
"FETCHING_RECOMMENDED_UNISTORES": "Fetching recommended UniStores...",
"FILES": "File: %d / %d",
"FILE_EXTRACTED": "file extracted.",
"FILE_SLASH": "Seems like a '/' is included, which is not supported.\nPlease change 'file' to filename only.",
"FILES_EXTRACTED": "files extracted.",
@ -57,47 +85,69 @@
"GUI_SETTINGS": "GUI Settings",
"GUI_SETTINGS_BTN": "GUI settings...",
"INCLUDE_IN_RESULTS": "Include in results:",
"INSTALL_UNIVERSAL_UPDATER": "Installing Universal-Updater...",
"INSTALLING": "Installing... %s / %s (%.2f%%)",
"INSTALL_UNIVERSAL_UPDATER": "Installing StreetPass Shop...",
"INVALID_UNISTORE": "Invalid UniStore",
"KEY_CONTINUE": "Press any key to continue.",
"LANGUAGE": "Language",
"LANGUAGE": "Language...",
"LAST_UPDATED": "Last updated",
"LICENSE": "License",
"LIST": "List",
"LOADING_SCREENSHOT": "Loading Screenshot...",
"LOADING_SPRITESHEET": "Loading Spritesheet %i of %i...",
"MEDIATYPE_NAND": "MediaType NAND",
"MEDIATYPE_SD": "MediaType SD",
"MOVE_ERROR": "Move Error!",
"NO": "No",
"NO_DOWNLOADS_AVAILABLE": "No downloads available",
"NO_LICENSE": "No License",
"NO_SCREENSHOTS_AVAILABLE": "No Screenshots available",
"NOT_IMPLEMENTED": "Not Implemented Yet",
"OP_COPYING": "Copying",
"OP_DELETING": "Deleting",
"OP_DOWNLOADING": "Downloading",
"OP_EXTRACTING": "Extracting",
"OP_INSTALLING": "Installing",
"OP_MOVING": "Moving",
"OP_WAITING": "Waiting",
"QUEUE": "Queue",
"QUEUE_POSITION": "Queue position",
"QUEUE_PROGRESS": "Step: %d / %d",
"RECOMMENDED_UNISTORES": "Recommended UniStores",
"REVISION": "Revision",
"SCREENSHOT": "Screenshot %d / %d",
"SCREENSHOT_COULD_NOT_LOAD": "Screenshot could not be loaded.",
"SCREENSHOT_INSTRUCTIONS": "Press  to change and  to zoom",
"SEARCH_FILTERS": "Search and Filters",
"SELECT_A_THEME": "Select a Theme",
"SELECT_DIR": "Select a directory",
"SELECT_LANG": "Choose the language",
"SELECT_UNISTORE": "Select UniStore",
"SELECT_UNISTORE": "Select UniStore...",
"SELECT_UNISTORE_2": "Select a UniStore",
"SELECTION_QUEUE": "Add Selection to Queue",
"SETTINGS": "Settings",
"SHEET_SLASH": "Seems like a '/' is included, which is not supported.\nPlease change 'sheet' to filename only.",
"SHORTCUT_CREATED": "Shortcut created!",
"SHORTCUT_COPYING": "Copying %s...",
"SHORTCUT_DOWNLOADING": "Downloading %s...",
"SHORTCUT_EXTRACTING": "Extracting %s...",
"SHORTCUT_INSTALLING": "Installing %s...",
"SIZE": "Size",
"SORT_BY": "Sort By",
"SORTING": "Sorting",
"START_SELECT": "Press START to select the current folder",
"STORE_INFO": "Store Info",
"SYNTAX_ERROR": "Syntax Error!",
"TITLE": "Title",
"TOP_STYLE": "Top Style",
"UNISTORE_BG": "Use UniStore BG",
"UNISTORE_BG": "Use StreetPass Shop BG",
"UNISTORE_BG_DESC": "When enabled, the UniStore's provided BG will be shown instead of the solid BG color for the top screen.",
"UNISTORE_INVALID_ERROR": "This UniStore is invalid and cannot be\nloaded with Universal-Updater.\nMaybe check if there are any Syntax errors?",
"UNISTORE_TOO_NEW": "Your version of Universal-Updater is\ntoo old to use this UniStore.\nPlease update to the latest version.",
"UNISTORE_TOO_OLD": "This UniStore is outdated and cannot be used\nwith this version of Universal-Updater.\nPlease ask the creator to update it.",
"UNSUPPORTED_UNISTORE_VERSION": "The version of this UniStore is unsupported.",
"UNISTORE_INVALID_ERROR": "This UniStore is invalid and cannot be\nloaded with StreetPass Shop.\nMaybe check if there are any Syntax errors?",
"UNISTORE_TOO_NEW": "Your version of StreetPass Shop is\ntoo old to use this UniStore.\nPlease update to the latest version.",
"UNISTORE_TOO_OLD": "This UniStore is outdated and cannot be used\nwith this version of StreetPass Shop.\nPlease ask the creator to update it.",
"UPDATE_AVAILABLE": "Update Available!",
"UPDATE_DONE": "Update done! Please re-open Universal-Updater.",
"UPDATE_NOT_AVAILABLE": "No Updates Available!",
"UPDATE_DONE": "Update done! Please re-open StreetPass Shop.",
"UPDATING_SPRITE_SHEET": "Updating Spritesheet...",
"UPDATING_SPRITE_SHEET2": "Updating Spritesheet %i of %i...",
"UPDATING_UNISTORE": "Updating UniStore...",
"VERSION": "Version",
"YES": "Yes"
}
"VERSION": "Version"
}

View file

@ -1,88 +1,141 @@
{
"ASCENDING": "Ascendente",
"3DSX_IN_FOLDER": "Coloca los archivos 3DSX en una carpeta",
"3DSX_IN_FOLDER_DESC": "Si activado, los archivos 3DSX estarán colocados en una carpeta del mismo nombre en lugar de la carpeta definida.",
"ACTION_CANCELED": "¡%s cancelado!",
"ACTION_FAILED": "¡%s falló!",
"ACTION_REQUIRED": "¡Acción requerida!",
"ACTION_SUCCEEDED": "¡%s tuvo éxito!",
"ACTIVE_THEME": "Tema activo",
"ASCENDING": "Ascendiendo",
"ARGUMENT_INVALID": "Argumento inválido.\nPor favor, compruebe el archivo xml para los argumentos adecuados.",
"AUTHOR": "Autor",
"AUTO_UPDATE_SETTINGS": "Auto actualizar ajustes",
"AUTO_UPDATE_SETTINGS_BTN": "Auto actualizar ajustes...",
"AUTO_UPDATE_UNISTORE": "Auto-actualizar UniStores",
"AUTO_UPDATE_NIGHTLY": "Usar versiones nightly",
"AUTO_UPDATE_NIGHTLY_DESC": "Usa las versiones nightly de Universal-Updater en lugar de las actualizaciones estables.",
"AUTO_UPDATE_SETTINGS": "Ajustes de actualización automática",
"AUTO_UPDATE_SETTINGS_BTN": "Actualizar ajustes automáticamente...",
"AUTO_UPDATE_UNISTORE": "Actualizar UniStores automáticamente",
"AUTO_UPDATE_UNISTORE_DESC": "Con esto, la última UniStore utilizada se actualizará automáticamente al iniciar Universal-Updater.",
"AUTO_UPDATE_UU": "Actualización automática Universal-Updater",
"AUTO_UPDATE_UU_DESC": "Cuando está activado, Universal-Updater comprobará si hay actualizaciones cada vez que se abra.",
"AUTO_UPDATE_UU": "Actualizar Universal-Updater automáticamente",
"AUTO_UPDATE_UU_DESC": "Cuando esté activado, Universal-Updater buscará actualizaciones cada vez que se abra.",
"AVAILABLE_DOWNLOADS": "Descargas disponibles",
"BOOT_TITLE": "¿Quiere arrancar este título?",
"CANCEL": "Cancelar",
"CATEGORY": "Categoría",
"CHANGE_3DSX_PATH": "Cambiar ruta 3DSX",
"CHANGE_ARCHIVE_PATH": "Cambiar ruta de archivo",
"CHANGE_FIRM_PATH": "Cambiar ruta de firma",
"CHANGE_NDS_PATH": "Cambiar ruta de NDS",
"CHECK_UNISTORE_UPDATES": "Comprobación de actualizaciones de UniStore...",
"CHECK_UU_UPDATES": "Comprobacion de actualizaciones Universal-Updater...",
"CHANGE_SHORTCUT_PATH": "Cambiar ruta del acceso directo",
"CHECK_UNISTORE_UPDATES": "Buscando actualizaciones para UniStore...",
"CHECK_UU_UPDATES": "Buscando actualizaciones para Universal-Updater...",
"CONFIRM_OR_CANCEL": "Pulsa  para confirmar o  para cancelar.",
"CONNECT_WIFI": "Por favor, conéctese a WiFi.",
"CONFIRM": "Confirmar",
"CONSOLE": "Consola",
"CONTRIBUTOR_TRANSLATORS": "- Todos los traductores y colaboradores",
"COPY_ERROR": "¡Copiar error!",
"COPYING": "Copiando... %s / %s (%.2f%%)",
"COPY_ERROR": "¡Error de copiado!",
"CREATE_SHORTCUT": "¿Quieres crear un acceso directo?",
"CREDITS": "Agradecimientos",
"CREDITS_BTN": "Créditos...",
"CURRENT_VERSION": "Versión Actual: ",
"CURRENTLY_EXTRACTING": "Extracción actual:\n",
"DELETE_ERROR": "¡Eliminar error!",
"CUSTOM_FONT": "Usar fuente personalizada",
"CUSTOM_FONT_DESC": "Si se activa, la fuente 'sdmc:/3ds/Universal-Updater/font.bcfnt' será empleada en lugar de la del sistema (si es encontrada).",
"DELETE_ERROR": "¡Error eliminando!",
"DELETE_PROMPT": "¿Seguro quiere eliminar este directorio?",
"DELETE_UNNEEDED_FILE": "Eliminando archivo innecesario...",
"DELETING": "Borrando...",
"DESCENDING": "Descendente",
"DIRECTION": "Dirección",
"DIRECTORY_SETTINGS": "Configuración de directorio",
"DIRECTORY_SETTINGS_BTN": "Ajustes de directorio...",
"DISABLE_AUTOUPDATE_UNISTORE": "Desactivar la actualización automática de UniStore al arrancar",
"DISABLE_UPDATE_CHECK": "Desactivar auto-actualización",
"DONE": "¡Hecho!",
"DOWNLOAD_ERROR": "¡Error de descarga!",
"DOWNLOAD_FAILED": "¡Descarga fallida!",
"DOWNLOAD_SPEED": "Velocidad: %lld KiB/s",
"DOWNLOADING": "Descargando... %s / %s (%.2f%%)",
"DOWNLOADING_COMPATIBLE_FONT": "Descargando fuente compatible...",
"DOWNLOADING_SPRITE_SHEET": "Descargando Spritesheet...",
"DOWNLOADING_SPRITE_SHEET2": "Descargando Spritesheet %i de %i...",
"DOWNLOADING_UNIVERSAL_DB": "Descargando Universal-DB...",
"DONLOADING_UNIVERSAL_UPDATER": "Descargando Universal-Updater...",
"DOWNLOADING_UNISTORE": "Descargando UniStore...",
"ENABLE_AUTOUPDATE_UNISTORE": "Activar la actualización automática de UniStore al arrancar",
"ENABLE_UPDATE_CHECK": "Activar auto-actualización",
"ENTER_DESC_SHORTCUT": "Introduce la descripción del acceso directo.",
"ENTER_SEARCH": "Introduce lo que quieras buscar.",
"ENTER_SHORTCUT_FILENAME": "Introduce el nombre de archivo del acceso directo (sin extensión).",
"ENTER_TITLE_SHORTCUT": "Introduce el nombre del acceso directo.",
"ENTER_URL": "Introduzca la URL de la UniStore.",
"ENTRIES": "Entradas",
"EXECUTE_ENTRY": "¿Quieres ejecutar esta entrada?",
"NOTE_NIGHTLY": "Note: \"siguiente\" versión are entended fuer destino\ncomino fe atures año más be instable.\n\nIr yo simple Kant lo instaló,\nléase cancel año instaló té normal versión.\n",
"NOTE_PRERELEASE": "Note: Tris y a presentarse baile año más be instable.\n\nCf. ion simple Kant no instaló, ion más\nKant no instaló he normal versión Cf. pone existe.",
"EXIT_APP": "Salir de Universal-Updater",
"EXTRACTING": "Extrayendo... %s / %s (%.2f%%)",
"EXTRACT_ERROR": "¡Error de extracción!",
"FEATURE_SIDE_EFFECTS": "Esta característica puede tener efectos secundarios mientras la cola se está ejecutando.\n¿Está seguro de que desea continuar?",
"FETCHING_METADATA": "Obteniendo metadatos antiguos...",
"FETCHING_RECOMMENDED_UNISTORES": "Obteniendo UniStores recomendadas...",
"FILES": "Archivo: %d / %d",
"FILE_EXTRACTED": "archivo extraído.",
"FILE_SLASH": "Parece que un '/' está incluido, que no es compatible.\nPor favor, cambie 'archivo' a nombre de archivo.",
"FILE_SLASH": "Parece que un '/' está incluido (no es compatible).\nPor favor, cambie 'file' a nombre de archivo.",
"FILES_EXTRACTED": "archivos extraídos.",
"FILTER_TO": "Filtrar a:",
"GITHUB": "Los créditos completos se pueden encontrar en GitHub",
"GRID": "Cuadrícula",
"GUI_SETTINGS": "Ajustes de GUI",
"GUI_SETTINGS_BTN": "Ajustes de GUI...",
"INCLUDE_IN_RESULTS": "Incluye en resultados:",
"GUI_SETTINGS": "Configuración de la interfaz",
"GUI_SETTINGS_BTN": "Configuración de la interfaz...",
"INCLUDE_IN_RESULTS": "Incluir en resultados:",
"INSTALLING": "Instalando... %s / %s (%.2f%%)",
"INSTALL_UNIVERSAL_UPDATER": "Instalando Universal-Updater...",
"INVALID_UNISTORE": "UniStore no válida",
"KEY_CONTINUE": "Pulsa cualquier tecla para continuar.",
"LANGUAGE": "Idioma",
"LANGUAGE": "Idioma...",
"LAST_UPDATED": "Última actualización",
"LICENSE": "Licencia",
"LIST": "Lista",
"LOADING_SCREENSHOT": "Cargando captura de pantalla...",
"LOADING_SPRITESHEET": "Cargando Spritesheet%i de %i...",
"MEDIATYPE_NAND": "MediaType NAND",
"MEDIATYPE_SD": "SD MediaType",
"MOVE_ERROR": "¡Mover error!",
"NO": "No",
"MOVE_ERROR": "¡Error moviendo!",
"NO_DOWNLOADS_AVAILABLE": "No hay descargas disponibles",
"NO_LICENSE": "Sin licencia",
"NO_SCREENSHOTS_AVAILABLE": "No hay capturas disponibles",
"NOT_IMPLEMENTED": "Aún no implementado",
"OP_COPYING": "Copiando",
"OP_DELETING": "Borrando",
"OP_DOWNLOADING": "Descargando",
"OP_EXTRACTING": "Extrayendo",
"OP_INSTALLING": "Instalando",
"OP_MOVING": "Moviendo",
"OP_WAITING": "En espera",
"QUEUE": "Cola",
"QUEUE_POSITION": "Posición en la Cola",
"QUEUE_PROGRESS": "Paso: %d / %d",
"RECOMMENDED_UNISTORES": "UniStores recomendadas",
"REVISION": "Revisión",
"SCREENSHOT": "Captura de pantalla %d / %d",
"SCREENSHOT_COULD_NOT_LOAD": "No se puede cargar la captura de pantalla.",
"SCREENSHOT_INSTRUCTIONS": "Pulsa  para cambiar y  para el zoom",
"SEARCH_FILTERS": "Búsqueda y Filtros",
"SELECT_A_THEME": "Seleccione un tema",
"SELECT_DIR": "Selecciona un directorio",
"SELECT_LANG": "Elije el idioma",
"SELECT_UNISTORE": "Seleccionar UniStore",
"SELECT_UNISTORE": "Seleccionar UniStore...",
"SELECT_UNISTORE_2": "Seleccione una UniStore",
"SELECTION_QUEUE": "Añadir selección a la cola",
"SETTINGS": "Ajustes",
"SHEET_SLASH": "Parece que un '/' está incluido (no es compatible).\nPor favor, cambie 'sheet' a únicamente el nombre del archivo.",
"SHORTCUT_CREATED": "¡Acceso directo creado!",
"SHORTCUT_COPYING": "Copiando %s...",
"SHORTCUT_DOWNLOADING": "Descargando %s...",
"SHORTCUT_EXTRACTING": "Extrayendo %s...",
"SHORTCUT_INSTALLING": "Instalando %s...",
"SIZE": "Tamaño",
"SORT_BY": "Ordenar por",
"SORTING": "Ordenando",
"START_SELECT": "Presione START para seleccionar la carpeta actual",
"STORE_INFO": "Información de la tienda",
"SYNTAX_ERROR": "¡Error de sintaxis!",
"TITLE": "Título",
"TOP_STYLE": "Estilo superior",
@ -91,13 +144,10 @@
"UNISTORE_INVALID_ERROR": "Esta UniStore no es válida y no puede cargarse\ncon Universal-Updater.\n¿Quizás verifique si hay algún error de sintaxis?",
"UNISTORE_TOO_NEW": "Su versión de Universal-Updater es\ndemasiado antigua para usar esta UniStore.\nPor favor, actualice a la última versión.",
"UNISTORE_TOO_OLD": "Esta UniStore está desactualizada y no se puede utilizar\ncon esta versión de Universal-Updater.\nPor favor, solicite al creador que la actualice.",
"UNSUPPORTED_UNISTORE_VERSION": "La versión de esta UniStore no está soportada.",
"UPDATE_AVAILABLE": "¡Actualización disponible!",
"UPDATE_DONE": "¡Actualización completada! Por favor, vuelva a abrir Universal-Updater.",
"UPDATE_NOT_AVAILABLE": "¡No hay actualizaciones disponibles!",
"UPDATING_SPRITE_SHEET": "Actualizando Spritesheet...",
"UPDATING_SPRITE_SHEET2": "Actualizando Spritesheet %i de %i...",
"UPDATING_UNISTORE": "Actualizando UniStore...",
"VERSION": "Versión",
"YES": "Sí"
"VERSION": "Versión"
}

View file

@ -1,103 +1,153 @@
{
"3DSX_IN_FOLDER": "Placer les fichiers 3DSX dans un dossier",
"3DSX_IN_FOLDER_DESC": "Si activé, les fichiers 3DSX seront placés dans un dossier du même nom au lieu du dossier défini.",
"ACTION_CANCELED": "%s annulé !",
"ACTION_FAILED": "%s a échoué !",
"ACTION_REQUIRED": "Action requise !",
"ACTION_SUCCEEDED": "%s réussi !",
"ACTIVE_THEME": "Thème actuel ",
"ASCENDING": "Croissant",
"ARGUMENT_INVALID": "Argument invalide.\nVeuillez vérifier le fichier xml pour les bons arguments.",
"AUTHOR": "Auteur",
"AUTO_UPDATE_NIGHTLY": "Utiliser les versions nightly",
"AUTO_UPDATE_NIGHTLY_DESC": "Utiliser les versions nightly de Universal-Updater au lieu des versions stables.",
"AUTO_UPDATE_SETTINGS": "Paramètres de mise à jour auto",
"AUTO_UPDATE_SETTINGS_BTN": "Paramètres de mise à jour auto...",
"AUTO_UPDATE_UNISTORE": "Mettre à jour automatiquement les UniStores",
"AUTO_UPDATE_UNISTORE_DESC": "Avec cela, le dernier UniStore utilisé sera mis à jour automatiquement lors du lancement de Universal-Updater.",
"AUTO_UPDATE_UU": "Auto-mettre à jour d'Universal-Updater",
"AUTO_UPDATE_UU_DESC": "Lorsque l'option est activée, Universal-Updater vérifiera les mises à jour à chaque démarrage.",
"AUTO_UPDATE_SETTINGS_BTN": "Paramètres de mise à jour auto",
"AUTO_UPDATE_UNISTORE": "Mise à jour automatique des UniStores",
"AUTO_UPDATE_UNISTORE_DESC": "Avec ceci, le dernier UniStore utilisé sera mis à jour automatiquement lors du lancement de Universal-Updater.",
"AUTO_UPDATE_UU": "Mise à jour automatique de Universal-Updater",
"AUTO_UPDATE_UU_DESC": "Si activé, Universal-Updater vérifie les mises à jour à chaque fois qu'il est ouvert.",
"AVAILABLE_DOWNLOADS": "Téléchargements disponibles",
"BOOT_TITLE": "Voulez-vous démarrer ce titre?",
"CATEGORY": "Catégorie",
"BOOT_TITLE": "Voulez-vous démarrer ce titre ?",
"CANCEL": "Annuler",
"CATEGORY": "Catégorie ",
"CHANGE_3DSX_PATH": "Changer l'emplacement des 3DSX",
"CHANGE_ARCHIVE_PATH": "Changer l'emplacement des archives",
"CHANGE_FIRM_PATH": "Changer l'emplacement des FIRM",
"CHANGE_NDS_PATH": "Changer l'emplacement des NDS",
"CHECK_UNISTORE_UPDATES": "Vérification des mises à jour de l'Unistore...",
"CHECK_UU_UPDATES": "Vérification des mises à jour de l'Universal-Updater en cours...",
"CONFIRM_OR_CANCEL": "Appuyer sur  pour confirmer, sur  pour annuler.",
"CONNECT_WIFI": "Veuillez vous connecter au WiFi.",
"CONSOLE": "Console",
"CONTRIBUTOR_TRANSLATORS": "- Tous les Traducteurs & Contributeurs",
"COPY_ERROR": "Erreur de copie!",
"CHANGE_SHORTCUT_PATH": "Changer l'emplacement des raccourcis",
"CHECK_UNISTORE_UPDATES": "Recherche de mises à jour de l'UniStore…",
"CHECK_UU_UPDATES": "Recherche de mises à jour de Universal-Updater…",
"CONFIRM_OR_CANCEL": "Appuyez sur  pour confirmer ou  pour annuler.",
"CONNECT_WIFI": "Veuillez vous connecter au Wi-Fi.",
"CONFIRM": "Confirmer",
"CONSOLE": "Console ",
"CONTRIBUTOR_TRANSLATORS": "- Tous les traducteurs et contributeurs",
"COPYING": "Copie… %s / %s (%.2f%%)",
"COPY_ERROR": "Erreur de copie !",
"CREATE_SHORTCUT": "Voulez-vous créer un raccourci ?",
"CREDITS": "Crédits",
"CURRENT_VERSION": "Version actuelle: ",
"CURRENTLY_EXTRACTING": "Extraction de:\n",
"DELETE_ERROR": "Erreur d'effacement!",
"DELETE_PROMPT": "Êtes-vous sur de vouloir supprimer ce dossier?",
"DELETE_UNNEEDED_FILE": "Suppression du fichier inutile...",
"CREDITS_BTN": "Crédits…",
"CURRENT_VERSION": "Version actuelle : ",
"CURRENTLY_EXTRACTING": "Extraction de :\n",
"CUSTOM_FONT": "Utiliser une police personnalisée",
"CUSTOM_FONT_DESC": "Si activé, la police 'sdmc:/3ds/Universal-Updater/font.bcfnt' sera utilisée à la place de la police système, si elle est trouvée.",
"DELETE_ERROR": "Erreur de suppression !",
"DELETE_PROMPT": "Êtes-vous sûr de vouloir supprimer ce répertoire ?",
"DELETING": "Suppression…",
"DESCENDING": "Décroissant",
"DIRECTION": "Direction",
"DIRECTORY_SETTINGS": "Paramètres du répertoire",
"DIRECTORY_SETTINGS_BTN": "Paramètres du répertoire...",
"DISABLE_AUTOUPDATE_UNISTORE": "Désactiver les mises a jour automatiques\\n de l'UniStore au démarrage",
"DISABLE_UPDATE_CHECK": "Désactiver la mise à jour automatique",
"DONE": "Fini!",
"DOWNLOAD_ERROR": "Erreur de téléchargement!",
"DIRECTION": "Ordre",
"DIRECTORY_SETTINGS": "Paramètres des répertoires",
"DIRECTORY_SETTINGS_BTN": "Paramètres des répertoires…",
"DONE": "Terminé !",
"DOWNLOAD_ERROR": "Erreur de téléchargement !",
"DOWNLOAD_FAILED": "Échec du téléchargement !",
"DOWNLOADING_SPRITE_SHEET": "Téléchargement de la feuille de Sprites...",
"DOWNLOADING_SPRITE_SHEET2": "Téléchargement de la feuille de Sprites %i de %i...",
"DOWNLOADING_UNIVERSAL_DB": "Téléchargement de Universal-DB...",
"DONLOADING_UNIVERSAL_UPDATER": "Téléchargement de Universal-Updater...",
"DOWNLOADING_UNISTORE": "Téléchargement de l'UniStore...",
"ENABLE_AUTOUPDATE_UNISTORE": "Activer les mises a jour automatiques\\n de l'UniStore au démarrage",
"ENABLE_UPDATE_CHECK": "Activer la mise à jour automatique",
"DOWNLOAD_SPEED": "Vitesse : %lld Kio/s",
"DOWNLOADING": "Téléchargement… %s / %s (%.2f%%)",
"DOWNLOADING_COMPATIBLE_FONT": "Téléchargement d'une police compatible…",
"DOWNLOADING_SPRITE_SHEET": "Téléchargement de la grille de sprites…",
"DOWNLOADING_SPRITE_SHEET2": "Téléchargement de la grille de sprites : %i de %i…",
"DOWNLOADING_UNIVERSAL_DB": "Téléchargement de Universal-DB…",
"DONLOADING_UNIVERSAL_UPDATER": "Téléchargement de Universal-Updater…",
"DOWNLOADING_UNISTORE": "Téléchargement de l'UniStore…",
"ENTER_DESC_SHORTCUT": "Entrez la description du raccourci.",
"ENTER_SEARCH": "Entrez ce que vous voulez rechercher.",
"ENTER_SHORTCUT_FILENAME": "Entrez le nom de fichier du raccourci (sans extension).",
"ENTER_TITLE_SHORTCUT": "Entrez le titre du raccourci.",
"ENTER_URL": "Entrez l'URL de l'UniStore.",
"ENTRIES": "Entrées",
"EXECUTE_ENTRY": "Voulez-vous exécuter cette entrée?",
"EXECUTE_ENTRY": "Voulez-vous exécuter cette entrée ?",
"NOTE_NIGHTLY": "Remarque : les versions « nightly » sont destinées à\ntester les fonctions à venir et peuvent être instables.\n\nSi vous voulez simplement installer,\nveuillez annuler et installer la version normale.",
"NOTE_PRERELEASE": "Remarque : il s'agit d'un build de préversion\nqui peut être instable.\n\nSi vous voulez simplement installer, vous pouvez\nvouloir installer la version normale si elle existe.",
"EXIT_APP": "Quitter Universal-Updater",
"FETCHING_METADATA": "Récupération des anciennes métadonnées...",
"EXTRACTING": "Extraction… %s / %s (%.2f%%)",
"EXTRACT_ERROR": "Erreur d'extraction !",
"FEATURE_SIDE_EFFECTS": "Cette fonctionnalité peut avoir des effets secondaires lorsque\nla file d'attente est en cours d'exécution.\nÊtes-vous sûr de vouloir continuer ?",
"FETCHING_METADATA": "Récupération des anciennes métadonnées…",
"FETCHING_RECOMMENDED_UNISTORES": "Récupération des UniStores recommandés…",
"FILES": "Fichier : %d / %d",
"FILE_EXTRACTED": "fichier extrait.",
"FILE_SLASH": "On dirait qu'un '/' est inclus, ce qui n'est pas pris en charge.\nMerci de changer 'file' au nom du fichier seul.",
"FILE_SLASH": "Il semble qu'un '/' soit inclus, ce qui n'est pas pris en charge.\nVeuillez changer 'file' en nom de fichier uniquement.",
"FILES_EXTRACTED": "fichiers extraits.",
"FILTER_TO": "Filtrer:",
"FILTER_TO": "Filtrer pour :",
"GITHUB": "Les crédits complets peuvent être trouvés sur GitHub",
"GRID": "Grille",
"GUI_SETTINGS": "Paramètres de l'interface graphique",
"GUI_SETTINGS_BTN": "Paramètres de l'interface graphique...",
"GUI_SETTINGS_BTN": "Paramètres de l'interface graphique",
"INCLUDE_IN_RESULTS": "Inclure dans les résultats :",
"INSTALL_UNIVERSAL_UPDATER": "Installation de Universal-Updater...",
"INSTALLING": "Installation… %s / %s (%.2f%%)",
"INSTALL_UNIVERSAL_UPDATER": "Installation de Universal-Updater…",
"INVALID_UNISTORE": "UniStore invalide",
"KEY_CONTINUE": "Appuyez sur n'importe quel bouton pour continuer . . .",
"LANGUAGE": "Langue",
"LAST_UPDATED": "Dernière mise à jour",
"LICENSE": "License",
"KEY_CONTINUE": "Appuyez sur n'importe quel bouton pour continuer.",
"LANGUAGE": "Langue",
"LAST_UPDATED": "Dernière mise à jour ",
"LICENSE": "Licence ",
"LIST": "Liste",
"LOADING_SPRITESHEET": "Chargement de la fiche de sprites %i de %i...",
"MEDIATYPE_NAND": "Localisation: NAND",
"MEDIATYPE_SD": "Localisation: SD",
"MOVE_ERROR": "Erreur de déplacement!",
"NO": "Non",
"LOADING_SCREENSHOT": "Chargement de la capture d'écran…",
"LOADING_SPRITESHEET": "Chargement de la grille de sprites : %i de %i…",
"MEDIATYPE_NAND": "TypeMédia NAND",
"MEDIATYPE_SD": "TypeMédia SD",
"MOVE_ERROR": "Erreur de déplacement !",
"NO_DOWNLOADS_AVAILABLE": "Aucun téléchargement disponible",
"NO_LICENSE": "Aucune licence",
"NO_SCREENSHOTS_AVAILABLE": "Aucune capture d'écran disponible",
"NOT_IMPLEMENTED": "Pas encore disponible",
"REVISION": "Révision",
"SEARCH_FILTERS": "Recherche et Filtres",
"SELECT_DIR": "Sélectionner un dossier",
"SELECT_LANG": "Choisir la langue",
"SELECT_UNISTORE": "Sélectionner l'UniStore",
"SELECT_UNISTORE_2": "Sélectionner un UniStore",
"OP_COPYING": "Copie",
"OP_DELETING": "Suppression",
"OP_DOWNLOADING": "Téléchargement",
"OP_EXTRACTING": "Extraction",
"OP_INSTALLING": "Installation",
"OP_MOVING": "Déplacement",
"OP_WAITING": "En attente",
"QUEUE": "File d'attente",
"QUEUE_POSITION": "Position dans la file ",
"QUEUE_PROGRESS": "Étape : %d / %d",
"RECOMMENDED_UNISTORES": "UniStores recommandés",
"REVISION": "Révision ",
"SCREENSHOT": "Capture d'écran %d / %d",
"SCREENSHOT_COULD_NOT_LOAD": "La capture d'écran n'a pas pu être chargée.",
"SCREENSHOT_INSTRUCTIONS": "Appuyez sur  pour changer et  pour zoomer",
"SEARCH_FILTERS": "Recherche et filtres",
"SELECT_A_THEME": "Sélectionnez un thème",
"SELECT_DIR": "Sélectionnez un répertoire",
"SELECT_LANG": "Choisissez la langue",
"SELECT_UNISTORE": "Sélectionner l'UniStore…",
"SELECT_UNISTORE_2": "Sélectionnez un UniStore",
"SELECTION_QUEUE": "Ajouter la sélection à la file d'attente",
"SETTINGS": "Paramètres",
"SHEET_SLASH": "On dirait qu'un '/' est inclus, ce qui n'est pas pris en charge.\nMerci de changer 'sheet' au nom du fichier seul.",
"SHEET_SLASH": "Il semble qu'un '/' soit inclus, ce qui n'est pas pris en charge.\nVeuillez changer 'sheet' en nom de fichier uniquement.",
"SHORTCUT_CREATED": "Raccourci créé !",
"SHORTCUT_COPYING": "Copie de %s…",
"SHORTCUT_DOWNLOADING": "Téléchargement de %s…",
"SHORTCUT_EXTRACTING": "Extraction de %s…",
"SHORTCUT_INSTALLING": "Installation de %s…",
"SIZE": "Taille ",
"SORT_BY": "Trier par",
"SORTING": "Tri",
"START_SELECT": "Appuyee sur START pour sélectionner le dossier actuel",
"SYNTAX_ERROR": "Erreur syntaxe!",
"START_SELECT": "Appuyez sur START pour sélectionner le dossier actuel",
"STORE_INFO": "Informations de l'UniStore",
"SYNTAX_ERROR": "Erreur de syntaxe !",
"TITLE": "Titre",
"TOP_STYLE": "Style du haut",
"UNISTORE_BG": "Utiliser l'arrière plan de l'UniStore",
"UNISTORE_BG_DESC": "Lorsque cette option est activée, l'arrière-plan fourni par UniStore sera affiché à la place de la couleur unie pour l'écran supérieur.",
"UNISTORE_INVALID_ERROR": "Cette UniStore n'est pas valide et ne peut pas être chargé avec Universal-Updater.\nPeut-être vérifier s'il y a des erreurs de syntaxe ?",
"UNISTORE_TOO_NEW": "Votre version de Universal-Updater est\ntrop ancienne pour utiliser cette UniStore.\nVeuillez mettre à jour vers la dernière version.",
"UNISTORE_TOO_OLD": "Cette UniStore est obsolète et ne peut pas être utilisée\navec cette version de Universal-Updater.\nVeuillez demander au créateur de la mettre à jour.",
"UNSUPPORTED_UNISTORE_VERSION": "La version de cette UniStore n'est pas prise en charge.",
"UPDATE_AVAILABLE": "Mise à jour disponible!",
"UPDATE_DONE": "Mise à jour terminée ! Veuillez ré-ouvrir Universal-Updater.",
"UPDATE_NOT_AVAILABLE": "Aucune mise à jour n'est disponible!",
"UPDATING_SPRITE_SHEET": "Mise à jour des Sprites...",
"UPDATING_SPRITE_SHEET2": "Mise a jour des sprites: %i/%i...",
"UPDATING_UNISTORE": "Mise à jour de l'UniStore...",
"VERSION": "Version",
"YES": "Oui"
"UNISTORE_BG_DESC": "Si activé, l'arrière-plan fourni par l'UniStore sera affiché au lieu de la couleur unie pour l'écran supérieur.",
"UNISTORE_INVALID_ERROR": "Cet UniStore est invalide et ne peut pas\nêtre chargé avec Universal-Updater.\nPeut-être vérifier s'il y a des erreurs de syntaxe ?",
"UNISTORE_TOO_NEW": "Votre version de Universal-Updater est\ntrop ancienne pour utiliser cet UniStore.\nVeuillez mettre à jour vers la dernière version.",
"UNISTORE_TOO_OLD": "Cet UniStore est obsolète et ne peut être utilisé\navec cette version de Universal-Updater.\nVeuillez demander au créateur de le mettre à jour.",
"UPDATE_AVAILABLE": "Mise à jour disponible !",
"UPDATE_DONE": "La mise à jour est terminée ! Veuillez rouvrir Universal-Updater.",
"UPDATING_SPRITE_SHEET": "Mise à jour de la grille de sprites…",
"UPDATING_SPRITE_SHEET2": "Mise à jour des sprites : %i/%i…",
"UPDATING_UNISTORE": "Mise à jour de l'UniStore…",
"VERSION": "Version "
}

View file

@ -1,6 +1,16 @@
{
"3DSX_IN_FOLDER": "3DSX fájlok mappába rakása",
"3DSX_IN_FOLDER_DESC": "Ha engedélyezett, a 3DSX fájlok egy velük egyező nevű mappába kerülnek, a beállított mappa helyett.",
"ACTION_CANCELED": "%s megszakítva!",
"ACTION_FAILED": "%s sikertelen!",
"ACTION_REQUIRED": "Beavatkozás szükséges!",
"ACTION_SUCCEEDED": "%s sikeres!",
"ACTIVE_THEME": "Aktív Téma",
"ASCENDING": "Növekvő",
"ARGUMENT_INVALID": "Argumentum érvénytelen.\nKérjük ellenőrizd az xml fájlban az argumentumok megfelelőségét.",
"AUTHOR": "Szerző",
"AUTO_UPDATE_NIGHTLY": "Éjszakai verziók használata",
"AUTO_UPDATE_NIGHTLY_DESC": "Az Universal-Updater éjszakai verzióinak használata a stabil kiadások helyett.",
"AUTO_UPDATE_SETTINGS": "Auto-frissítés beállítások",
"AUTO_UPDATE_SETTINGS_BTN": "Auto-frissítés beállítások...",
"AUTO_UPDATE_UNISTORE": "UniStore-ok auto-frissítése",
@ -9,45 +19,63 @@
"AUTO_UPDATE_UU_DESC": "Ha engedélyezett, a Universal-Updater ellenőzi minden megnyitásakor a frissítéseket.",
"AVAILABLE_DOWNLOADS": "Elérhető letöltések",
"BOOT_TITLE": "Szeretné bebootolni ezt a címet?",
"CANCEL": "Mégse",
"CATEGORY": "Kategória",
"CHANGE_3DSX_PATH": "3DSX útvonal módosítása",
"CHANGE_ARCHIVE_PATH": "Archív útvonal módosítása",
"CHANGE_FIRM_PATH": "Firmware útvonal módosítása",
"CHANGE_NDS_PATH": "NDS útvonal módosítása",
"CHANGE_SHORTCUT_PATH": "Parancsikon útvonal módosítás",
"CHECK_UNISTORE_UPDATES": "UniStore frissítések ellenőrzése...",
"CHECK_UU_UPDATES": "Universal-Updater frissítések ellenőrzése...",
"CONFIRM_OR_CANCEL": "Nyomjon -t a folytatáshoz, -t a megszakításhoz.",
"CONNECT_WIFI": "Kérjük kapcsolódjon WiFi-re.",
"CONFIRM": "Megerősít",
"CONSOLE": "Konzol",
"CONTRIBUTOR_TRANSLATORS": "- Minden fordító és hozzájáruló",
"COPYING": "Másolás... %s / %s (%.2f%%)",
"COPY_ERROR": "Másolási hiba!",
"CREATE_SHORTCUT": "Szeretnél létrehozni egy parancsikont?",
"CREDITS": "Készítők",
"CREDITS_BTN": "Készítők...",
"CURRENT_VERSION": "Aktuális verzió: ",
"CURRENTLY_EXTRACTING": "Épp kicsomagolás alatt:\n",
"CUSTOM_FONT": "Egyéni karakterkészlet használat",
"CUSTOM_FONT_DESC": "Ha engedélyezett, akkor az 'sdmc:/3ds/Universal-Updater/font.bcfnt' karakterkészlet kerül használatra a rendszer karakterkészlet helyett.",
"DELETE_ERROR": "Törlési hiba!",
"DELETE_PROMPT": "Biztosan el szeretnéd törölni ezt a könyvtárat?",
"DELETE_UNNEEDED_FILE": "Felesleges fájlok törlése...",
"DELETING": "Törlés...",
"DESCENDING": "Csökkenő",
"DIRECTION": "Irány",
"DIRECTORY_SETTINGS": "Könyvtár beállítások",
"DIRECTORY_SETTINGS_BTN": "Könyvtár beállítások...",
"DISABLE_AUTOUPDATE_UNISTORE": "A bootoláskori UniStore auto-frissítés tiltása",
"DISABLE_UPDATE_CHECK": "Önfrissítés tiltása",
"DONE": "Kész!",
"DOWNLOAD_ERROR": "Letöltési hiba!",
"DOWNLOAD_FAILED": "Letöltés sikertelen!",
"DOWNLOAD_SPEED": "Sebesség: %lld KiB/s",
"DOWNLOADING": "Letöltés... %s / %s (%.2f%%)",
"DOWNLOADING_COMPATIBLE_FONT": "Kompatibilis karakterkészlet letöltése...",
"DOWNLOADING_SPRITE_SHEET": "A spritelap letöltése...",
"DOWNLOADING_SPRITE_SHEET2": "A spritelap letöltése %i/%i...",
"DOWNLOADING_UNIVERSAL_DB": "Universal-DB letöltése...",
"DONLOADING_UNIVERSAL_UPDATER": "Az Universal-Updater letöltése...",
"DOWNLOADING_UNISTORE": "UniStore letöltése...",
"ENABLE_AUTOUPDATE_UNISTORE": "A bootoláskori UniStore auto-frissítés engedélyezése",
"ENABLE_UPDATE_CHECK": "Önfrissítés engedélyezése",
"ENTER_DESC_SHORTCUT": "Add meg a parancsikon leírását.",
"ENTER_SEARCH": "Írja be azt, amire keresni szeretne.",
"ENTER_SHORTCUT_FILENAME": "Add meg a parancsikon fájlnevét (kiterjesztés nélkül).",
"ENTER_TITLE_SHORTCUT": "Add meg a parancsikon címét.",
"ENTER_URL": "Adja meg az UniStore URL-jét.",
"ENTRIES": "Bejegyzések",
"EXECUTE_ENTRY": "Szeretné futtatni ezt a bejegyzést?",
"NOTE_NIGHTLY": "Megjegyzés: Az \"Esti\" verziók az új funkciók teszteléséhez \nkészülnek és instabilak lehetnek.\n\nHa csak simán telepíteni szeretnéd, akkor\nlépj vissza és telepítsd a normál verziót.",
"NOTE_PRERELEASE": "Megjegyzés: Ez egy prerelease build és instabil lehet.\n\nHa csak simán telepíteni szeretnéd, akkor\nlépj vissza és telepítsd a normál verziót.",
"EXIT_APP": "Kilépés az Universal-Updater-ből",
"EXTRACTING": "Kicsomagolás... %s / %s (%.2f%%)",
"EXTRACT_ERROR": "Kicsomagolási hiba!",
"FEATURE_SIDE_EFFECTS": "Ez a funkció mellékhatásokkal rendelkezhet a futó várósorra.\nBiztosan szeretnéd folytatni?",
"FETCHING_METADATA": "Régi metaadat beolvasása...",
"FETCHING_RECOMMENDED_UNISTORES": "Ajánlot UniStore-ok letöltése...",
"FILES": "Fájl: %d / %d",
"FILE_EXTRACTED": "fájl kicsomagolva.",
"FILE_SLASH": "Úgy tűnik tartalmaz egy '/' jelet, ami nem támogatott.\nKérjük változtassa meg a 'file' értéket csak fájlnévre.",
"FILES_EXTRACTED": "fájl kicsomagolva.",
@ -57,32 +85,57 @@
"GUI_SETTINGS": "GUI beállítások",
"GUI_SETTINGS_BTN": "GUI beállítások...",
"INCLUDE_IN_RESULTS": "Befoglalás az eredményekbe:",
"INSTALLING": "Telepítés... %s / %s (%.2f%%)",
"INSTALL_UNIVERSAL_UPDATER": "Az Universal-Updater teleptése...",
"INVALID_UNISTORE": "Érvénytelen UniStore",
"KEY_CONTINUE": "Nyomjon meg egy billentyűt a folytatáshoz.",
"LANGUAGE": "Nyelv",
"LANGUAGE": "Nyelv...",
"LAST_UPDATED": "Utolsó frissítés",
"LICENSE": "Licensz",
"LIST": "Lista",
"LOADING_SCREENSHOT": "Képernyőkép betöltése...",
"LOADING_SPRITESHEET": "A spritelap betöltése %i/%i...",
"MEDIATYPE_NAND": "Médiatípus NAND",
"MEDIATYPE_SD": "Médiatípus SD",
"MOVE_ERROR": "Mozgatási hiba!",
"NO": "Nem",
"NO_DOWNLOADS_AVAILABLE": "Nincsenek elérhető letöltések",
"NO_LICENSE": "Nincs licenc",
"NO_SCREENSHOTS_AVAILABLE": "Képernyőképek nem elérhetők",
"NOT_IMPLEMENTED": "Még nem implementált",
"OP_COPYING": "Másolás",
"OP_DELETING": "Törlés",
"OP_DOWNLOADING": "Letöltés",
"OP_EXTRACTING": "Kicsomagolás",
"OP_INSTALLING": "Telepítés",
"OP_MOVING": "Mozgatás",
"OP_WAITING": "Várakozás",
"QUEUE": "Várósor",
"QUEUE_POSITION": "Várósor pozíció",
"QUEUE_PROGRESS": "Lépés: %d / %d",
"RECOMMENDED_UNISTORES": "Ajánlot UniStore-ok",
"REVISION": "Revízió",
"SCREENSHOT": "Képernyőkép %d / %d",
"SCREENSHOT_COULD_NOT_LOAD": "A képernyőkép nem tölthető be.",
"SCREENSHOT_INSTRUCTIONS": "Nyomj -t a változtatáshoz és -t a nagyításhoz",
"SEARCH_FILTERS": "Keresés és Szűrők",
"SELECT_A_THEME": "Válassz egy témát",
"SELECT_DIR": "Könyvtár kiválasztása",
"SELECT_LANG": "Válassza ki a nyelvet",
"SELECT_UNISTORE": "UniStore választás",
"SELECT_UNISTORE": "UniStore választás...",
"SELECT_UNISTORE_2": "Válasszon egy UniStore-t",
"SELECTION_QUEUE": "Kiválasztás hozzáadása a várósorhoz",
"SETTINGS": "Beállítások",
"SHEET_SLASH": "Úgy tűnik tartalmaz egy '/' jelet, ami nem támogatott.\nKérjük változtassa meg a 'sheet' értéket csak fájlnévre.",
"SHORTCUT_CREATED": "Parancsikon létrehozva!",
"SHORTCUT_COPYING": "%s másolása...",
"SHORTCUT_DOWNLOADING": "%s letöltése...",
"SHORTCUT_EXTRACTING": "%s kicsomagolása...",
"SHORTCUT_INSTALLING": "%s telepítése...",
"SIZE": "Méret",
"SORT_BY": "Rendezés eszerint",
"SORTING": "Rendezés",
"START_SELECT": "Nyomjon START-t az aktuális mappa kiválasztásához",
"STORE_INFO": "Store Információ",
"SYNTAX_ERROR": "Szintaktikai hiba!",
"TITLE": "Cím",
"TOP_STYLE": "Top Stílus",
@ -91,13 +144,10 @@
"UNISTORE_INVALID_ERROR": "Ez az UniStore érvénytelen és nem \nbetölthető az Universal-Updater-rel. \nEgy ellenőrzés szintaktikai hibákra?",
"UNISTORE_TOO_NEW": "Ez az Universal-Updater \nnagyon régi ehhez az UniStore-hoz.\nKérjük frissítsen a legutóbbira.",
"UNISTORE_TOO_OLD": "Az UniStore régi és nem használható Universal-Updater ezen verziójával.\nKérje meg a készítőját, hogy frissítse.",
"UNSUPPORTED_UNISTORE_VERSION": "Ez az UniStore verzió nem támogatott.",
"UPDATE_AVAILABLE": "Frissítés elérhető!",
"UPDATE_DONE": "Frissítés kész! Kérjük, nyissa meg újra az Universal-Updater-t.",
"UPDATE_NOT_AVAILABLE": "Nincs elérhető frissítés!",
"UPDATING_SPRITE_SHEET": "A spritelap frissítése...",
"UPDATING_SPRITE_SHEET2": "A spritelap frissítése %i/%i...",
"UPDATING_UNISTORE": "UniStore frissítése...",
"VERSION": "Verzió",
"YES": "Igen"
"VERSION": "Verzió"
}

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