Merge branch 'master' into feature/fileSizes+OversizeWarning

This commit is contained in:
Unifox
2025-02-12 13:17:38 -07:00
committed by GitHub
29 changed files with 3078 additions and 430 deletions
+93 -18
View File
@@ -1,33 +1,108 @@
## Contributing
# Contributing to BSManager
[code-of-conduct]: CODE_OF_CONDUCT.md
[fork]: https://github.com/Zagrios/bs-manager/fork
[pr]: https://github.com/Zagrios/bs-manager/compare
[style]: https://github.com/basarat/typescript-book/blob/master/docs/styleguide/styleguide.md
Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great.
Hello! Were delighted that youre interested in contributing to **BSManager**. Your help is essential to maintaining and improving this project.
Please note that this project is released with a [Contributor Code of Conduct][code-of-conduct]. By participating in this project you agree to abide by its terms.
> [!NOTE]
> This project is released with a [Contributor Code of Conduct][code-of-conduct]. By participating, you agree to abide by its terms.
## Issues and PRs
---
If you have suggestions for how this project could be improved, or want to report a bug, open an issue! We'd love all and any contributions. If you have questions, too, we'd love to hear them.
## Opening Issues
We'd also love PRs. If you're thinking of a large PR, we advise opening up an issue first to talk about it, though! Look at the links below if you're not sure how to open a PR.
- **Reporting Bugs**
If you find a bug or any unexpected behavior, feel free to open an issue. Be sure to include steps to reproduce it, relevant logs, versions, and any other pertinent details.
- **Suggesting Enhancements**
Have an idea for improving BSManager? We welcome all suggestions—open an issue to discuss your proposal.
## Submitting a pull request
> [!TIP]
> Before opening a new issue, please check if theres already an existing one for the same topic to avoid duplicates.
1. [Fork][fork] and clone the repository.
1. Install the correct NodeJS version (highly recommend installing [Volta](https://volta.sh/) for that).
1. Configure and install the dependencies: `npm install`.
1. Create a new branch following naming convention: `git checkout -b (feature|bugfix|hotfix|chore)/(short-description)(/issue-id)`.
1. Make your change, test, and make sure BSManager work fine.
1. Push to your fork and [submit a pull request][pr].
1. Pat your self on the back and wait for your pull request to be reviewed and merged.
---
Here are a few things you can do that will increase the likelihood of your pull request being accepted:
## Submitting Pull Requests
- Follow the [style guide][style] which is using standard.
- Keep your changes as focused as possible. If there are multiple changes you would like to make that are not dependent upon each other, consider submitting them as separate pull requests.
### Before You Begin
Work in Progress pull requests are also welcome to get feedback early on, or if there is something blocked you.
1. **[Fork the repository][fork]** and **clone** your fork locally.
2. **Install the required Node.js version** (we recommend using [Volta](https://volta.sh/) to manage Node versions).
3. **Install project dependencies**:
```bash
npm install
```
### Create a Dedicated Branch
Use a clear naming convention for your branch:
```bash
git checkout -b (feature|bugfix|hotfix|chore)/(short-description)(/issue-id)
```
> [!NOTE]
> Exemple : `git checkout -b feature/update-docs/42`
### Develop and Test
> [!TIP]
> - Follow the [style guide][style] which is using standard.
> - Keep your changes as focused as possible. If there are multiple changes you would like to make that are not dependent upon each other, consider submitting them as separate pull requests.
- Make the necessary changes on your new branch.
- Test your changes manually to ensure everything is working correctly.
- Verify that your updates do not introduce regressions or break existing functionality.
### Open a Pull Request
1. **Push** your branch to your fork.
2. Visit the main **BSManager** repository and click “Compare & pull request” or use [this link][pr].
3. Provide a **clear description** of your changes (the context, what problem it solves, etc.).
4. **Submit** your pull request. A maintainer will review it and may ask for adjustments or clarifications.
---
## Useful Commands
### Development
```bash
npm start
```
> Runs the application in development mode.
### Packaging
```bash
npm run package
```
> Packages the application using Electron Builder.
```bash
npm run build && electron-builder --config electron-builder.config.js --publish never --x64 --linux <deb/rpm/pacman>
```
> Package for Linux distros (deb, rpm, pacman)
```bash
npm run publish
```
> Publishes the application (primarily for Windows).
```bash
npm run publish:flatpak
```
> Build a Flatpak package
## Need Help?
If you have any questions or need further assistance, feel free to **open an issue** or reach out via our [discord](https://discord.gg/uSqbHVpKdV). We appreciate any and all contributions you make to BSManager!
Thank you for your interest in making BSManager better!
+2
View File
@@ -827,6 +827,8 @@
"BSVersion": "1.40.2",
"BSManifest": "5496832903170665287",
"OculusBinaryId": "8626990240734012",
"ReleaseURL": "https://steamcommunity.com/games/620980/announcements/detail/510697606000673692",
"ReleaseImg": "https://clan.fastly.steamstatic.com/images/32055887/04ad25256ffc2686f4ea19830e70df6b2752f728.png",
"ReleaseDate": "1738951837",
"year": "2025"
}
+17 -8
View File
@@ -131,6 +131,10 @@
"loading-mods": "Lade Mods...",
"no-internet": "Kein Internet",
"mods-not-available": "Für diese Version von Beat Saber sind noch keine Mods verfügbar.",
"status": {
"no-wineprefix": "Konnte den BSManager WINEPREFIX-Pfad nicht finden. Bitte starte Beat Saber zuerst in BSManager.",
"unknown": "Ein unbekannter Fehler ist aufgetreten ¯\\_(ツ)_/¯"
},
"buttons": {
"more-infos": "Mehr Infos",
"install-or-update": "Installieren oder aktualisieren",
@@ -247,6 +251,8 @@
"zh-TW": "正體中文",
"ja-JP": "日本語",
"ko-KR": "한국어",
"uk-UA": "Українська",
"tl-PH": "Filipino",
"translated": {
"en-EN": "Englisch, Vereinigtes Königreich",
"en-US": "Englisch, USA",
@@ -259,7 +265,9 @@
"zh-CN": "Vereinfachtes Chinesisch",
"zh-TW": "Traditionelles Chinesisch",
"ja-JP": "Japanisch",
"ko-KR": "Koreanisch"
"ko-KR": "Koreanisch",
"uk-UA": "Ukrainisch",
"tl-PH": "Filipino"
}
}
},
@@ -589,7 +597,8 @@
"msg": {
"success": "Alle Mods wurden entfernt.",
"errors": {
"no-mods": "Keine Mods sind in dieser Version installiert 😑"
"no-mods": "Keine Mods sind in dieser Version installiert 😑",
"no-wineprefix": "Konnte den BSManager WINEPREFIX-Pfad nicht finden. Bitte starte Beat Saber zuerst in BSManager."
}
}
},
@@ -947,7 +956,7 @@
"maps": {
"map-filter-panel": {
"duration": "Länge",
"nps" : "Noten pro Sekunde",
"nps": "Noten pro Sekunde",
"njs": "Notensprunggeschwindigkeit",
"tags": "Stichwörter",
"specificities": "Allgemein",
@@ -1028,11 +1037,11 @@
"by": "Von {songAutor}",
"mapped-by": "Gemapped von",
"delete": "Löschen",
"preview" : "Kartenvorschau",
"bsr-code" : "BSR Code",
"download" : "Karte herunterladen",
"downloading" :"Karte wird heruntergeladen",
"cancel-download" : "Download abbrechen",
"preview": "Kartenvorschau",
"bsr-code": "BSR Code",
"download": "Karte herunterladen",
"downloading": "Karte wird heruntergeladen",
"cancel-download": "Download abbrechen",
"hightlight-difficulty": "Schwierigkeit hervorheben"
}
},
+16 -56
View File
@@ -131,6 +131,10 @@
"loading-mods": "Loading mods...",
"no-internet": "No internet",
"mods-not-available": "No mods are available yet for this version of Beat Saber",
"status": {
"no-wineprefix": "Could not find BSManager WINEPREFIX path. Please launch Beat Saber in BSManager first.",
"unknown": "An unknown error occurred ¯\\_(ツ)_/¯"
},
"buttons": {
"more-infos": "More info",
"install-or-update": "Install or update",
@@ -247,6 +251,8 @@
"zh-TW": "正體中文",
"ja-JP": "日本語",
"ko-KR": "한국어",
"uk-UA": "Українська",
"tl-PH": "Filipino",
"translated": {
"en-EN": "English, United Kingdom",
"en-US": "English, USA",
@@ -259,7 +265,9 @@
"zh-CN": "Chinese (Simplified)",
"zh-TW": "Chinese (Traditional)",
"ja-JP": "Japanese",
"ko-KR": "Korean"
"ko-KR": "Korean",
"uk-UA": "Ukrainian",
"tl-PH": "Filipino"
}
}
},
@@ -589,7 +597,8 @@
"msg": {
"success": "All mods have been uninstalled.",
"errors": {
"no-mods": "No mods are installed in this version 😑"
"no-mods": "No mods are installed in this version 😑",
"no-wineprefix": "Could not find BSManager WINEPREFIX path. Please launch Beat Saber in BSManager first."
}
}
},
@@ -826,7 +835,7 @@
"desc-plural": "{nb} duplicate maps have been found. Are you sure you want to delete them?"
}
},
"link-contents":{
"link-contents": {
"title": "Link {contentType}",
"p-1": "Linking {contentType} allows sharing {contentType} between all versions with this feature enabled. Once linked, this version will benefit from shared {contentType}.",
"p-2": "In order to enjoy the linking feature, all your {itemsHtml} will be moved to the {sharedHtml} folder. After that, a symbolic link pointing to the shared {contentType} folder will replace your original {contentType} folder.",
@@ -835,7 +844,7 @@
"i-need-help": "I need help",
"valid-btn": "Link {contentType}"
},
"unlink-contents":{
"unlink-contents": {
"title": "Unlink {contentType}",
"p-1": "Be careful, unlinking {contentType} will disable the use of shared {contentType} for this version, until it is reenabled.",
"p-2": "In order to unlink your maps, the symbolic link pointing to the {sharedHtml} will be removed. After that, all maps in the shared folder will be copied to the {itemsHtml} folder of your Beat Saber version.",
@@ -1271,57 +1280,8 @@
}
},
"dateformat": {
"dayNames": [
"Sun",
"Mon",
"Tue",
"Wed",
"Thu",
"Fri",
"Sat",
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
],
"monthNames": [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"June",
"Jul",
"Aug",
"Sept",
"Oct",
"Nov",
"Dec",
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
],
"timeNames": [
"a",
"p",
"am",
"pm",
"A",
"P",
"AM",
"PM"
]
"dayNames": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
"monthNames": ["Jan", "Feb", "Mar", "Apr", "May", "June", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
"timeNames": ["a", "p", "am", "pm", "A", "P", "AM", "PM"]
}
}
+14 -54
View File
@@ -131,6 +131,10 @@
"loading-mods": "Cargando mods...",
"no-internet": "Sin internet",
"mods-not-available": "Aún no hay mods disponibles para esta versión de Beat Saber",
"status": {
"no-wineprefix": "No se pudo encontrar la ruta del WINEPREFIX de BSManager. Por favor, inicia Beat Saber en BSManager primero.",
"unknown": "Se ha producido un error desconocido ¯\\_(ツ)_/¯"
},
"buttons": {
"more-infos": "Más información",
"install-or-update": "Instalar o actualizar",
@@ -247,6 +251,8 @@
"zh-TW": "正體中文",
"ja-JP": "日本語",
"ko-KR": "한국어",
"uk-UA": "Українська",
"tl-PH": "Filipino",
"translated": {
"en-EN": "Inglés, Reino Unido",
"en-US": "Inglés, Estados Unidos",
@@ -259,7 +265,9 @@
"zh-CN": "Chino simplificado",
"zh-TW": "Chino tradicional",
"ja-JP": "Japonés",
"ko-KR": "Coreano"
"ko-KR": "Coreano",
"uk-UA": "Ucraniano",
"tl-PH": "Filipino"
}
}
},
@@ -589,7 +597,8 @@
"msg": {
"success": "Todos los mods han sido desinstalados.",
"errors": {
"no-mods": "No hay mods instalados en esta versión 😑"
"no-mods": "No hay mods instalados en esta versión 😑",
"no-wineprefix": "No se pudo encontrar la ruta del WINEPREFIX de BSManager. Por favor, inicia Beat Saber en BSManager primero."
}
}
},
@@ -1271,57 +1280,8 @@
}
},
"dateformat": {
"dayNames": [
"Dom",
"Lun",
"Mar",
"Mié",
"Jue",
"Vie",
"Sáb",
"Domingo",
"Lunes",
"Martes",
"Miércoles",
"Jueves",
"Viernes",
"Sábado"
],
"monthNames": [
"Ene",
"Feb",
"Mar",
"Abr",
"May",
"Jun",
"Jul",
"Ago",
"Sep",
"Oct",
"Nov",
"Dic",
"Enero",
"Febrero",
"Marzo",
"Abril",
"Mayo",
"Junio",
"Julio",
"Agosto",
"Septiembre",
"Octubre",
"Noviembre",
"Diciembre"
],
"timeNames": [
"a",
"p",
"am",
"pm",
"A",
"P",
"AM",
"PM"
]
"dayNames": ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb", "Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"],
"monthNames": ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"],
"timeNames": ["a", "p", "am", "pm", "A", "P", "AM", "PM"]
}
}
+25 -18
View File
@@ -131,6 +131,10 @@
"loading-mods": "Chargement des mods...",
"no-internet": "Pas d'accès Internet",
"mods-not-available": "Aucun mod n'est encore disponible pour cette version de Beat Saber",
"status": {
"no-wineprefix": "Impossible de trouver le chemin WINEPREFIX de BSManager. Veuillez d'abord lancer Beat Saber dans BSManager.",
"unknown": "Une erreur inconnue s'est produite ¯\\_(ツ)_/¯"
},
"buttons": {
"more-infos": "Plus d'infos",
"install-or-update": "Installer ou mettre à jour",
@@ -247,6 +251,8 @@
"zh-TW": "正體中文",
"ja-JP": "日本語",
"ko-KR": "한국어",
"uk-UA": "Українська",
"tl-PH": "Filipino",
"translated": {
"en-EN": "Anglais, Royaume-Uni",
"en-US": "Anglais, États-Unis",
@@ -259,7 +265,9 @@
"zh-CN": "Chinois simplifié",
"zh-TW": "Chinois traditionnel",
"ja-JP": "Japonais",
"ko-KR": "Coréen"
"ko-KR": "Coréen",
"uk-UA": "Ukrainien",
"tl-PH": "Philippin"
}
}
},
@@ -589,7 +597,8 @@
"msg": {
"success": "Tous les mods ont été désinstallés.",
"errors": {
"no-mods": "Aucun mod n'est installé dans dans cette version 😑"
"no-mods": "Aucun mod n'est installé dans dans cette version 😑",
"no-wineprefix": "Impossible de trouver le chemin WINEPREFIX de BSManager. Veuillez d'abord lancer Beat Saber dans BSManager."
}
}
},
@@ -665,7 +674,6 @@
"title": "L'ajout du dossier partagé a échoué",
"msg": "Vous ne pouvez pas ajouter \"{folder}\" aux dossiers partagés."
}
},
"create-launch-shortcut": {
"success": {
@@ -948,7 +956,7 @@
"maps": {
"map-filter-panel": {
"duration": "Durée",
"nps" : "Notes Par Seconde",
"nps": "Notes Par Seconde",
"njs": "Vitesse de saut des notes",
"tags": "tags",
"specificities": "général",
@@ -1029,12 +1037,12 @@
"by": "Par {songAutor}",
"mapped-by": "mappée par",
"delete": "Supprimer",
"preview" : "Aperçu de la carte",
"bsr-code" : "Code BSR",
"download" : "Télécharger la carte",
"downloading" :"Téléchargement de la carte",
"cancel-download" : "Annuler le téléchargement",
"hightlight-difficulty" : "Surligner la difficulté"
"preview": "Aperçu de la carte",
"bsr-code": "Code BSR",
"download": "Télécharger la carte",
"downloading": "Téléchargement de la carte",
"cancel-download": "Annuler le téléchargement",
"hightlight-difficulty": "Surligner la difficulté"
}
},
"models": {
@@ -1211,15 +1219,15 @@
"no-playlists-found": "Aucune playlists trouvées",
"error-occur-while-loading-playlists": "Une erreur est survenue lors du chargement des playlists",
"error-occur-while-loading-playlist": "Une erreur est survenue lors du chargement de la playlist",
"loading-maps":"Chargement des maps...",
"no-maps-found-for-playlist":"Aucune map trouvée pour cette playlist",
"playlist-contain-no-maps":"La playlist ne contient aucune map",
"no-map-installed-for-playlist":"Aucune map installée pour cette playlist",
"playlist-is-waiting-to-download":"La playlist est en attente de téléchargment",
"loading-maps": "Chargement des maps...",
"no-maps-found-for-playlist": "Aucune map trouvée pour cette playlist",
"playlist-contain-no-maps": "La playlist ne contient aucune map",
"no-map-installed-for-playlist": "Aucune map installée pour cette playlist",
"playlist-is-waiting-to-download": "La playlist est en attente de téléchargment",
"download-maps": "Télécharger les maps",
"download-missing-maps": "Télécharger les maps manquantes",
"playlist-is-downloading":"La playlist est en cours de téléchargement",
"some-playlist-maps-are-missing":"Certaines maps de cette playlist sont manquantes",
"playlist-is-downloading": "La playlist est en cours de téléchargement",
"some-playlist-maps-are-missing": "Certaines maps de cette playlist sont manquantes",
"create-a-playlist": "Créer une playlist",
"synchronize-playlists": "Synchroniser les playlists",
"export-playlists": "Exporter les playlists",
@@ -1270,7 +1278,6 @@
"CANNOT_PARSE_PLAYLIST": "Les playlists ne sont pas lisibles",
"unknown": "Aucune playlist n'a pu être importée"
}
},
"dateformat": {
"dayNames": ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"],
+71 -111
View File
@@ -131,6 +131,10 @@
"loading-mods": "Caricamento delle mod in corso...",
"no-internet": "Internet non disponibile",
"mods-not-available": "Nessuna mod è ancora disponibile per questa versione di Beat Saber",
"status": {
"no-wineprefix": "Impossibile trovare il percorso del WINEPREFIX di BSManager. Per favore avvia prima Beat Saber in BSManager.",
"unknown": "È accaduto un errore sconosciuto ¯\\_(ツ)_/¯"
},
"buttons": {
"more-infos": "Più info",
"install-or-update": "Installa o aggiorna",
@@ -247,6 +251,8 @@
"zh-TW": "正體中文",
"ja-JP": "日本語",
"ko-KR": "한국어",
"uk-UA": "Українська",
"tl-PH": "Filipino",
"translated": {
"en-EN": "Inglese, Regno Unito",
"en-US": "Inglese, Stati Uniti d'America",
@@ -259,7 +265,9 @@
"zh-CN": "Cinese (Semplificato)",
"zh-TW": "Cinese (Tradizionale)",
"ja-JP": "Giapponese",
"ko-KR": "Coreano"
"ko-KR": "Coreano",
"uk-UA": "Ucraino",
"tl-PH": "Filippino"
}
}
},
@@ -589,7 +597,8 @@
"msg": {
"success": "Tutte le mod sono state installate.",
"errors": {
"no-mods": "Non ci sono mod installate su questa versione 😑"
"no-mods": "Non ci sono mod installate su questa versione 😑",
"no-wineprefix": "Impossibile trovare il percorso del WINEPREFIX di BSManager. Per favore avvia prima Beat Saber in BSManager."
}
}
},
@@ -826,7 +835,7 @@
"desc-plural": "Sono state trovate {nb} mappe duplicate. Sei sicuro di volerle eliminare?"
}
},
"link-contents":{
"link-contents": {
"title": "Collega {contentType}",
"p-1": "Collegare {contentType} consente di condividere {contentType} tra tutte le versioni con questa funzione attiva. Quando collegate, questa versione avrà il beneficio della condivisione di {contentType}.",
"p-2": "Per usufruire della funzione di collegamento, tutti i tuoi {itemsHtml} saranno spostati nella cartella {sharedHtml}. Successivamente, un collegamento simbolico che punta alla cartella condivisa {contentType} sostituirà la tua cartella originale {contentType}.",
@@ -835,7 +844,7 @@
"i-need-help": "Mi serve aiuto",
"valid-btn": "Collega {contentType}"
},
"unlink-contents":{
"unlink-contents": {
"title": "Scollega {contentType}",
"p-1": "Attenzione, scollegare {contentType} disabiliterà l'uso di {contentType} condivisi per questa versione, fino a quando non verrà riabilitato.",
"p-2": "Per scollegare le tue mappe, il collegamento simbolico che punta alla {sharedHtml} verrà rimosso. Dopodiché, tutte le mappe nella cartella condivisa verranno copiate nella cartella {itemsHtml} della tua versione di Beat Saber.",
@@ -884,65 +893,65 @@
"connect-to-meta": {
"title": "Connettiti a Meta",
"body": {
"token-needed": "Il tuo token di connessione Meta è necessario per scaricare Beat Saber.",
"need-cookie-enabled": "Accedendo a Meta, si aprirà una finestra di login e potrai quindi avviare il processo di login. Assicurati di accettare i cookie, altrimenti potremmo non essere in grado di recuperare il tuo token per avviare il download.",
"enter-token-manually": "Inserisci manualmente il mio token di login",
"enter-token-manually-tooltip": "Questo ti permetterà di inserire il tuo token di accesso senza passare per il login di Meta."
"token-needed": "Il tuo token di connessione Meta è necessario per scaricare Beat Saber.",
"need-cookie-enabled": "Accedendo a Meta, si aprirà una finestra di login e potrai quindi avviare il processo di login. Assicurati di accettare i cookie, altrimenti potremmo non essere in grado di recuperare il tuo token per avviare il download.",
"enter-token-manually": "Inserisci manualmente il mio token di login",
"enter-token-manually-tooltip": "Questo ti permetterà di inserire il tuo token di accesso senza passare per il login di Meta."
},
"stay": "Ricordami",
"connect-to-meta": "Connettiti a Meta"
},
"stay": "Ricordami",
"connect-to-meta": "Connettiti a Meta"
},
"enable-oculus-sideloaded-apps": {
"title": "Abilita Sideloading",
"info-1": "Per avviare Beat Saber, è necessario abilitare la possibilità di eseguire app sideloaded. BSManager richiederà i diritti di amministratore per abilitare automaticamente questa funzione.",
"info-2": "La funzione di sideloading consente di avviare giochi situati al di fuori della cartella della libreria Oculus.",
"info-3": "Dopo che il sideloading è stato attivato, la funzione rimarrà attiva e non ti verrà più chiesto di abilitarla.",
"i-want-to-do-it-myself": "Voglio farlo da solo",
"understood": "Ho capito"
},
"enter-meta-token": {
"title": "Token Oculus",
"body": {
"info-enter-token": "Per scaricare Beat Saber, è richiesto il tuo token di accesso Oculus.",
"how-obtain-token": "Come posso ottenere il mio token Oculus?",
"oculus-token": "Token Oculus",
"token-is-invalid": "Il token non è valido.",
"save-my-token": "Salva il mio token",
"have-token-saved": "Ho già un token salvato",
"save-token-info": "Questo salverà il tuo token per un uso più facile. Dovrai creare una password per criptare il tuo token a scopo di archiviazione. Se dimentichi la tua password, dovrai semplicemente fornire di nuovo il tuo token.",
"password": "Password",
"password-too-short": "Password troppo corta",
"info-enter-password": "Per scaricare Beat Saber, è richiesto il tuo token di accesso Oculus. Inserisci la password usata per salvare il tuo token Oculus.",
"info-disabled-btn-password": "Il token decriptato con la password fornita non è valido. Assicurati che la password sia la stessa usata per salvare il token.",
"enter-oculus-token": "Inserisci un token Oculus"
"title": "Abilita Sideloading",
"info-1": "Per avviare Beat Saber, è necessario abilitare la possibilità di eseguire app sideloaded. BSManager richiederà i diritti di amministratore per abilitare automaticamente questa funzione.",
"info-2": "La funzione di sideloading consente di avviare giochi situati al di fuori della cartella della libreria Oculus.",
"info-3": "Dopo che il sideloading è stato attivato, la funzione rimarrà attiva e non ti verrà più chiesto di abilitarla.",
"i-want-to-do-it-myself": "Voglio farlo da solo",
"understood": "Ho capito"
},
"valid-btn": "Valida"
},
"launch-as-admin": {
"title": "Permessi di Amministratore",
"body": {
"info": "Steam è stato rilevato come in esecuzione con permessi di amministratore. Per comunicare con Steam, Beat Saber deve essere avviato anche come amministratore. Altrimenti, Beat Saber potrebbe riscontrare problemi e chiudersi dopo l'avvio.",
"info-2": "Avviare Beat Saber in modalità amministratore darà anche diritti di amministratore alle mod installate. Pertanto, è consigliato riavviare Steam senza permessi di amministratore.",
"info-3": "Si sconsiglia di dare diritti di amministratore a Steam, poiché questo influisce sui giochi e le mod installate, presentando un rischio per la sicurezza."
"enter-meta-token": {
"title": "Token Oculus",
"body": {
"info-enter-token": "Per scaricare Beat Saber, è richiesto il tuo token di accesso Oculus.",
"how-obtain-token": "Come posso ottenere il mio token Oculus?",
"oculus-token": "Token Oculus",
"token-is-invalid": "Il token non è valido.",
"save-my-token": "Salva il mio token",
"have-token-saved": "Ho già un token salvato",
"save-token-info": "Questo salverà il tuo token per un uso più facile. Dovrai creare una password per criptare il tuo token a scopo di archiviazione. Se dimentichi la tua password, dovrai semplicemente fornire di nuovo il tuo token.",
"password": "Password",
"password-too-short": "Password troppo corta",
"info-enter-password": "Per scaricare Beat Saber, è richiesto il tuo token di accesso Oculus. Inserisci la password usata per salvare il tuo token Oculus.",
"info-disabled-btn-password": "Il token decriptato con la password fornita non è valido. Assicurati che la password sia la stessa usata per salvare il token.",
"enter-oculus-token": "Inserisci un token Oculus"
},
"valid-btn": "Valida"
},
"launch-as-admin": "Avvia come Amministratore",
"not-remind-me": "Non ricordarmelo"
},
"ask-install-path": {
"title": "Cartella di installazione",
"choose-folder-description": "Scegli la cartella che conterrà tutti i contenuti scaricati da BSManager. (versioni, mod, mappe, playlist, ecc.)",
"default": "Predefinito",
"default-tooltip": "Predefinito nella tua cartella home"
},
"choose-proton-folder": {
"title": "Cartella di Proton",
"proton-folder-description": "Su Linux, BSManager richiede Proton per funzionare. Scegli la cartella di installazione di Proton per continuare.",
"proton-folder-placeholder": "Cartella di installazione di Proton",
"where-is-proton-installed": "Dove è installato Proton?"
},
"bs-version-outdated": {
"body": "La versione {outdatedVersion} è obsoleta, e alcune mod o funzioni potrebbero non funzionare più come previsto. Per favore scarica l'ultima versione raccomandata ({recommendedVersion}) di Beat Saber per godere delle ultime funzioni e bugfix."
}
"launch-as-admin": {
"title": "Permessi di Amministratore",
"body": {
"info": "Steam è stato rilevato come in esecuzione con permessi di amministratore. Per comunicare con Steam, Beat Saber deve essere avviato anche come amministratore. Altrimenti, Beat Saber potrebbe riscontrare problemi e chiudersi dopo l'avvio.",
"info-2": "Avviare Beat Saber in modalità amministratore darà anche diritti di amministratore alle mod installate. Pertanto, è consigliato riavviare Steam senza permessi di amministratore.",
"info-3": "Si sconsiglia di dare diritti di amministratore a Steam, poiché questo influisce sui giochi e le mod installate, presentando un rischio per la sicurezza."
},
"launch-as-admin": "Avvia come Amministratore",
"not-remind-me": "Non ricordarmelo"
},
"ask-install-path": {
"title": "Cartella di installazione",
"choose-folder-description": "Scegli la cartella che conterrà tutti i contenuti scaricati da BSManager. (versioni, mod, mappe, playlist, ecc.)",
"default": "Predefinito",
"default-tooltip": "Predefinito nella tua cartella home"
},
"choose-proton-folder": {
"title": "Cartella di Proton",
"proton-folder-description": "Su Linux, BSManager richiede Proton per funzionare. Scegli la cartella di installazione di Proton per continuare.",
"proton-folder-placeholder": "Cartella di installazione di Proton",
"where-is-proton-installed": "Dove è installato Proton?"
},
"bs-version-outdated": {
"body": "La versione {outdatedVersion} è obsoleta, e alcune mod o funzioni potrebbero non funzionare più come previsto. Per favore scarica l'ultima versione raccomandata ({recommendedVersion}) di Beat Saber per godere delle ultime funzioni e bugfix."
}
},
"maps": {
"map-filter-panel": {
@@ -1272,57 +1281,8 @@
}
},
"dateformat": {
"dayNames": [
"Dom",
"Lun",
"Mar",
"Mer",
"Gio",
"Ven",
"Sab",
"Domenica",
"Lunedì",
"Martedì",
"Mercoledì",
"Giovedì",
"Venerdì",
"Sabato"
],
"monthNames": [
"Gen",
"Feb",
"Mar",
"Apr",
"Mag",
"Giu",
"Lug",
"Ago",
"Set",
"Ott",
"Nov",
"Dic",
"Gennaio",
"Febbraio",
"Marzo",
"Aprile",
"Maggio",
"Giugno",
"Luglio",
"Augosto",
"Settembre",
"Ottobre",
"Novembre",
"Dicembre"
],
"timeNames": [
"a",
"p",
"am",
"pm",
"A",
"P",
"AM",
"PM"
]
"dayNames": ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato"],
"monthNames": ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic", "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Augosto", "Settembre", "Ottobre", "Novembre", "Dicembre"],
"timeNames": ["a", "p", "am", "pm", "A", "P", "AM", "PM"]
}
}
+17 -8
View File
@@ -131,6 +131,10 @@
"loading-mods": "Modを読み込み中...",
"no-internet": "インターネット接続がありません!",
"mods-not-available": "このバージョンで使用できるMODはまだありません。",
"status": {
"no-wineprefix": "BSManager WINEPREFIXのパスが見つかりませんでした。まずBSManagerでBeat Saberを起動してください。",
"unknown": "不明なエラーが発生しました (´・ω・`)"
},
"buttons": {
"more-infos": "詳細情報",
"install-or-update": "インストールとアップデート",
@@ -247,6 +251,8 @@
"zh-TW": "正體中文",
"ja-JP": "日本語",
"ko-KR": "한국어",
"uk-UA": "Українська",
"tl-PH": "Filipino",
"translated": {
"en-EN": "イギリス英語",
"en-US": "アメリカ英語",
@@ -259,7 +265,9 @@
"zh-CN": "簡体字中国",
"zh-TW": "繁体字中国",
"ja-JP": "日本語",
"ko-KR": "韓国語"
"ko-KR": "韓国語",
"uk-UA": "ウクライナ語",
"tl-PH": "フィリピン人"
}
}
},
@@ -589,7 +597,8 @@
"msg": {
"success": "すべてのModをアンインストールしました。",
"errors": {
"no-mods": "このバージョンのModはインストールされていません 😑"
"no-mods": "このバージョンのModはインストールされていません 😑",
"no-wineprefix": "BSManager WINEPREFIXのパスが見つかりませんでした。まずBSManagerでBeat Saberを起動してください。"
}
}
},
@@ -947,7 +956,7 @@
"maps": {
"map-filter-panel": {
"duration": "尺",
"nps" : "秒間ノート数",
"nps": "秒間ノート数",
"njs": "ノートジャンプ速度",
"tags": "タグ",
"specificities": "一般",
@@ -1028,11 +1037,11 @@
"by": "By {songAutor}",
"mapped-by": "作成者 ",
"delete": "削除",
"preview" : "マッププレビュー",
"bsr-code" : "BSRコード",
"download" : "マップをダウンロード",
"downloading" :"マップをダウンロード中",
"cancel-download" : "ダウンロードをキャンセル",
"preview": "マッププレビュー",
"bsr-code": "BSRコード",
"download": "マップをダウンロード",
"downloading": "マップをダウンロード中",
"cancel-download": "ダウンロードをキャンセル",
"hightlight-difficulty": "難易度をハイライト"
}
},
+14 -55
View File
@@ -131,6 +131,10 @@
"loading-mods": "모드를 불러오는 중...",
"no-internet": "인터넷 연결이 없습니다!",
"mods-not-available": "이 버전에서 사용할 수 있는 모드가 아직 없습니다.",
"status": {
"no-wineprefix": "BSManager WINEPREFIX 경로를 찾을 수 없습니다. 먼저 BSManager에서 Beat Saber를 실행하세요.",
"unknown": "알 수 없는 오류가 발생했습니다 (´・ω・`)"
},
"buttons": {
"more-infos": "자세히 보기",
"install-or-update": "설치 및 업데이트",
@@ -163,7 +167,6 @@
"dont-remind-me": "다시는 알리지 않기",
"update": "업데이트"
}
},
"drop-zone": {
"text": "모드를 가져오기",
@@ -248,6 +251,8 @@
"zh-TW": "正體中文",
"ja-JP": "日本語",
"ko-KR": "한국어",
"uk-UA": "Українська",
"tl-PH": "Filipino",
"translated": {
"en-EN": "영어(영국)",
"en-US": "영어(미국)",
@@ -260,7 +265,9 @@
"zh-CN": "중국어 (간체)",
"zh-TW": "중국어 (번체)",
"ja-JP": "일본어",
"ko-KR": "한국어"
"ko-KR": "한국어",
"uk-UA": "우크라이나어",
"tl-PH": "필리핀인"
}
}
},
@@ -590,7 +597,8 @@
"msg": {
"success": "모든 Mod가 제거되었습니다.",
"errors": {
"no-mods": "이 버전에 설치된 Mod가 없습니다 😑"
"no-mods": "이 버전에 설치된 Mod가 없습니다 😑",
"no-wineprefix": "BSManager WINEPREFIX 경로를 찾을 수 없습니다. 먼저 BSManager에서 Beat Saber를 실행하세요."
}
}
},
@@ -1266,57 +1274,8 @@
}
},
"dateformat": {
"dayNames": [
"일",
"월",
"화",
"수",
"목",
"금",
"토",
"일요일",
"월요일",
"화요일",
"수요일",
"목요일",
"금요일",
"토요일"
],
"monthNames": [
"1월",
"2월",
"3월",
"4월",
"5월",
"6월",
"7월",
"8월",
"9월",
"10월",
"11월",
"12월",
"1월",
"2월",
"3월",
"4월",
"5월",
"6월",
"7월",
"8월",
"9월",
"10월",
"11월",
"12월"
],
"timeNames": [
"오전",
"오후",
"오전",
"오후",
"오전",
"오후",
"오전",
"오후"
]
"dayNames": ["일", "월", "화", "수", "목", "금", "토", "일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"],
"monthNames": ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월", "1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
"timeNames": ["오전", "오후", "오전", "오후", "오전", "오후", "오전", "오후"]
}
}
+16 -56
View File
@@ -131,6 +131,10 @@
"loading-mods": "Carregando mods...",
"no-internet": "Sem internet",
"mods-not-available": "Nenhum mod está disponível para essa versão de Beat Saber ainda",
"status": {
"no-wineprefix": "Não foi possível encontrar o caminho WINEPREFIX do BSManager. Por favor, inicie o Beat Saber no BSManager primeiro.",
"unknown": "Um erro desconhecido aconteceu ¯\\_(ツ)_/¯"
},
"buttons": {
"more-infos": "Mais informações",
"install-or-update": "Instalar ou Atualizar",
@@ -247,6 +251,8 @@
"zh-TW": "正體中文",
"ja-JP": "日本語",
"ko-KR": "한국어",
"uk-UA": "Українська",
"tl-PH": "Filipino",
"translated": {
"en-EN": "Inglês, Reino Unido",
"en-US": "Inglês, Estados Unidos",
@@ -259,7 +265,9 @@
"zh-CN": "Chinês (Simplificado)",
"zh-TW": "Chinês (Tradicional)",
"ja-JP": "Japonês",
"ko-KR": "Coreano"
"ko-KR": "Coreano",
"uk-UA": "Ucraniano",
"tl-PH": "Filipino"
}
}
},
@@ -589,7 +597,8 @@
"msg": {
"success": "Todos os mods foram desinstalados.",
"errors": {
"no-mods": "Nenhum mod está instalado nessa versão 😑"
"no-mods": "Nenhum mod está instalado nessa versão 😑",
"no-wineprefix": "Não foi possível encontrar o caminho WINEPREFIX do BSManager. Por favor, inicie o Beat Saber no BSManager primeiro."
}
}
},
@@ -826,7 +835,7 @@
"desc-plural": "{nb} mapas duplicados foram encontrados. Tem certeza de que deseja excluí-los?"
}
},
"link-contents":{
"link-contents": {
"title": "Vincular {contentType}",
"p-1": "Vincular {contentType} permite compartilhar {contentType} entre todas as suas versões que possuam essa função habilitada. Uma vez vinculados, essa versão irá se beneficiar dos {contentType} compartilhados.",
"p-2": "Para que possa aproveitar a função de vinculação, todos os seus {itemsHtml} serão movidos para a pasta {sharedHtml}. Depois disso, um link simbólico apontando para a pasta compartilhada {contentType} irá substituir sua pasta original {contentType}.",
@@ -835,7 +844,7 @@
"i-need-help": "Eu preciso de ajuda",
"valid-btn": "Link {contentType}"
},
"unlink-contents":{
"unlink-contents": {
"title": "Desvincular {contentType}",
"p-1": "Cuidado! Desvincular {contentType} irá desabilitar o compartilhamento de {contentType} para essa versão, até que seja habilitado novamente.",
"p-2": "Para que possa desvincular seus mapas, o link simbólico criado anteriomente para {sharedHtml} será removido. Depois disso, todos os mapas na pasta compartilhada serão copiados para a pasta {itemsHtml} da sua versão do Beat Saber.",
@@ -1271,57 +1280,8 @@
}
},
"dateformat": {
"dayNames": [
"Dom",
"Seg",
"Ter",
"Qua",
"Qui",
"Sex",
"Sab",
"Domingo",
"Segunda",
"Terça",
"Quarta",
"Quinta",
"Sexta",
"Sábado"
],
"monthNames": [
"Jan",
"Fev",
"Mar",
"Abr",
"Maio",
"Jun",
"Jul",
"Ago",
"Set",
"Out",
"Nov",
"Dez",
"Janeiro",
"Fevereiro",
"Março",
"Abril",
"Maio",
"Junho",
"Julho",
"Agosto",
"Setembro",
"Outubro",
"Novembro",
"Dezembro"
],
"timeNames": [
"a",
"p",
"am",
"pm",
"A",
"P",
"AM",
"PM"
]
"dayNames": ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab", "Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"],
"monthNames": ["Jan", "Fev", "Mar", "Abr", "Maio", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez", "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"],
"timeNames": ["a", "p", "am", "pm", "A", "P", "AM", "PM"]
}
}
+17 -8
View File
@@ -131,6 +131,10 @@
"loading-mods": "Загрузка модов...",
"no-internet": "Нет интернета",
"mods-not-available": "Не найдены моды для этой версии Beat Saber",
"status": {
"no-wineprefix": "Не удалось найти путь WINEPREFIX BSManager. Пожалуйста, сначала запустите Beat Saber в BSManager.",
"unknown": "Неизвестная ошибка ¯\\_(ツ)_/¯"
},
"buttons": {
"more-infos": "Подробнее",
"install-or-update": "Установить или обновить",
@@ -247,6 +251,8 @@
"zh-TW": "正體中文",
"ja-JP": "日本語",
"ko-KR": "한국어",
"uk-UA": "Українська",
"tl-PH": "Filipino",
"translated": {
"en-EN": "Английский, Великобритания",
"en-US": "Английский, США",
@@ -259,7 +265,9 @@
"zh-CN": "Китайский (упрощенный)",
"zh-TW": "Китайский (традиционный)",
"ja-JP": "Японский",
"ko-KR": "Корейский"
"ko-KR": "Корейский",
"uk-UA": "Украинский",
"tl-PH": "Филиппинец"
}
}
},
@@ -589,7 +597,8 @@
"msg": {
"success": "Все моды были удалены.",
"errors": {
"no-mods": "Для этой версии не было установлено модов 😑"
"no-mods": "Для этой версии не было установлено модов 😑",
"no-wineprefix": "Не удалось найти путь WINEPREFIX BSManager. Пожалуйста, сначала запустите Beat Saber в BSManager."
}
}
},
@@ -946,7 +955,7 @@
"maps": {
"map-filter-panel": {
"duration": "Длительность",
"nps" : "Нот в Секунду",
"nps": "Нот в Секунду",
"njs": "Скорость прыжка нот",
"tags": "тэги",
"specificities": "основное",
@@ -1027,11 +1036,11 @@
"by": "От {songAutor}",
"mapped-by": "автор карты ",
"delete": "Удалить",
"preview" : "Предпросмотр карты",
"bsr-code" : "Код BSR",
"download" : "Скачать карту",
"downloading" :"Загрузка карты",
"cancel-download" : "Отменить загрузку",
"preview": "Предпросмотр карты",
"bsr-code": "Код BSR",
"download": "Скачать карту",
"downloading": "Загрузка карты",
"cancel-download": "Отменить загрузку",
"hightlight-difficulty": "Выделить сложность"
}
},
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+11 -2
View File
@@ -131,6 +131,10 @@
"loading-mods": "Mod 載入中...",
"no-internet": "無網路",
"mods-not-available": "該版本 BeatSaber 暫無可用 Mod",
"status": {
"no-wineprefix": "找不到 BSManager WINEPREFIX 路徑。請先在 BSManager 中啟動 Beat Saber。",
"unknown": "發生了一個錯誤 ¯\\_(ツ)_/¯"
},
"buttons": {
"more-infos": "更多資訊",
"install-or-update": "安裝或更新",
@@ -247,6 +251,8 @@
"zh-TW": "正體中文",
"ja-JP": "日本語",
"ko-KR": "한국어",
"uk-UA": "Українська",
"tl-PH": "Filipino",
"translated": {
"en-EN": "英式英語",
"en-US": "美式英語",
@@ -259,7 +265,9 @@
"zh-CN": "簡體中文",
"zh-TW": "正體中文",
"ja-JP": "日語",
"ko-KR": "韓語"
"ko-KR": "韓語",
"uk-UA": "烏克蘭",
"tl-PH": "菲律賓人"
}
}
},
@@ -589,7 +597,8 @@
"msg": {
"success": "所有 Mod 已被移除。",
"errors": {
"no-mods": "該版本中沒有安裝 Mod 😑"
"no-mods": "該版本中沒有安裝 Mod 😑",
"no-wineprefix": "找不到 BSManager WINEPREFIX 路徑。請先在 BSManager 中啟動 Beat Saber。"
}
}
},
+19 -9
View File
@@ -21,7 +21,7 @@
"copied": "已复制!",
"confirm": "确认",
"choose-folder": "选择文件夹",
"Unknown": "发生了一个错误 ¯\\_(ツ)_/¯",
"unknown": "发生了一个错误 ¯\\_(ツ)_/¯",
"warning": "警告",
"continue": "继续",
"shared": "共享",
@@ -131,6 +131,10 @@
"loading-mods": "Mod 加载中...",
"no-internet": "无网络",
"mods-not-available": "该版本 BeatSaber 暂无可用 Mod",
"status": {
"no-wineprefix": "找不到 BSManager WINEPREFIX 路径。请先在 BSManager 中启动 Beat Saber。",
"unknown": "发生了一个错误 ¯\\_(ツ)_/¯"
},
"buttons": {
"more-infos": "更多信息",
"install-or-update": "安装或更新",
@@ -241,11 +245,14 @@
"es-ES": "Español",
"it-IT": "Italiano",
"de-DE": "Deutsch",
"pt-BR": "Português (Brasil)",
"ru-RU": "Русский",
"zh-CN": "简体中文",
"zh-TW": "正體中文",
"ja-JP": "日本語",
"ko-KR": "한국어",
"uk-UA": "Українська",
"tl-PH": "Filipino",
"translated": {
"en-EN": "英式英语",
"en-US": "美式英语",
@@ -258,7 +265,9 @@
"zh-CN": "简体中文",
"zh-TW": "正体中文",
"ja-JP": "日语",
"ko-KR": "韩语"
"ko-KR": "韩语",
"uk-UA": "烏克蘭",
"tl-PH": "菲律宾人"
}
}
},
@@ -588,7 +597,8 @@
"msg": {
"success": "所有 Mod 已被卸载。",
"errors": {
"no-mods": "该版本中没有安装 Mod 😑"
"no-mods": "该版本中没有安装 Mod 😑",
"no-wineprefix": "找不到 BSManager WINEPREFIX 路径。请先在 BSManager 中启动 Beat Saber。"
}
}
},
@@ -946,7 +956,7 @@
"maps": {
"map-filter-panel": {
"duration": "时长",
"nps" : "每秒音符数",
"nps": "每秒音符数",
"njs": "音符跳跃速度",
"tags": "标签",
"specificities": "general",
@@ -1027,11 +1037,11 @@
"by": "By {songAutor}",
"mapped-by": "mapped by",
"delete": "删除",
"preview" : "预览地图",
"bsr-code" : "BSR代码",
"download" : "下载地图",
"downloading" :"正在下载地图",
"cancel-download" : "取消下载",
"preview": "预览地图",
"bsr-code": "BSR代码",
"download": "下载地图",
"downloading": "正在下载地图",
"cancel-download": "取消下载",
"hightlight-difficulty": "突出显示难度"
}
},
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "bs-manager",
"version": "1.5.0-alpha.9",
"version": "1.5.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "bs-manager",
"version": "1.5.0-alpha.9",
"version": "1.5.0",
"hasInstallScript": true,
"license": "GPL-3.0-only",
"dependencies": {
+1
View File
@@ -33,3 +33,4 @@ ipc.on("bs-mods.uninstall-all-mods", (args, reply) => {
const modsManager = BsModsManagerService.getInstance();
reply(modsManager.uninstallAllMods(args));
});
+5
View File
@@ -9,3 +9,8 @@ ipc.on("linux.verify-proton-folder", (_, reply) => {
reply(of(linuxService.verifyProtonPath()));
});
ipc.on("linux.get-wine-prefix-path", (_, reply) => {
const linuxService = LinuxService.getInstance();
reply(of(linuxService.getWinePrefixPath()));
});
@@ -106,10 +106,10 @@ export class BSLocalVersionService {
const versionFilePath = path.join(bsPath, 'Beat Saber_Data', 'globalgamemanagers');
const folderVersion = await this.getVersionFromGlobalGameManagerFile(versionFilePath);
folderVersion.path = bsPath;
if(!folderVersion){ return null; }
folderVersion.path = bsPath;
if(options?.steam || options?.oculus){
return {...folderVersion, ...options};
}
@@ -158,11 +158,10 @@ export class BsModsManagerService {
winePath = `"${winePathResult}"`;
const winePrefix = this.linuxService.getWinePrefixPath();
if (winePrefix) {
env.WINEPREFIX = winePrefix;
} else {
log.warn("Could not find BSManager WINEPREFIX path, using system's default value instead");
if (!winePrefix) {
throw new CustomError("Could not find BSManager WINEPREFIX path", "no-wineprefix");
}
env.WINEPREFIX = winePrefix;
}
return new Promise<boolean>(resolve => {
@@ -12,7 +12,7 @@ import { FranceIcon } from "./flags/france-icon.component";
import { SpainIcon } from "./flags/spain-icon.component";
import { ItalyIcon } from "./flags/italy-icon.component";
import { UsaIcon } from "./flags/usa-icon.component";
import { UkIcon } from "./flags/uk-icon.component";
import { UkraineIcon } from "./flags/ukraine-icon.component";
import { TaskIcon } from "./icons/task-icon.component";
import { CopyIcon } from "./icons/copy-icon.component";
import { SteamIcon } from "./icons/steam-icon.component";
@@ -70,10 +70,12 @@ import { AddFileIcon } from "./icons/add-file-icon.component";
import { CancelIcon } from "./icons/cancel-icon.component";
import { WarningIcon } from "./icons/warning-icon.component";
import { ArrowUpwardIcon } from "./icons/arrow-upward-icon.component";
import { UkIcon } from "./flags/uk-icon.component";
import { PhilippineIcon } from "./flags/philippine-icon.component";
export type BsmIconType = SongDetailDiffCharactertistic | ("settings" | "trash" | "favorite" | "folder" | "bsNote" | "check" | "three-dots" | "twitch" | "eye" | "play" | "checkCircleIcon" | "discord" | "info" | "eye-cross" | "terminal" | "desktop" | "oculus" | "add" | "cross" | "task" | "github" | "close" | "thumbUpFill" | "timerFill" | "pause" | "twitter" | "sync" | "chevron-top" | "copy" | "steam" | "edit" | "export" | "patreon" | "search" | "bsMapDifficulty" | "link" | "unlink" | "download" | "filter" | "mee6" | "volume-up" | "volume-off" | "volume-down" | "shortcut" | "backup-restore" | "web-site" | "clean" | "browse" | "add-file" | "arrow-upward" | "cancel" | "warning" | "fr-FR-flag" | "es-ES-flag" | "it-IT-flag" | "en-US-flag" | "en-EN-flag" | "de-DE-flag" | "ru-RU-flag" | "zh-CN-flag" | "zh-TW-flag" | "ja-JP-flag" | "ko-KR-flag" | "pt-BR-flag" | "uk-UA-flag" | "tl-PH-flag" | "null" );
export type BsmIconType = SongDetailDiffCharactertistic | ("settings" | "trash" | "favorite" | "folder" | "bsNote" | "check" | "three-dots" | "twitch" | "eye" | "play" | "checkCircleIcon" | "discord" | "info" | "eye-cross" | "terminal" | "desktop" | "oculus" | "add" | "cross" | "task" | "github" | "close" | "thumbUpFill" | "timerFill" | "pause" | "twitter" | "sync" | "chevron-top" | "copy" | "steam" | "edit" | "export" | "patreon" | "search" | "bsMapDifficulty" | "link" | "unlink" | "download" | "filter" | "mee6" | "volume-up" | "volume-off" | "volume-down" | "shortcut" | "backup-restore" | "web-site" | "clean" | "browse" | "add-file" | "arrow-upward" | "cancel" | "warning" | "fr-FR-flag" | "es-ES-flag" | "it-IT-flag" | "en-US-flag" | "en-EN-flag" | "de-DE-flag" | "ru-RU-flag" | "zh-CN-flag" | "zh-TW-flag" | "ja-JP-flag" | "ko-KR-flag" | "pt-BR-flag" | "null" );
export const BsmIcon = memo(({ className, icon, style }: { className?: string; icon: BsmIconType; style?: CSSProperties }) => {
// TODO : Very ugly very messy, need to find a better way to do this
@@ -146,6 +148,12 @@ export const BsmIcon = memo(({ className, icon, style }: { className?: string; i
if (icon === "pt-BR-flag"){
return <BrazilIcon className={className} style={style} />;
}
if (icon === "uk-UA-flag"){
return <UkraineIcon className={className} style={style} />;
}
if (icon === "tl-PH-flag") {
return <PhilippineIcon className={className} style={style} />;
}
if (icon === "task") {
return <TaskIcon className={className} style={style} />;
@@ -0,0 +1,14 @@
import { createSvgIcon } from "../svg-icon.type";
export const PhilippineIcon = createSvgIcon((props, ref) => {
return (
<svg ref={ref} {...props} width="71" height="48" viewBox="0 0 71 48" xmlns="http://www.w3.org/2000/svg">
<g fill="none">
<path d="M63.89.12H6.61A6.36 6.36 0 0 0 .25 6.48v17.64h70V6.48A6.36 6.36 0 0 0 63.89.12" fill="#4758A9"/>
<path d="M.25 40.75a6.36 6.36 0 0 0 6.36 6.36h57.27a6.36 6.36 0 0 0 6.36-6.36V24.12h-70z" fill="#ED5565"/>
<path d="M2.15 1.95a6.34 6.34 0 0 0-1.9 4.54v34.27a6.34 6.34 0 0 0 1.95 4.57l23.05-21.21z" fill="#FFF"/>
<circle fill="#F6D660" cx="10.25" cy="23.62" r="4"/>
</g>
</svg>
);
});
@@ -0,0 +1,14 @@
import { createSvgIcon } from "../svg-icon.type";
// Uploaded from: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools
export const UkraineIcon = createSvgIcon((props, ref) => {
return (
<svg ref={ref} {...props} width="71" height="48" viewBox="0 0 71 48" xmlns="http://www.w3.org/2000/svg">
<g fill="none">
<path d="M64.27 47.7H7a6.36 6.36 0 0 1-6.36-6.36V23.7h70v17.64a6.36 6.36 0 0 1-6.37 6.36" fill="#F6D660"/>
<path d="M.63 7.06A6.36 6.36 0 0 1 7 .7h57.27a6.36 6.36 0 0 1 6.36 6.36V23.7h-70z" fill="#4A89DC"/>
</g>
</svg>
);
})
@@ -22,6 +22,7 @@ import { UninstallAllModsModal } from "renderer/components/modal/modal-types/uni
import Tippy from "@tippyjs/react";
import { ProgressBarService } from "renderer/services/progress-bar.service";
import { Dropzone } from "renderer/components/shared/dropzone.component";
import { ModsGridStatus } from "shared/models/mods/mod-ipc.model";
export type ModsSlideRef = {
loadMods: () => Promise<void>;
@@ -42,6 +43,7 @@ export const ModsSlide = forwardRef<ModsSlideRef, Props>(({ version, isActive, o
const os = useService(OsDiagnosticService);
const progress = useService(ProgressBarService);
const [gridStatus, setGridStatus] = useState(ModsGridStatus.OK);
const [modsAvailable, setModsAvailable] = useState(null as Map<BbmCategories, BbmFullMod[]>);
const [modsInstalled, setModsInstalled] = useState(null as Map<BbmCategories, BbmFullMod[]>);
const [modsSelected, setModsSelected] = useState([] as BbmFullMod[]);
@@ -185,8 +187,23 @@ export const ModsSlide = forwardRef<ModsSlideRef, Props>(({ version, isActive, o
setModsSelected(() => []);
}
const ensureDisclaimerAccepted = async (): Promise<boolean> => {
if (configService.get<boolean>(ACCEPTED_DISCLAIMER_KEY)) {
return true;
}
const res = await modals.openModal(ModsDisclaimerModal);
const haveAccepted = res.exitCode === ModalExitCode.COMPLETED;
if (haveAccepted) {
configService.set(ACCEPTED_DISCLAIMER_KEY, true);
}
return haveAccepted;
}
const loadMods = async (): Promise<void> => {
if (os.isOffline) {
if (os.isOffline || gridStatus !== ModsGridStatus.OK) {
return Promise.resolve();
}
@@ -209,24 +226,14 @@ export const ModsSlide = forwardRef<ModsSlideRef, Props>(({ version, isActive, o
return noop();
}
(async () => {
if (configService.get<boolean>(ACCEPTED_DISCLAIMER_KEY)) {
return true;
}
const res = await modals.openModal(ModsDisclaimerModal);
const haveAccepted = res.exitCode === ModalExitCode.COMPLETED;
if (haveAccepted) {
configService.set(ACCEPTED_DISCLAIMER_KEY, true);
}
return haveAccepted;
})().then(canLoad => {
ensureDisclaimerAccepted().then(async canLoad => {
if (!canLoad) {
return onDisclamerDecline?.();
}
const status = await modsManager.getModsGridStatus();
setGridStatus(() => status);
loadMods();
});
@@ -234,6 +241,7 @@ export const ModsSlide = forwardRef<ModsSlideRef, Props>(({ version, isActive, o
setMoreInfoMod(null);
setModsAvailable(null);
setModsInstalled(null);
setGridStatus(ModsGridStatus.OK);
};
}, [isActive, isOnline, version]);
@@ -262,6 +270,9 @@ export const ModsSlide = forwardRef<ModsSlideRef, Props>(({ version, isActive, o
if (!isOnline) {
return <ModStatus text="pages.version-viewer.mods.no-internet" image={BeatConflictImg} />;
}
if (gridStatus !== ModsGridStatus.OK) {
return <ModStatus text={`pages.version-viewer.mods.status.${gridStatus}`} image={BeatConflictImg} />;
}
if (!modsAvailable) {
return <ModStatus text="pages.version-viewer.mods.loading-mods" image={BeatWaitingImg} spin />;
}
@@ -337,7 +348,7 @@ function ModStatus({ text, image, spin = false, children }: { text: string; imag
return (
<div className="w-full h-full flex flex-col items-center justify-center text-gray-800 dark:text-gray-200">
<img className={`w-32 h-32 ${spin ? "spin-loading" : ""}`} src={image} alt=" " />
<span className="text-xl mt-3 italic">{t(text)}</span>
<span className="text-xl mt-3 italic text-center">{t(text)}</span>
{children}
</div>
);
@@ -25,7 +25,7 @@ export const defaultConfiguration: {
"second-color": "#ff4444",
theme: "os",
language: window.navigator.language.length <= 2 ? `${window.navigator.language}-${window.navigator.language.toLocaleUpperCase()}` : window.navigator.language,
supported_languages: ["en-US", "en-EN", "fr-FR", "es-ES", "it-IT", "de-DE", "ru-RU", "zh-CN", "zh-TW", "ja-JP", "ko-KR", "pt-BR"],
supported_languages: ["en-US", "en-EN", "fr-FR", "es-ES", "it-IT", "de-DE", "ru-RU", "zh-CN", "zh-TW", "ja-JP", "ko-KR", "pt-BR", "uk-UA", "tl-PH"],
default_mods: ["SongCore", "WhyIsThereNoLeaderboard", "BeatSaverDownloader", "BeatSaverVoting", "PlaylistManager"],
"default-shared-folders": [
window.electron.path.join("Beat Saber_Data", "CustomLevels"),
@@ -8,6 +8,8 @@ import { Progression } from "main/helpers/fs.helpers";
import { ProgressionInterface } from "shared/models/progress-bar";
import { BbmFullMod, BbmModVersion } from "shared/models/mods/mod.interface";
import { logRenderError } from "renderer";
import { ModsGridStatus } from "shared/models/mods/mod-ipc.model";
import { LinuxService } from "./linux.service";
export class BsModsManagerService {
private static instance: BsModsManagerService;
@@ -17,6 +19,7 @@ export class BsModsManagerService {
private readonly ipcService: IpcService;
private readonly progressBar: ProgressBarService;
private readonly notifications: NotificationService;
private readonly linux: LinuxService
public readonly isUninstalling$: BehaviorSubject<boolean> = new BehaviorSubject(false);
@@ -31,6 +34,7 @@ export class BsModsManagerService {
this.ipcService = IpcService.getInstance();
this.progressBar = ProgressBarService.getInstance();
this.notifications = NotificationService.getInstance();
this.linux = LinuxService.getInstance();
}
public getAvailableMods(version: BSVersion): Observable<BbmFullMod[]> {
@@ -204,4 +208,17 @@ export class BsModsManagerService {
return { available: (available ?? []), installed: (installedMods ?? []) };
}
public async getModsGridStatus(): Promise<ModsGridStatus> {
if(window.electron.platform === "linux"){
const winePrefix = await lastValueFrom(this.linux.getWinePrefixPath());
if(!winePrefix){
logRenderError("Could not find BSManager WINEPREFIX path");
return ModsGridStatus.NO_WINEPREFIX;
}
}
return ModsGridStatus.OK;
}
}
+26
View File
@@ -0,0 +1,26 @@
import { Observable } from "rxjs";
import { IpcService } from "./ipc.service";
export class LinuxService {
private static instance: LinuxService;
public static getInstance(): LinuxService {
if (!LinuxService.instance) {
LinuxService.instance = new LinuxService();
}
return LinuxService.instance;
}
private readonly ipc: IpcService;
private constructor() {
this.ipc = IpcService.getInstance();
}
public getWinePrefixPath(): Observable<string> {
return this.ipc.sendV2("linux.get-wine-prefix-path");
}
}
+1
View File
@@ -159,6 +159,7 @@ export interface IpcChannelMapping {
/* ** linux.ipcs ** */
"linux.verify-proton-folder": { request: void, response: boolean };
"linux.get-wine-prefix-path": { request: void, response: string };
/* ** oculus.ipcs ** */
"is-oculus-sideloaded-apps-enabled": { request: void, response: boolean };
+7
View File
@@ -12,3 +12,10 @@ export interface UninstallModsResult {
nbModsToUninstall: number;
nbUninstalledMods: number;
}
export enum ModsGridStatus {
OK = "",
NO_WINEPREFIX = "no-wineprefix",
UNKNOWN = "unknown"
}