From 88f7b9004d55afce0b4a5777c458da617c3ea0d5 Mon Sep 17 00:00:00 2001 From: cryptofyre Date: Mon, 29 Aug 2022 23:49:33 -0500 Subject: [PATCH] Mergy Mergy (#1399) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added scripts to produce separated macOS builds for different architectures * yeet cache * bye cache * remove local playback ( it's a mess) * ok * some raop fix * local store * Update pt_BR.json * chore: Updated Lockfile * fix versioning for main * Revert "fix versioning for main" This reverts commit 905514225c75a43ce2622a36dc33795fcf9ad75c. * chore: Prettified Code [ci skip] * temp * verbose tmp * chore: Prettified Code [ci skip] * ci trigger * Fixed remove primary artist stuff for lastfm * chore: Prettified Code [ci skip] * Update zh_CN.json (#1394) * Increased timeout for lastfm to 40 seconds * Added token link without callback to settings * Fix for #1390 * Automatic locale setting * chore: Prettified Code [ci skip] * window control hidden when native title bar on * Change Album Search and Pagination Layout (#1397) * Updated Dutch translations Updated Dutch translations * Update nl_NL.json * chore: Prettified Code [ci skip] * Update en_OWO.json * chore: Prettified Code [ci skip] Co-authored-by: Sherlock Luk Co-authored-by: vapormusic Co-authored-by: Core Co-authored-by: Arth Attack <86346283+ArthAttack@users.noreply.github.com> Co-authored-by: vapormusic Co-authored-by: yazninja Co-authored-by: Core <64542347+coredev-uk@users.noreply.github.com> Co-authored-by: coredev-uk Co-authored-by: 椎名アヤネ <53814845+sakura0224@users.noreply.github.com> Co-authored-by: Monochromish <79590499+Monochromish@users.noreply.github.com> Co-authored-by: Sjoerd69 <74538108+Sjoerd-69@users.noreply.github.com> Co-authored-by: GamingLiamStudios <58615717+GamingLiamStudios@users.noreply.github.com> Co-authored-by: GamingLiamStudios --- .github/workflows/build-macos.yml | 4 +- .gitignore | 1 + .npmrc | 1 + package.json | 9 +- pnpm-lock.yaml | 640 +----------------- src/i18n/README.md | 6 +- src/i18n/en_OWO.json | 1 + src/i18n/en_US.json | 1 + src/i18n/nl_NL.json | 227 ++++--- src/i18n/pt_BR.json | 78 +-- src/i18n/source/en_US.json | 1 + src/i18n/zh_CN.json | 118 ++-- src/main/base/browserwindow.ts | 15 +- src/main/base/store.ts | 25 +- src/main/plugins/raop.ts | 2 + src/main/providers/local/db/index.ts | 24 +- src/main/providers/local/index.ts | 100 +-- src/preload/cider-preload.js | 34 +- src/renderer/less/pages.css | 17 + src/renderer/less/pages.less | 19 +- src/renderer/main/vueapp.js | 12 +- .../views/components/settings-window.ejs | 13 +- src/renderer/views/components/sidebar.ejs | 4 +- src/renderer/views/pages/library-albums.ejs | 18 +- 24 files changed, 410 insertions(+), 960 deletions(-) diff --git a/.github/workflows/build-macos.yml b/.github/workflows/build-macos.yml index 688ee949..84d25b91 100644 --- a/.github/workflows/build-macos.yml +++ b/.github/workflows/build-macos.yml @@ -57,8 +57,8 @@ jobs: yarn install cp resources/verror-types node_modules/@types/verror/index.d.ts cp resources/macPackager.js node_modules/app-builder-lib/out/macPackager.js - rm -r node_modules/pouchdb-node/node_modules/leveldown - rm -r node_modules/pouchdb-adapter-leveldb/node_modules/leveldown + rm -r node_modules/pouchdb-node/node_modules/leveldown || true + rm -r node_modules/pouchdb-adapter-leveldb/node_modules/leveldown || true - name: Build the DMG env: diff --git a/.gitignore b/.gitignore index 1a41743c..f4bf5c23 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ build .flatpak* yarn-cache src/renderer/style.css +.pnpm-store # Misc .idea diff --git a/.npmrc b/.npmrc index 231886ac..2162f3c3 100644 --- a/.npmrc +++ b/.npmrc @@ -3,3 +3,4 @@ public-hoist-pattern=* shamefully-hoist=true auto-install-peers=true strict-peer-dependencies=false +store-dir=.pnpm-store diff --git a/package.json b/package.json index 0b3b621b..445cecfe 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,8 @@ "pack": "electron-builder --dir", "dist": "npm run build && electron-builder", "dist:macarm": "npm run build && electron-builder --mac --arm64", + "slim-build:macarm": "ditto --arch arm64 ./dist/mac-universal/Cider.app ./dist/mac-universal/arm64/Cider.app", + "slim-build:macintel": "ditto --arch x86_64 ./dist/mac-universal/Cider.app ./dist/mac-universal/x86_x64/Cider.app", "dist:universalNotWorking": "npm run build && electron-builder --mac --universal", "dist:all": "npm run build && electron-builder -mwl", "testdist": "npm run build && electron-builder --dir", @@ -39,8 +41,6 @@ "dependencies": { "@sentry/electron": "^4.0.0", "@sentry/integrations": "^7.8.1", - "@types/pouchdb": "^6.4.0", - "@types/pouchdb-node": "^6.1.4", "adm-zip": "0.4.10", "airtunes2": "git+https://github.com/ciderapp/node_airtunes2.git", "castv2-client": "^1.2.0", @@ -58,16 +58,11 @@ "get-port": "5.1.1", "jimp": "^0.16.1", "lastfmapi": "^0.1.1", - "level": "^8.0.0", - "leveldown": "^6.1.1", "mdns-js": "git+https://github.com/ciderapp/node-mdns-js.git", "mpris-service": "^2.1.2", "music-metadata": "7.12.6", "node-gyp": "^9.1.0", "node-ssdp": "^4.0.1", - "pouchdb-adapter-leveldb": "^7.3.0", - "pouchdb-node": "^7.3.0", - "pouchdb-upsert": "^2.2.0", "qrcode": "^1.5.1", "request": "^2.88.2", "run-script-os": "^1.1.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bf3d806c..b7967d21 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,8 +7,6 @@ specifiers: '@types/discord-rpc': 4.0.3 '@types/express': ^4.17.13 '@types/node': ^18.7.13 - '@types/pouchdb': ^6.4.0 - '@types/pouchdb-node': ^6.1.4 '@types/qrcode-terminal': ^0.12.0 '@types/ws': ^8.5.3 adm-zip: 0.4.10 @@ -33,17 +31,12 @@ specifiers: jimp: ^0.16.1 lastfmapi: ^0.1.1 less: ^4.1.3 - level: ^8.0.0 - leveldown: ^6.1.1 mdns-js: git+https://github.com/ciderapp/node-mdns-js.git mpris-service: ^2.1.2 music-metadata: 7.12.6 musickit-typescript: ^1.2.4 node-gyp: ^9.1.0 node-ssdp: ^4.0.1 - pouchdb-adapter-leveldb: ^7.3.0 - pouchdb-node: ^7.3.0 - pouchdb-upsert: ^2.2.0 qrcode: ^1.5.1 request: ^2.88.2 run-script-os: ^1.1.6 @@ -61,10 +54,8 @@ specifiers: dependencies: '@sentry/electron': 4.0.0 '@sentry/integrations': 7.11.1 - '@types/pouchdb': 6.4.0 - '@types/pouchdb-node': 6.1.4 adm-zip: 0.4.10 - airtunes2: github.com/ciderapp/node_airtunes2/3ca66c6de35e3f84869c531c2a7c8572690751ab + airtunes2: github.com/ciderapp/node_airtunes2/63e3a34a551aa700f89b622d65d19f52f48548ce castv2-client: 1.2.0 chokidar: 3.5.3 discord-auto-rpc: 1.0.17 @@ -80,16 +71,11 @@ dependencies: get-port: 5.1.1 jimp: 0.16.1 lastfmapi: 0.1.1 - level: 8.0.0 - leveldown: 6.1.1 mdns-js: github.com/ciderapp/node-mdns-js/d8f658b623233c3cf58be229332f3342f553cde2 mpris-service: 2.1.2 music-metadata: 7.12.6 node-gyp: 9.1.0 node-ssdp: 4.0.1 - pouchdb-adapter-leveldb: 7.3.0 - pouchdb-node: 7.3.0 - pouchdb-upsert: 2.2.0 qrcode: 1.5.1 request: 2.88.2 run-script-os: 1.1.6 @@ -2002,6 +1988,7 @@ packages: resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} dependencies: '@types/ms': 0.7.31 + dev: true /@types/discord-rpc/4.0.3: resolution: {integrity: sha512-4Kh+8u1+OXRHD5OHET3zbBInDkx3cMLaj8Qif8JQbgHZjiru2IYf/WHhuYdzjgtJ/J0CuImOpvt98+Bhe/lr1g==} @@ -2089,6 +2076,7 @@ packages: /@types/ms/0.7.31: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + dev: true /@types/node/16.11.56: resolution: {integrity: sha512-aFcUkv7EddxxOa/9f74DINReQ/celqH8DiB3fRYgVDM2Xm5QJL8sl80QKuAnGvwAsMn+H3IFA6WCrQh1CY7m1A==} @@ -2110,135 +2098,6 @@ packages: dev: true optional: true - /@types/pouchdb-adapter-cordova-sqlite/1.0.1: - resolution: {integrity: sha512-nqlXpW1ho3KBg1mUQvZgH2755y3z/rw4UA7ZJCPMRTHofxGMY8izRVw5rHBL4/7P615or0J2udpRYxgkT3D02g==} - dependencies: - '@types/pouchdb-core': 7.0.10 - dev: false - - /@types/pouchdb-adapter-fruitdown/6.1.3: - resolution: {integrity: sha512-Wz1Z1JLOW1hgmFQjqnSkmyyfH7by/iWb4abKn684WMvQfmxx6BxKJpJ4+eulkVPQzzgMMSgU1MpnQOm9FgRkbw==} - dependencies: - '@types/pouchdb-core': 7.0.10 - dev: false - - /@types/pouchdb-adapter-http/6.1.3: - resolution: {integrity: sha512-9Z4TLbF/KJWy/D2sWRPBA+RNU0odQimfdvlDX+EY7rGcd3aVoH8qjD/X0Xcd/0dfBH5pKrNIMFFQgW/TylRCmA==} - dependencies: - '@types/pouchdb-core': 7.0.10 - dev: false - - /@types/pouchdb-adapter-idb/6.1.4: - resolution: {integrity: sha512-KIAXbkF4uYUz0ZwfNEFLtEkK44mEWopAsD76UhucH92XnJloBysav+TjI4FFfYQyTjoW3S1s6V+Z14CUJZ0F6w==} - dependencies: - '@types/pouchdb-core': 7.0.10 - dev: false - - /@types/pouchdb-adapter-leveldb/6.1.3: - resolution: {integrity: sha512-ex8NFqQGFwEpFi7AaZ5YofmuemfZNsL3nTFZBUCAKYMBkazQij1pe2ILLStSvJr0XS0qxgXjCEW19T5Wqiiskg==} - dependencies: - '@types/pouchdb-core': 7.0.10 - dev: false - - /@types/pouchdb-adapter-localstorage/6.1.3: - resolution: {integrity: sha512-oor040tye1KKiGLWYtIy7rRT7C2yoyX3Tf6elEJRpjOA7Ja/H8lKc4LaSh9ATbptIcES6MRqZDxtp7ly9hsW3Q==} - dependencies: - '@types/pouchdb-core': 7.0.10 - dev: false - - /@types/pouchdb-adapter-memory/6.1.3: - resolution: {integrity: sha512-gVbsIMzDzgZYThFVT4eVNsmuZwVm/4jDxP1sjlgc3qtDIxbtBhGgyNfcskwwz9Zu5Lv1avkDsIWvcxQhnvRlHg==} - dependencies: - '@types/pouchdb-core': 7.0.10 - dev: false - - /@types/pouchdb-adapter-node-websql/6.1.3: - resolution: {integrity: sha512-F/P+os6Jsa7CgHtH64+Z0HfwIcj0hIRB5z8gNhF7L7dxPWoAfkopK5H2gydrP3sQrlGyN4WInF+UJW/Zu1+FKg==} - dependencies: - '@types/pouchdb-adapter-websql': 6.1.4 - '@types/pouchdb-core': 7.0.10 - dev: false - - /@types/pouchdb-adapter-websql/6.1.4: - resolution: {integrity: sha512-zMJQCtXC40hBsIDRn0GhmpeGMK0f9l/OGWfLguvczROzxxcOD7REI+e6SEmX7gJKw5JuMvlfuHzkQwjmvSJbtg==} - dependencies: - '@types/pouchdb-core': 7.0.10 - dev: false - - /@types/pouchdb-browser/6.1.3: - resolution: {integrity: sha512-EdYowrWxW9SWBMX/rux2eq7dbHi5Zeyzz+FF/IAsgQKnUxgeCO5VO2j4zTzos0SDyJvAQU+EYRc11r7xGn5tvA==} - dependencies: - '@types/pouchdb-adapter-http': 6.1.3 - '@types/pouchdb-adapter-idb': 6.1.4 - '@types/pouchdb-adapter-websql': 6.1.4 - '@types/pouchdb-core': 7.0.10 - '@types/pouchdb-mapreduce': 6.1.7 - '@types/pouchdb-replication': 6.4.4 - dev: false - - /@types/pouchdb-core/7.0.10: - resolution: {integrity: sha512-mKhjLlWWXyV3PTTjDhzDV1kc2dolO7VYFa75IoKM/hr8Er9eo8RIbS7mJLfC8r/C3p6ihZu9yZs1PWC1LQ0SOA==} - dependencies: - '@types/debug': 4.1.7 - '@types/pouchdb-find': 6.3.7 - dev: false - - /@types/pouchdb-find/6.3.7: - resolution: {integrity: sha512-b2dr9xoZRK5Mwl8UiRA9l5j9mmCxNfqXuu63H1KZHwJLILjoIIz7BntCvM0hnlnl7Q8P8wORq0IskuaMq5Nnnw==} - dependencies: - '@types/pouchdb-core': 7.0.10 - dev: false - - /@types/pouchdb-http/6.1.3: - resolution: {integrity: sha512-0e9E5SqNOyPl/3FnEIbENssB4FlJsNYuOy131nxrZk36S+y1R/6qO7ZVRypWpGTqBWSuVd7gCsq2UDwO/285+w==} - dependencies: - '@types/pouchdb-adapter-http': 6.1.3 - '@types/pouchdb-core': 7.0.10 - dev: false - - /@types/pouchdb-mapreduce/6.1.7: - resolution: {integrity: sha512-WzBwm7tmO9QhfRzVaWT4v6JQSS/fG2OoUDrWrhX87rPe2Pn6laPvdK5li6myNRxCoI/l5e8Jd+oYBAFnaiFucA==} - dependencies: - '@types/pouchdb-core': 7.0.10 - dev: false - - /@types/pouchdb-node/6.1.4: - resolution: {integrity: sha512-wnTCH8X1JOPpNOfVhz8HW0AvmdHh6pt40MuRj0jQnK7QEHsHS79WujsKTKSOF8QXtPwpvCNSsI7ut7H7tfxxJQ==} - dependencies: - '@types/pouchdb-adapter-http': 6.1.3 - '@types/pouchdb-adapter-leveldb': 6.1.3 - '@types/pouchdb-core': 7.0.10 - '@types/pouchdb-mapreduce': 6.1.7 - '@types/pouchdb-replication': 6.4.4 - dev: false - - /@types/pouchdb-replication/6.4.4: - resolution: {integrity: sha512-BsE5LKpjJK4iAf6Fx5kyrMw+33V+Ip7uWldUnU2BYrrvtR+MLD22dcImm7DZN1st2wPPb91i0XEnQzvP0w1C/Q==} - dependencies: - '@types/pouchdb-core': 7.0.10 - '@types/pouchdb-find': 6.3.7 - dev: false - - /@types/pouchdb/6.4.0: - resolution: {integrity: sha512-eGCpX+NXhd5VLJuJMzwe3L79fa9+IDTrAG3CPaf4s/31PD56hOrhDJTSmRELSXuiqXr6+OHzzP0PldSaWsFt7w==} - dependencies: - '@types/pouchdb-adapter-cordova-sqlite': 1.0.1 - '@types/pouchdb-adapter-fruitdown': 6.1.3 - '@types/pouchdb-adapter-http': 6.1.3 - '@types/pouchdb-adapter-idb': 6.1.4 - '@types/pouchdb-adapter-leveldb': 6.1.3 - '@types/pouchdb-adapter-localstorage': 6.1.3 - '@types/pouchdb-adapter-memory': 6.1.3 - '@types/pouchdb-adapter-node-websql': 6.1.3 - '@types/pouchdb-adapter-websql': 6.1.4 - '@types/pouchdb-browser': 6.1.3 - '@types/pouchdb-core': 7.0.10 - '@types/pouchdb-http': 6.1.3 - '@types/pouchdb-mapreduce': 6.1.7 - '@types/pouchdb-node': 6.1.4 - '@types/pouchdb-replication': 6.4.4 - dev: false - /@types/qrcode-terminal/0.12.0: resolution: {integrity: sha512-g0fQKl3IVnUePV8tLkiBTduxAVSZsXts444T2aMfjOEGxd7XoeSIs16/AmRe2NlcJLqbvsOBSXov7dKSo4wigA==} dev: true @@ -2452,60 +2311,6 @@ packages: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} dev: false - /abort-controller/3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - dependencies: - event-target-shim: 5.0.1 - dev: false - - /abstract-level/1.0.3: - resolution: {integrity: sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==} - engines: {node: '>=12'} - dependencies: - buffer: 6.0.3 - catering: 2.1.1 - is-buffer: 2.0.5 - level-supports: 4.0.1 - level-transcoder: 1.0.1 - module-error: 1.0.2 - queue-microtask: 1.2.3 - dev: false - - /abstract-leveldown/6.2.3: - resolution: {integrity: sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==} - engines: {node: '>=6'} - dependencies: - buffer: 5.7.1 - immediate: 3.3.0 - level-concat-iterator: 2.0.1 - level-supports: 1.0.1 - xtend: 4.0.2 - dev: false - - /abstract-leveldown/6.3.0: - resolution: {integrity: sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==} - engines: {node: '>=6'} - dependencies: - buffer: 5.7.1 - immediate: 3.3.0 - level-concat-iterator: 2.0.1 - level-supports: 1.0.1 - xtend: 4.0.2 - dev: false - - /abstract-leveldown/7.2.0: - resolution: {integrity: sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==} - engines: {node: '>=10'} - dependencies: - buffer: 6.0.3 - catering: 2.1.1 - is-buffer: 2.0.5 - level-concat-iterator: 3.1.0 - level-supports: 2.1.0 - queue-microtask: 1.2.3 - dev: false - /abstract-socket/2.1.1: resolution: {integrity: sha512-YZJizsvS1aBua5Gd01woe4zuyYBGgSMeqDOB6/ChwdTI904KP6QGtJswXl4hcqWxbz86hQBe++HWV0hF1aGUtA==} engines: {node: '>=4.0.0'} @@ -2744,10 +2549,6 @@ packages: /argparse/2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - /argsarray/0.0.1: - resolution: {integrity: sha512-u96dg2GcAKtpTrBdDoFIM7PjcBA+6rSP0OR94MOReNRyUECL6MtQt5XXmRr4qrftYaef9+l5hcpO5te7sML1Cg==} - dev: false - /arr-diff/4.0.0: resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} engines: {node: '>=0.10.0'} @@ -3149,15 +2950,6 @@ packages: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} dev: false - /browser-level/1.0.1: - resolution: {integrity: sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==} - dependencies: - abstract-level: 1.0.3 - catering: 2.1.1 - module-error: 1.0.2 - run-parallel-limit: 1.1.0 - dev: false - /browserslist/4.21.3: resolution: {integrity: sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -3211,13 +3003,6 @@ packages: base64-js: 1.5.1 ieee754: 1.2.1 - /buffer/6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: false - /builder-util-runtime/9.0.3: resolution: {integrity: sha512-SfG2wnyjpUbbdtpnqDpWwklujofC6GarGpvdWrEkg9p5AD/xJmTF2buTNaqs3qtsNBEVQDDjZz9xc2GGpVyMfA==} engines: {node: '>=12.0.0'} @@ -3411,11 +3196,6 @@ packages: - supports-color dev: false - /catering/2.1.1: - resolution: {integrity: sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==} - engines: {node: '>=6'} - dev: false - /chalk/2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -3502,18 +3282,6 @@ packages: static-extend: 0.1.2 dev: true - /classic-level/1.2.0: - resolution: {integrity: sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==} - engines: {node: '>=12'} - requiresBuild: true - dependencies: - abstract-level: 1.0.3 - catering: 2.1.1 - module-error: 1.0.2 - napi-macros: 2.0.0 - node-gyp-build: 4.5.0 - dev: false - /clean-css/4.2.4: resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==} engines: {node: '>= 4.0'} @@ -3571,11 +3339,6 @@ packages: wrap-ansi: 7.0.0 dev: true - /clone-buffer/1.0.0: - resolution: {integrity: sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==} - engines: {node: '>= 0.10'} - dev: false - /clone-response/1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} dependencies: @@ -4069,14 +3832,6 @@ packages: engines: {node: '>=10'} dev: false - /deferred-leveldown/5.3.0: - resolution: {integrity: sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==} - engines: {node: '>=6'} - dependencies: - abstract-leveldown: 6.2.3 - inherits: 2.0.4 - dev: false - /define-properties/1.1.4: resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} engines: {node: '>= 0.4'} @@ -4326,10 +4081,6 @@ packages: engines: {node: '>=10'} dev: true - /double-ended-queue/2.1.0-0: - resolution: {integrity: sha512-+BNfZ+deCo8hMNpDqDnvT+c0XpJ5cUa6mqYq89bho2Ifze4URTqRkcwR399hWoTrTkbZ/XJYDgP6rc7pRgffEQ==} - dev: false - /duplexer/0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: false @@ -4567,16 +4318,6 @@ packages: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} - /encoding-down/6.3.0: - resolution: {integrity: sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==} - engines: {node: '>=6'} - dependencies: - abstract-leveldown: 6.3.0 - inherits: 2.0.4 - level-codec: 9.0.2 - level-errors: 2.0.1 - dev: false - /encoding/0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} dependencies: @@ -4588,12 +4329,6 @@ packages: dependencies: once: 1.4.0 - /end-stream/0.1.0: - resolution: {integrity: sha512-Brl10T8kYnc75IepKizW6Y9liyW8ikz1B7n/xoHrJxoVSSjoqPn30sb7XVFfQERK4QfUMYRGs9dhWwtt2eu6uA==} - dependencies: - write-stream: 0.4.3 - dev: false - /enhanced-resolve/4.5.0: resolution: {integrity: sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==} engines: {node: '>=6.9.0'} @@ -4628,6 +4363,7 @@ packages: hasBin: true dependencies: prr: 1.0.1 + dev: true /error-ex/1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -4762,11 +4498,6 @@ packages: through: 2.3.8 dev: false - /event-target-shim/5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - dev: false - /eventemitter3/4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} dev: true @@ -5015,13 +4746,6 @@ packages: pend: 1.2.0 dev: true - /fetch-cookie/0.11.0: - resolution: {integrity: sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA==} - engines: {node: '>=8'} - dependencies: - tough-cookie: 4.1.1 - dev: false - /figgy-pudding/3.5.2: resolution: {integrity: sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==} dev: true @@ -5928,10 +5652,6 @@ packages: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} dev: false - /immediate/3.3.0: - resolution: {integrity: sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==} - dev: false - /import-lazy/2.1.0: resolution: {integrity: sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==} engines: {node: '>=4'} @@ -6083,11 +5803,6 @@ packages: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} dev: true - /is-buffer/2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} - dev: false - /is-callable/1.2.4: resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} engines: {node: '>= 0.4'} @@ -6631,137 +6346,6 @@ packages: - supports-color dev: true - /level-codec/9.0.2: - resolution: {integrity: sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==} - engines: {node: '>=6'} - dependencies: - buffer: 5.7.1 - dev: false - - /level-concat-iterator/2.0.1: - resolution: {integrity: sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==} - engines: {node: '>=6'} - dev: false - - /level-concat-iterator/3.1.0: - resolution: {integrity: sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==} - engines: {node: '>=10'} - dependencies: - catering: 2.1.1 - dev: false - - /level-errors/2.0.1: - resolution: {integrity: sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==} - engines: {node: '>=6'} - dependencies: - errno: 0.1.8 - dev: false - - /level-iterator-stream/4.0.2: - resolution: {integrity: sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==} - engines: {node: '>=6'} - dependencies: - inherits: 2.0.4 - readable-stream: 3.6.0 - xtend: 4.0.2 - dev: false - - /level-js/5.0.2: - resolution: {integrity: sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==} - dependencies: - abstract-leveldown: 6.2.3 - buffer: 5.7.1 - inherits: 2.0.4 - ltgt: 2.2.1 - dev: false - - /level-packager/5.1.1: - resolution: {integrity: sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==} - engines: {node: '>=6'} - dependencies: - encoding-down: 6.3.0 - levelup: 4.4.0 - dev: false - - /level-supports/1.0.1: - resolution: {integrity: sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==} - engines: {node: '>=6'} - dependencies: - xtend: 4.0.2 - dev: false - - /level-supports/2.1.0: - resolution: {integrity: sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==} - engines: {node: '>=10'} - dev: false - - /level-supports/4.0.1: - resolution: {integrity: sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==} - engines: {node: '>=12'} - dev: false - - /level-transcoder/1.0.1: - resolution: {integrity: sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==} - engines: {node: '>=12'} - dependencies: - buffer: 6.0.3 - module-error: 1.0.2 - dev: false - - /level-write-stream/1.0.0: - resolution: {integrity: sha512-bBNKOEOMl8msO+uIM9YX/gUO6ckokZ/4pCwTm/lwvs46x6Xs8Zy0sn3Vh37eDqse4mhy4fOMIb/JsSM2nyQFtw==} - dependencies: - end-stream: 0.1.0 - dev: false - - /level/6.0.1: - resolution: {integrity: sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==} - engines: {node: '>=8.6.0'} - dependencies: - level-js: 5.0.2 - level-packager: 5.1.1 - leveldown: 5.6.0 - dev: false - - /level/8.0.0: - resolution: {integrity: sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==} - engines: {node: '>=12'} - dependencies: - browser-level: 1.0.1 - classic-level: 1.2.0 - dev: false - - /leveldown/5.6.0: - resolution: {integrity: sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==} - engines: {node: '>=8.6.0'} - requiresBuild: true - dependencies: - abstract-leveldown: 6.2.3 - napi-macros: 2.0.0 - node-gyp-build: 4.1.1 - dev: false - - /leveldown/6.1.1: - resolution: {integrity: sha512-88c+E+Eizn4CkQOBHwqlCJaTNEjGpaEIikn1S+cINc5E9HEvJ77bqY4JY/HxT5u0caWqsc3P3DcFIKBI1vHt+A==} - engines: {node: '>=10.12.0'} - requiresBuild: true - dependencies: - abstract-leveldown: 7.2.0 - napi-macros: 2.0.0 - node-gyp-build: 4.5.0 - dev: false - - /levelup/4.4.0: - resolution: {integrity: sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==} - engines: {node: '>=6'} - dependencies: - deferred-leveldown: 5.3.0 - level-errors: 2.0.1 - level-iterator-stream: 4.0.2 - level-supports: 1.0.1 - xtend: 4.0.2 - dev: false - /lie/3.1.1: resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} dependencies: @@ -6908,10 +6492,6 @@ packages: resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} dev: false - /ltgt/2.2.1: - resolution: {integrity: sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==} - dev: false - /make-dir/2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -7203,11 +6783,6 @@ packages: engines: {node: '>=10'} hasBin: true - /module-error/1.0.2: - resolution: {integrity: sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==} - engines: {node: '>=10'} - dev: false - /move-concurrently/1.0.1: resolution: {integrity: sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==} dependencies: @@ -7294,10 +6869,6 @@ packages: resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} dev: false - /napi-macros/2.0.0: - resolution: {integrity: sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==} - dev: false - /needle/3.1.0: resolution: {integrity: sha512-gCE9weDhjVGCRqS8dwDR/D3GTAeyXLXuqp7I8EzH6DllZGXSUyxuqqLh+YX9rMAWaaTFyVAg6rHGL25dqvczKw==} engines: {node: '>= 4.4.x'} @@ -7361,16 +6932,6 @@ packages: engines: {node: '>= 6.0.0'} dev: true - /node-gyp-build/4.1.1: - resolution: {integrity: sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==} - hasBin: true - dev: false - - /node-gyp-build/4.5.0: - resolution: {integrity: sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==} - hasBin: true - dev: false - /node-gyp/9.1.0: resolution: {integrity: sha512-HkmN0ZpQJU7FLbJauJTHkHlSVAXlNGDAzH/VYFZGDOnFyn/Na3GlNJfkudmufOdS6/jNFhy88ObzL7ERz9es1g==} engines: {node: ^12.22 || ^14.13 || >=16} @@ -7990,131 +7551,6 @@ packages: source-map: 0.6.1 dev: true - /pouchdb-adapter-leveldb-core/7.3.0: - resolution: {integrity: sha512-OyUsEae1JlqR2jSGMohP03gj6VANh9fDR/3nPIa1vYyoQWlwQzOS7knKqDaJm7Nui3JC5q/lWos7/FGZBFuF5Q==} - dependencies: - argsarray: 0.0.1 - buffer-from: 1.1.2 - double-ended-queue: 2.1.0-0 - levelup: 4.4.0 - pouchdb-adapter-utils: 7.3.0 - pouchdb-binary-utils: 7.3.0 - pouchdb-collections: 7.3.0 - pouchdb-errors: 7.3.0 - pouchdb-json: 7.3.0 - pouchdb-md5: 7.3.0 - pouchdb-merge: 7.3.0 - pouchdb-utils: 7.3.0 - sublevel-pouchdb: 7.3.0 - through2: 3.0.2 - dev: false - - /pouchdb-adapter-leveldb/7.3.0: - resolution: {integrity: sha512-OAPMZmMOd0j/PLivmKxXF9jelakncJ3X5nmFq8vcOeL4SW0gj5uKNIAkS5WfIemHhIHtJBiSu2xYWCQGhBCeRg==} - dependencies: - level: 6.0.1 - level-write-stream: 1.0.0 - leveldown: 5.6.0 - pouchdb-adapter-leveldb-core: 7.3.0 - pouchdb-merge: 7.3.0 - pouchdb-utils: 7.3.0 - through2: 3.0.2 - dev: false - - /pouchdb-adapter-utils/7.3.0: - resolution: {integrity: sha512-mU1+smcagWSpInVx/VQk7VVjjnJlyagKtusUS3OdCMFZY35L6RbXC8eIhoNVDbkBfEv3cIwqQ3t7fdvkaa1odQ==} - dependencies: - pouchdb-binary-utils: 7.3.0 - pouchdb-collections: 7.3.0 - pouchdb-errors: 7.3.0 - pouchdb-md5: 7.3.0 - pouchdb-merge: 7.3.0 - pouchdb-utils: 7.3.0 - dev: false - - /pouchdb-binary-utils/7.3.0: - resolution: {integrity: sha512-xvBH/XGHGcou2vkEzszJxkCc7YElfRUrkLUg51Jbdmh1mogLDUO0bU3Tj6TOIIJfRkQrU/HV+dDkMAhsil0amQ==} - dependencies: - buffer-from: 1.1.2 - dev: false - - /pouchdb-collections/7.3.0: - resolution: {integrity: sha512-Xr54m2+fErShXn+qAT4xwqJ+8NwddNPeTMJT4z4k1sZsrwfHmZsWbsKAyGPMF04eQaaU+7DDRMciu2VzaBUXyg==} - dev: false - - /pouchdb-errors/7.3.0: - resolution: {integrity: sha512-dTBbIC1BbCy6J9W/Csg5xROgb3wJN3HpbgAJHHSEtAkb8oA45KZmU3ZwEpNhf0AfPuQm4XgW1936PvlDlGgJiw==} - dependencies: - inherits: 2.0.4 - dev: false - - /pouchdb-json/7.3.0: - resolution: {integrity: sha512-D4wyi20ltyiFpuziQeMk3CbXs/Q58VoGTYTJQY8MWBw37OidtHGQAt1Kh5yJ435wJqDzJZyxMA5RxGZxEOBDVg==} - dependencies: - vuvuzela: 1.0.3 - dev: false - - /pouchdb-md5/7.3.0: - resolution: {integrity: sha512-wL04QgoKyd/L/TV5gxgcvlEyCJiZoXCOEFJklTzkdza/kBQNJGPH7i0ZhKa7Sb+AvZYoWZHddf1Zgv7rBScHkA==} - dependencies: - pouchdb-binary-utils: 7.3.0 - spark-md5: 3.0.2 - dev: false - - /pouchdb-merge/7.3.0: - resolution: {integrity: sha512-E7LmchMzwYFm6V8OBxejzARLisanpksOju2LEfuiYnotGfNDeW7MByP0qBH0/zF8BfUyyjA1cl7ByaEpsapkeQ==} - dev: false - - /pouchdb-node/7.3.0: - resolution: {integrity: sha512-8UaLY7/7+S1ciQntWs67kB6rJiklaUdjonLSB3dNWtt0WCfel1t7Yh6+Vx1VSCrb4TALRWhqn0Jn0rBoATekjg==} - dependencies: - abort-controller: 3.0.0 - argsarray: 0.0.1 - buffer-from: 1.1.2 - clone-buffer: 1.0.0 - double-ended-queue: 2.1.0-0 - fetch-cookie: 0.11.0 - inherits: 2.0.4 - level: 6.0.1 - level-codec: 9.0.2 - level-write-stream: 1.0.0 - leveldown: 5.6.0 - levelup: 4.4.0 - ltgt: 2.2.1 - node-fetch: 2.6.7 - readable-stream: 1.1.14 - through2: 3.0.2 - uuid: 8.3.2 - vuvuzela: 1.0.3 - transitivePeerDependencies: - - encoding - dev: false - - /pouchdb-promise/6.4.3: - resolution: {integrity: sha512-ruJaSFXwzsxRHQfwNHjQfsj58LBOY1RzGzde4PM5CWINZwFjCQAhZwfMrch2o/0oZT6d+Xtt0HTWhq35p3b0qw==} - dependencies: - lie: 3.1.1 - dev: false - - /pouchdb-upsert/2.2.0: - resolution: {integrity: sha512-hZceBqSnBLodlHtsJJdGJP9ZN+OHj3IXj8+YCBoHUPpzgLw04wfIOp+PLYROqyL6BODeYF00VFdiX8iIGcCtUw==} - dependencies: - pouchdb-promise: 6.4.3 - dev: false - - /pouchdb-utils/7.3.0: - resolution: {integrity: sha512-HH+5IXXWn/ZgVCSnrlydBMYn6MabT7RS7SNoo9w8qVH9efpZSp3eLchw6yMQNLw8LQefWmbbskiHV9VgJmSVWQ==} - dependencies: - argsarray: 0.0.1 - clone-buffer: 1.0.0 - immediate: 3.3.0 - inherits: 2.0.4 - pouchdb-collections: 7.3.0 - pouchdb-errors: 7.3.0 - pouchdb-md5: 7.3.0 - uuid: 8.3.2 - dev: false - /prepend-http/1.0.4: resolution: {integrity: sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==} engines: {node: '>=0.10.0'} @@ -8196,6 +7632,7 @@ packages: /prr/1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + dev: true /pseudomap/1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} @@ -8275,10 +7712,7 @@ packages: /querystringify/2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - - /queue-microtask/1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: false + dev: true /quick-lru/5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} @@ -8355,10 +7789,6 @@ packages: path-type: 2.0.0 dev: false - /readable-stream/0.0.4: - resolution: {integrity: sha512-azrivNydKRYt7zwLV5wWUK7YzKTWs3q87xSmY6DlHapPrCvaT6ZrukvM5erV+yCSSPmZT8zkSdttOHQpWWm9zw==} - dev: false - /readable-stream/1.1.14: resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} dependencies: @@ -8560,6 +7990,7 @@ packages: /requires-port/1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: true /resolve-alpn/1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} @@ -8645,12 +8076,6 @@ packages: dev: true optional: true - /run-parallel-limit/1.1.0: - resolution: {integrity: sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==} - dependencies: - queue-microtask: 1.2.3 - dev: false - /run-queue/1.0.3: resolution: {integrity: sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==} dependencies: @@ -9072,10 +8497,6 @@ packages: engines: {node: '>= 8'} dev: true - /spark-md5/3.0.2: - resolution: {integrity: sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==} - dev: false - /spdx-correct/3.1.1: resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} dependencies: @@ -9343,15 +8764,6 @@ packages: webpack: 5.74.0 dev: true - /sublevel-pouchdb/7.3.0: - resolution: {integrity: sha512-zp7u4jmv2N/s+dXZkWTtL4BjREs3SZ1nGBNNJ8RWX4yqN59oHgKmti4CfVOqfsAW9RMasmTqQAEPxL9hX8+CIA==} - dependencies: - inherits: 2.0.4 - level-codec: 9.0.2 - ltgt: 2.2.1 - readable-stream: 1.1.14 - dev: false - /sumchecker/3.0.1: resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} engines: {node: '>= 8.0'} @@ -9510,13 +8922,6 @@ packages: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: false - /through2/3.0.2: - resolution: {integrity: sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==} - dependencies: - inherits: 2.0.4 - readable-stream: 3.6.0 - dev: false - /thunky/1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} dev: true @@ -9604,16 +9009,6 @@ packages: punycode: 2.1.1 dev: false - /tough-cookie/4.1.1: - resolution: {integrity: sha512-Ns3k8QxkEzIfLZbRwLOrMPDqRa1BEAl4BzNNAOYY4BhBmEkf+HvP467F4NrD9loK3NcYflWOpUH3LJg0ehq/rQ==} - engines: {node: '>=6'} - dependencies: - psl: 1.9.0 - punycode: 2.1.1 - universalify: 0.2.0 - url-parse: 1.5.10 - dev: false - /tr46/0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: false @@ -9768,11 +9163,6 @@ packages: engines: {node: '>= 4.0.0'} dev: true - /universalify/0.2.0: - resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} - engines: {node: '>= 4.0.0'} - dev: false - /universalify/2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} @@ -9864,6 +9254,7 @@ packages: dependencies: querystringify: 2.2.0 requires-port: 1.0.0 + dev: true /url/0.11.0: resolution: {integrity: sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==} @@ -9913,6 +9304,7 @@ packages: /uuid/8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true + dev: true /v8-compile-cache/2.3.0: resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} @@ -9957,10 +9349,6 @@ packages: engines: {node: '>=6'} dev: true - /vuvuzela/1.0.3: - resolution: {integrity: sha512-Tm7jR1xTzBbPW+6y1tknKiEhz04Wf/1iZkcTJjSFcpNko43+dFW6+OOeQe9taJIug3NdfUAjFKgUSyQrIKaDvQ==} - dev: false - /wallpaper/5.0.1: resolution: {integrity: sha512-yB9sBVfosR+NVabo/Ej21hga5u55NQUUdDVoo4LwrLJDRA+ezzX4wmNGwl5yxx/fkBgTADMqLL8ldnfN8TI9hQ==} engines: {node: '>=12'} @@ -10242,12 +9630,6 @@ packages: typedarray-to-buffer: 3.1.5 dev: true - /write-stream/0.4.3: - resolution: {integrity: sha512-IJrvkhbAnj89W/GAVdVgbnPiVw5Ntg/B4tc/MUCIEwj/g6JIww1DWJyB/yBMT3yw2/TkT6IUZ0+IYef3flEw8A==} - dependencies: - readable-stream: 0.0.4 - dev: false - /ws/6.2.2: resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} peerDependencies: @@ -10496,8 +9878,8 @@ packages: - supports-color dev: false - github.com/ciderapp/node_airtunes2/3ca66c6de35e3f84869c531c2a7c8572690751ab: - resolution: {tarball: https://codeload.github.com/ciderapp/node_airtunes2/tar.gz/3ca66c6de35e3f84869c531c2a7c8572690751ab} + github.com/ciderapp/node_airtunes2/63e3a34a551aa700f89b622d65d19f52f48548ce: + resolution: {tarball: https://codeload.github.com/ciderapp/node_airtunes2/tar.gz/63e3a34a551aa700f89b622d65d19f52f48548ce} name: airtunes2 version: 2.3.2 hasBin: true diff --git a/src/i18n/README.md b/src/i18n/README.md index 8b2340aa..750e656f 100644 --- a/src/i18n/README.md +++ b/src/i18n/README.md @@ -528,4 +528,8 @@ Update 25/07/2022 00:22 UTC Update 01/08/2022 13:00 UTC -* `term.skip`: Added to `en_US` \ No newline at end of file +* `term.skip`: Added to `en_US` + +Update 29/08/2022 12:00 UTC + +* `settings.option.connectivity.lastfmScrobble.manualToken.link`: Added to `en_US` diff --git a/src/i18n/en_OWO.json b/src/i18n/en_OWO.json index e883695e..50207a97 100644 --- a/src/i18n/en_OWO.json +++ b/src/i18n/en_OWO.json @@ -543,6 +543,7 @@ "settings.option.connectivity.lastfmScrobble.filterLoop.description": "Pwevent wooped twacks fwom being scwobbwed ow dispwayed in the Nyow Pwaying wist on Wast.fm.", "settings.option.connectivity.lastfmScrobble.filterTypes": "Fiwtew Media Types (Wast.fm)", "settings.option.connectivity.lastfmScrobble.manualToken": "Entew Wast.fm Token Manyuawwy", + "settings.option.connectivity.lastfmScrobble.manualToken.link": "Cwick hewe to get a Wast.fm token", "settings.notyf.connectivity.lastfmScrobble.connectError": "Wast.fm Connyection Timed Out", "settings.notyf.connectivity.lastfmScrobble.connectSuccess": "Wast.fm Connyection Successfuw", "settings.notyf.connectivity.lastfmScrobble.connecting": "Connyecting to Wast.fm...", diff --git a/src/i18n/en_US.json b/src/i18n/en_US.json index f5f9ace8..50af04eb 100644 --- a/src/i18n/en_US.json +++ b/src/i18n/en_US.json @@ -543,6 +543,7 @@ "settings.option.connectivity.lastfmScrobble.filterLoop.description": "Prevent looped tracks from being scrobbled or displayed in the Now Playing list on Last.fm.", "settings.option.connectivity.lastfmScrobble.filterTypes": "Filter Media Types (Last.fm)", "settings.option.connectivity.lastfmScrobble.manualToken": "Enter Last.fm Token Manually", + "settings.option.connectivity.lastfmScrobble.manualToken.link": "Click here to get a Last.fm token", "settings.notyf.connectivity.lastfmScrobble.connectError": "Last.fm Connection Timed Out", "settings.notyf.connectivity.lastfmScrobble.connectSuccess": "Last.fm Connection Successful", "settings.notyf.connectivity.lastfmScrobble.connecting": "Connecting to Last.fm...", diff --git a/src/i18n/nl_NL.json b/src/i18n/nl_NL.json index e85c6f44..f8642343 100644 --- a/src/i18n/nl_NL.json +++ b/src/i18n/nl_NL.json @@ -17,12 +17,12 @@ "term.github": "GitHub", "term.discord": "Discord", "term.learnMore": "Leer meer", - "term.accountSettings": "Account Instellingen", + "term.accountSettings": "Accountinstellingen", "term.logout": "Uitloggen", "term.login": "Inloggen", "term.about": "Over", "term.privateSession": "Privésessie", - "term.queue": "Wachtlijst", + "term.queue": "Wachtrij", "term.lyrics": "Songtekst", "term.miniplayer": "MiniSpeler", "term.history": "Geschiedenis", @@ -31,17 +31,17 @@ "term.listenNow": "Luister nu", "term.browse": "Bladeren", "term.radio": "Radio", - "term.recentlyAdded": "Onlangs Toegevoegd", + "term.recentlyAdded": "Onlangs toegevoegd", "term.songs": "Nummers", "term.albums": "Albums", "term.artists": "Artiesten", "term.podcasts": "Podcasts", - "term.playlists": "Afspeellijsten", + "term.playlists": "afspeellijsten", "term.playlist": "Afspeellijst", - "term.newPlaylist": "Nieuwe Afspeellijst", - "term.newPlaylistFolder": "Nieuwe Afspeellijst Map", - "term.createNewPlaylist": "Maak Nieuwe Afspeellijst", - "term.createNewPlaylistFolder": "Maak Nieuwe Afspeellijst Map", + "term.newPlaylist": "Nieuwe afspeellijst", + "term.newPlaylistFolder": "Nieuwe map", + "term.createNewPlaylist": "Nieuwe afspeellijst", + "term.createNewPlaylistFolder": "Nieuwe map", "term.deletePlaylist": "Weet je zeker dat je deze afspeellijst wilt verwijderen?", "term.play": "Speel", "term.pause": "Pauze", @@ -55,19 +55,19 @@ "term.share": "Delen", "term.share.success": "Gekopieërd naar klembord", "term.settings": "Instellingen", - "term.seeAll": "Zie Alles", - "term.sortBy": "Sorteren Op", + "term.seeAll": "Bekijk alles", + "term.sortBy": "Sorteren op", "term.sortBy.album": "Album", "term.sortBy.artist": "Artiest", "term.sortBy.name": "Naam", "term.sortBy.genre": "Genre", "term.sortBy.releaseDate": "Releasedatum", "term.sortBy.duration": "Duur", - "term.sortBy.dateAdded": "Datum Toegevoegd", + "term.sortBy.dateAdded": "Datum toegevoegd", "term.sortOrder": "A-Z", "term.sortOrder.ascending": "Oplopend", "term.sortOrder.descending": "Aflopend", - "term.viewAs": "Zien Als", + "term.viewAs": "Bekijken als", "term.viewAs.coverArt": "Albumcover", "term.viewAs.list": "Lijst", "term.size": "Grootte", @@ -86,8 +86,8 @@ "term.less": "Minder", "term.showMore": "Laat meer zien", "term.showLess": "Laat minder zien", - "term.topSongs": "Top Nummers", - "term.latestReleases": "Laatste Releases", + "term.topSongs": "Top nummers", + "term.latestReleases": "Laatste releases", "term.time.added": "Toegevoegd", "term.time.released": "Uitgebracht", "term.time.updated": "Bijgewerkt", @@ -96,7 +96,7 @@ "one": "dag", "other": "dagen" }, - "term.time.hours": "uren", + "term.time.hours": "uur", "term.time.hour": { "one": "uur", "other": "uur" @@ -111,21 +111,21 @@ "one": "seconde", "other": "seconden" }, - "term.fullscreenView": "Volledig Scherm", + "term.fullscreenView": "Volledig scherm", "term.defaultView": "Standaard Weergave", "term.audioSettings": "Geluidsinstellingen", "term.audioControls": "Volumeregeling", - "term.clearAll": "Wis Alles", - "term.recentStations": "Recente Stations", + "term.clearAll": "Wis alles", + "term.recentStations": "Recente stations", "term.language": "Taal", - "term.funLanguages": "Grappige", + "term.funLanguages": "Humor", "term.noLyrics": "Laden... /Songtekst niet gevonden./ Instrumentaal.", "term.copyright": "Copyright", - "term.rightsReserved": "Alle Rechten Voorbehouden.", + "term.rightsReserved": "Alle rechten voorbehouden.", "term.sponsor": "Sponsor dit project", - "term.ciderTeam": "Cider Team", + "term.ciderTeam": "Cider team", "term.developer": "Ontwikkelaar", - "term.socialTeam": "Sociale Team", + "term.socialTeam": "Sociale team", "term.socials": "Sociaal", "term.contributors": "Bijdragers", "term.equalizer": "Equalizer", @@ -139,21 +139,21 @@ "term.menu": "Menu", "term.check": "Controleer", "term.aboutArtist": "Over {{artistName}}", - "term.topResult": "Top Resultaat", - "term.sharedPlaylists": "Gedeelde Afspeellijsten", + "term.topResult": "Topresultaten", + "term.sharedPlaylists": "Gedeelde afspeellijsten", "term.people": "Mensen", "term.newpreset.name": "Nieuwe EQ-voorinstellingsnaam", - "term.addedpreset": "Toegevoegde Voorinstelling", + "term.addedpreset": "Toegevoegde voorinstelling", "term.deletepreset.warn": "Weet u zeker dat u deze voorinstelling wilt verwijderen?", "term.deletedpreset": "Verwijderde voorinstelling", - "term.defaultPresets": "Standaard Voorinstellingen", + "term.defaultPresets": "Standaard voorinstellingen", "term.userPresets": "Gebruikersvoorinstellingen", "term.requestError": "Er was een probleem met het verzoek.", "term.song.link.generate": "Bezig met het ophalen van de song.link URL...", - "term.musicVideos": "Muziek Video's", + "term.musicVideos": "Muziekvideo's", "term.stations": "Stations", "term.curators": "Curatoren", - "term.appleCurators": "Apple Curatoren", + "term.appleCurators": "Apple curatoren", "term.radioShows": "Radioprogramma's", "term.recordLabels": "Platenlabels", "term.videoExtras": "Video-extra's", @@ -161,67 +161,67 @@ "term.version": "Versie", "term.noVideos": "Geen video's gevonden.", "term.plugin": "Plug-in", - "term.pluginMenu": "Plug-in Menu", + "term.pluginMenu": "Plug-in menu", "term.pluginMenu.none": "Geen interactieve plug-ins", - "term.replay": "Herhalen", - "term.uniqueAlbums": "Unieke Albums", - "term.uniqueArtists": "Unieke Artiesten", - "term.uniqueSongs": "Unieke Nummers", - "term.topArtists": "Top Artiesten", - "term.listenedTo": "Geluisterd naar:", + "term.replay": "Replay", + "term.uniqueAlbums": "verschillende albums", + "term.uniqueArtists": "verschillende artiesten", + "term.uniqueSongs": "verschillende nummers", + "term.topArtists": "Top artiesten", + "term.listenedTo": "Beluisterd:", "term.times": "keer", - "term.topAlbums": "Top Albums", + "term.topAlbums": "Top albums", "term.plays": "keer gespeeld", - "term.topGenres": "Top Genres", + "term.topGenres": "Top genres", "term.confirmLogout": "Weet je zeker dat je wilt uitloggen?", "term.creditDesignedBy": "Ontworpen door ${authorUsername}", "home.title": "Home", - "home.recentlyPlayed": "Recent Gespeeld", - "home.recentlyAdded": "Recent Toegevoegd", - "home.artistsFeed": "Je Artiesten Feed", + "home.recentlyPlayed": "Onlangs afgespeeld", + "home.recentlyAdded": "Pas toegevoegd", + "home.artistsFeed": "Je artiesten overzicht", "home.artistsFeed.noArtist": "Volg artiesten om hun nieuwste releases te zien", - "home.madeForYou": "Gemaakt Voor Jou", - "home.friendsListeningTo": "Vrienden Luisteren Naar", - "home.followedArtists": "Gevolgde Artiesten", + "home.madeForYou": "Voor jou gemaakt", + "home.friendsListeningTo": "Vrienden luisteren naar", + "home.followedArtists": "Gevolgde artiesten", "error.appleMusicSubRequired": "Apple Music vereist een abonnement.", "error.connectionError": "Er is een probleem opgetreden bij het verbinden met Apple Music.", - "error.noResults": "Geen Resultaten.", + "error.noResults": "Niets gevonden.", "error.noResults.description": "Probeer een nieuwe zoekopdracht.", - "podcast.followOnCider": "Volg Op Cider", - "podcast.followedOnCider": "Gevolgd Op Cider", - "podcast.subscribeOnItunes": "Abonneer Op iTunes", - "podcast.subscribedOnItunes": "Geabonneerd Op iTunes", + "podcast.followOnCider": "Volg op Cider", + "podcast.followedOnCider": "Gevolgd op Cider", + "podcast.subscribeOnItunes": "Abonneer op iTunes", + "podcast.subscribedOnItunes": "Geabonneerd op iTunes", "podcast.itunesStore": "iTunes Store", "podcast.episodes": "Afleveringen", - "podcast.playEpisode": "Speel Aflevering", - "podcast.website": "Podcast Website", - "action.addToLibrary": "Toevoegen aan Bibliotheek", - "action.addToLibrary.success": "Toegevoegd aan Bibliotheek", - "action.addToLibrary.error": "Fout bij Toevoegen aan Bibliotheek", - "action.removeFromLibrary": "Verwijder uit Bibliotheek", - "action.removeFromLibrary.success": "Verwijderd uit Bibliotheek", - "action.addToQueue": "Toevoegen aan Wachtrij", - "action.addToQueue.success": "Toegevoegd aan Wachtrij", - "action.addToQueue.error": "Fout bij Toevoegen aan Wachtrij", - "action.removeFromQueue": "Verwijder uit Wachtrij", - "action.removeFromQueue.success": "Verwijderd uit Wachtrij", - "action.removeFromQueue.error": "Fout bij Verwijderen uit Wachtrij", - "action.createPlaylist": "Maak een Nieuwe Afspeellijst", - "action.addToPlaylist": "Toevoegen aan Afspeellijst", - "action.removeFromPlaylist": "Verwijder uit Afspeellijst", - "action.addToFavorites": "Toevoegen aan Favorieten", + "podcast.playEpisode": "Speel aflevering", + "podcast.website": "Podcast website", + "action.addToLibrary": "Zet in bibliotheek", + "action.addToLibrary.success": "In bibliotheek", + "action.addToLibrary.error": "Fout bij toevoegen aan bibliotheek", + "action.removeFromLibrary": "Verwijder uit bibliotheek", + "action.removeFromLibrary.success": "Verwijderd uit bibliotheek", + "action.addToQueue": "Toevoegen aan wachtrij", + "action.addToQueue.success": "Toegevoegd aan wachtrij", + "action.addToQueue.error": "Fout bij toevoegen aan wachtrij", + "action.removeFromQueue": "Verwijder uit wachtrij", + "action.removeFromQueue.success": "Verwijderd uit wachtrij", + "action.removeFromQueue.error": "Fout bij verwijderen uit wachtrij", + "action.createPlaylist": "Maak een nieuwe afspeellijst", + "action.addToPlaylist": "Zet in een afspeellijst", + "action.removeFromPlaylist": "Verwijder uit afspeellijst", + "action.addToFavorites": "Toevoegen aan favorieten", "action.follow": "Volgen", "action.follow.success": "Gevolgd", - "action.follow.error": "Fout bij Volgen", + "action.follow.error": "Fout bij volgen", "action.unfollow": "Ontvolgen", "action.unfollow.success": "Ontvolgd", - "action.unfollow.error": "Fout bij Ontvolgen", - "action.playNext": "Speel Volgende", - "action.playLater": "Speel Later", - "action.startRadio": "Start Radio", - "action.goToArtist": "Ga naar Artiest", - "action.goToAlbum": "Ga naar Album", - "action.showInPlaylist": "Weergeven in Afspeellijst", + "action.unfollow.error": "Fout bij ontvolgen", + "action.playNext": "Speel hierna af", + "action.playLater": "Speel als laatste af", + "action.startRadio": "Maak station aan", + "action.goToArtist": "Toon artiest", + "action.goToAlbum": "Toon album", + "action.showInPlaylist": "Weergeven in afspeellijst", "action.showInAppleMusic": "Weergeven in Apple Music", "action.moveToTop": "Verplaatsen uit map", "action.share": "Delen", @@ -230,20 +230,21 @@ "action.unlove": "Leuk ongedaan maken", "action.dislike": "Niet leuk", "action.undoDislike": "Niet leuk ongedaan maken", - "action.showWebRemoteQR": "Web Afstandsbediening", + "action.showWebRemoteQR": "Webbediening", "action.playTracksNext": "Speel ${app.selectedMediaItems.length} nummers als volgende", "action.playTracksLater": "Speel ${app.selectedMediaItems.length} nummers later", "action.removeTracks": "Verwijder ${self.selectedItems.length} nummers uit wachtrij", "action.import": "Importeren", "action.export": "Exporteren", - "action.showAlbum": "Volledige Album Bekijken", - "action.tray.minimize": "Verkleinen naar Systeemvak", + "action.showAlbum": "Toon hele album", + "action.tray.minimize": "Verklein naar systeemvak", "action.tray.quit": "Sluiten", + "action.tray.show": "Tonen", "action.update": "Updaten", "action.install": "Installeren", "action.copy": "Kopiëren", - "action.newpreset": "Nieuwe Voorinstelling...", - "action.deletepreset": "Verwijder Voorinstelling", + "action.newpreset": "Nieuwe voorinstelling...", + "action.deletepreset": "Verwijder voorinstelling", "action.open": "Open", "action.relaunch.confirm": "Wil je Cider opnieuw starten?", "settings.header.general": "Algemeen", @@ -256,15 +257,21 @@ "settings.option.general.resumebehavior.history": "Geschiedenis", "settings.option.general.resumebehavior.history.description": "Cider zet het laatste nummer uit je algehele Apple Music-geschiedenis op verschillende apparaten in de wachtrij.", "settings.option.general.language.main": "Talen", - "settings.option.general.language.fun": "Grappige Talen", + "settings.option.general.language.fun": "Grappige talen", "settings.option.general.language.unsorted": "Ongesorteerd", + "settings.option.general.updateCider": "Update Cider", + "settings.option.general.updateCider.branch": "Cider update branch", + "settings.option.general.updateCider.branch.description": "Selecteer de branch om Cider naar te updaten", + "settings.option.general.updateCider.branch.main": "Stabiel", + "settings.option.general.updateCider.branch.develop": "Ontwikkeling", "settings.notyf.updateCider.update-not-available": "Geen update beschikbaar", "settings.notyf.updateCider.update-downloaded": "Update is gedownload, herstart om toe te passen", + "settings.notyf.updateCider.update-error": "Fout bij updaten van Cider", "settings.notyf.updateCider.update-timeout": "Update time-out", "settings.header.audio": "Audio", "settings.header.audio.description": "Pas de audio-instellingen voor Cider aan.", "settings.option.audio.volumeStep": "Volumestap", - "settings.option.audio.maxVolume": "Maximale Volume", + "settings.option.audio.maxVolume": "Maximale volume", "settings.option.audio.quality": "Geluidskwaliteit", "settings.header.audio.quality.hireslossless": "Hi-Res Lossless", "settings.header.audio.quality.hireslossless.description": "tot 24-bit/192 kHz", @@ -274,8 +281,8 @@ "settings.header.audio.quality.high.description": "256 kbps", "settings.header.audio.quality.standard": "Standaard", "settings.header.audio.quality.standard.description": "64 kbps", - "settings.option.audio.seamlessTransition": "Naadloze Audio-overgang", - "settings.option.audio.enableAdvancedFunctionality": "Geavanceerde Functionaliteit Inschakelen", + "settings.option.audio.seamlessTransition": "Naadloze audio-overgang", + "settings.option.audio.enableAdvancedFunctionality": "Geavanceerde functionaliteit inschakelen", "settings.option.audio.enableAdvancedFunctionality.description": "Het inschakelen van de AudioContext-functionaliteit zorgt voor uitgebreide audiofuncties zoals audionormalisatie, equalizers en visualisaties - op sommige systemen kan dit echter haperingen in audiotracks veroorzaken.", "settings.option.audio.audioLab": "Cider Audio Lab", "settings.option.audio.audioLab.description": "Een assortiment van zelf ontwikkelde audio-effecten voor Cider.", @@ -283,49 +290,51 @@ "settings.option.audio.enableAdvancedFunctionality.analogWarmth": "Analoge Warmte", "settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "Simuleert de analoge warmte gemodelleerd naar de Korg Nutube 6P1", "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity": "Analoge Warmte-intensiteit", - "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description": "Wijzigt de intensiteit van de Analoge Warmtemodule verwerking.", + "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description": "Wijzigt de intensiteit van de analoge warmtemodule verwerking.", "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "Plausibel", "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "Warm", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️", "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoakoestische verbeteringen waardoor alles rijker en levendiger klinkt.", - "settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP is niet compatibel met Verruimtelijking. Schakel Verruimtelijking uit om door te gaan.", - "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Sterkte", + "settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP is niet compatibel met verruimtelijking. Schakel verruimtelijking uit om door te gaan.", + "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP sterkte", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Verandert de sterkte van de audioverwerking. (Agressief kan ongewenste resultaten opleveren)", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Standaard", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Agressief", "settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Audio Normalisatie", "settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normaliseert het piekvolume voor afzonderlijke nummers om een meer uniforme luisterervaring te creëren.", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider Afgestemde Verruimtelijking", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Vooraf afgestemde Verruimtelijking Effect, schakelt de aanpasbare instellingen van Audio Verruimtelijking uit. Verruimtelijking moet ingeschakeld zijn.", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider Verruimtelijking Profiel", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Wijzigt het Afstemmingsprofiel van de Verruimtelijking. (Vereist opnieuw opstarten van de app)", + "settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Audio Verruimtelijking", + "settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Verruimtelijke audio en maak audio driedimensionaal (let op: dit is geen Dolby Atmos)", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider afgestemde verruimtelijking", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Vooraf afgestemde verruimtelijk effect, schakelt de aanpasbare instellingen van audio verruimtelijking uit. Verruimtelijking moet ingeschakeld zijn.", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider-verruimtelijking profiel", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Wijzigt het afstemmingsprofiel van de verruimtelijking. (Vereist herstart van de app)", "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Standaard", "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Audiofiel", "settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "Verruimtelijking is niet compatibel met CAP. Schakel CAP uit om door te gaan.", "settings.header.visual": "Visueel", "settings.header.visual.description": "Pas de visuele instellingen voor Cider aan.", - "settings.option.visual.windowBackgroundStyle": "Achtergrondstijl Venster", + "settings.option.visual.windowBackgroundStyle": "Achtergrondstijl venster", "settings.header.visual.windowBackgroundStyle.none": "Geen", "settings.header.visual.windowBackgroundStyle.artwork": "Omslag", "settings.header.visual.windowBackgroundStyle.image": "Afbeelding", - "settings.option.visual.animatedArtwork": "Geanimeerde Omslag", + "settings.option.visual.animatedArtwork": "Geanimeerde omslag", "settings.header.visual.animatedArtwork.always": "Altijd", "settings.header.visual.animatedArtwork.limited": "Beperkt tot pagina's en speciale vermeldingen", "settings.header.visual.animatedArtwork.disable": "Overal uitschakelen", - "settings.option.visual.animatedArtworkQuality": "Kwaliteit van Geanimeerde Omslagen", + "settings.option.visual.animatedArtworkQuality": "Kwaliteit van geanimeerde omslagen", "settings.header.visual.animatedArtworkQuality.low": "Laag", "settings.header.visual.animatedArtworkQuality.medium": "Gemiddeld", "settings.header.visual.animatedArtworkQuality.high": "Hoog", "settings.header.visual.animatedArtworkQuality.veryHigh": "Héél Hoog", "settings.header.visual.animatedArtworkQuality.extreme": "Extreem", - "settings.option.visual.animatedWindowBackground": "Geanimeerde Vensterachtergrond", - "settings.option.visual.hardwareAcceleration": "Hardware Acceleratie", + "settings.option.visual.animatedWindowBackground": "Geanimeerde vensterachtergrond", + "settings.option.visual.hardwareAcceleration": "Hardware acceleratie", "settings.option.visual.hardwareAcceleration.description": "Vereist herstart", "settings.header.visual.hardwareAcceleration.default": "Standaard", "settings.header.visual.hardwareAcceleration.webGPU": "WebGPU", "settings.header.visual.theme": "Thema", "settings.option.visual.theme.github.download": "Installeren vanuit GitHub-URL", - "settings.option.visual.theme.github.explore": "Verken GitHub Thema's", + "settings.option.visual.theme.github.explore": "Ontdek GitHub thema's", "settings.header.visual.theme.github.page": "Thema's van GitHub", "settings.option.visual.theme.github.install.confirm": "Weet je zeker dat je '{{ repo }}' wilt installeren?", "settings.prompt.visual.theme.github.URL": "Voer de URL in van het thema dat je wilt installeren", @@ -333,7 +342,7 @@ "settings.notyf.visual.theme.install.error": "Thema-installatie mislukt", "settings.header.visual.plugin": "Plug-in", "settings.option.visual.plugin.github.download": "Installeren vanaf GitHub-URL", - "settings.option.visual.plugin.github.explore": "Verken GitHub Plug-ins", + "settings.option.visual.plugin.github.explore": "Ontdek GitHub Plug-ins", "settings.header.visual.plugin.github.page": "Plug-ins van GitHub", "settings.option.visual.plugin.github.install.confirm": "Weet je zeker dat je {{ repo }} wilt installeren?", "settings.prompt.visual.plugin.github.URL": "Voer de URL in van de plug-in die u wilt installeren", @@ -342,7 +351,7 @@ "settings.notyf.visual.plugin.install.error": "Installatie van plug-in mislukt", "settings.option.visual.theme.default": "Cider", "settings.option.visual.theme.dark": "Donker", - "settings.option.visual.showPersonalInfo": "Toon Persoonlijke Informatie", + "settings.option.visual.showPersonalInfo": "Toon persoonlijke informatie", "settings.header.window": "Venster", "settings.header.window.description": "Pas de vensterinstellingen voor Cider aan.", "settings.option.window.openOnStartup": "Cider openen bij opstarten", @@ -351,15 +360,17 @@ "settings.header.lyrics.description": "Pas de songtekstinstellingen voor Cider aan.", "settings.option.lyrics.enableMusixmatch": "Musixmatch-songteksten inschakelen", "settings.option.lyrics.enableMusixmatchKaraoke": "Karaoke-modus inschakelen (alleen Musixmatch)", - "settings.option.lyrics.musixmatchPreferredLanguage": "Musixmatch Vertaling Voorkeurstaal", + "settings.option.lyrics.musixmatchPreferredLanguage": "Musixmatch voorkeurstaal", "settings.option.lyrics.enableYoutubeLyrics": "Schakel YouTube-songteksten in voor muziekvideo's", "settings.header.connectivity": "Connectiviteit", "settings.header.connectivity.description": "Pas de verbindingsinstellingen voor Cider aan.", "settings.option.connectivity.discordRPC": "Discord Rich Presence", "settings.option.connectivity.playbackNotifications": "Afspeelmeldingen", + "settings.header.connectivity.discordRPC.cider": "Weergeven als 'Cider'", + "settings.header.connectivity.discordRPC.appleMusic": "Weergeven als 'Apple Music'", "settings.option.connectivity.discordRPC.clearOnPause": "Discord Rich Presence bij pauze wissen", "settings.option.connectivity.lastfmScrobble": "Last.fm Scrobbling", - "settings.option.connectivity.lastfmScrobble.delay": "Last.fm Scrobble Vertraging (%)", + "settings.option.connectivity.lastfmScrobble.delay": "Last.fm scrobble vertraging (%)", "settings.option.connectivity.lastfmScrobble.nowPlaying": "Schakel 'Last.fm wordt nu afgespeeld' in", "settings.option.connectivity.lastfmScrobble.removeFeatured": "Verwijder deelneemende artiesten uit de titel van het nummer (Last.fm)", "settings.option.connectivity.lastfmScrobble.filterLoop": "Herhaalde tracks filteren (Last.fm)", @@ -369,16 +380,16 @@ "settings.header.experimental": "Experimenteel", "settings.header.experimental.description": "Pas de experimentele instellingen voor Cider aan.", "settings.option.experimental.unknownPlugin": "Onbekende Bronnen", - "settings.option.experimental.unknownPlugin.description": "Installatie van plug-ins van andere repo's dan de Cider Plugin Repository toestaan", + "settings.option.experimental.unknownPlugin.description": "Installatie van plug-ins van andere repo's dan de Cider plugin repository toestaan", "settings.option.experimental.compactUI": "Compacte UI", "settings.option.window.close_button_hide": "Sluitknop zou de toepassing moeten verbergen", - "settings.option.experimental.inline_playlists": "Inline Afspeellijsten en Albums", - "settings.option.advanced.playlistTrackMapping": "Afspeellijst Tracktoewijzing", + "settings.option.experimental.inline_playlists": "Inline afspeellijsten en albums", + "settings.option.advanced.playlistTrackMapping": "Afspeellijst tracktoewijzing", "settings.option.advanced.playlistTrackMapping.description": "Maakt diep scannen van afspeellijsten mogelijk om te bepalen welke nummers in welke afspeellijsten staan. De bouwtijden van de cache van afspeellijsten kunnen aanzienlijk toenemen.", "settings.option.visual.transparent": "Transparante kader", - "settings.option.visual.transparent.description": "Heeft thema-ondersteuning nodig, moet opnieuw worden gestart", - "spatial.notTurnedOn": "Audio Verruimtelijking is uitgeschakeld. Schakel het eerst in om het te gebruiken.", - "spatial.spatialProperties": "Ruimtelijke Eigenschappen", + "settings.option.visual.transparent.description": "Transparante kader (heeft thema-ondersteuning nodig, moet opnieuw worden gestart)", + "spatial.notTurnedOn": "Audio verruimtelijking is uitgeschakeld. Schakel het eerst in om het te gebruiken.", + "spatial.spatialProperties": "Ruimtelijke eigenschappen", "spatial.width": "Breedte", "spatial.height": "Hoogte", "spatial.depth": "Diepte", @@ -398,7 +409,7 @@ "spatial.audioSource": "Geluidsbron", "settings.header.unfinished": "Onvoltooid", "remote.web.title": "Cider Remote", - "remote.web.description": "Scan de QR code om je telefoon te koppelen met deze Cider-instantie", + "remote.web.description": "Scan de QR-code om je telefoon te koppelen met deze Cider-instantie", "share.platform.twitter.tweet": "Luister naar {{song}} op Apple Music.\n\n{{url}}\n\n#AppleMusic #Cider", "share.platform.twitter": "Twitter", "share.platform.facebook": "Facebook", @@ -408,6 +419,6 @@ "share.platform.messenger": "Messenger", "share.platform.email": "E-mail", "share.platform.songLink": "Kopiëren met song.link", - "share.platform.clipboard": "Kopieer Link", - "about.thanks": "Grote dank aan het Cider Collective Team en alle bijdragers." + "share.platform.clipboard": "Kopieer link", + "about.thanks": "Dank aan het Cider Collective Team en al hun bijdragers." } diff --git a/src/i18n/pt_BR.json b/src/i18n/pt_BR.json index ff754442..6d21fc33 100644 --- a/src/i18n/pt_BR.json +++ b/src/i18n/pt_BR.json @@ -39,7 +39,7 @@ "term.hideSearch": "Esconder barra de pesquisa", "term.library": "Biblioteca", "term.listenNow": "Escutar Agora", - "term.browse": "Navegar", + "term.browse": "Explorar", "term.radio": "Rádio", "term.recentlyAdded": "Adicionados Recentemente", "term.songs": "Músicas", @@ -67,8 +67,8 @@ "term.enableShuffle": "Ativar ordem aleatória", "term.disableShuffle": "Desativar ordem aleatória", "term.repeat": "Repetir", - "term.enableRepeatOne": "Ativar repetir uma", - "term.disableRepeatOne": "Desativar repetir uma", + "term.enableRepeatOne": "Repetir música", + "term.disableRepeatOne": "Repetir tudo", "term.disableRepeat": "Desativar repetição", "term.volume": "Volume", "term.mute": "Ativar Mudo", @@ -108,11 +108,11 @@ "term.less": "Menos", "term.showMore": "Mostrar mais", "term.showLess": "Mostrar menos", - "term.topSongs": "Top Músicas", + "term.topSongs": "Músicas populares", "term.latestReleases": "Últimos lançamentos", "term.time.added": "Adicionado", - "term.time.released": "Lançado", - "term.time.updated": "Atualizado", + "term.time.released": "Lançado em", + "term.time.updated": "Atualizado em", "term.time.days": "dias", "term.time.day": { "one": "dia", @@ -189,7 +189,7 @@ "term.plugin": "Plugin", "term.pluginMenu": "Menu de Plugins", "term.pluginMenu.none": "Nenhum plugin interativo", - "term.replay": "Reproduzir novamente", + "term.replay": "Replay", "term.uniqueAlbums": "Álbuns Únicos", "term.uniqueArtists": "Artistas Únicos", "term.uniqueSongs": "Músicas Únicas", @@ -197,7 +197,7 @@ "term.listenedTo": "Escutou:", "term.times": "vezes", "term.topAlbums": "Top Álbuns", - "term.plays": "Plays", + "term.plays": "vezes", "term.topGenres": "Top Gêneros", "term.confirmLogout": "Você tem certeza que você quer se desconectar?", "term.creditDesignedBy": "Projetado por ${authorUsername}", @@ -219,11 +219,11 @@ "action.removeFavorite": "Remover Favorito", "action.refresh": "Atualizar", "home.title": "Início", - "home.recentlyPlayed": "Tocado Recentemente", + "home.recentlyPlayed": "Reproduções Recentes", "home.recentlyAdded": "Adicionado Recentemente", "home.artistsFeed": "Seu Feed de Artistas", "home.artistsFeed.noArtist": "Siga alguns artistas para ver os seus últimos lançamentos", - "home.madeForYou": "Feito Para Você", + "home.madeForYou": "Feito para Você", "home.friendsListeningTo": "Seus Amigos Estão Escutando", "home.followedArtists": "Artistas Seguidos", "error.appleMusicSubRequired": "Apple Music requer uma assinatura.", @@ -260,7 +260,7 @@ "action.removeFromQueue.success": "Removido da Fila", "action.removeFromQueue.error": "Erro ao Remover da Fila", "action.createPlaylist": "Criar uma Nova Playlist", - "action.addToPlaylist": "Adicionar à Playlist", + "action.addToPlaylist": "Adicionar a uma Playlist", "action.removeFromPlaylist": "Remover da Playlist", "action.addToFavorites": "Adicionar aos Favoritos", "action.follow": "Seguir", @@ -269,28 +269,28 @@ "action.unfollow": "Deixar de Seguir", "action.unfollow.success": "Deixou de Seguir", "action.unfollow.error": "Erro ao Deixar de Seguir", - "action.playNext": "Reproduzir Próxima", - "action.playLater": "Reproduzir Depois", - "action.startRadio": "Iniciar Rádio", + "action.playNext": "Reproduzir a Seguir", + "action.playLater": "Reproduzir por Último", + "action.startRadio": "Criar Estação", "action.goToArtist": "Ir para Artista", "action.goToAlbum": "Ir para Álbum", "action.showInPlaylist": "Mostrar na Playlist", "action.showInAppleMusic": "Mostrar no Apple Music", - "action.moveToTop": "Mover fora da Pasta", + "action.moveToTop": "Mover pra Fora da Pasta", "action.share": "Compartilhar", "action.rename": "Renomear", "action.love": "Gostar", "action.unlove": "Deixar de Gostar", - "action.dislike": "Não Gostei", - "action.undoDislike": "Desfazer não gostei", + "action.dislike": "Não Curtir", + "action.undoDislike": "Desfazer Não Curtir", "action.showWebRemoteQR": "Controle Web", - "action.playTracksNext": "Tocar ${app.selectedMediaItems.length} faixas na próxima", - "action.playTracksLater": "Tocar ${app.selectedMediaItems.length} faixas depois", - "action.removeTracks": "Remover ${self.selectedItems.length} faixas da fila", + "action.playTracksNext": "Reproduzir ${app.selectedMediaItems.length} a Seguir", + "action.playTracksLater": "Reproduzir ${app.selectedMediaItems.length} por Último", + "action.removeTracks": "Remover ${self.selectedItems.length} da fila", "action.import": "Importar", "action.export": "Exportar", "action.showAlbum": "Mostrar Álbum Completo", - "action.tray.minimize": "Minimizar para Bandeja", + "action.tray.minimize": "Minimizar para Barra de Tarefas", "action.tray.show": "Mostrar Cider", "action.tray.listento": "Ouvir:", "action.update": "Atualizar", @@ -308,7 +308,7 @@ "action.cast.airplay.underdevelopment": "AirPlay ainda está em desenvolvimento", "action.cast.scan": "Escanear", "action.cast.scanning": "Escaneando...", - "action.createNew": "Criar Novo...", + "action.createNew": "Criar Nova...", "action.openArtworkInBrowser": "Abrir capa no navegador", "action.scrollToTop": "Rolar até o topo", "menubar.options.view": "Ver", @@ -362,7 +362,7 @@ "settings.option.general.themeUpdateNotification": "Verificar automaticamente por atualizações de temas", "settings.option.general.showLovedTracksInline": "Mostrar faixas curtidas", "settings.option.general.pagination": "Itens exibidos por página", - "settings.options.general.pagination.description": "Isso determina quantas músicas/álbuns para mostrar inicialmente na rolagem infinita, ou quantas músicas/álbuns mostrar numa página só", + "settings.options.general.pagination.description": "Isso determina quantas músicas/álbuns vão ser mostradas inicialmente na rolagem infinita, ou quantas músicas/álbuns serão mostradas numa página só", "settings.description.search": "Buscar", "settings.description.albums": "Biblioteca de Álbuns", "settings.description.artists": "Biblioteca de Artistas", @@ -374,7 +374,7 @@ "settings.description.cast": "Transmitir para Dispositivos", "settings.description.settings": "Configurações", "settings.description.developer": "Ferramentas de Desenvolvedor", - "settings.description.listnow": "Escutar Agora", + "settings.description.listnow": "Ouvir Agora", "settings.description.recentAdd": "Adicionados Recentemente", "settings.description.songs": "Músicas", "settings.notyf.updateCider.update-not-available": "Nenhuma atualização disponível", @@ -385,9 +385,9 @@ "settings.option.audio.volumeStep": "Etapas de Volume", "settings.option.audio.advanced": "Controle Avançado de Volume", "settings.option.audio.maxVolume": "Volume Máximo", - "settings.option.audio.changePlaybackRate": "Mudar Velocidade de Reprodução", + "settings.option.audio.changePlaybackRate": "Alterar Velocidade de Reprodução", "settings.option.audio.playbackRate": "Velocidade de Reprodução", - "settings.option.audio.playbackRate.change": "Mudar", + "settings.option.audio.playbackRate.change": "Alterar", "settings.option.audio.quality": "Qualidade de Áudio", "settings.header.audio.quality.hireslossless": "Hi-Res Lossless", "settings.header.audio.quality.hireslossless.description": "até 24-bit/192 kHz", @@ -487,13 +487,13 @@ "settings.option.visual.theme.github.install.confirm": "Você tem certeza que deseja instalar {{ repo }}?", "settings.prompt.visual.theme.github.URL": "Introduza a URL do tema que você deseja instalar", "settings.prompt.visual.theme.uninstallTheme": "Você tem certeza que deseja desinstalar? {{ theme }}?", - "settings.option.visual.theme.checkForUpdates": "Procurar por updates", + "settings.option.visual.theme.checkForUpdates": "Procurar por atualizações", "settings.header.visual.styles": "Estilos", "settings.option.visual.theme.manageStyles": "Gerenciar Estilos", "settings.option.visual.theme.uninstall": "Desinstalar", "settings.option.visual.theme.viewInfo": "Ver Informação", - "settings.option.visual.theme.github.available": "Disponível", - "settings.option.visual.theme.github.applied": "Aplicado", + "settings.option.visual.theme.github.available": "Disponíveis", + "settings.option.visual.theme.github.applied": "Aplicados", "settings.notyf.visual.theme.install.success": "Tema instalado com sucesso", "settings.notyf.visual.theme.install.error": "A instalização do tema falhou", "settings.header.visual.plugin": "Plugin", @@ -513,7 +513,7 @@ "settings.option.window.openOnStartup": "Abrir Cider na Inicialização", "settings.option.window.openOnStartup.hidden": "Abrir Escondido", "settings.option.window.useNativeTitleBar": "Usar Barra de Título Nativa", - "settings.option.window.windowControlStyle": "Estilo de Controle de Janela", + "settings.option.window.windowControlStyle": "Estilo dos Botões da Janela", "settings.option.window.windowControlStyle.right": "Direita", "settings.option.window.windowControlStyle.left": "Esquerda", "settings.header.lyrics": "Letras", @@ -620,29 +620,17 @@ "oobe.amupsell.promoExplained": "Algumas assinaturas promocionais e de avaliação da Apple Music fora dos EUA não têm acesso às APIs do Apple Music Web Player necessárias para o funcionamento do Cider. Para verificar se sua assinatura avaliativa funcionará com o Cider vá até {{ amWebUrl }} faça login e tente tocar alguma música. Se funcionar, ótimo! Você está pronto para utilizar o Cider, no entanto, se não funcionar considere se increver ao Apple Music aqui: {{ subscribeUrl }}", "oobe.intro.title": "Bem-vindo (a) ao Cider", "oobe.intro.subtitle": "", - "oobe.intro.text": "Vamos preparar algumas coisas para que você possa usar o Cider como gostaria. Você sempre pode mudar essas configurações mais tarde.", + "oobe.intro.text": "Vamos preparar algumas coisas para que você possa usar o Cider como você gostaria. Você sempre pode mudar essas configurações mais tarde.", "oobe.general.title": "Geral", "oobe.general.subtitle": "", "oobe.general.text": "", "oobe.audio.title": "Áudio", "oobe.audio.subtitle": "", - "oobe.audio.text": "Cider tem a sua disposição um conjunto personalizado de áudio sintonizado e projetado que entrega uma experiência de áudio em alta qualidade.\nApresentando Cider Adrenaline, Atmosphere Realizer, e Áudio Espacial.\nPara ativar essa funcionalidade \"Funcionalidade de Áudio Avançada\" deve ser ativada.\nAtivar a Funcionalidade de Áudio Avançada vai te dar acesso a essas melhorias no Laboratório de Áudio Cider, encontrado nas configurações do aplicativo.", + "oobe.audio.text": "Cider tem a sua disposição um conjunto personalizado de áudio sintonizado e feito especialmente para criar uma experiência de áudio em alta qualidade.\nApresentando Cider Adrenaline, Atmosphere Realizer, e Áudio Espacial.\nPara ativar essas funcionalidades, a \"Funcionalidade de Áudio Avançada\" deve ser ativada.\nAtivar a Funcionalidade de Áudio Avançada vai te dar acesso a essas melhorias no Laboratório de Áudio Cider, encontrado nas configurações do aplicativo.", "oobe.audio.advancedFunctionality": "", "oobe.visual.title": "Aparência", "oobe.visual.subtitle": "", "oobe.visual.text": "", - "oobe.visual.layout.text": "Cider apresenta dois layouts diferentes de janela.\nMaverick é um layout semelhante ao iTunes com o player na parte superior da janela.\nMojave é uma nova spin criada pela Cider Collective.\n\nVocê pode mudar o layout quando quiser nas configurações.", - "oobe.visual.suggestingThemes": "Usar temas é uma boa maneira de personalizar sua experiência. Aqui vão alguns que nós sugerimos: ", - "oobe.visual.suggestingThemes.subtext": "(Esses temas serão baixados do GitHub)", - "oobe.visual.suggestingThemes.default": "Cider", - "oobe.visual.suggestingThemes.default.text": "O tema clássico do Cider.", - "oobe.visual.suggestingThemes.dark": "Escuro", - "oobe.visual.suggestingThemes.dark.text": "Escuridão.", - "oobe.visual.suggestingThemes.community1": "Groovy", - "oobe.visual.suggestingThemes.community1.text": "Um tema inspirado na WinUI", - "oobe.visual.suggestingThemes.community2": "iTheme", - "oobe.visual.suggestingThemes.community2.text": "O layout clássico da maça.", - "oobe.visual.suggestingThemes.community3": "Dracula", - "oobe.visual.suggestingThemes.community3.text": "O icônico esquema de cores Dracula.", + "oobe.visual.layout.text": "Cider apresenta dois estilos diferentes de janela.\nMaverick é um estilo semelhante ao iTunes com o player na parte superior da janela.\nMojave é um novo estilo criado pela Cider Collective.\n\nVocê pode mudar o layout quando quiser nas configurações.", "oobe.amsignin.title": "" } diff --git a/src/i18n/source/en_US.json b/src/i18n/source/en_US.json index f5f9ace8..50af04eb 100644 --- a/src/i18n/source/en_US.json +++ b/src/i18n/source/en_US.json @@ -543,6 +543,7 @@ "settings.option.connectivity.lastfmScrobble.filterLoop.description": "Prevent looped tracks from being scrobbled or displayed in the Now Playing list on Last.fm.", "settings.option.connectivity.lastfmScrobble.filterTypes": "Filter Media Types (Last.fm)", "settings.option.connectivity.lastfmScrobble.manualToken": "Enter Last.fm Token Manually", + "settings.option.connectivity.lastfmScrobble.manualToken.link": "Click here to get a Last.fm token", "settings.notyf.connectivity.lastfmScrobble.connectError": "Last.fm Connection Timed Out", "settings.notyf.connectivity.lastfmScrobble.connectSuccess": "Last.fm Connection Successful", "settings.notyf.connectivity.lastfmScrobble.connecting": "Connecting to Last.fm...", diff --git a/src/i18n/zh_CN.json b/src/i18n/zh_CN.json index 1d76c7a5..61b59696 100644 --- a/src/i18n/zh_CN.json +++ b/src/i18n/zh_CN.json @@ -23,8 +23,8 @@ "term.login": "登录", "term.quickNav": "快速导航", "term.about": "关于", - "term.privateSession": "隐身聆听", - "term.disablePrivateSession": "停止隐身聆听", + "term.privateSession": "无痕聆听", + "term.disablePrivateSession": "关闭无痕聆听", "term.queue": "待播清单", "term.autoplay": "自动播放", "term.lyrics": "歌词", @@ -121,8 +121,8 @@ "term.time.minute": "分钟", "term.time.seconds": "秒", "term.time.second": "秒", - "term.fullscreenView": "全屏", - "term.defaultView": "默认", + "term.fullscreenView": "全屏显示", + "term.defaultView": "默认显示", "term.audioControls": "音频控制", "term.audioSettings": "音频设置", "term.clearAll": "清空", @@ -175,9 +175,9 @@ "term.pluginMenu": "插件菜单", "term.pluginMenu.none": "沒有交互式插件", "term.replay": "音乐回忆", - "term.uniqueAlbums": "独特专辑", - "term.uniqueArtists": "超绝艺人", - "term.uniqueSongs": "别致单曲", + "term.uniqueAlbums": "张精彩专辑", + "term.uniqueArtists": "位匠心艺人", + "term.uniqueSongs": "首独特单曲", "term.topArtists": "热门艺人", "term.listenedTo": "听过", "term.times": "次", @@ -188,7 +188,7 @@ "term.creditDesignedBy": "由 ${authorUsername} 设计", "term.discNumber": "碟 ${discNumber}", "term.reload": "重新载入 Cider ?", - "term.toggleprivate": "切换隐身聆听", + "term.toggleprivate": "切换无痕聆听", "term.webremote": "远程控制", "term.cast": "投射", "term.cast2": "投射到设备", @@ -235,25 +235,25 @@ "action.editTracklist": "编辑歌曲清单", "action.addToLibrary": "加入资料库", "action.addToLibrary.success": "成功加入资料库", - "action.addToLibrary.error": "加入资料库的过程发生了错误", + "action.addToLibrary.error": "加入资料库的过程中发生了错误", "action.removeFromLibrary": "从资料库中移除", "action.removeFromLibrary.success": "已从资料库中移除", "action.addToQueue": "加入待播清单", - "action.addToQueue.success": "成功加入加入待播清单", - "action.addToQueue.error": "加入加入待播清单的过程发生了错误", - "action.removeFromQueue": "从加入待播清单中移除", - "action.removeFromQueue.success": "已从加入待播清单中移除", - "action.removeFromQueue.error": "从加入待播清单中移除的过程发生了错误", + "action.addToQueue.success": "成功加入待播清单", + "action.addToQueue.error": "加入待播清单的过程中发生了错误", + "action.removeFromQueue": "从待播清单中移除", + "action.removeFromQueue.success": "已从待播清单中移除", + "action.removeFromQueue.error": "从待播清单中移除的过程中发生了错误", "action.createPlaylist": "新建播放列表", "action.addToPlaylist": "添加到播放列表", - "action.removeFromPlaylist": "从播放列表移除", + "action.removeFromPlaylist": "从播放列表中移除", "action.addToFavorites": "添加至收藏", "action.follow": "关注", "action.follow.success": "已关注", - "action.follow.error": "尝试关注的过程发生了错误", + "action.follow.error": "尝试关注的过程中发生了错误", "action.unfollow": "取消关注", "action.unfollow.success": "已取消关注", - "action.unfollow.error": "尝试取消关注的过程发生了错误", + "action.unfollow.error": "尝试取消关注的过程中发生了错误", "action.playNext": "插播", "action.playLater": "最后播放", "action.startRadio": "开始电台", @@ -274,15 +274,15 @@ "action.removeTracks": "从待播清单中移除 ${self.selectedItems.length} 首歌曲", "action.import": "导入", "action.export": "导出", - "action.showAlbum": "显示专辑", + "action.showAlbum": "显示完整专辑", "action.tray.minimize": "最小化", "action.tray.show": "显示 Cider", "action.tray.listento": "Listen To:", "action.update": "更新", "action.install": "安装", - "action.copy": "复制", - "action.newpreset": "新建默认...", - "action.deletepreset": "删除默认", + "action.copy": "拷贝", + "action.newpreset": "新建预设...", + "action.deletepreset": "删除预设", "action.open": "打开", "action.close": "关闭", "action.relaunch.confirm": "您想重新启动 Cider 吗?", @@ -296,7 +296,7 @@ "action.createNew": "添加...", "action.openArtworkInBrowser": "在浏览器中打开专辑封面", "action.scrollToTop": "回到顶部", - "menubar.options.view": "查看 ", + "menubar.options.view": "查看", "menubar.options.reload": "重新载入", "menubar.options.forcereload": "强制重新载入", "menubar.options.toggledevtools": "切换开发人员工具", @@ -340,10 +340,10 @@ "settings.option.general.keybindings.control": "控制", "settings.option.general.keybindings.interface": "界面", "settings.option.general.keybindings.advanced": "高级", - "settings.option.general.keybindings.pressCombination": "按下两个键组合来更新操作设定。", + "settings.option.general.keybindings.pressCombination": "按下两个键的组合来更新快捷键。", "settings.option.general.keybindings.pressEscape": "按下 Esc 键返回。", "settings.notyf.general.keybindings.update.success": "快捷键更新成功。", - "settings.prompt.general.keybindings.update.success": "快捷键更新成功,按下 OK 重新启动 Cider 。", + "settings.prompt.general.keybindings.update.success": "快捷键更新成功。按下 OK 键重新启动 Cider 。", "settings.option.general.themeUpdateNotification": "自动检查主题更新", "settings.option.general.showLovedTracksInline": "行内显示喜爱曲目", "settings.option.general.pagination": "每页显示的曲目数", @@ -352,15 +352,15 @@ "settings.description.albums": "资料库专辑", "settings.description.artists": "资料库艺人", "settings.description.browse": "浏览", - "settings.description.private": "隐身聆听", + "settings.description.private": "切换无痕聆听", "settings.description.remote": "远程控制", "settings.description.audio": "音频设定", "settings.description.plugins": "插件目录", "settings.description.cast": "投射到装置", "settings.description.settings": "设置", - "settings.description.developer": "开发者", + "settings.description.developer": "开发者工具", "settings.description.listnow": "现在就听", - "settings.description.recentAdd": "最近加入", + "settings.description.recentAdd": "最近添加", "settings.description.songs": "歌曲", "settings.notyf.updateCider.update-not-available": "没有可用的更新", "settings.notyf.updateCider.update-downloaded": "更新已成功下载,重启后进行更新", @@ -375,21 +375,21 @@ "settings.option.audio.playbackRate.change": "修改", "settings.option.audio.quality": "音质", "settings.header.audio.quality.hireslossless": "高解析度无损", - "settings.header.audio.quality.hireslossless.description": "(最高 24 位/192 kHz)", + "settings.header.audio.quality.hireslossless.description": "(最高 24 位/192 kHz)", "settings.header.audio.quality.lossless": "无损", - "settings.header.audio.quality.lossless.description": "(最高 24 位/48 kHz)", + "settings.header.audio.quality.lossless.description": "(最高 24 位/48 kHz)", "settings.header.audio.quality.high": "高音质", "settings.header.audio.quality.high.description": "256 kbps", "settings.header.audio.quality.standard": "高效率", "settings.header.audio.quality.standard.description": "64 kbps", "settings.option.audio.seamlessTransition": "无缝播放", - "settings.option.audio.enableAdvancedFunctionality": "高级音频功能", + "settings.option.audio.enableAdvancedFunctionality": "启用高级音频功能", "settings.option.audio.enableAdvancedFunctionality.description": "打开 AudioContext 将启用类似音量平衡和等化器的高级设置。但这并不一定适合每部电脑,可能会发生音乐卡顿。", "settings.warn.audio.enableAdvancedFunctionality.lowcores": "您的电脑可能无法处理这些功能, 您确定要继续?", "settings.option.audio.audioLab": "Cider 音频实验室", "settings.option.audio.audioLab.description": "包含由 Cider 开发团队进行的各种音频优化功能。", "settings.option.audio.audioLab.subheader": "Designed by Cider Acoustic Technologies in California", - "settings.warn.audioLab.withoutAF": "使用 Cider 音频实验室需要打开进阶音频功能才可使用。", + "settings.warn.audioLab.withoutAF": "Cider 音频实验室需要打开高级音频功能才可使用。", "settings.warn.enableAdvancedFunctionality": "此功能需要开启高级音频功能才可使用。", "settings.option.audio.enableAdvancedFunctionality.analogWarmth": "模拟温暖", "settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "以 Korg Nutube 6P1 为蓝本的模拟温暖。", @@ -397,10 +397,10 @@ "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description": "改变模拟温暖模组处理的强度。", "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "温和", "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "温暖", - "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer": "Cider 音乐气氛实现器™️", - "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer.description": "以最先进的音频置为蓝本,实现不同的音乐气氛。", - "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode": "Cider 音乐气氛™️模式", - "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.description": "更改气氛实现器模块的操作模式。", + "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer": "Cider 音乐氛围实现器™️", + "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer.description": "以最先进的音频置为蓝本,实现不同的音乐氛围。", + "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode": "Cider 音乐氛围实现器™️模式", + "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.description": "更改氛围实现器模块的操作模式。", "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_STANDARD": "红茶芝士奶盖", "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_PLUS": "玄米珍珠奶茶", "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_1": "岩盐芝士奶茶", @@ -412,9 +412,9 @@ "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500B": "樱桃克拉芙缇", "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500C": "宇治抹茶麻糬", "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.CUDDLE": "温暖抱抱", - "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider 数码增强音频处理™️", + "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider 数码增强音频处理器™️", "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "通过人类的听力心理学模型和 AAC 编码特色的即时算法,强化 AAC 音频的感知音频质量。", - "settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "数码增强音频处理与空间音频不兼容,请先停用空间音频。", + "settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "数码增强音频处理器并不兼容空间音频。请关闭空间音频后再继续进行操作。", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "数码增强音频处理设置", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "将更改音频处理的激进/振奋程度(增强选项有可能会引起杂讯)。", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "标准", @@ -425,9 +425,9 @@ "settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "自动将歌曲播放音量调整到相同水平,享受更舒适的聆听体验。(不适用于用户上传的歌曲)", "settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "此功能由音频实验室管理", "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider 空间音频效果", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "预先调整音频空间效果,关闭空间音讯可自订设置。", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider 音频空间配置档", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "变更音频空间的配置档,需重新启动应用程序。", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "预先调整的空间音频效果,已禁用空间音频的自定义设置。", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider 空间音频配置文件", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "更改空间音频的配置文件,需重新启动应用程序。", "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "标准", "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.soundstage": "声场", "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.separation": "分离感", @@ -436,7 +436,7 @@ "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.diffused": "扩散", "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.bplk": "安可", "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.hw2k": "延长版安可", - "settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "音频空间无法与 CAP 相容,请关闭 CAP 在进行操作。", + "settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "空间音频并不兼容数码增强音频处理器。请关闭数码增强音频处理器后再继续进行操作。", "settings.option.audio.dbspl.display": "显示 dB SPL(声压)", "settings.option.audio.dbspl.description": "(专业用户选项) 音量滑动条显示 dB SPL 而非 dBFS。", "settings.option.audio.dbfs.calibration": "0 dBFS 校正", @@ -479,7 +479,7 @@ "settings.option.visual.theme.viewInfo": "查看信息", "settings.option.visual.theme.github.available": "可使用的主题", "settings.option.visual.theme.github.applied": "已应用", - "settings.notyf.visual.theme.install.success": "主题成功安装", + "settings.notyf.visual.theme.install.success": "主题安装成功", "settings.notyf.visual.theme.install.error": "主题安装失败", "settings.header.visual.plugin": "插件", "settings.option.visual.plugin.github.download": "从 GitHub 链接安装", @@ -487,8 +487,8 @@ "settings.header.visual.plugin.github.page": "来自 GitHub 的插件", "settings.option.visual.plugin.github.install.confirm": "您确定要安装 {{ repo }} 吗?", "settings.prompt.visual.plugin.github.URL": "输入您要安装插件的链接", - "settings.prompt.visual.plugin.github.success": "插件已成功安装,请重新启动 Cider 以生效。", - "settings.notyf.visual.plugin.install.success": "插件成功安装", + "settings.prompt.visual.plugin.github.success": "插件已安装成功,请重新启动 Cider 以生效。", + "settings.notyf.visual.plugin.install.success": "插件安装成功", "settings.notyf.visual.plugin.install.error": "插件安装失败", "settings.option.visual.theme.default": "默认", "settings.option.visual.theme.dark": "午夜黑", @@ -519,7 +519,7 @@ "settings.option.connectivity.discordRPC.detailsFormat": "详细信息格式", "settings.option.connectivity.discordRPC.stateFormat": "动态格式", "settings.option.connectivity.discordRPC.reload": "重新加载 DiscordRPC", - "settings.option.connectivity.discordRPC.reconnectedToUser": "DiscordRPC 重新连接至用户: {{user}} ({{userid}})", + "settings.option.connectivity.discordRPC.reconnectedToUser": "DiscordRPC 重新连接至用户:{{user}} ({{userid}})", "settings.option.connectivity.lastfmScrobble": "Last.FM 音乐记录", "settings.option.connectivity.lastfmScrobble.delay": "Last.FM 歌曲追踪延迟 (%)", "settings.option.connectivity.lastfmScrobble.nowPlaying": "打开 Last.FM 正在聆听", @@ -531,7 +531,7 @@ "settings.notyf.connectivity.lastfmScrobble.connectError": "Last.fm 连接超时", "settings.notyf.connectivity.lastfmScrobble.connectSuccess": "Last.fm 连接成功", "settings.notyf.connectivity.lastfmScrobble.connecting": "正在连接至 Last.fm...", - "settings.header.debug": "Debug", + "settings.header.debug": "调试", "settings.option.debug.copy_log": "拷贝日志至剪贴板", "settings.option.debug.openAppData": "打开 Cider 程序文件夹", "settings.header.experimental": "实验性功能", @@ -558,7 +558,7 @@ "settings.header.connect": "同步", "settings.option.connect.link_account": "开启 Cider Connect 同步", "settings.option.connect.link_account.description": "将您的 Discord 帐户与 Cider Connect 关联后,您可以储存用户资料,包括设定、均衡器,并在后续版本中加入更多可同步选项。(正在更新中)", - "spatial.notTurnedOn": "请在设置中开启空间音频。", + "spatial.notTurnedOn": "空间音频已关闭。如需使用,请先在设置中开启空间音频。", "spatial.spatialProperties": "空间属性", "spatial.width": "宽度", "spatial.height": "高度", @@ -579,7 +579,7 @@ "spatial.audioSource": "音源", "settings.header.unfinished": "未完成", "remote.web.title": "Cider 远程控制", - "remote.web.description": "扫描以下的二维码以控制 Cider", + "remote.web.description": "扫描以下二维码以将您的手机与 Cider 配对", "share.platform.twitter.tweet": "在 Apple Music 上聆听 {{song}}。 \n\n{{url}}\n\n#AppleMusic #Cider", "share.platform.twitter": "Twitter", "share.platform.facebook": "Facebook", @@ -588,8 +588,8 @@ "share.platform.whatsapp": "WhatsApp", "share.platform.messenger": "Messenger", "share.platform.email": "电子邮件", - "share.platform.songLink": "复制 song.link 链接", - "share.platform.clipboard": "复制到剪贴板", + "share.platform.songLink": "拷贝 song.link 链接", + "share.platform.clipboard": "拷贝链接", "about.thanks": "郑重感谢 Cider Collective 以及为这个项目提供支持的贡献者。", "oobe.yes": "好的", "oobe.no": "不", @@ -602,7 +602,7 @@ "oobe.amupsell.explainBtn": "这是什么?", "oobe.amupsell.subscribeUrl": "https://apple.co/3MdqJVQ", "oobe.amupsell.amWebUrl": "https://beta.music.apple.com/", - "oobe.amupsell.promoExplained": "Cider 无法获取部分促销活动与非美区 Apple Muisc 试用状态下的网络播放器API. 要验证您的试用订阅是否能够在 Cider 内使用, 点击{{ amWebUrl }}, 登陆后尝试播放音乐。如果能够播放,您就可以使用 Cider 了!否则请考虑订阅 Apple Music 服务: {{ subscribeUrl }}。", + "oobe.amupsell.promoExplained": "Cider 无法获取部分促销活动与非美区 Apple Muisc 试用状态下的网络播放器API。 要验证您的试用订阅是否能够在 Cider 内使用, 点击{{ amWebUrl }}, 登陆后尝试播放音乐。如果能够播放,您就可以使用 Cider 了!否则请考虑订阅 Apple Music 服务: {{ subscribeUrl }}。", "oobe.intro.title": "欢迎使用 Cider", "oobe.intro.subtitle": "", "oobe.intro.text": "为了按您喜欢的方式使用 Cider ,请先完成一些设置。您之后可以随时改变这些设置。", @@ -611,23 +611,11 @@ "oobe.general.text": "", "oobe.audio.title": "音频设置", "oobe.audio.subtitle": "", - "oobe.audio.text": "Cider 能够自定义调整和设置的音频属性,提供丰富的高品质音频体验,包括Cider Adrenaline Processor,气氛实现器和空间音频。要启用这些功能,必须启用 \"高级音频功能\"。", + "oobe.audio.text": "Cider 能够自定义调整和设置的音频属性以提供丰富的高品质音频体验。\n这些功能包括Cider 数码增强音频处理器,氛围实现器和空间音频。\n要启用这些功能,必须先启用 \"高级音频功能\"。\n启用高级音频功能后,您便可以使用位于应用设置中的 Cider 音频实验室里的这些增强功能了。", "oobe.audio.advancedFunctionality": "", "oobe.visual.title": "外观设置", "oobe.visual.subtitle": "", "oobe.visual.text": "", - "oobe.visual.layout.text": "Cider 拥有两种不同的窗口布局。Maverick 是一个类似 iTunes 的布局,播放器在窗口的顶部。Mojave 是由 Cider 团队设计的一种新的布局。您可以在设置中随时改变布局。", - "oobe.visual.suggestingThemes": "主题能够个性化您的播放器。以下是推荐的几个主题:", - "oobe.visual.suggestingThemes.subtext": "(主题会从 GitHub 上下载)", - "oobe.visual.suggestingThemes.default": "Cider", - "oobe.visual.suggestingThemes.default.text": "经典的 Cider 主题。", - "oobe.visual.suggestingThemes.dark": "Dark", - "oobe.visual.suggestingThemes.dark.text": "暗黑模式。", - "oobe.visual.suggestingThemes.community1": "Groovy", - "oobe.visual.suggestingThemes.community1.text": "类 WinUI 主题。", - "oobe.visual.suggestingThemes.community2": "iTheme", - "oobe.visual.suggestingThemes.community2.text": "经典的苹果风主题。", - "oobe.visual.suggestingThemes.community3": "Dracula", - "oobe.visual.suggestingThemes.community3.text": "著名的德古拉吸血鬼主题。", + "oobe.visual.layout.text": "Cider 拥有两种不同的窗口布局。\nMaverick 是一个类似 iTunes 的布局,播放器在窗口的顶部。\nMojave 是由 Cider 团队设计的一种新的布局。\n\n您可以在设置中随时改变布局。", "oobe.amsignin.title": "" } diff --git a/src/main/base/browserwindow.ts b/src/main/base/browserwindow.ts index 4bd5f5dd..52d32099 100644 --- a/src/main/base/browserwindow.ts +++ b/src/main/base/browserwindow.ts @@ -1178,13 +1178,14 @@ export class BrowserWindow { `); }); - ipcMain.handle("scanLibrary", async (event, folders) => { - const oldmetadatalist = await LocalFiles.sendOldLibrary(); - BrowserWindow.win.webContents.send("getUpdatedLocalList", oldmetadatalist); - const metadatalist = await LocalFiles.scanLibrary(); - BrowserWindow.win.webContents.send("getUpdatedLocalList", metadatalist); - LocalFiles.cleanUpDB(); - }); + // ipcMain.handle("scanLibrary", async (event, folders) => { + // // const oldmetadatalist = await LocalFiles.sendOldLibrary(); + // // BrowserWindow.win.webContents.send("getUpdatedLocalList", oldmetadatalist); + // const metadatalist = await LocalFiles.scanLibrary(); + // BrowserWindow.win.webContents.send("getUpdatedLocalList", metadatalist); + // LocalFiles.localSongs = metadatalist; + // // LocalFiles.cleanUpDB(); + // }); LocalFiles.eventEmitter.on("newtracks", (data) => { BrowserWindow.win.webContents.send("getUpdatedLocalList", data); diff --git a/src/main/base/store.ts b/src/main/base/store.ts index f483cc08..223c3e37 100644 --- a/src/main/base/store.ts +++ b/src/main/base/store.ts @@ -1,7 +1,9 @@ import * as ElectronStore from "electron-store"; -import * as electron from "electron"; -import { app } from "electron"; +import { app, ipcMain } from "electron"; import fetch from "electron-fetch"; +import { existsSync } from "fs"; +import { join } from "path"; +import { utils } from "./utils"; export class Store { static cfg: ElectronStore; @@ -13,7 +15,7 @@ export class Store { }, general: { close_button_hide: false, - language: "en_US", // electron.app.getLocale().replace('-', '_') this can be used in future + language: "en_US", playbackNotifications: true, resumeOnStartupBehavior: "local", privateEnabled: false, @@ -230,6 +232,7 @@ export class Store { }; constructor() { + this.defaults.general.language = this.checkLocale(app.getLocale().replace("-", "_")) ?? "en_US"; Store.cfg = new ElectronStore({ name: "cider-config", defaults: this.defaults, @@ -266,8 +269,8 @@ export class Store { } let postBody = { id: Store.cfg.get("connectUser.id"), - app: electron.app.getName(), - version: electron.app.isPackaged ? electron.app.getVersion() : "dev", + app: app.getName(), + version: app.isPackaged ? app.getVersion() : "dev", syncData: syncData, }; @@ -305,20 +308,24 @@ export class Store { * IPC Handler */ private ipcHandler(): void { - electron.ipcMain.handle("getStoreValue", (_event, key, defaultValue) => { + ipcMain.handle("getStoreValue", (_event, key, defaultValue) => { return defaultValue ? Store.cfg.get(key, true) : Store.cfg.get(key); }); - electron.ipcMain.handle("setStoreValue", (_event, key, value) => { + ipcMain.handle("setStoreValue", (_event, key, value) => { Store.cfg.set(key, value); }); - electron.ipcMain.on("getStore", (event) => { + ipcMain.on("getStore", (event) => { event.returnValue = Store.cfg.store; }); - electron.ipcMain.on("setStore", (_event, store) => { + ipcMain.on("setStore", (_event, store) => { Store.cfg.store = store; }); } + + private checkLocale(language: string) { + return existsSync(join(utils.getPath("i18nPath"), `${language}.json`)) ? language : "en_US"; + } } diff --git a/src/main/plugins/raop.ts b/src/main/plugins/raop.ts index fc822c2d..95c17195 100644 --- a/src/main/plugins/raop.ts +++ b/src/main/plugins/raop.ts @@ -236,6 +236,7 @@ export default class RAOP { this.airtunes.stopAll(() => { console.log("end"); }); + this._win.webContents.executeJavaScript(`app.airplayDisconnect(true, ${[ipv4, ipport, sepassword, title, artist, album, artworkURL, txt, airplay2dv]})`).catch((err: any) => console.error(err)); this.airtunes = null; this.device = null; this.ipairplay = ""; @@ -322,6 +323,7 @@ export default class RAOP { this.airtunes.stopAll(function () { console.log("end"); }); + this._win.webContents.executeJavaScript("app.airplayDisconnect(false)").catch((err: any) => console.error(err)); this.airtunes = null; this.device = null; this.ipairplay = ""; diff --git a/src/main/providers/local/db/index.ts b/src/main/providers/local/db/index.ts index c07c722a..25261efe 100644 --- a/src/main/providers/local/db/index.ts +++ b/src/main/providers/local/db/index.ts @@ -1,12 +1,12 @@ -import * as PouchDB from "pouchdb-node"; -import { join } from "path"; -import { app } from "electron"; -PouchDB.plugin(require("pouchdb-upsert")); -export class ProviderDB { - public static db: any = null; - static init() { - if (ProviderDB.db == null) { - ProviderDB.db = new PouchDB(join(app.getPath("userData"), "tracksdb")); - } - } -} +// import * as PouchDB from "pouchdb-node"; +// import { join } from "path"; +// import { app } from "electron"; +// PouchDB.plugin(require("pouchdb-upsert")); +// export class ProviderDB { +// public static db: any = null; +// static init() { +// if (ProviderDB.db == null) { +// ProviderDB.db = new PouchDB(join(app.getPath("userData"), "tracksdb")); +// } +// } +// } diff --git a/src/main/providers/local/index.ts b/src/main/providers/local/index.ts index 05ffc259..f83b6978 100644 --- a/src/main/providers/local/index.ts +++ b/src/main/providers/local/index.ts @@ -1,4 +1,4 @@ -import { ProviderDB } from "./db"; +// import { ProviderDB } from "./db"; import * as path from "path"; const { readdir } = require("fs").promises; import { utils } from "../../base/utils"; @@ -10,7 +10,7 @@ import { EventEmitter } from "events"; export class LocalFiles { static localSongs: any = []; static localSongsArts: any = []; - public static DB = ProviderDB.db; + // public static DB = ProviderDB.db; static eventEmitter = new EventEmitter(); static getDataType(item_id: String | any) { @@ -18,24 +18,24 @@ export class LocalFiles { else if ((item_id ?? "").startsWith("ciderlocal")) return "track"; } - static async sendOldLibrary() { - ProviderDB.init(); - let rows = (await ProviderDB.db.allDocs({ include_docs: true, attachments: true })).rows.map((item: any) => { - return item.doc; - }); - let tracks = rows.filter((item: any) => { - return this.getDataType(item._id) == "track"; - }); - let arts = rows.filter((item: any) => { - return this.getDataType(item._id) == "artwork"; - }); - this.localSongs = tracks; - this.localSongsArts = arts; - return tracks; - } + // static async sendOldLibrary() { + // ProviderDB.init(); + // let rows = (await ProviderDB.db.allDocs({ include_docs: true, attachments: true })).rows.map((item: any) => { + // return item.doc; + // }); + // let tracks = rows.filter((item: any) => { + // return this.getDataType(item._id) == "track"; + // }); + // let arts = rows.filter((item: any) => { + // return this.getDataType(item._id) == "artwork"; + // }); + // this.localSongs = tracks; + // this.localSongsArts = arts; + // return tracks; + // } static async scanLibrary() { - ProviderDB.init(); + // ProviderDB.init(); let folders = utils.getStoreValue("libraryPrefs.localPaths"); if (folders == null || folders.length == null || folders.length == 0) folders = []; let files: any[] = []; @@ -109,8 +109,8 @@ export class LocalFiles { }; metadatalistart.push(art); numid += 1; - ProviderDB.db.putIfNotExists(form); - ProviderDB.db.putIfNotExists(art); + // ProviderDB.db.putIfNotExists(form); + // ProviderDB.db.putIfNotExists(art); metadatalist.push(form); if (this.localSongs.length === 0 && numid % 10 === 0) { @@ -138,42 +138,42 @@ export class LocalFiles { return Array.prototype.concat(...files); } - static async cleanUpDB() { - let folders = utils.getStoreValue("libraryPrefs.localPaths"); - let rows = (await ProviderDB.db.allDocs({ include_docs: true, attachments: true })).rows.map((item: any) => { - return item.doc; - }); - let tracks = rows.filter((item: any) => { - return ( - this.getDataType(item._id) == "track" && - !folders.some((i: String) => { - return item["attributes"]["assetUrl"].startsWith("file:///" + i); - }) - ); - }); - let hashs = tracks.map((i: any) => { - return i._id; - }); - for (let hash of hashs) { - try { - ProviderDB.db.get(hash).then(function (doc: any) { - return ProviderDB.db.remove(doc); - }); - } catch (e) {} - try { - ProviderDB.db.get(hash.replace("ciderlocal", "ciderlocalart")).then(function (doc: any) { - return ProviderDB.db.remove(doc); - }); - } catch (e) {} - } - } + // static async cleanUpDB() { + // let folders = utils.getStoreValue("libraryPrefs.localPaths"); + // let rows = (await ProviderDB.db.allDocs({ include_docs: true, attachments: true })).rows.map((item: any) => { + // return item.doc; + // }); + // let tracks = rows.filter((item: any) => { + // return ( + // this.getDataType(item._id) == "track" && + // !folders.some((i: String) => { + // return item["attributes"]["assetUrl"].startsWith("file:///" + i); + // }) + // ); + // }); + // let hashs = tracks.map((i: any) => { + // return i._id; + // }); + // for (let hash of hashs) { + // try { + // ProviderDB.db.get(hash).then(function (doc: any) { + // return ProviderDB.db.remove(doc); + // }); + // } catch (e) {} + // try { + // ProviderDB.db.get(hash.replace("ciderlocal", "ciderlocalart")).then(function (doc: any) { + // return ProviderDB.db.remove(doc); + // }); + // } catch (e) {} + // } + // } static setupHandlers() { const app = utils.getExpress(); console.log("Setting up handlers for local files"); app.get("/ciderlocal/:songs", (req: any, res: any) => { const audio = atob(req.params.songs.replace(/_/g, "/").replace(/-/g, "+")); - //console.log('auss', audio) + // console.log('auss', LocalFiles.localSongs) let data = { data: LocalFiles.localSongs.filter((f: any) => audio.split(",").includes(f.id)), }; diff --git a/src/preload/cider-preload.js b/src/preload/cider-preload.js index 380f0696..c1fc7c6a 100644 --- a/src/preload/cider-preload.js +++ b/src/preload/cider-preload.js @@ -22,7 +22,7 @@ const MusicKitInterop = { ipcRenderer.send("wsapi-updatePlaybackState", attributes); // lastfm call if (app.mk.currentPlaybackProgress === app.cfg.connectivity.lastfm.scrobble_after / 100) { - attributes.primaryArtist = app.cfg.connectivity.lastfm.enabled && app.cfg.connectivity.lastfm.remove_featured ? await this.fetchPrimaryArtist(attributes.artistName) : attributes.artistName; + attributes.primaryArtist = app.cfg.connectivity.lastfm.remove_featured ? await this.fetchPrimaryArtist() : attributes.artistName; ipcRenderer.send("lastfm:scrobbleTrack", attributes); } }); @@ -36,7 +36,7 @@ const MusicKitInterop = { MusicKit.getInstance().addEventListener(MusicKit.Events.nowPlayingItemDidChange, async () => { console.debug("[cider:preload] nowPlayingItemDidChange"); const attributes = MusicKitInterop.getAttributes(); - attributes.primaryArtist = app.cfg.connectivity.lastfm.enabled && app.cfg.connectivity.lastfm.remove_featured ? await this.fetchPrimaryArtist(attributes.artistName) : attributes.artistName; + attributes.primaryArtist = app.cfg.connectivity.lastfm.remove_featured ? await this.fetchPrimaryArtist() : attributes.artistName; if (MusicKitInterop.filterTrack(attributes, false, true)) { global.ipcRenderer.send("nowPlayingItemDidChange", attributes); @@ -81,13 +81,31 @@ const MusicKitInterop = { }); }, - async fetchPrimaryArtist(artist) { - if (app.mk.nowPlayingItem?.relationships?.artists) { - const artist = await app.mk.api.artist(app.mk.nowPlayingItem.relationships.artists.data[0].id); - return artist.attributes.name; - } else { - return artist; + async fetchPrimaryArtist() { + const songID = app.mk.nowPlayingItem.attributes.playParams.catalogId || app.mk.nowPlayingItem.attributes.playParams.id; + const res = await MusicKit.getInstance().api.v3.music("/v1/catalog/" + MusicKit.getInstance().storefrontId + `/songs/${songID}`, { + include: { + songs: ["artists"], + }, + }); + if (!res || !res.data) { + console.warn("[cider:preload] fetchPrimaryArtist: no response"); + return app.mk.nowPlayingItem.attributes.artistName; } + + if (!res.data.data.length) { + console.error(`[cider:preload] fetchPrimaryArtist: Unable to locate song with id of ${songID}`); + return app.mk.nowPlayingItem.attributes.artistName; + } + const songData = res.data.data[0]; + const artistData = songData.relationships.artists.data; + if (artistData.length < 1) { + console.error(`[cider:preload] fetchPrimaryArtist: Unable to find artists related to the song with id of ${songID}`); + return app.mk.nowPlayingItem.attributes.artistName; + } + + const primaryArtist = artistData[0]; + return primaryArtist.attributes.name; }, getAttributes: function () { diff --git a/src/renderer/less/pages.css b/src/renderer/less/pages.css index 7c24781e..f26c2d3c 100644 --- a/src/renderer/less/pages.css +++ b/src/renderer/less/pages.css @@ -569,6 +569,23 @@ } } /* Album / Playlist Page */ +.album-header { + position: sticky; + left: 0; + z-index: 6; + padding: 0px 2em; + backdrop-filter: blur(32px); + background: rgba(0, 0, 0, 0.25); + top: var(--navigationBarHeight); + --bs-gutter-x: 4rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(-1 * var(--bs-gutter-y)); + margin-right: calc(-0.5 * var(--bs-gutter-x)); + margin-left: calc(-0.5 * var(--bs-gutter-x)); + border-bottom: 1px solid rgba(200, 200, 200, 0.05); +} .playlist-page { --bgColor: transparent; padding: 0px; diff --git a/src/renderer/less/pages.less b/src/renderer/less/pages.less index ca38276f..b7aa6bc2 100644 --- a/src/renderer/less/pages.less +++ b/src/renderer/less/pages.less @@ -695,6 +695,23 @@ } /* Album / Playlist Page */ +.album-header { + position: sticky; + left: 0; + z-index: 6; + padding: 0px 2em; + backdrop-filter: blur(32px); + background: rgba(0, 0, 0, 0.25); + top: var(--navigationBarHeight); + --bs-gutter-x: 4rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(-1 * var(--bs-gutter-y)); + margin-right: calc(-0.5 * var(--bs-gutter-x)); + margin-left: calc(-0.5 * var(--bs-gutter-x)); + border-bottom: 1px solid rgba(200, 200, 200, 0.05); +} .playlist-page { --bgColor: transparent; padding: 0px; @@ -2219,7 +2236,7 @@ padding: 0; > .col-auto { - width: 230px; + width: auto; overflow-x: hidden; overflow-y: overlay; transition: width 0.25s ease-in-out; diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index d61faf3c..ebdd3899 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -4340,7 +4340,17 @@ const app = new Vue({ notyf.success("Device paired successfully!"); }, sendAirPlayFailed() { - notyf.error("Device paring failed!"); + notyf.success("Device paring failed!"); + }, + airplayDisconnect(dropped, array = []) { + console.log("airplay dropped", dropped, array); + // if (dropped) { + // let [ipv4, ipport, sepassword, title, artist, album, artworkURL, txt, airplay2dv] = array; + // ipcRenderer.send("performAirplayPCM", ipv4, ipport, sepassword, title, artist, album, artworkURL, txt, airplay2dv); + // } else { + // app.activeCasts = []; + // notyf.error("Devices disconnected!"); + // } }, windowFocus(val) { if (val) { diff --git a/src/renderer/views/components/settings-window.ejs b/src/renderer/views/components/settings-window.ejs index 065dc8f5..1e0ce44a 100644 --- a/src/renderer/views/components/settings-window.ejs +++ b/src/renderer/views/components/settings-window.ejs @@ -262,7 +262,7 @@ -
+
@@ -620,7 +620,7 @@ -
+
{{$root.getLz("settings.option.window.windowControlStyle")}}
@@ -1016,6 +1016,11 @@
{{$root.getLz('settings.option.connectivity.lastfmScrobble.manualToken')}} + + + {{$root.getLz('settings.option.connectivity.lastfmScrobble.manualToken.link')}} + +