14 Commits
0.6.2 ... 0.6.3

Author SHA1 Message Date
ITotalJustice
6b4e81c935 bump version for new release 0.6.3 2025-04-18 13:18:14 +01:00
ITotalJustice
e243d5b64e fix themezer 2025-04-18 13:16:17 +01:00
shadow2560
252cd0cee6 Add 12 our time string in translation files and translated it for French language. (#120)
Signed-off-by: shadow2560 <24191064+shadow2560@users.noreply.github.com>
2025-04-09 18:05:14 +01:00
therealbungus
14abcc50b5 add 12 hour clock (#113) 2025-04-08 12:04:22 +01:00
BIGBIGSUI
134aadad5a Update zh.json (#110)
This is my updated zh.json file, I hope it helps.
2025-04-08 09:39:31 +01:00
Ny'hrarr
a56bc9e4fa Update pt.json (#109)
* Update pt.json

* Update pt.json
2025-04-08 09:39:18 +01:00
shadow2560
5bd466a9b6 Update french language. (#108)
Signed-off-by: shadow2560 <24191064+shadow2560@users.noreply.github.com>
2025-04-08 09:38:58 +01:00
LNLenost
16c58512ec Edited README, updated Italian translations (#117)
* Update README.md

* Update README.md

* Italian translations 1/2

* Italian translations 2/2
2025-04-08 09:38:32 +01:00
ITotalJustice
b1b0b13f2a fix filebrowser FsDirOpenMode_NoFileSize being passed
looks like fs ignores this flag as it was reporting the filesize regardless. however, if a file is created using
FsCreateOption_BigFile, then the filesize would return 0.
2025-01-22 13:01:38 +00:00
ITotalJustice
03e77faf06 draw "applet mode" text using error colour
fixes #104
2025-01-22 12:59:54 +00:00
ITotalJustice
7e381924ab fix forwarder creation bug on ams 1.7.1, fix cmake project version bug
i was checking against ams 1.7.1, however the change was introduced in ams 1.8.0.
fixes #106

as for cmake, i have no idea why this bug happens, but sometimes it will use the project version for hbl.
which results in sphaira having a version number of 3.0.0.
this only seemed to happen when building the zip with no current build.
2025-01-22 12:54:30 +00:00
spkats1
5763610e54 [Theme] alt icons + theme (#102)
* adding "sp icons"
2025-01-22 12:49:15 +00:00
HenryBaby
49956a3f84 Updated se.json with the latest added string. (#103)
Co-authored-by: ITotalJustice <47043333+ITotalJustice@users.noreply.github.com>
2025-01-22 12:48:00 +00:00
Yorunokyujitsu
b2915a8142 add new string, update ko, ja.json (#101) 2025-01-22 12:47:04 +00:00
32 changed files with 177 additions and 100 deletions

View File

@@ -1,12 +1,12 @@
# sphaira # Sphaira
A homebrew menu for the switch. A homebrew menu for the Nintendo Switch.
[See the gbatemp thread for more details / discussion](https://gbatemp.net/threads/sphaira-hbmenu-replacement.664523/). [See the GBATemp thread for more details / discussion](https://gbatemp.net/threads/sphaira-hbmenu-replacement.664523/).
[We have now have a Discord server!](https://discord.gg/8vZBsrprEc). Please use the issues tab to report bugs, as it is much easier for me to track. [We have now have a Discord server!](https://discord.gg/8vZBsrprEc). Please use the issues tab to report bugs, as it is much easier for me to track.
## showcase ## Showcase
| | | | | |
:-------------------------:|:-------------------------: :-------------------------:|:-------------------------:
@@ -15,29 +15,29 @@ A homebrew menu for the switch.
![Img](assets/screenshots/2024121522505300-879193CD6A8B96CD00931A628B1187CB.jpg) | ![Img](assets/screenshots/2024121522502300-879193CD6A8B96CD00931A628B1187CB.jpg) ![Img](assets/screenshots/2024121522505300-879193CD6A8B96CD00931A628B1187CB.jpg) | ![Img](assets/screenshots/2024121522502300-879193CD6A8B96CD00931A628B1187CB.jpg)
![Img](assets/screenshots/2024121523033200-879193CD6A8B96CD00931A628B1187CB.jpg) | ![Img](assets/screenshots/2024121523070300-879193CD6A8B96CD00931A628B1187CB.jpg) ![Img](assets/screenshots/2024121523033200-879193CD6A8B96CD00931A628B1187CB.jpg) | ![Img](assets/screenshots/2024121523070300-879193CD6A8B96CD00931A628B1187CB.jpg)
## bug reports ## Bug reports
for any bug reports, please use the issues tab and explain in as much detail as possible! For any bug reports, please use the issues tab and explain in as much detail as possible!
please include: Please include:
- CFW type (i assume Atmosphere, but someone out there is still using Rajnx) - CFW type (i assume Atmosphere, but someone out there is still using Rajnx);
- CFW version - CFW version;
- FW version - FW version;
- The bug itself and how to reproduce it - The bug itself and how to reproduce it.
## ftp ## FTP
ftp can be enabled via the network menu. It uses the same config as ftpsrv `/config/ftpsrv/config.ini`. [See here for the full list FTP can be enabled via the network menu. It uses the same config as ftpsrv `/config/ftpsrv/config.ini`. [See here for the full list
of all configs available](https://github.com/ITotalJustice/ftpsrv/blob/master/assets/config.ini.template). of all configs available](https://github.com/ITotalJustice/ftpsrv/blob/master/assets/config.ini.template).
## mtp ## MTP
mtp can be enabled via the network menu. MTP can be enabled via the Network menu.
## file assoc ## File association
sphaira has file assoc support. lets say your app supports loading .png files, then you could write an assoc file, then when using the file browser, clicking on a .png file will launch your app along with the .png file as argv[1]. This was primarly added for rom loading support for emulators / frontends such as retroarch, melonds, mgba etc. Sphaira has file association support. Let's say your app supports loading .png files, then you could write an association file, then when using the file browser, clicking on a .png file will launch your app along with the .png file as argv[1]. This was primarly added for rom loading support for emulators / frontends such as RetroArch, MelonDS, mGBA etc.
```ini ```ini
[config] [config]
@@ -45,9 +45,9 @@ path=/switch/your_app.nro
supported_extensions=jpg|png|mp4|mp3 supported_extensions=jpg|png|mp4|mp3
``` ```
the `path` field is optional. if left out, it will use the name of the ini to find the nro. For example, if the ini is called mgba.ini, it will try to find the nro in /switch/mgba.nro and /switch/folder/mgba.nro. The `path` field is optional. If left out, it will use the name of the ini to find the nro. For example, if the ini is called mgba.ini, it will try to find the nro in /switch/mgba.nro and /switch/folder/mgba.nro.
see `assets/romfs/assoc/` for more examples of file assoc entries See `assets/romfs/assoc/` for more examples of file assoc entries.
## Credits ## Credits
@@ -59,7 +59,7 @@ see `assets/romfs/assoc/` for more examples of file assoc entries
- deko3d-nanovg - deko3d-nanovg
- libpulsar - libpulsar
- minIni - minIni
- gbatemp - GBATemp
- hb-appstore - hb-appstore
- haze - haze
- everyone who has contributed to this project! - Everyone who has contributed to this project!

View File

@@ -66,6 +66,7 @@
"Select Theme": "Theme auswählen", "Select Theme": "Theme auswählen",
"Shuffle": "Zufällig", "Shuffle": "Zufällig",
"Music": "Musik", "Music": "Musik",
"12 Hour Time": "",
"Network": "Netzwerk", "Network": "Netzwerk",
"Network Options": "Netzwerk-Optionen", "Network Options": "Netzwerk-Optionen",
"Ftp": "FTP", "Ftp": "FTP",
@@ -251,5 +252,6 @@
"Completely remove ": "Vollständig entfernen ", "Completely remove ": "Vollständig entfernen ",
"Are you sure you want to delete ": "Wirklich löschen ", "Are you sure you want to delete ": "Wirklich löschen ",
"Are you sure you wish to cancel?": "Wirklich abbrechen?", "Are you sure you wish to cancel?": "Wirklich abbrechen?",
"Audio disabled due to suspended game": "",
"If this message appears repeatedly, please open an issue.": "Bei wiederholtem Auftreten bitte Issue erstellen." "If this message appears repeatedly, please open an issue.": "Bei wiederholtem Auftreten bitte Issue erstellen."
} }

View File

@@ -66,6 +66,7 @@
"Select Theme": "Select Theme", "Select Theme": "Select Theme",
"Shuffle": "Shuffle", "Shuffle": "Shuffle",
"Music": "Music", "Music": "Music",
"12 Hour Time": "12 Hour Time",
"Network": "Network", "Network": "Network",
"Network Options": "Network Options", "Network Options": "Network Options",
"Ftp": "FTP", "Ftp": "FTP",
@@ -251,5 +252,6 @@
"Completely remove ": "Completely remove ", "Completely remove ": "Completely remove ",
"Are you sure you want to delete ": "Are you sure you want to delete ", "Are you sure you want to delete ": "Are you sure you want to delete ",
"Are you sure you wish to cancel?": "Are you sure you wish to cancel?", "Are you sure you wish to cancel?": "Are you sure you wish to cancel?",
"Audio disabled due to suspended game": "Audio disabled due to suspended game",
"If this message appears repeatedly, please open an issue.": "If this message appears repeatedly, please open an issue." "If this message appears repeatedly, please open an issue.": "If this message appears repeatedly, please open an issue."
} }

View File

@@ -66,6 +66,7 @@
"Select Theme": "Seleccionar tema", "Select Theme": "Seleccionar tema",
"Shuffle": "Barajar", "Shuffle": "Barajar",
"Music": "Música", "Music": "Música",
"12 Hour Time": "",
"Network": "Red", "Network": "Red",
"Network Options": "Opciones de red", "Network Options": "Opciones de red",
"Ftp": "FTP", "Ftp": "FTP",
@@ -251,5 +252,6 @@
"Completely remove ": "Eliminar completamente", "Completely remove ": "Eliminar completamente",
"Are you sure you want to delete ": "¿Estás seguro que quieres eliminar? ", "Are you sure you want to delete ": "¿Estás seguro que quieres eliminar? ",
"Are you sure you wish to cancel?": "¿Estás seguro que deseas cancelar?", "Are you sure you wish to cancel?": "¿Estás seguro que deseas cancelar?",
"Audio disabled due to suspended game": "",
"If this message appears repeatedly, please open an issue.": "Si este mensaje aparece repetidamente, por favor abrir un 'issue'." "If this message appears repeatedly, please open an issue.": "Si este mensaje aparece repetidamente, por favor abrir un 'issue'."
} }

View File

@@ -66,6 +66,7 @@
"Select Theme": "Choisir un Thème", "Select Theme": "Choisir un Thème",
"Shuffle": "Aléatoire", "Shuffle": "Aléatoire",
"Music": "Musique", "Music": "Musique",
"12 Hour Time": "Temps sur 12 heures",
"Network": "Réseau", "Network": "Réseau",
"Network Options": "Options Réseau", "Network Options": "Options Réseau",
"Ftp": "FTP", "Ftp": "FTP",
@@ -251,5 +252,6 @@
"Completely remove ": "Supprimer totalement ", "Completely remove ": "Supprimer totalement ",
"Are you sure you want to delete ": "Êtes-vous sûr de vouloir supprimer ", "Are you sure you want to delete ": "Êtes-vous sûr de vouloir supprimer ",
"Are you sure you wish to cancel?": "Souhaitez-vous vraiment annuler?", "Are you sure you wish to cancel?": "Souhaitez-vous vraiment annuler?",
"Audio disabled due to suspended game": "Audio désactivé à cause d'un jeu suspendu",
"If this message appears repeatedly, please open an issue.": "Si ce message apparait en boucle veuillez ouvrir une issue." "If this message appears repeatedly, please open an issue.": "Si ce message apparait en boucle veuillez ouvrir une issue."
} }

View File

@@ -66,6 +66,7 @@
"Select Theme": "Seleziona tema", "Select Theme": "Seleziona tema",
"Shuffle": "Mescola", "Shuffle": "Mescola",
"Music": "Musica", "Music": "Musica",
"12 Hour Time": "",
"Network": "Rete", "Network": "Rete",
"Network Options": "Opzioni di rete", "Network Options": "Opzioni di rete",
"Ftp": "FTP", "Ftp": "FTP",
@@ -203,53 +204,54 @@
"Load Default": "Carica predefinito", "Load Default": "Carica predefinito",
"Themezer": "Themezer", "Themezer": "Themezer",
"Themezer Options": "", "Themezer Options": "Impostazioni Themezer",
"Nsfw": "", "Nsfw": "NSFW",
"Page": "", "Page": "Pagina",
"Page %zu / %zu": "Page %zu / %zu", "Page %zu / %zu": "Pagina %zu / %zu",
"Enter Page Number": "", "Enter Page Number": "Inserisci il numero della pagina",
"Bad Page": "", "Bad Page": "Pagina invalida",
"Download theme?": "", "Download theme?": "Vuoi scaricare il tema?",
"GitHub": "", "GitHub": "GitHub",
"Downloading json": "", "Downloading json": "Scaricamento json",
"Select asset to download for ": "", "Select asset to download for": "Scegli l'asset da scaricare per",
"Installing ": "", "Installing ": "Installazione",
"Uninstalling ": "", "Uninstalling ": "Disinstallazione",
"Deleting ": "", "Deleting ": "Eliminazione",
"Deleting": "", "Deleting": "Eliminazione",
"Pasting ": "", "Pasting ": "Incollo",
"Pasting": "", "Pasting": "Incollo",
"Removing ": "", "Removing ": "Rimozione",
"Scanning ": "", "Scanning ": "Scan",
"Creating ": "", "Creating ": "Creazione",
"Copying ": "", "Copying ": "Copio",
"Trying to load ": "", "Trying to load ": "Cercando di caricare",
"Downloading ": "", "Downloading ": "Scaricando",
"Downloaded ": "", "Downloaded ": "Scaricato",
"Removed ": "", "Removed ": ""Rimosso,
"Checking MD5": "", "Checking MD5": "Controllo MD5",
"Loading...": "", "Loading...": "Caricamento...",
"Loading": "", "Loading": "Caricamento",
"Empty!": "", "Empty!": "Vuoto!",
"Not Ready...": "", "Not Ready...": "Non pronto...",
"Error loading page!": "", "Error loading page!": "Errore nel caricare la pagina!",
"Update avaliable: ": "", "Update avaliable: ": "Aggiornamento disponibile",
"Download update: ": "", "Download update: ": "Scarica aggiornamento",
"Updated to ": "", "Updated to ": "Aggiornato a",
"Press OK to restart Sphaira": "", "Press OK to restart Sphaira": "Premi OK per riavviare Sphaira",
"Restart Sphaira?": "", "Restart Sphaira?": "Vuoi riavviare Sphaira?",
"Failed to download update": "", "Failed to download update": "Download aggiornamento fallito",
"Restore hbmenu?": "", "Restore hbmenu?": "Vuoi ripristinare hbmenu?",
"Failed to find /switch/hbmenu.nro\nUse the Appstore to re-install hbmenu": "", "Failed to find /switch/hbmenu.nro\nUse the Appstore to re-install hbmenu": "Impossibile trovare /switch/hbmenu.nro\nUsa l'Appstore per reinstallare hbmenu",
"Failed to restore hbmenu, please re-download hbmenu": "", "Failed to restore hbmenu, please re-download hbmenu": "Impossibile ripristinare hbmenu, per favore riscaricalo",
"Failed to restore hbmenu, using sphaira instead": "", "Failed to restore hbmenu, using sphaira instead": "Impossibile ripristinare hbmenu, uso Sphaira invece",
"Restored hbmenu, closing sphaira": "", "Restored hbmenu, closing sphaira": "hbmenu ripristinato, chiudo Sphaira",
"Restored hbmenu": "", "Restored hbmenu": "hbmenu ripristinato",
"Delete Selected files?": "", "Delete Selected files?": "Vuoi rimuovere i file selezionati?",
"Completely remove ": "", "Completely remove ": "Elimina definitivamente",
"Are you sure you want to delete ": "Sei sicuro di voler eliminare? ", "Are you sure you want to delete ": "Sei sicuro di voler eliminare? ",
"Are you sure you wish to cancel?": "", "Are you sure you wish to cancel?": "Sei sicuro di voler annullare?",
"If this message appears repeatedly, please open an issue.": "" "Audio disabled due to suspended game": "Audio disabilitato poichè un app è in pausa",
} "If this message appears repeatedly, please open an issue.": "Se questo messaggio appare frequentemente, segnala il bug."
}

View File

@@ -66,6 +66,7 @@
"Select Theme": "テーマを選ぶ", "Select Theme": "テーマを選ぶ",
"Shuffle": "シャッフル", "Shuffle": "シャッフル",
"Music": "BGM", "Music": "BGM",
"12 Hour Time": "",
"Network": "ネットワーク", "Network": "ネットワーク",
"Network Options": "ネットワーク設定", "Network Options": "ネットワーク設定",
"Ftp": "FTP", "Ftp": "FTP",
@@ -251,5 +252,6 @@
"Completely remove ": "除去しますか ", "Completely remove ": "除去しますか ",
"Are you sure you want to delete ": "消去してもよろしいですか ", "Are you sure you want to delete ": "消去してもよろしいですか ",
"Are you sure you wish to cancel?": "本当に取り消しますか?", "Are you sure you wish to cancel?": "本当に取り消しますか?",
"Audio disabled due to suspended game": "ゲームが一時停止状態の場合、オーディオは無効になります",
"If this message appears repeatedly, please open an issue.": "このメッセージが繰り返し表示される場合は、問題を開いてください。" "If this message appears repeatedly, please open an issue.": "このメッセージが繰り返し表示される場合は、問題を開いてください。"
} }

View File

@@ -66,6 +66,7 @@
"Select Theme": "테마 선택", "Select Theme": "테마 선택",
"Shuffle": "셔플", "Shuffle": "셔플",
"Music": "BGM", "Music": "BGM",
"12 Hour Time": "",
"Network": "네트워크", "Network": "네트워크",
"Network Options": "네트워크 옵션", "Network Options": "네트워크 옵션",
"Ftp": "FTP (무선)", "Ftp": "FTP (무선)",
@@ -251,5 +252,6 @@
"Completely remove ": "정말 삭제할까요 ", "Completely remove ": "정말 삭제할까요 ",
"Are you sure you want to delete ": "정말 삭제할까요 ", "Are you sure you want to delete ": "정말 삭제할까요 ",
"Are you sure you wish to cancel?": "정말 취소할까요?", "Are you sure you wish to cancel?": "정말 취소할까요?",
"Audio disabled due to suspended game": "게임 실행 중에는 BGM이 비활성화 됩니다",
"If this message appears repeatedly, please open an issue.": "해당 메시지가 반복해서 나타나는 경우, 이슈를 등록하세요." "If this message appears repeatedly, please open an issue.": "해당 메시지가 반복해서 나타나는 경우, 이슈를 등록하세요."
} }

