Compare commits
166 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
996aaa86e9 |
||
|
|
b485603520 |
||
|
|
9ad7336eac |
||
|
|
27563d72df |
||
|
|
e226ba1b85 |
||
|
|
78cf9be1e6 |
||
|
|
8cd33cd3ba |
||
|
|
aa51878173 |
||
|
|
5223d859c4 |
||
|
|
88c35546c1 |
||
|
|
00d81e8cf5 |
||
|
|
3ea0d1c508 |
||
|
|
9cb3770d86 |
||
|
|
364eba3148 |
||
|
|
dd41842f7f |
||
|
|
31eb242c30 |
||
|
|
c348c26214 |
||
|
|
7bb0710eed |
||
|
|
62f69739fe |
||
|
|
19c5908415 |
||
|
|
bb9d810404 |
||
|
|
9e062a6777 |
||
|
|
3c5d3d3a0d |
||
|
|
ca3902f0ae |
||
|
|
1b5fd60a5a |
||
|
|
48aeedfe5f |
||
|
|
dc3815f3d1 |
||
|
|
8abd321610 | ||
|
|
00449906ff |
||
|
|
8c1898eaa6 |
||
|
|
aaf77fa51a |
||
|
|
b6b0fa3113 |
||
|
|
168846780a | ||
|
|
ba63a53bbf | ||
|
|
2b14b58dcf | ||
|
|
6e47789ef6 | ||
|
|
101cb56036 | ||
|
|
3fd6fc8a3e | ||
|
|
6ee17fdfd2 | ||
|
|
cd5f39849a | ||
|
|
3d49a12f33 | ||
|
|
ad10cb40fe | ||
|
|
f1cebffab8 | ||
|
|
1e561c3ecf | ||
|
|
015120a882 | ||
|
|
405144b6f2 | ||
|
|
dc2a2d53c6 | ||
|
|
6fcc1e3da2 | ||
|
|
97bdc3fe66 |
||
|
|
61ef4942ee | ||
|
|
38d0dc55e8 | ||
|
|
605e3df993 | ||
|
|
2236e1ecc3 | ||
|
|
6056609ffb | ||
|
|
a9e8386b99 | ||
|
|
54e1ca1a65 | ||
|
|
51bef7cfb2 | ||
|
|
7469dd2674 | ||
|
|
8751a057a1 |
||
|
|
077079f453 | ||
|
|
6ac3de8b9f | ||
|
|
3cde3a3a1f | ||
|
|
2b0352114e | ||
|
|
b907cd6b31 | ||
|
|
ff37d85e15 | ||
|
|
becaeb4631 | ||
|
|
0da467bc66 |
||
|
|
33edafcd20 | ||
|
|
c7f3893a3f | ||
|
|
823f093a5f | ||
|
|
b1796023ab | ||
|
|
b4a9cffd9b | ||
|
|
18c5b1249a |
||
|
|
c6da53a44e | ||
|
|
7ce230eb32 | ||
|
|
e1d16bcfd0 | ||
|
|
a06f623cc3 | ||
|
|
ec5e637ce6 |
||
|
|
dcef7ac7ca | ||
|
|
baa14561eb |
||
|
|
bfecbc86af | ||
|
|
f365f8710d | ||
|
|
791690fd5a | ||
|
|
388fb08bc5 | ||
|
|
4f01c52859 | ||
|
|
a341f2f9b0 | ||
|
|
11238eea22 | ||
|
|
376201c17e | ||
|
|
45192c8ff7 | ||
|
|
5c9ae70258 | ||
|
|
bbb7a36d93 | ||
|
|
2b4e67e469 | ||
|
|
65616e8f58 | ||
|
|
936ae68603 | ||
|
|
279173d8fb | ||
|
|
2825e361e3 | ||
|
|
4c792a1ea0 | ||
|
|
06086d92da | ||
|
|
c95d66f0e4 | ||
|
|
e06d475131 | ||
|
|
79aa09765d | ||
|
|
9922d29060 | ||
|
|
33866a53f2 | ||
|
|
54447c2537 | ||
|
|
0f625eb67c | ||
|
|
067be891d7 | ||
|
|
798a8bc668 | ||
|
|
b45adba858 | ||
|
|
cabe2f13f4 | ||
|
|
aa58e23c13 | ||
|
|
2b455c2dd0 | ||
|
|
77edd99749 | ||
|
|
5343661069 | ||
|
|
8d0712744e | ||
|
|
19b0543182 | ||
|
|
c6d0f55ffc | ||
|
|
46b17521a7 | ||
|
|
2d0e897dbc | ||
|
|
40b981f44a | ||
|
|
36b5d9c528 | ||
|
|
cab050e4d9 | ||
|
|
0709114448 | ||
|
|
cb59e3251a | ||
|
|
802112ab62 | ||
|
|
517d87cbcf | ||
|
|
1014a74248 | ||
|
|
b806e46f29 | ||
|
|
2613c07e6b |
||
|
|
ec5d0e7ab3 | ||
|
|
eaf82d8849 | ||
|
|
9eefef85d4 | ||
|
|
afe9ef9aa5 | ||
|
|
4f89ade8b4 | ||
|
|
bad78f6bb8 | ||
|
|
33c4688991 | ||
|
|
b04cc24b1d | ||
|
|
623436598e | ||
|
|
60e29ddb90 |
||
|
|
e52bd33905 |
||
|
|
fc26f885ba | ||
|
|
09d4de2f08 |
||
|
|
0a1aa09a95 | ||
|
|
d413723968 | ||
|
|
78f288dfee | ||
|
|
b0655cea73 |
||
|
|
03a562721b | ||
|
|
c72a6f11b3 | ||
|
|
6d0a923186 | ||
|
|
871d0722eb | ||
|
|
a8aae7379b | ||
|
|
07577b0fe2 | ||
|
|
a82491a63d | ||
|
|
ded6d4234d | ||
|
|
f68c6242f5 | ||
|
|
64977911e6 | ||
|
|
78d0dad604 |
||
|
|
2e2acf819e | ||
|
|
0ac9d6f448 | ||
|
|
f08bed5813 | ||
|
|
24a7b90dea | ||
|
|
05a9e35032 | ||
|
|
cd24742621 | ||
|
|
0dc8369bff | ||
|
|
ee2769b294 | ||
|
|
ddbea3ab36 | ||
|
|
689192e902 |
93
.github/ISSUE_TEMPLATE/bug_report.md
vendored
|
|
@ -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
|
|
@ -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"
|
||||
29
.github/ISSUE_TEMPLATE/feature_request.md
vendored
|
|
@ -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:**
|
||||
|
||||
|
||||
|
|
|
|||
124
.github/workflows/build.yml
vendored
|
|
@ -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
|
|
@ -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
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
67
Makefile
|
|
@ -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...
|
||||
|
|
|
|||
68
README.md
|
|
@ -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>
|
||||
|
||||
           