View File

@@ -66,6 +66,7 @@
"Select Theme": "Selecteer Thema", "Select Theme": "Selecteer Thema",
"Shuffle": "Schudden", "Shuffle": "Schudden",
"Music": "Muziek", "Music": "Muziek",
"12 Hour Time": "",
"Network": "Netwerk", "Network": "Netwerk",
"Network Options": "Netwerkopties", "Network Options": "Netwerkopties",
"Ftp": "FTP", "Ftp": "FTP",
@@ -251,5 +252,6 @@
"Completely remove ": "", "Completely remove ": "",
"Are you sure you want to delete ": "Weet u zeker dat u wilt verwijderen ", "Are you sure you want to delete ": "Weet u zeker dat u wilt verwijderen ",
"Are you sure you wish to cancel?": "", "Are you sure you wish to cancel?": "",
"Audio disabled due to suspended game": "",
"If this message appears repeatedly, please open an issue.": "" "If this message appears repeatedly, please open an issue.": ""
} }

View File

@@ -66,10 +66,11 @@
"Select Theme": "Tema atual", "Select Theme": "Tema atual",
"Shuffle": "Embaralhar temas", "Shuffle": "Embaralhar temas",
"Music": "Música", "Music": "Música",
"12 Hour Time": "",
"Network": "Rede", "Network": "Rede",
"Network Options": "Opções de rede", "Network Options": "Opções de rede",
"Ftp": "FTP", "Ftp": "Servidor FTP",
"Mtp": "MTP", "Mtp": "Escuta MTP",
"Nxlink": "Nxlink", "Nxlink": "Nxlink",
"Nxlink Connected": "Nxlink conectado", "Nxlink Connected": "Nxlink conectado",
"Nxlink Upload": "Envio Nxlink", "Nxlink Upload": "Envio Nxlink",
@@ -96,7 +97,7 @@
"Misc": "Diversos", "Misc": "Diversos",
"Misc Options": "Opções diversas", "Misc Options": "Opções diversas",
"Web": "Navegador de internet", "Web": "Navegador de internet",
"Install forwarders": "Instalar forwarders", "Install forwarders": "Instalar atalhos (forwarders)",
"Install location": "Local de instalação", "Install location": "Local de instalação",
"Show install warning": "Mostrar aviso de instalação", "Show install warning": "Mostrar aviso de instalação",
"Text scroll speed": "Rolagem do texto", "Text scroll speed": "Rolagem do texto",
@@ -133,8 +134,8 @@
"Homebrew": "Aplicativos", "Homebrew": "Aplicativos",
"Homebrew Options": "Opções do aplicativo", "Homebrew Options": "Opções do aplicativo",
"Hide Sphaira": "Esconder sphaira", "Hide Sphaira": "Esconder sphaira",
"Install Forwarder": "Instalar forwarder", "Install Forwarder": "Instalar atalho (forwarder)",
"WARNING: Installing forwarders will lead to a ban!": "AVISO: Instalar forwarders pode\nresultar em um banimento!", "WARNING: Installing forwarders will lead to a ban!": "AVISO: Instalar atalhos pode\nresultar em um banimento!",
"Installing Forwarder": "Instalando forwarder", "Installing Forwarder": "Instalando forwarder",
"Creating Program": "Criando Program", "Creating Program": "Criando Program",
"Creating Control": "Criando Control", "Creating Control": "Criando Control",
@@ -164,7 +165,7 @@
"More by Author": "Mais deste autor", "More by Author": "Mais deste autor",
"Leave Feedback": "Deixar um feedback", "Leave Feedback": "Deixar um feedback",
"Irs": "IRS", "Irs": "Sensor infravermelho",
"Ambient Noise Level: ": "Nível de ruído ambiente: ", "Ambient Noise Level: ": "Nível de ruído ambiente: ",
"Controller": "Controle", "Controller": "Controle",
"Pad ": "Pad ", "Pad ": "Pad ",
@@ -179,7 +180,7 @@
"270 (Upside down)": "270 (de cabeça para baixo)", "270 (Upside down)": "270 (de cabeça para baixo)",
"Colour": "Cor", "Colour": "Cor",
"Grey": "Cinza", "Grey": "Cinza",
"Ironbow": "Arco de ferro", "Ironbow": "Ferro",
"Green": "Verde", "Green": "Verde",
"Red": "Vermelho", "Red": "Vermelho",
"Blue": "Azul", "Blue": "Azul",
@@ -198,9 +199,9 @@
"80x60": "80×60", "80x60": "80×60",
"40x30": "40×30", "40x30": "40×30",
"20x15": "20×15", "20x15": "20×15",
"Trimming Format": "Formato de corte", "Trimming Format": "Formato do recorte",
"External Light Filter": "Filtro de luz externa", "External Light Filter": "Filtro de luz externa",
"Load Default": "Carregar padrão", "Load Default": "Restaurar padrão",
"Themezer": "Themezer", "Themezer": "Themezer",
"Themezer Options": "Opções do Themezer", "Themezer Options": "Opções do Themezer",
@@ -213,7 +214,7 @@
"GitHub": "GitHub", "GitHub": "GitHub",
"Downloading json": "Baixando JSON", "Downloading json": "Baixando JSON",
"Select asset to download for ": "Selecione o recurso para baixar em ", "Select asset to download for ": "Selecione o recurso para baixar de ",
"Installing ": "Instalando ", "Installing ": "Instalando ",
"Uninstalling ": "Desinstalando ", "Uninstalling ": "Desinstalando ",
@@ -251,5 +252,6 @@
"Completely remove ": "Remover completamente ", "Completely remove ": "Remover completamente ",
"Are you sure you want to delete ": "Você tem certeza que quer excluir ", "Are you sure you want to delete ": "Você tem certeza que quer excluir ",
"Are you sure you wish to cancel?": "Você tem certeza que quer cancelar?", "Are you sure you wish to cancel?": "Você tem certeza que quer cancelar?",
"Audio disabled due to suspended game": "Áudio desativado devido ao software suspenso",
"If this message appears repeatedly, please open an issue.": "Se esta mensagem aparecer repetidamente, abra um issue." "If this message appears repeatedly, please open an issue.": "Se esta mensagem aparecer repetidamente, abra um issue."
} }

View File

@@ -66,6 +66,7 @@
"Select Theme": "Выберите тему", "Select Theme": "Выберите тему",
"Shuffle": "Перетасовать", "Shuffle": "Перетасовать",
"Music": "Музыка", "Music": "Музыка",
"12 Hour Time": "",
"Network": "Сеть", "Network": "Сеть",
"Network Options": "Параметры сети", "Network Options": "Параметры сети",
"Ftp": "FTP", "Ftp": "FTP",
@@ -251,5 +252,6 @@
"Completely remove ": "", "Completely remove ": "",
"Are you sure you want to delete ": "Вы уверены, что хотите удалить ", "Are you sure you want to delete ": "Вы уверены, что хотите удалить ",
"Are you sure you wish to cancel?": "", "Are you sure you wish to cancel?": "",
"Audio disabled due to suspended game": "",
"If this message appears repeatedly, please open an issue.": "" "If this message appears repeatedly, please open an issue.": ""
} }

View File

@@ -66,6 +66,7 @@
"Select Theme": "Välj tema", "Select Theme": "Välj tema",
"Shuffle": "Blanda", "Shuffle": "Blanda",
"Music": "Musik", "Music": "Musik",
"12 Hour Time": "",
"Network": "Nätverk", "Network": "Nätverk",
"Network Options": "Nätverksalternativ", "Network Options": "Nätverksalternativ",
"Ftp": "FTP", "Ftp": "FTP",
@@ -251,5 +252,6 @@
"Completely remove ": "Ta bort helt ", "Completely remove ": "Ta bort helt ",
"Are you sure you want to delete ": "Är du säker på att du vill radera ", "Are you sure you want to delete ": "Är du säker på att du vill radera ",
"Are you sure you wish to cancel?": "Är du säker på att du vill avbryta?", "Are you sure you wish to cancel?": "Är du säker på att du vill avbryta?",
"Audio disabled due to suspended game": "Ljud är avstängt på grund av bakgrundsprogram",
"If this message appears repeatedly, please open an issue.": "Om detta meddelande visas upprepade gånger, vänligen öppna en felanmälan.", "If this message appears repeatedly, please open an issue.": "Om detta meddelande visas upprepade gånger, vänligen öppna en felanmälan.",
} }