|
||||
 
|
||||
 
|
||||
 
|
||||
 
|
||||
 
|
||||
 
|
||||
 
|
||||
 
|
||||
 
|
||||
|
||||
</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
|
|
@ -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
|
||||
|
|
|
|||
BIN
app/icon.png
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 2.5 KiB |
|
|
@ -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
|
||||
|
|
|
|||
BIN
assets/gfx/sprites/add_font.png
Normal file
|
After Width: | Height: | Size: 338 B |
BIN
assets/gfx/sprites/battery/battery_0.png
Normal file
|
After Width: | Height: | Size: 257 B |
BIN
assets/gfx/sprites/battery/battery_1.png
Normal file
|
After Width: | Height: | Size: 254 B |
BIN
assets/gfx/sprites/battery/battery_2.png
Normal file
|
After Width: | Height: | Size: 249 B |
BIN
assets/gfx/sprites/battery/battery_3.png
Normal file
|
After Width: | Height: | Size: 250 B |
BIN
assets/gfx/sprites/battery/battery_4.png
Normal file
|
After Width: | Height: | Size: 280 B |
BIN
assets/gfx/sprites/battery/battery_blink.png
Normal file
|
After Width: | Height: | Size: 257 B |
BIN
assets/gfx/sprites/battery/battery_charge.png
Normal file
|
After Width: | Height: | Size: 348 B |
BIN
assets/gfx/sprites/battery/battery_charge_full.png
Normal file
|
After Width: | Height: | Size: 340 B |
BIN
assets/gfx/sprites/cancel.png
Normal file
|
After Width: | Height: | Size: 351 B |
|
Before Width: | Height: | Size: 951 B After Width: | Height: | Size: 641 B |
|
Before Width: | Height: | Size: 894 B After Width: | Height: | Size: 612 B |
BIN
assets/gfx/sprites/installed.png
Normal file
|
After Width: | Height: | Size: 289 B |
BIN
assets/gfx/sprites/keyboard.png
Normal file
|
After Width: | Height: | Size: 441 B |
BIN
assets/gfx/sprites/langs/jp.png
Normal file
|
After Width: | Height: | Size: 525 B |
BIN
assets/gfx/sprites/langs/ko.png
Normal file
|
After Width: | Height: | Size: 532 B |
BIN
assets/gfx/sprites/langs/ry.png
Normal file
|
After Width: | Height: | Size: 920 B |
BIN
assets/gfx/sprites/langs/zh-CN.png
Normal file
|
After Width: | Height: | Size: 761 B |
BIN
assets/gfx/sprites/langs/zh-TW.png
Normal file
|
After Width: | Height: | Size: 960 B |
BIN
assets/gfx/sprites/list.png
Normal file
|
After Width: | Height: | Size: 187 B |
BIN
assets/gfx/sprites/notes.png
Normal file
|
After Width: | Height: | Size: 311 B |
|
Before Width: | Height: | Size: 387 B After Width: | Height: | Size: 377 B |
BIN
assets/gfx/sprites/queue0.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
assets/gfx/sprites/queue1.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
assets/gfx/sprites/queue2.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
assets/gfx/sprites/queue3.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
assets/gfx/sprites/queue4.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
assets/gfx/sprites/queue5.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
assets/gfx/sprites/queue6.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
assets/gfx/sprites/queue7.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
assets/gfx/sprites/screenshot.png
Normal file
|
After Width: | Height: | Size: 459 B |
|
Before Width: | Height: | Size: 1 KiB After Width: | Height: | Size: 669 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 726 B |
BIN
assets/gfx/sprites/shortcut.png
Normal file
|
After Width: | Height: | Size: 287 B |
|
Before Width: | Height: | Size: 978 B After Width: | Height: | Size: 669 B |
|
Before Width: | Height: | Size: 297 B After Width: | Height: | Size: 436 B |
|
Before Width: | Height: | Size: 322 B After Width: | Height: | Size: 593 B |
BIN
assets/gfx/sprites/wifi/wifi_0.png
Normal file
|
After Width: | Height: | Size: 467 B |
BIN
assets/gfx/sprites/wifi/wifi_1.png
Normal file
|
After Width: | Height: | Size: 254 B |
BIN
assets/gfx/sprites/wifi/wifi_2.png
Normal file
|
After Width: | Height: | Size: 381 B |
BIN
assets/gfx/sprites/wifi/wifi_3.png
Normal file
|
After Width: | Height: | Size: 535 B |
BIN
assets/gfx/sprites/wifi/wifi_off.png
Normal file
|
After Width: | Height: | Size: 488 B |
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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 ¤tMode, int &lastMode, bool &fetch, int &smallDelay);
|
||||
void DrawGrid();
|
||||
void GridLogic(int ¤tMode, 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 ¤tMode, int &lastMode, bool &fetch, int &smallDelay);
|
||||
void DrawList();
|
||||
void ListLogic(int ¤tMode, 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 ¤tMenu);
|
||||
void SideMenuHandle(u32 hDown, touchPosition touch, int ¤tMenu, bool &fetch);
|
||||
void DrawSideMenu(int currentMenu);
|
||||
void SideMenuHandle(int ¤tMenu, 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 ¤tMenu, 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 ¤tMenu, 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
|
||||
|
|
@ -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 ¤tProgress, 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
|
||||
47
include/utils/argumentParser.hpp
Normal 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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 ¤tRev, 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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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
82
include/utils/queueSystem.hpp
Normal 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
|
||||
39
include/utils/screenshot.hpp
Normal 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
|
||||
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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
721
libs/include/archive_entry.hpp
Normal 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
41
libs/lib/libarchive.la
Executable 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'
|
||||
12
libs/lib/pkgconfig/libarchive.pc
Normal 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
|
||||
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
24
resources/Themes.json
Normal 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
|
|
@ -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!"
|
||||
}
|
||||
}
|
||||
|
|
@ -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"
|
||||
}
|
||||
|
|
@ -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?"
|
||||
}
|
||||
|
|
@ -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"
|
||||
}
|
||||
|
|
@ -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"
|
||||
}
|
||||
|
|
@ -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"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
|
|
@ -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 "
|
||||
}
|
||||
|
|
@ -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ó"
|
||||
}
|
||||