View File

@@ -66,6 +66,7 @@
"Select Theme": "Chọn Theme", "Select Theme": "Chọn Theme",
"Shuffle": "Trộn", "Shuffle": "Trộn",
"Music": "Âm nhạc", "Music": "Âm nhạc",
"12 Hour Time": "",
"Network": "Mạng", "Network": "Mạng",
"Network Options": "Tuỳ chọn mạng", "Network Options": "Tuỳ chọn mạng",
"Ftp": "FTP", "Ftp": "FTP",
@@ -251,5 +252,6 @@
"Completely remove ": "Đã gỡ thành công ", "Completely remove ": "Đã gỡ thành công ",
"Are you sure you want to delete ": "Bạn có muốn xoá ", "Are you sure you want to delete ": "Bạn có muốn xoá ",
"Are you sure you wish to cancel?": "Bạn có chắn muốn huỷ không?", "Are you sure you wish to cancel?": "Bạn có chắn muốn huỷ không?",
"Audio disabled due to suspended game": "",
"If this message appears repeatedly, please open an issue.": "Nếu thấy tin nhắn này, hãy báo lỗi." "If this message appears repeatedly, please open an issue.": "Nếu thấy tin nhắn này, hãy báo lỗi."
} }

View File

@@ -30,9 +30,9 @@
"Sd": "SD卡", "Sd": "SD卡",
"Image System memory": "主机内存图像", "Image System memory": "主机内存图像",
"Image microSD card": "SD卡图像", "Image microSD card": "SD卡图像",
"Slow": "", "Slow": "",
"Normal": "", "Normal": "正常",
"Fast": "", "Fast": "",
"Yes": "是", "Yes": "是",
"No": "否", "No": "否",
"Enabled": "启用", "Enabled": "启用",
@@ -66,6 +66,7 @@
"Select Theme": "选择主题", "Select Theme": "选择主题",
"Shuffle": "随机播放", "Shuffle": "随机播放",
"Music": "音乐", "Music": "音乐",
"12 Hour Time": "",
"Network": "网络", "Network": "网络",
"Network Options": "网络选项", "Network Options": "网络选项",
"Ftp": "FTP", "Ftp": "FTP",
@@ -99,7 +100,7 @@
"Install forwarders": "允许安装前端应用", "Install forwarders": "允许安装前端应用",
"Install location": "安装位置", "Install location": "安装位置",
"Show install warning": "显示安装警告", "Show install warning": "显示安装警告",
"Text scroll speed": "", "Text scroll speed": "文本滚动速度",
"FileBrowser": "文件浏览", "FileBrowser": "文件浏览",
"%zd files": "%zd 个文件", "%zd files": "%zd 个文件",
@@ -251,5 +252,6 @@
"Completely remove ": "彻底删除 ", "Completely remove ": "彻底删除 ",
"Are you sure you want to delete ": "您确定要删除吗 ", "Are you sure you want to delete ": "您确定要删除吗 ",
"Are you sure you wish to cancel?": "您确定要取消吗?", "Are you sure you wish to cancel?": "您确定要取消吗?",
"If this message appears repeatedly, please open an issue.": "如果此消息反复出现,请提交一个 issue。" "Audio disabled due to suspended game": "由于游戏暂停,音频已禁用",
"If this message appears repeatedly, please open an issue.": "若此消息反复出现,请提交问题报告。"
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@@ -0,0 +1,15 @@
[meta]
name=Black alt-icons-SP
author=spkatsi
version=1.0.0
inherit=romfs:/themes/base_black_theme.ini
[theme]
icon_audio = romfs:/theme/icons-sp/icon_SP_audio.png
icon_video = romfs:/theme/icons-sp/icon_SP_video.png
icon_image = romfs:/theme/icons-sp/icon_SP_image.png
icon_file = romfs:/theme/icons-sp/icon_SP_file.png
icon_folder = romfs:/theme/icons-sp/icon_SP_folder.png
icon_zip = romfs:/theme/icons-sp/icon_SP_zip.png
icon_nro = romfs:/theme/icons-sp/icon_SP_nro.png

View File

@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.13) cmake_minimum_required(VERSION 3.13)
set(sphaira_VERSION 0.6.2) set(sphaira_VERSION 0.6.3)
project(sphaira project(sphaira
VERSION ${sphaira_VERSION} VERSION ${sphaira_VERSION}
@@ -330,7 +330,7 @@ nx_generate_nacp(
OUTPUT sphaira.nacp OUTPUT sphaira.nacp
NAME ${CMAKE_PROJECT_NAME} NAME ${CMAKE_PROJECT_NAME}
AUTHOR TotalJustice AUTHOR TotalJustice
VERSION ${CMAKE_PROJECT_VERSION} VERSION ${sphaira_VERSION}
) )
# create nro # create nro

View File

@@ -79,6 +79,7 @@ public:
static auto GetInstallPrompt() -> bool; static auto GetInstallPrompt() -> bool;
static auto GetThemeShuffleEnable() -> bool; static auto GetThemeShuffleEnable() -> bool;
static auto GetThemeMusicEnable() -> bool; static auto GetThemeMusicEnable() -> bool;
static auto Get12HourTimeEnable() -> bool;
static auto GetLanguage() -> long; static auto GetLanguage() -> long;
static auto GetTextScrollSpeed() -> long; static auto GetTextScrollSpeed() -> long;
@@ -92,6 +93,7 @@ public:
static void SetInstallPrompt(bool enable); static void SetInstallPrompt(bool enable);
static void SetThemeShuffleEnable(bool enable); static void SetThemeShuffleEnable(bool enable);
static void SetThemeMusicEnable(bool enable); static void SetThemeMusicEnable(bool enable);
static void Set12HourTimeEnable(bool enable);
static void SetLanguage(long index); static void SetLanguage(long index);
static void SetTextScrollSpeed(long index); static void SetTextScrollSpeed(long index);
@@ -177,6 +179,7 @@ public:
option::OptionLong m_install_prompt{INI_SECTION, "install_prompt", true}; option::OptionLong m_install_prompt{INI_SECTION, "install_prompt", true};
option::OptionBool m_theme_shuffle{INI_SECTION, "theme_shuffle", false}; option::OptionBool m_theme_shuffle{INI_SECTION, "theme_shuffle", false};
option::OptionBool m_theme_music{INI_SECTION, "theme_music", true}; option::OptionBool m_theme_music{INI_SECTION, "theme_music", true};
option::OptionBool m_12hour_time{INI_SECTION, "12hour_time", false};
option::OptionLong m_language{INI_SECTION, "language", 0}; // auto option::OptionLong m_language{INI_SECTION, "language", 0}; // auto
// todo: move this into it's own menu // todo: move this into it's own menu
option::OptionLong m_text_scroll_speed{"accessibility", "text_scroll_speed", 1}; // normal option::OptionLong m_text_scroll_speed{"accessibility", "text_scroll_speed", 1}; // normal

View File

@@ -87,6 +87,9 @@ auto ToFile(const Api& e) -> ApiResult;
auto ToMemoryAsync(const Api& e) -> bool; auto ToMemoryAsync(const Api& e) -> bool;
auto ToFileAsync(const Api& e) -> bool; auto ToFileAsync(const Api& e) -> bool;
// uses curl to convert string to their %XX
auto EscapeString(const std::string& str) -> std::string;
struct Api { struct Api {
Api() = default; Api() = default;

View File

@@ -604,6 +604,10 @@ auto App::GetTextScrollSpeed() -> long {
return g_app->m_text_scroll_speed.Get(); return g_app->m_text_scroll_speed.Get();
} }
auto App::Get12HourTimeEnable() -> bool {
return g_app->m_12hour_time.Get();
}
void App::SetNxlinkEnable(bool enable) { void App::SetNxlinkEnable(bool enable) {
if (App::GetNxlinkEnable() != enable) { if (App::GetNxlinkEnable() != enable) {
g_app->m_nxlink_enabled.Set(enable); g_app->m_nxlink_enabled.Set(enable);
@@ -746,6 +750,10 @@ void App::SetThemeMusicEnable(bool enable) {
PlaySoundEffect(SoundEffect::SoundEffect_Music); PlaySoundEffect(SoundEffect::SoundEffect_Music);
} }
void App::Set12HourTimeEnable(bool enable) {
g_app->m_12hour_time.Set(enable);
}
void App::SetMtpEnable(bool enable) { void App::SetMtpEnable(bool enable) {
if (App::GetMtpEnable() != enable) { if (App::GetMtpEnable() != enable) {
g_app->m_mtp_enabled.Set(enable); g_app->m_mtp_enabled.Set(enable);

View File

@@ -757,4 +757,14 @@ auto ToFileAsync(const Api& e) -> bool {
return g_thread_queue.Add(e); return g_thread_queue.Add(e);
} }
auto EscapeString(const std::string& str) -> std::string {
std::string result;
const auto s = curl_escape(str.data(), str.length());
if (s) {
result = s;
curl_free(s);
}
return result;
}
} // namespace sphaira::curl } // namespace sphaira::curl

View File

@@ -655,7 +655,7 @@ void patch_npdm(std::vector<u8>& npdm, const NpdmPatch& patch) {
splGetConfig(SplConfigItem_ExosphereVersion, &ver); splGetConfig(SplConfigItem_ExosphereVersion, &ver);
ver >>= 40; ver >>= 40;
if (ver >= MAKEHOSVERSION(1,7,1)) { if (ver >= MAKEHOSVERSION(1,8,0)) {
npdm_patch_kc(npdm, meta.aci0_offset + aci0.kac_offset, aci0.kac_size, 16, BIT(19)); npdm_patch_kc(npdm, meta.aci0_offset + aci0.kac_offset, aci0.kac_size, 16, BIT(19));
npdm_patch_kc(npdm, meta.acid_offset + acid.kac_offset, acid.kac_size, 16, BIT(19)); npdm_patch_kc(npdm, meta.acid_offset + acid.kac_offset, acid.kac_size, 16, BIT(19));
} }

View File

@@ -793,7 +793,7 @@ auto Menu::Scan(const fs::FsPath& new_path, bool is_walk_up) -> Result {
} }
FsDir d; FsDir d;
R_TRY(m_fs->OpenDirectory(new_path, FsDirOpenMode_ReadDirs | FsDirOpenMode_ReadFiles | FsDirOpenMode_NoFileSize, &d)); R_TRY(m_fs->OpenDirectory(new_path, FsDirOpenMode_ReadDirs | FsDirOpenMode_ReadFiles, &d));
ON_SCOPE_EXIT(fsDirClose(&d)); ON_SCOPE_EXIT(fsDirClose(&d));
s64 count; s64 count;

View File

@@ -253,6 +253,10 @@ MainMenu::MainMenu() {
options->Add(std::make_shared<SidebarEntryBool>("Music"_i18n, App::GetThemeMusicEnable(), [this](bool& enable){ options->Add(std::make_shared<SidebarEntryBool>("Music"_i18n, App::GetThemeMusicEnable(), [this](bool& enable){
App::SetThemeMusicEnable(enable); App::SetThemeMusicEnable(enable);
}, "Enabled"_i18n, "Disabled"_i18n)); }, "Enabled"_i18n, "Disabled"_i18n));
options->Add(std::make_shared<SidebarEntryBool>("12 Hour Time"_i18n, App::Get12HourTimeEnable(), [this](bool& enable){
App::Set12HourTimeEnable(enable);
}, "Enabled"_i18n, "Disabled"_i18n));
})); }));
options->Add(std::make_shared<SidebarEntryCallback>("Network"_i18n, [this](){ options->Add(std::make_shared<SidebarEntryCallback>("Network"_i18n, [this](){

View File

@@ -38,22 +38,28 @@ void MenuBase::Draw(NVGcontext* vg, Theme* theme) {
nvgFontSize(vg, font_size); nvgFontSize(vg, font_size);
#define draw(...) \ #define draw(colour, ...) \
gfx::textBounds(vg, 0, 0, bounds, __VA_ARGS__); \ gfx::textBounds(vg, 0, 0, bounds, __VA_ARGS__); \
start_x -= bounds[2] - bounds[0]; \ start_x -= bounds[2] - bounds[0]; \
gfx::drawTextArgs(vg, start_x, start_y, font_size, NVG_ALIGN_LEFT | NVG_ALIGN_BOTTOM, theme->GetColour(ThemeEntryID_TEXT), __VA_ARGS__); \ gfx::drawTextArgs(vg, start_x, start_y, font_size, NVG_ALIGN_LEFT | NVG_ALIGN_BOTTOM, theme->GetColour(colour), __VA_ARGS__); \
start_x -= spacing; start_x -= spacing;
// draw("version %s", APP_VERSION); // draw("version %s", APP_VERSION);
draw("%u\uFE6A", m_battery_percetange); draw(ThemeEntryID_TEXT, "%u\uFE6A", m_battery_percetange);
draw("%02u:%02u:%02u", m_tm.tm_hour, m_tm.tm_min, m_tm.tm_sec);
if (m_ip) { if (App::Get12HourTimeEnable()) {
draw("%u.%u.%u.%u", m_ip&0xFF, (m_ip>>8)&0xFF, (m_ip>>16)&0xFF, (m_ip>>24)&0xFF); draw(ThemeEntryID_TEXT, "%02u:%02u:%02u %s", (m_tm.tm_hour == 0 || m_tm.tm_hour == 12) ? 12 : m_tm.tm_hour % 12, m_tm.tm_min, m_tm.tm_sec, (m_tm.tm_hour < 12) ? "AM" : "PM");
} else { } else {
draw(("No Internet"_i18n).c_str()); draw(ThemeEntryID_TEXT, "%02u:%02u:%02u", m_tm.tm_hour, m_tm.tm_min, m_tm.tm_sec);
}
if (m_ip) {
draw(ThemeEntryID_TEXT, "%u.%u.%u.%u", m_ip&0xFF, (m_ip>>8)&0xFF, (m_ip>>16)&0xFF, (m_ip>>24)&0xFF);
} else {
draw(ThemeEntryID_TEXT, ("No Internet"_i18n).c_str());
} }
if (!App::IsApplication()) { if (!App::IsApplication()) {
draw(("[Applet Mode]"_i18n).c_str()); draw(ThemeEntryID_ERROR, ("[Applet Mode]"_i18n).c_str());
} }
#undef draw #undef draw

View File

@@ -68,7 +68,7 @@ auto apiBuildUrlListInternal(const Config& e, bool is_pack) -> std::string {
if (is_pack) { if (is_pack) {
cmd = "packList"; cmd = "packList";
// fields += ",themes{id,creator{display_name},details{name,description},last_updated,dl_count,like_count,target,preview{original,thumb}}"; // fields += ",themes{id,creator{display_name},details{name,description},last_updated,dl_count,like_count,target,preview{original,thumb}}";
fields += ",themes{id, preview{thumb}}"; fields += ",themes{id,preview{thumb}}";
} else { } else {
cmd = "themeList"; cmd = "themeList";
p0 += ",$target:String"; p0 += ",$target:String";
@@ -92,7 +92,9 @@ auto apiBuildUrlListInternal(const Config& e, bool is_pack) -> std::string {
json += ",\"query\":\"" + e.query + "\""; json += ",\"query\":\"" + e.query + "\"";
} }
return api+"("+p0+"){"+cmd+"("+p1+")"+fields+"}}&variables={"+json+"}"; json = curl::EscapeString('{'+json+'}');
return api+"("+p0+"){"+cmd+"("+p1+")"+fields+"}}&variables="+json;
} }
auto apiBuildUrlDownloadInternal(const std::string& id, bool is_pack) -> std::string { auto apiBuildUrlDownloadInternal(const std::string& id, bool is_pack) -> std::string {