Merge branch 'main' of https://github.com/ciderapp/Cider into main
|
@ -3,7 +3,7 @@ version: 2.1
|
||||||
executors:
|
executors:
|
||||||
cider-ci:
|
cider-ci:
|
||||||
docker:
|
docker:
|
||||||
- image: circleci/node:16
|
- image: cimg/node:lts-browsers
|
||||||
working_directory: ~/Cider
|
working_directory: ~/Cider
|
||||||
|
|
||||||
orbs: # Add orbs to your configuration
|
orbs: # Add orbs to your configuration
|
||||||
|
@ -15,15 +15,9 @@ jobs:
|
||||||
executor: cider-ci
|
executor: cider-ci
|
||||||
steps:
|
steps:
|
||||||
- checkout
|
- checkout
|
||||||
# - run:
|
|
||||||
# name: Rename Repository
|
|
||||||
# command: sed -i 's/github:ciderapp\/Cider/github:ciderapp\/cider-releases/' package.json
|
|
||||||
- run:
|
- run:
|
||||||
name: Update Version Number of App
|
name: Update Version Number of App
|
||||||
command: sudo chmod +x resources/version.sh && ./resources/version.sh || true
|
command: sudo chmod +x resources/version.sh && ./resources/version.sh || true
|
||||||
- run:
|
|
||||||
name: Update Package Managers
|
|
||||||
command: sudo npm update -g npm yarn
|
|
||||||
- restore_cache:
|
- restore_cache:
|
||||||
name: Restore Yarn Package Cache
|
name: Restore Yarn Package Cache
|
||||||
keys:
|
keys:
|
||||||
|
@ -60,9 +54,6 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- attach_workspace:
|
- attach_workspace:
|
||||||
at: ~/Cider
|
at: ~/Cider
|
||||||
- run:
|
|
||||||
name: Fix Versioning and Add Channel
|
|
||||||
command: yarn circle:script
|
|
||||||
- run:
|
- run:
|
||||||
name: Generate Builds (Linux)
|
name: Generate Builds (Linux)
|
||||||
command: yarn electron-builder -l -p never
|
command: yarn electron-builder -l -p never
|
||||||
|
@ -89,9 +80,6 @@ jobs:
|
||||||
sudo dpkg --add-architecture i386
|
sudo dpkg --add-architecture i386
|
||||||
sudo apt-get update -y
|
sudo apt-get update -y
|
||||||
sudo apt-get install -y wine32
|
sudo apt-get install -y wine32
|
||||||
- run:
|
|
||||||
name: Fix Versioning and Add Channel
|
|
||||||
command: yarn circle:script
|
|
||||||
- run:
|
- run:
|
||||||
name: Generate Builds (Windows)
|
name: Generate Builds (Windows)
|
||||||
command: yarn electron-builder -w --x64 -p never
|
command: yarn electron-builder -w --x64 -p never
|
||||||
|
@ -117,9 +105,6 @@ jobs:
|
||||||
sudo dpkg --add-architecture i386
|
sudo dpkg --add-architecture i386
|
||||||
sudo apt-get update -y
|
sudo apt-get update -y
|
||||||
sudo apt-get install -y wine32
|
sudo apt-get install -y wine32
|
||||||
- run:
|
|
||||||
name: Fix Versioning and Add Channel
|
|
||||||
command: yarn circle:script
|
|
||||||
- run:
|
- run:
|
||||||
name: Generate Builds (Winget)
|
name: Generate Builds (Winget)
|
||||||
command: yarn electron-builder --win -c winget.json -p never
|
command: yarn electron-builder --win -c winget.json -p never
|
||||||
|
@ -157,11 +142,8 @@ jobs:
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: ~/Cider/dist/artifacts
|
path: ~/Cider/dist/artifacts
|
||||||
- run:
|
- run:
|
||||||
name: Fix Versioning and Add Channel
|
name: Update Version Number of App
|
||||||
command: yarn circle:script
|
command: sudo chmod +x resources/version.sh && ./resources/version.sh || true
|
||||||
- run:
|
|
||||||
name: Set App Version
|
|
||||||
command: echo "export APP_VERSION=$(grep '"version":.*' package.json | cut -d '"' -f 16 | head -1)" >> $BASH_ENV
|
|
||||||
- run:
|
- run:
|
||||||
name: Publish Release
|
name: Publish Release
|
||||||
command: |
|
command: |
|
||||||
|
|
4
.github/ISSUE_TEMPLATE/config.yml
vendored
|
@ -6,8 +6,8 @@ contact_links:
|
||||||
- name: Discord Support
|
- name: Discord Support
|
||||||
url: https://discord.com/invite/AppleMusic
|
url: https://discord.com/invite/AppleMusic
|
||||||
about: For quick support, make a ticket or ask for community support here.
|
about: For quick support, make a ticket or ask for community support here.
|
||||||
- name: GitHub Troublshooting
|
- name: Cider Documentation
|
||||||
url: https://github.com/ciderapp/Cider/wiki/Troubleshooting
|
url: https://docs.cider.sh/support/troubleshooting
|
||||||
about: In most cases, these troubleshooting tips can resolve basic issues. Try them out before opening an issue.
|
about: In most cases, these troubleshooting tips can resolve basic issues. Try them out before opening an issue.
|
||||||
- name: GitHub Issues
|
- name: GitHub Issues
|
||||||
url: https://github.com/ciderapp/Cider/issues
|
url: https://github.com/ciderapp/Cider/issues
|
||||||
|
|
BIN
Assets/MissingArtwork.afdesign
Normal file
8
Assets/MissingArtwork.svg
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="100%" height="100%" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||||
|
<rect x="0" y="0" width="1024" height="1024" style="fill:rgb(110,110,110);"/>
|
||||||
|
<g transform="matrix(6.05996,0,0,6.05996,189.003,209)">
|
||||||
|
<path d="M93.161,0.071C59.66,-1.043 32.22,11.314 32.22,11.314L32.2,74.023C28.789,72.669 24.641,72.348 20.428,73.372C11.345,75.579 5.397,83.192 7.143,90.379C8.889,97.566 17.667,101.604 26.749,99.398C35.313,97.317 41.087,90.429 40.256,83.626L40.256,36.771C40.256,36.771 59.66,29.987 84.829,28.286L84.829,63.135C81.455,61.843 77.386,61.55 73.25,62.555C64.167,64.761 58.219,72.374 59.965,79.562C61.71,86.749 70.488,90.786 79.571,88.58C87.502,86.653 93.042,80.603 93.158,74.316L93.161,74.32L93.161,0.071Z" style="fill-opacity:0.16;fill-rule:nonzero;"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
|
@ -1,6 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
<svg width="100%" height="100%" viewBox="0 0 1002 1000" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
<svg width="100%" height="100%" viewBox="0 0 958 958" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||||
<path d="M501,21C765.367,21 980,235.633 980,500C980,764.367 765.367,979 501,979C236.633,979 22,764.367 22,500C22,235.633 236.633,21 501,21ZM501,169C683.684,169 832,317.316 832,500C832,682.684 683.684,831 501,831C318.316,831 170,682.684 170,500C170,317.316 318.316,169 501,169Z" style="fill:rgb(255,38,84);"/>
|
<g transform="matrix(1,0,0,1,-22,-21)">
|
||||||
<path d="M501,224C653.053,224 776.5,347.447 776.5,499.5C776.5,651.553 653.053,775 501,775C348.947,775 225.5,651.553 225.5,499.5C225.5,347.447 348.947,224 501,224ZM589.165,492.207C595.163,495.672 595.163,504.328 589.165,507.793L439.502,594.256C433.502,597.722 426,593.392 426,586.463L426,413.537C426,406.608 433.502,402.278 439.502,405.744L589.165,492.207Z" style="fill:rgb(255,38,84);"/>
|
<circle cx="501" cy="500" r="420" style="fill:rgb(15,15,15);"/>
|
||||||
|
<path d="M501,21C765.367,21 980,235.633 980,500C980,764.367 765.367,979 501,979C236.633,979 22,764.367 22,500C22,235.633 236.633,21 501,21ZM501,169C683.684,169 832,317.316 832,500C832,682.684 683.684,831 501,831C318.316,831 170,682.684 170,500C170,317.316 318.316,169 501,169Z" style="fill:rgb(255,43,81);"/>
|
||||||
|
<path d="M501,224C653.053,224 776.5,347.447 776.5,499.5C776.5,651.553 653.053,775 501,775C348.947,775 225.5,651.553 225.5,499.5C225.5,347.447 348.947,224 501,224ZM589.165,492.207C595.163,495.672 595.163,504.328 589.165,507.793L439.502,594.256C433.502,597.722 426,593.392 426,586.463L426,413.537C426,406.608 433.502,402.278 439.502,405.744L589.165,492.207Z" style="fill:rgb(255,43,81);"/>
|
||||||
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.3 KiB |
|
@ -1,6 +1,6 @@
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="./resources/banner.png" width="80%" height="60%" alt="Banner"><br>
|
<img src="./resources/banner.png" width="80%" height="60%" alt="Banner"><br>
|
||||||
<b>A new cross-platform Apple Music experience based on Electron and Vue.js written from scratch with performance in mind. 🚀</b>
|
<b>A new cross-platform Apple Music experience based on Electron and Vue.js written from scratch with performance & visuals in mind. 🚀</b>
|
||||||
<br><br>
|
<br><br>
|
||||||
<img src="https://img.shields.io/github/stars/ciderapp/Cider?label=Stars" alt="GitHub Stars"/>
|
<img src="https://img.shields.io/github/stars/ciderapp/Cider?label=Stars" alt="GitHub Stars"/>
|
||||||
<img src="https://img.shields.io/github/forks/ciderapp/Cider?label=Forks" alt="GitHub Forks"/>
|
<img src="https://img.shields.io/github/forks/ciderapp/Cider?label=Forks" alt="GitHub Forks"/>
|
||||||
|
@ -18,7 +18,7 @@
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
#### Links
|
#### Links
|
||||||
* [Wiki](https://docs.cider.sh)
|
* [Documentation](https://docs.cider.sh)
|
||||||
* [Request Feature](https://github.com/ciderapp/Cider/discussions/new?category=feature-request)
|
* [Request Feature](https://github.com/ciderapp/Cider/discussions/new?category=feature-request)
|
||||||
* [Report Bug](https://github.com/ciderapp/Cider/issues/new?assignees=&labels=bug&template=bug_report.md&title=%5BBUG%5D+)
|
* [Report Bug](https://github.com/ciderapp/Cider/issues/new?assignees=&labels=bug&template=bug_report.md&title=%5BBUG%5D+)
|
||||||
* [**View The Releases**](https://github.com/ciderapp/Cider/releases/latest)
|
* [**View The Releases**](https://github.com/ciderapp/Cider/releases/latest)
|
||||||
|
@ -44,8 +44,8 @@
|
||||||
-->
|
-->
|
||||||
[](https://aur.archlinux.org/packages/cider)
|
[](https://aur.archlinux.org/packages/cider)
|
||||||
|
|
||||||
### Compiling and Configuration
|
### Insights Snapshot
|
||||||
For more information surrounding configuration, compiling and other developer documentation, see the [compilation docs](https://cider.sh/compile.html).
|
[](https://app.circleci.com/insights/github/ciderapp/Cider/workflows/build_and_release/overview?branch=main&reporting-window=last-30-days&insights-snapshot=true)
|
||||||
|
|
||||||
### Credits
|
### Credits
|
||||||

|

|
||||||
|
|
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 8.2 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 110 KiB |
4937
cider.lock
|
@ -39,7 +39,7 @@
|
||||||
"appx": {
|
"appx": {
|
||||||
"applicationId": "CiderAlpha",
|
"applicationId": "CiderAlpha",
|
||||||
"publisher": "CN=CiderCollective, OID.2.25.311729368913984317654407730594956997722=1",
|
"publisher": "CN=CiderCollective, OID.2.25.311729368913984317654407730594956997722=1",
|
||||||
"displayName": "Cider (Alpha)",
|
"displayName": "Cider",
|
||||||
"identityName": "CiderCollective.CiderAlpha",
|
"identityName": "CiderCollective.CiderAlpha",
|
||||||
"backgroundColor": "transparent",
|
"backgroundColor": "transparent",
|
||||||
"setBuildNumber": true
|
"setBuildNumber": true
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"name": "cider",
|
"name": "cider",
|
||||||
"applicationId": "Cider",
|
"applicationId": "Cider",
|
||||||
"productName": "Cider",
|
"productName": "Cider",
|
||||||
"version": "1.5.0",
|
"version": "1.5.1",
|
||||||
"description": "A new cross-platform Apple Music experience based on Electron and Vue.js written from scratch with performance in mind.",
|
"description": "A new cross-platform Apple Music experience based on Electron and Vue.js written from scratch with performance in mind.",
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"main": "./build/index.js",
|
"main": "./build/index.js",
|
||||||
|
@ -40,7 +40,7 @@
|
||||||
"@sentry/electron": "^3.0.7",
|
"@sentry/electron": "^3.0.7",
|
||||||
"@sentry/integrations": "^6.19.6",
|
"@sentry/integrations": "^6.19.6",
|
||||||
"adm-zip": "0.4.10",
|
"adm-zip": "0.4.10",
|
||||||
"airtunes2": "git+https://github.com/vapormusic/node_airtunes2.git#hap",
|
"airtunes2": "git+https://github.com/ciderapp/node_airtunes2",
|
||||||
"castv2-client": "^1.2.0",
|
"castv2-client": "^1.2.0",
|
||||||
"chokidar": "^3.5.3",
|
"chokidar": "^3.5.3",
|
||||||
"discord-auto-rpc": "^1.0.16",
|
"discord-auto-rpc": "^1.0.16",
|
||||||
|
@ -54,6 +54,7 @@
|
||||||
"electron-window-state": "^5.0.3",
|
"electron-window-state": "^5.0.3",
|
||||||
"express": "^4.17.3",
|
"express": "^4.17.3",
|
||||||
"get-port": "^5.1.1",
|
"get-port": "^5.1.1",
|
||||||
|
"jimp": "^0.16.1",
|
||||||
"jsonc": "^2.0.0",
|
"jsonc": "^2.0.0",
|
||||||
"lastfmapi": "^0.1.1",
|
"lastfmapi": "^0.1.1",
|
||||||
"mdns-js": "git+https://github.com/ciderapp/node-mdns-js.git",
|
"mdns-js": "git+https://github.com/ciderapp/node-mdns-js.git",
|
||||||
|
@ -110,9 +111,9 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"build": {
|
"build": {
|
||||||
"electronVersion": "19.0.1",
|
"electronVersion": "18.3.3",
|
||||||
"electronDownload": {
|
"electronDownload": {
|
||||||
"version": "19.0.1+wvcus",
|
"version": "18.3.3+wvcus",
|
||||||
"mirror": "https://github.com/castlabs/electron-releases/releases/download/v"
|
"mirror": "https://github.com/castlabs/electron-releases/releases/download/v"
|
||||||
},
|
},
|
||||||
"appId": "cider",
|
"appId": "cider",
|
||||||
|
|
|
@ -15,7 +15,7 @@ const patch = version[2].split('-');
|
||||||
if (process.env['CIRCLE_BRANCH'] === 'release') {
|
if (process.env['CIRCLE_BRANCH'] === 'release') {
|
||||||
pkg.version = `${version[0]}.${version[1]}.${patch[0]}`
|
pkg.version = `${version[0]}.${version[1]}.${patch[0]}`
|
||||||
} else if (process.env['CIRCLE_BRANCH'] === 'main') {
|
} else if (process.env['CIRCLE_BRANCH'] === 'main') {
|
||||||
pkg.version = `${version[0]}.${version[1]}.${patch[0]}-beta.${patch[1]}`
|
pkg.version = `${version[0]}.${version[1]}.${patch[0]}.beta.${patch[1]}`
|
||||||
} else {
|
} else {
|
||||||
pkg.version = `${version[0]}.${version[1]}.${patch[0]}-${channel}.${process.env['CIRCLE_BUILD_NUM']}`
|
pkg.version = `${version[0]}.${version[1]}.${patch[0]}-${channel}.${process.env['CIRCLE_BUILD_NUM']}`
|
||||||
}
|
}
|
||||||
|
|
BIN
resources/icons/icon-old.icns
Normal file
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 6 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 5 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 7 KiB |
|
@ -1,8 +1,20 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
LATESTSHA=$(curl -s https://api.github.com/repos/ciderapp/Cider/branches/stable | grep sha | cut -d '"' -f 4 | sed 's/v//' | xargs)
|
LATEST_SHA=$(curl -s https://api.github.com/repos/ciderapp/Cider/branches/stable | grep sha | cut -d '"' -f 4 | sed 's/v//' | xargs)
|
||||||
COMMITSINCESTABLE=$(git rev-list $LATESTSHA..HEAD --count)
|
COMMITSINCESTABLE=$(git rev-list $LATEST_SHA..HEAD --count)
|
||||||
VERSION=$(grep '"version":.*' package.json | cut -d '"' -f 4 | head -1)
|
CURRENT_VERSION=$(node -p -e "require('./package.json').version")
|
||||||
echo
|
CIRCLE_BRANCH="main"
|
||||||
NEWVERSION=${VERSION/-/.}-$COMMITSINCESTABLE
|
if [[ $CIRCLE_BRANCH == "main" && $COMMITSINCESTABLE -gt 0 ]]; then
|
||||||
npm version $NEWVERSION
|
NEW_VERSION="${CURRENT_VERSION}-beta.${COMMITSINCESTABLE}"
|
||||||
|
else
|
||||||
|
NEW_VERSION=${CURRENT_VERSION/0/$COMMITSINCESTABLE}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $COMMITSINCESTABLE -gt 0 ]]; then
|
||||||
|
echo "Version: $NEW_VERSION"
|
||||||
|
sed -i "0,/$CURRENT_VERSION/s//$NEW_VERSION/" package.json
|
||||||
|
else
|
||||||
|
echo "Version unchanged, commits since stable is ${COMMITSINCESTABLE}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "export APP_VERSION=$(node -p -e 'require("./package.json").version')" >>$BASH_ENV
|
||||||
|
|
|
@ -18,7 +18,7 @@ const CiderKit = {
|
||||||
body: body,
|
body: body,
|
||||||
options: options
|
options: options
|
||||||
})
|
})
|
||||||
let response = await fetch("http://localhost:9000/api/musickit/v3", opts);
|
let response = await fetch("./api/musickit/v3", opts);
|
||||||
return response.json()
|
return response.json()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -383,7 +383,9 @@ Update 14/05/2022 02:00 UTC
|
||||||
* `settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_2`: Added for `en_US`
|
* `settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_2`: Added for `en_US`
|
||||||
* `settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E168_1`: Added for `en_US`
|
* `settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E168_1`: Added for `en_US`
|
||||||
* `settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z3600`: Added for `en_US`
|
* `settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z3600`: Added for `en_US`
|
||||||
* `settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500`: Added for `en_US`
|
* `settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500A`: Added for `en_US`
|
||||||
|
* `settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500B`: Added for `en_US`
|
||||||
|
* `settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500C`: Added for `en_US`
|
||||||
|
|
||||||
Update 18/05/2022 14:20 UTC
|
Update 18/05/2022 14:20 UTC
|
||||||
|
|
||||||
|
@ -427,3 +429,26 @@ Update 24/05/2022 21:15 UTC
|
||||||
* `settings.option.general.updateCider.branch.main`: Deleted for all language files
|
* `settings.option.general.updateCider.branch.main`: Deleted for all language files
|
||||||
* `settings.option.general.updateCider.branch.develop`: Deleted for all language files
|
* `settings.option.general.updateCider.branch.develop`: Deleted for all language files
|
||||||
* `settings.notyf.updateCider.update-error`: Deleted for all language files
|
* `settings.notyf.updateCider.update-error`: Deleted for all language files
|
||||||
|
|
||||||
|
Update 30/5/2022 05:35 UTC
|
||||||
|
|
||||||
|
* `settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.BSCBM`: Added to `en_US`
|
||||||
|
* `settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.CUDDLE`: Added to `en_US`
|
||||||
|
* `settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.bplk`: Added to `en_US`
|
||||||
|
* `settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.hw2k`: Added to `en_US`
|
||||||
|
* `settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.adaptive`: Added to `en_US`
|
||||||
|
* `settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.legacy`: Added to `en_US`
|
||||||
|
|
||||||
|
Update 03/06/2022 11:40 UTC
|
||||||
|
|
||||||
|
* `settings.option.connectivity.discordRPC.reload`: Added to `en_US`
|
||||||
|
* `settings.option.connectivity.discordRPC.reconnectedToUser`: Added to `en_US`
|
||||||
|
|
||||||
|
Update 10/06/2022 20:00 UTC
|
||||||
|
|
||||||
|
* `settings.option.visual.purplePodcastPlaybackBar`: Added to `en_US`
|
||||||
|
|
||||||
|
Update 14/06/2022 14:10 UTC
|
||||||
|
|
||||||
|
* `term.themeManaged`: Added to `en_US`
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
"date.format": "${d}.${m}.${y}",
|
"date.format": "${d}.${m}.${y}",
|
||||||
"dialog.cancel": "Abbrechen",
|
"dialog.cancel": "Abbrechen",
|
||||||
"dialog.ok": "OK",
|
"dialog.ok": "OK",
|
||||||
"notification.updatingLibrarySongs": "Aktualisiere Songs...",
|
"notification.updatingLibrarySongs": "Aktualisiere Titel...",
|
||||||
"notification.updatingLibraryAlbums": "Aktualisiere Alben...",
|
"notification.updatingLibraryAlbums": "Aktualisiere Alben...",
|
||||||
"notification.updatingLibraryArtists": "Aktualisiere Künstler...",
|
"notification.updatingLibraryArtists": "Aktualisiere Künstler...",
|
||||||
"term.appleInc": "Apple Inc.",
|
"term.appleInc": "Apple Inc.",
|
||||||
|
@ -24,13 +24,13 @@
|
||||||
"term.privateSession": "Private Sitzung",
|
"term.privateSession": "Private Sitzung",
|
||||||
"term.queue": "Warteschlange",
|
"term.queue": "Warteschlange",
|
||||||
"term.history": "Verlauf",
|
"term.history": "Verlauf",
|
||||||
"term.search": "Suche",
|
"term.search": "Suchen",
|
||||||
"term.library": "Mediathek",
|
"term.library": "Mediathek",
|
||||||
"term.listenNow": "Jetzt hören",
|
"term.listenNow": "Jetzt hören",
|
||||||
"term.browse": "Entdecken",
|
"term.browse": "Entdecken",
|
||||||
"term.radio": "Radio",
|
"term.radio": "Radio",
|
||||||
"term.recentlyAdded": "Zuletzt hinzugefügt",
|
"term.recentlyAdded": "Zuletzt hinzugefügt",
|
||||||
"term.songs": "Songs",
|
"term.songs": "Titel",
|
||||||
"term.albums": "Alben",
|
"term.albums": "Alben",
|
||||||
"term.artists": "Künstler",
|
"term.artists": "Künstler",
|
||||||
"term.podcasts": "Podcasts",
|
"term.podcasts": "Podcasts",
|
||||||
|
@ -113,7 +113,7 @@
|
||||||
"term.contributors": "Mithelfer",
|
"term.contributors": "Mithelfer",
|
||||||
"term.equalizer": "Equalizer",
|
"term.equalizer": "Equalizer",
|
||||||
"term.reset": "Zurücksetzen",
|
"term.reset": "Zurücksetzen",
|
||||||
"term.tracks": "Lieder",
|
"term.tracks": "Titel",
|
||||||
"term.videos": "Videos",
|
"term.videos": "Videos",
|
||||||
"term.menu": "Menü",
|
"term.menu": "Menü",
|
||||||
"term.check": "Nach Updates suchen",
|
"term.check": "Nach Updates suchen",
|
||||||
|
@ -179,8 +179,8 @@
|
||||||
"action.unfollow": "Entfolgen",
|
"action.unfollow": "Entfolgen",
|
||||||
"action.unfollow.success": "Entfolgt",
|
"action.unfollow.success": "Entfolgt",
|
||||||
"action.unfollow.error": "Fehler beim Entfolgen",
|
"action.unfollow.error": "Fehler beim Entfolgen",
|
||||||
"action.playNext": "Spiele als Nächstes",
|
"action.playNext": "Nächster Titel",
|
||||||
"action.playLater": "Spiele später",
|
"action.playLater": "Zuletzt wiedergeben",
|
||||||
"action.startRadio": "Starte Radio",
|
"action.startRadio": "Starte Radio",
|
||||||
"action.goToArtist": "Gehe zu Künstler",
|
"action.goToArtist": "Gehe zu Künstler",
|
||||||
"action.goToAlbum": "Gehe zu Album",
|
"action.goToAlbum": "Gehe zu Album",
|
||||||
|
@ -192,9 +192,9 @@
|
||||||
"action.dislike": "Dislike",
|
"action.dislike": "Dislike",
|
||||||
"action.undoDislike": "Dislike entfernen",
|
"action.undoDislike": "Dislike entfernen",
|
||||||
"action.showWebRemoteQR": "Web-Remote",
|
"action.showWebRemoteQR": "Web-Remote",
|
||||||
"action.playTracksNext": "Spiele ${app.selectedMediaItems.length} Lieder als Nächstes",
|
"action.playTracksNext": "Spiele ${app.selectedMediaItems.length} Titel als Nächstes",
|
||||||
"action.playTracksLater": "Spiele ${app.selectedMediaItems.length} Lieder später",
|
"action.playTracksLater": "Spiele ${app.selectedMediaItems.length} Titel später",
|
||||||
"action.removeTracks": "Entferne ${self.selectedItems.length} Lieder aus der Warteschlange",
|
"action.removeTracks": "Entferne ${self.selectedItems.length} Titel aus der Warteschlange",
|
||||||
"action.import": "Importieren",
|
"action.import": "Importieren",
|
||||||
"action.export": "Exportieren",
|
"action.export": "Exportieren",
|
||||||
"action.showAlbum": "Ganzes Album anzeigen",
|
"action.showAlbum": "Ganzes Album anzeigen",
|
||||||
|
@ -282,6 +282,44 @@
|
||||||
"settings.option.experimental.compactUI": "Kompaktes UI",
|
"settings.option.experimental.compactUI": "Kompaktes UI",
|
||||||
"settings.option.window.close_button_hide": "Schließtaste soll die App verbergen",
|
"settings.option.window.close_button_hide": "Schließtaste soll die App verbergen",
|
||||||
"settings.option.experimental.inline_playlists": "Inline Playlists und Alben",
|
"settings.option.experimental.inline_playlists": "Inline Playlists und Alben",
|
||||||
|
"settings.header.advanced": "Erweitert",
|
||||||
|
"settings.option.debug.openAppData": "Öffne Cider-Ordner",
|
||||||
|
"settings.option.visual.theme.github.explore": "Durchsuche GitHub Themes",
|
||||||
|
"settings.option.visual.plugin.github.explore": "Durchsuche GitHub Plugins",
|
||||||
|
"settings.option.experimental.reinstallwidevine": "WidevineCDM neu installieren",
|
||||||
|
"settings.option.experimental.reinstallwidevine.confirm": "Möchtest du wirklich Widevine neu installieren?",
|
||||||
|
"settings.option.visual.theme.checkForUpdates": "Nach Updates suchen",
|
||||||
|
"settings.option.visual.theme.manageStyles": "Styles verwalten",
|
||||||
|
"settings.option.window.useNativeTitleBar": "Native Fenster-Titelleiste verwenden",
|
||||||
|
"settings.option.window.windowControlStyle": "Fenstersteuerungs-Stil",
|
||||||
|
"settings.option.window.windowControlStyle.right": "Rechts",
|
||||||
|
"settings.option.experimental.unknownPlugin": "Unbekannte Quellen",
|
||||||
|
"settings.option.experimental.unknownPlugin.description": "Erlaube Installation von Plugins von anderen Quellen als der Cider-Plugin-Quelle",
|
||||||
|
"settings.option.window.windowControlStyle.left": "Links",
|
||||||
|
"settings.option.visual.windowStyle": "Fenster-Style",
|
||||||
|
"settings.option.general.resumebehavior": "Fortsetzungs-Verhalten",
|
||||||
|
"settings.option.general.resumebehavior.description": "Fortsetzungs-Verhalten beeinflusst, wie Cider die Sitzung fortsetzt, wenn man zur App zurückkehrt.",
|
||||||
|
"settings.option.general.resumebehavior.locally": "Lokal",
|
||||||
|
"settings.option.general.resumebehavior.locally.description": "Cider wird die letzte Sitzung auf diesem Rechner fortsetzen.",
|
||||||
|
"settings.option.general.resumebehavior.history": "Verlauf",
|
||||||
|
"settings.option.general.resumebehavior.history.description": "Cider wird den letzten Song aus dem geräteübergreifenden Apple-Music-Verlauf in die Warteschlange stellen.",
|
||||||
|
"settings.option.general.resumetabs" : "Tab beim Start öffnen",
|
||||||
|
"settings.option.general.resumetabs.description" : "Wähle welcher Tab beim Starten von Cider geöffnet werden soll.",
|
||||||
|
"settings.option.general.resumetabs.dynamic" : "Dynamisch",
|
||||||
|
"settings.option.general.resumetabs.dynamic.description" : "Cider wird den zuletzt genutzten Tab öffnen.",
|
||||||
|
"settings.option.general.keybindings": "Tastenkombinationen",
|
||||||
|
"settings.option.general.keybindings.pressCombination": "Drücke eine Kombination aus zwei Tasten um die Tastenkombination zu aktualisieren.",
|
||||||
|
"settings.option.general.keybindings.pressEscape": "Drücke Escape um zurückzukehren.",
|
||||||
|
"settings.notyf.general.keybindings.update.success": "Tastenkombination erfolgreich aktualisiert",
|
||||||
|
"settings.prompt.general.keybindings.update.success": "Tastenkombination erfolgreich aktualisiert. Drücke OK um Cider neuzustarten.",
|
||||||
|
"settings.option.general.keybindings.open": "Öffnen",
|
||||||
|
"settings.option.general.themeUpdateNotification": "Automatisch nach Theme-Updates suchen",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Verwaltet vom Audio Lab",
|
||||||
|
"settings.option.advanced.playlistTrackMapping.description": "Ermöglicht tiefes Scannen von Wiedergabelisten, um festzustellen, welche Titel sich in welchen Wiedergabelisten befinden. Die Erstellungszeiten für den Wiedergabelisten-Cache können sich erheblich verlängern.",
|
||||||
|
"settings.option.visual.transparent": "Transparentes Fenster",
|
||||||
|
"settings.option.visual.transparent.description": "Benötigt Theme Support, Neustart erforderlich",
|
||||||
|
"action.cast.todevices": "An Geräte streamen",
|
||||||
|
"action.cast.stop": "Streamen an alle Geräte beenden",
|
||||||
"spatial.notTurnedOn": "Die Audio-Spatialisierung ist deaktiviert. Um sie zu verwenden, musst du diese zuerst aktivieren.",
|
"spatial.notTurnedOn": "Die Audio-Spatialisierung ist deaktiviert. Um sie zu verwenden, musst du diese zuerst aktivieren.",
|
||||||
"spatial.spatialProperties": "Räumliche Einstellungen",
|
"spatial.spatialProperties": "Räumliche Einstellungen",
|
||||||
"spatial.width": "Breite",
|
"spatial.width": "Breite",
|
||||||
|
@ -299,10 +337,54 @@
|
||||||
"spatial.right": "Rechts",
|
"spatial.right": "Rechts",
|
||||||
"spatial.back": "Hinten",
|
"spatial.back": "Hinten",
|
||||||
"spatial.down": "Unten",
|
"spatial.down": "Unten",
|
||||||
"spatial.listener": "Hörer*in",
|
"spatial.listener": "Hörer",
|
||||||
"spatial.audioSource": "Audioquelle",
|
"spatial.audioSource": "Audioquelle",
|
||||||
"settings.header.unfinished": "Unvollendet",
|
"settings.header.unfinished": "Unvollendet",
|
||||||
|
"settings.option.window.openOnStartup": "Öffne Cider beim Start",
|
||||||
|
"settings.option.window.openOnStartup.hidden": "Öffne Cider minimiert",
|
||||||
|
"term.audioControls": "Lautstärkeregelung",
|
||||||
|
"term.variables": "Variablen",
|
||||||
|
"settings.option.audio.volumeStep": "Lautstärke-Schritt",
|
||||||
|
"settings.option.audio.maxVolume": "Max. Lautstärke",
|
||||||
|
"settings.option.audio.changePlaybackRate": "Wiedergabegeschwindigkeit ändern",
|
||||||
|
"settings.option.audio.playbackRate": "Wiedergabegeschwindigkeit",
|
||||||
|
"settings.option.audio.playbackRate.change": "Ändern",
|
||||||
|
"settings.option.audio.dbspl.display": "dB SPL Anzeige",
|
||||||
|
"settings.option.audio.dbspl.description": "(Nur für erfahrene Benutzer) Zeigt dB SPL anstelle von dBFS am Lautstärkeregler.",
|
||||||
|
"settings.option.audio.dbfs.calibration": "0 dBFS Kalibration",
|
||||||
|
"settings.option.audio.dbfs.description": "Geb den Spitzenwert des Z-gewichteten dB SPL an, wenn Cider auf 0 dBFS steht.",
|
||||||
|
"settings.option.connectivity.discordRPC.hideButtons": "Buttons im Discord Rich Presence ausblenden",
|
||||||
|
"settings.option.connectivity.discordRPC.hideTimestamp": "Zeitstempel im Discord Rich Presence ausblenden",
|
||||||
|
"settings.option.general.showLovedTracksInline": "Zeige geliebte Titel inline",
|
||||||
|
"settings.option.audio.advanced": "Erweiterte Lautstärkeregelung",
|
||||||
"remote.web.title": "Cider Remote",
|
"remote.web.title": "Cider Remote",
|
||||||
"remote.web.description": "Scanne den QR-Code um dein Handy mit dieser Cider-Instanz zu verbinden",
|
"remote.web.description": "Scanne den QR-Code um dein Handy mit dieser Cider-Instanz zu verbinden",
|
||||||
"about.thanks": "Vielen lieben Dank an das Cider Collective Team und an alle Mithelfer."
|
"about.thanks": "Vielen lieben Dank an das Cider Collective Team und an alle Mithelfer.",
|
||||||
|
"term.navigateBack": "Zurück",
|
||||||
|
"term.navigateForward": "Weiter",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Verbessert die wahrgenommene Audioqualität von AAC-kodierten Audiodaten durch die Verwendung eines Echtzeit-Algorithmus, der sowohl psychoakustische Modelle des menschlichen Gehörs als auch AAC-Kodierungsmerkmale nutzt.",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer.description": "Verwirklicht eine andere musikalische Atmosphäre, die nach dem Stand der Technik von Audio-Setups modelliert ist.",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.description": "Ändert die Betriebsart des Atmosphere Realizer-Moduls.",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Vorabgestimmter Spatialisierungseffekt. Deaktiviert die anpassbaren Einstellungen der Audio-Spatialisierung.",
|
||||||
|
"settings.option.audio.audioLab.description": "Eine Auswahl an selbst entwickelten Audioeffekten für Cider.",
|
||||||
|
"action.open": "Öffnen",
|
||||||
|
"settings.option.visual.theme.github.openfolder": "Öffne Themes Ordner",
|
||||||
|
"settings.option.debug.copy_log": "Logs in die Zwischenablage kopieren",
|
||||||
|
"settings.header.visual.theme.github.page": "Themes von GitHub",
|
||||||
|
"settings.header.visual.plugin.github.page": "Plugins von GitHub",
|
||||||
|
"settings.option.connectivity.discordRPC.reload": "DiscordRPC neu laden",
|
||||||
|
"menubar.options.reload": "Neu laden",
|
||||||
|
"settings.option.general.customizeSidebar": "Seitenleistenelemente anpassen",
|
||||||
|
"settings.option.general.customizeSidebar.customize": "Anpassen",
|
||||||
|
"settings.header.window": "Fenster",
|
||||||
|
"settings.option.visual.theme.github.available": "Verfügbar",
|
||||||
|
"settings.option.visual.theme.github.applied": "Angewandt",
|
||||||
|
"action.createNew": "Erstellen...",
|
||||||
|
"settings.option.connect.link_account": "Synchronisierung mit Cider Connect aktivieren",
|
||||||
|
"settings.option.connect.link_account.description": "Wenn du deinen Discord-Account mit Cider Connect verknüpfst, kannst du Benutzerdaten speichern, einschließlich Einstellungen, EQs und eventuell mehr, sobald es fertig ist. (Work in Progress)",
|
||||||
|
"action.editTracklist": "Playlist bearbeiten",
|
||||||
|
"term.track": {
|
||||||
|
"one": "Titel",
|
||||||
|
"other": "Titel"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"i18n.languageName": "English (UK)",
|
"i18n.languageName": "English (UK)",
|
||||||
"i18n.languageNameEnglish": "English (UK)",
|
"i18n.languageNameEnglish": "English (UK)",
|
||||||
"i18n.category": "main",
|
"i18n.category": "main",
|
||||||
"i18n.authors": "Core, inalone, nosh118",
|
"i18n.authors": "Core, inalone, nosh118, booploops",
|
||||||
"date.format": "${d} ${m}, ${y}",
|
"date.format": "${d} ${m}, ${y}",
|
||||||
"term.equalizer": "Equaliser",
|
"term.equalizer": "Equaliser",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.description": "Enabling AudioContext functionality will allow for extended audio features like Audio Normalisation, Equalisers and Visualisers - however on some systems this may cause stuttering in audio tracks.",
|
"settings.option.audio.enableAdvancedFunctionality.description": "Enabling AudioContext functionality will allow for extended audio features like Audio Normalisation, Equalisers and Visualisers - however on some systems this may cause stuttering in audio tracks.",
|
||||||
|
@ -14,5 +14,14 @@
|
||||||
"term.track": {
|
"term.track": {
|
||||||
"one" : "song",
|
"one" : "song",
|
||||||
"other" : "songs"
|
"other" : "songs"
|
||||||
}
|
},
|
||||||
|
"home.syncFavorites": "Sync Favourites",
|
||||||
|
"home.syncFavorites.gettingArtists": "Getting Favourited Artists...",
|
||||||
|
"action.addToFavorites": "Add to Favourites",
|
||||||
|
"action.favorite": "Favourite",
|
||||||
|
"action.removeFavorite": "Remove Favourite",
|
||||||
|
"settings.option.visual.customAccentColor": "Custom Accent Colour",
|
||||||
|
"settings.option.visual.accentColor": "Accent Colour",
|
||||||
|
"settings.option.visual.windowColor": "Window Tint Colour",
|
||||||
|
"settings.header.visual.windowBackgroundStyle.color": "Colour Tint"
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,6 +131,8 @@
|
||||||
"term.audioControls": "Vowume Contwows",
|
"term.audioControls": "Vowume Contwows",
|
||||||
"term.clearAll": "Cweaw Aww",
|
"term.clearAll": "Cweaw Aww",
|
||||||
"term.recentStations": "Wecent Stations",
|
"term.recentStations": "Wecent Stations",
|
||||||
|
"term.personalStations": "Pewsonyaw Stations",
|
||||||
|
"term.amLive": "Appwe Music Wive",
|
||||||
"term.language": "Wanguage",
|
"term.language": "Wanguage",
|
||||||
"term.funLanguages": "Fun",
|
"term.funLanguages": "Fun",
|
||||||
"term.noLyrics": "Woading... / Wywics nyot found./ Instwumentaw.",
|
"term.noLyrics": "Woading... / Wywics nyot found./ Instwumentaw.",
|
||||||
|
@ -210,6 +212,12 @@
|
||||||
"podcast.episodes": "Episodes",
|
"podcast.episodes": "Episodes",
|
||||||
"podcast.playEpisode": "Pway Episode",
|
"podcast.playEpisode": "Pway Episode",
|
||||||
"podcast.website": "Podcast Website",
|
"podcast.website": "Podcast Website",
|
||||||
|
"action.hideLibrary": "Hide Wibwawy",
|
||||||
|
"action.showLibrary": "Show Wibwawy",
|
||||||
|
"action.cut": "Cut",
|
||||||
|
"action.paste": "Paste",
|
||||||
|
"action.selectAll": "Sewect Aww",
|
||||||
|
"action.delete": "Dewete",
|
||||||
"action.edit": "Edit",
|
"action.edit": "Edit",
|
||||||
"action.done": "Donye",
|
"action.done": "Donye",
|
||||||
"action.editTracklist": "Edit Twackwist",
|
"action.editTracklist": "Edit Twackwist",
|
||||||
|
@ -261,6 +269,7 @@
|
||||||
"action.tray.playpause": "Pway/Pause",
|
"action.tray.playpause": "Pway/Pause",
|
||||||
"action.tray.next": "Nyext",
|
"action.tray.next": "Nyext",
|
||||||
"action.tray.previous": "Pwevious",
|
"action.tray.previous": "Pwevious",
|
||||||
|
"action.tray.listento": "Wisten To:",
|
||||||
"action.update": "Update",
|
"action.update": "Update",
|
||||||
"action.install": "Instaww",
|
"action.install": "Instaww",
|
||||||
"action.copy": "Copy",
|
"action.copy": "Copy",
|
||||||
|
@ -364,6 +373,7 @@
|
||||||
"settings.header.audio": "Audio",
|
"settings.header.audio": "Audio",
|
||||||
"settings.header.audio.description": "Adjust the audio settings fow Cidew.",
|
"settings.header.audio.description": "Adjust the audio settings fow Cidew.",
|
||||||
"settings.option.audio.volumeStep": "Vowume Step",
|
"settings.option.audio.volumeStep": "Vowume Step",
|
||||||
|
"settings.option.audio.advanced": "Advanced Vowume Contwow",
|
||||||
"settings.option.audio.maxVolume": "Max Vowume",
|
"settings.option.audio.maxVolume": "Max Vowume",
|
||||||
"settings.option.audio.changePlaybackRate": "Change Pwayback Wate",
|
"settings.option.audio.changePlaybackRate": "Change Pwayback Wate",
|
||||||
"settings.option.audio.playbackRate": "Pwayback Wate",
|
"settings.option.audio.playbackRate": "Pwayback Wate",
|
||||||
|
@ -396,20 +406,29 @@
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer.description": "Weawizes a diffewent musicaw atmosphewe modewwed aftew the state of the awt audio setups.",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer.description": "Weawizes a diffewent musicaw atmosphewe modewwed aftew the state of the awt audio setups.",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode": "Cidew Atmosphewe Weawizew™️ Mode",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode": "Cidew Atmosphewe Weawizew™️ Mode",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.description": "Changes the mode of opewation of the Atmosphewe Weawizew moduwe.",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.description": "Changes the mode of opewation of the Atmosphewe Weawizew moduwe.",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_STANDARD": "Nyatuwaw (Standawd)",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_STANDARD": "Hōjicha Cheese Foam Tea",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_PLUS": "Nyatuwaw (Pwus)",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_PLUS": "Genmaicha Tapioca Miwk Tea",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_1": "Wock Sawt Cheese Foam Tea",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_2": "Uji Matcha Miwk Tea",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E168_1": "Jasminye Macchiato",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z3600": "Hokkaido Miwk Tea",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500A": "Moonwight Softcake",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.BSCBM": "Bwown Sugaw Cweme Bwûwée Miwk",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.CUDDLE": "Cuddwe Wawmth",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cidew Adwenyawinye Pwocessow™️",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cidew Adwenyawinye Pwocessow™️",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Enhances the pewceived audio quawity of 256 kbps AAC audio by using a weaw-time awgowithm that takes advantage of both psychoacoustic modews of human heawing and AAC encoding chawactewistics.",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Enhances the pewceived audio quawity of AAC encoded audio by using a weaw-time awgowithm that takes advantage of both psychoacoustic modews of human heawing and AAC encoding chawactewistics.",
|
||||||
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP is nyot compatibwe with Spatiawization. Pwease disabwe Spatiawization to continyue.",
|
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP is nyot compatibwe with Spatiawization. Pwease disabwe Spatiawization to continyue.",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Stwength",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Stwength",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Changes the stwength of the pwocessing donye to the audio. (Aggwessive may yiewd undesiwabwe wesuwts)",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Changes the stwength of the pwocessing donye to the audio. (Aggwessive may yiewd undesiwabwe wesuwts)",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Standawd",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Standawd",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.adaptive": "Adaptive",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.legacy": "Wegacy",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Aggwessive",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Aggwessive",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Audio Nyowmawization",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Audio Nyowmawization",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Nyowmawizes peak vowume fow individuaw twacks to cweate a mowe unyifowm wistenying expewience. (Does nyot wowk on usew upwoaded twacks)",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Nyowmawizes peak vowume fow individuaw twacks to cweate a mowe unyifowm wistenying expewience. (Does nyot wowk on usew upwoaded twacks)",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Manyaged by Audio Wab",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Manyaged by Audio Wab",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cidew Tunyed Spatiawization",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cidew Tunyed Spatiawization",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Pwe-tunyed Spatiawizing Effect, disabwes the customizabwe settings of Audio Spatiawization. Spatiawization must be enyabwed as a pwewequisite.",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Pwe-tunyed Spatiawizing Effect, disabwes the customizabwe settings of Audio Spatiawization.",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cidew Spatiawization Pwofiwe",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cidew Spatiawization Pwofiwe",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Changes the Tunying Pwofiwe of the Spatiawization.",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Changes the Tunying Pwofiwe of the Spatiawization.",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Standawd",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Standawd",
|
||||||
|
@ -417,6 +436,9 @@
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.separation": "Sepawation",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.separation": "Sepawation",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.minimal": "Minyimaw",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.minimal": "Minyimaw",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Audiophiwe",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Audiophiwe",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.diffused": "Diffused",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.bplk": "Encowe",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.hw2k": "Expanded Encowe",
|
||||||
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "Spatiawization is nyot compatibwe with CAP. Pwease disabwe CAP to continyue.",
|
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "Spatiawization is nyot compatibwe with CAP. Pwease disabwe CAP to continyue.",
|
||||||
"settings.option.audio.dbspl.display": "dB SPW Dispway",
|
"settings.option.audio.dbspl.display": "dB SPW Dispway",
|
||||||
"settings.option.audio.dbspl.description": "(Advanced usews onwy) Dispway dB SPW instead of dBFS on the vowume swidew.",
|
"settings.option.audio.dbspl.description": "(Advanced usews onwy) Dispway dB SPW instead of dBFS on the vowume swidew.",
|
||||||
|
@ -498,6 +520,8 @@
|
||||||
"settings.option.connectivity.discordRPC.hideTimestamp": "Hide timestamp on Discowd Wich Pwesence",
|
"settings.option.connectivity.discordRPC.hideTimestamp": "Hide timestamp on Discowd Wich Pwesence",
|
||||||
"settings.option.connectivity.discordRPC.detailsFormat": "Detaiws Fowmat",
|
"settings.option.connectivity.discordRPC.detailsFormat": "Detaiws Fowmat",
|
||||||
"settings.option.connectivity.discordRPC.stateFormat": "State Fowmat",
|
"settings.option.connectivity.discordRPC.stateFormat": "State Fowmat",
|
||||||
|
"settings.option.connectivity.discordRPC.reload": "Wewoad DiscowdWPC",
|
||||||
|
"settings.option.connectivity.discordRPC.reconnectedToUser": "DiscowdWPC Weconnyected to Usew: {{user}} ({{userid}})",
|
||||||
"settings.option.connectivity.lastfmScrobble": "Wast.fm Scwobbwing",
|
"settings.option.connectivity.lastfmScrobble": "Wast.fm Scwobbwing",
|
||||||
"settings.option.connectivity.lastfmScrobble.delay": "Wast.fm Scwobbwe Deway (%)",
|
"settings.option.connectivity.lastfmScrobble.delay": "Wast.fm Scwobbwe Deway (%)",
|
||||||
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Enyabwe Wast.fm Nyow Pwaying",
|
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Enyabwe Wast.fm Nyow Pwaying",
|
||||||
|
@ -555,5 +579,44 @@
|
||||||
"share.platform.email": "Emaiw",
|
"share.platform.email": "Emaiw",
|
||||||
"share.platform.songLink": "Copy with song.wink",
|
"share.platform.songLink": "Copy with song.wink",
|
||||||
"share.platform.clipboard": "Copy Wink",
|
"share.platform.clipboard": "Copy Wink",
|
||||||
"about.thanks": "Majow thanks to the Cidew Cowwective Team and aww of ouw contwibutows."
|
"about.thanks": "Majow thanks to the Cidew Cowwective Team and aww of ouw contwibutows.",
|
||||||
|
"oobe.yes": "Yes",
|
||||||
|
"oobe.no": "Nyo",
|
||||||
|
"oobe.next": "Nyext",
|
||||||
|
"oobe.previous": "Pwevious",
|
||||||
|
"oobe.done": "Donye",
|
||||||
|
"oobe.amupsell.title": "Befowe we stawt",
|
||||||
|
"oobe.amupsell.text": "Cidew wequiwes an active, paid Appwe Music subscwiption\nCidew wiww nyot wowk with Appwe Music Voice Pwan ow some pwomotionyaw twiaw subscwiptions. If you awweady have a quawified Appwe Music subscwiption cwick Nyext to continyue.",
|
||||||
|
"oobe.amupsell.subscribeBtn": "Subscwibe to Appwe Music",
|
||||||
|
"oobe.amupsell.explainBtn": "Expwain",
|
||||||
|
"oobe.amupsell.subscribeUrl": "https://appwe.co/3MdqJVQ",
|
||||||
|
"oobe.amupsell.amWebUrl": "https://beta.music.appwe.com/",
|
||||||
|
"oobe.amupsell.promoExplained": "Some pwomotionyaw and nyon US Appwe Music twiaw subscwiptions do nyot have access to the wequiwed Appwe Music Web Pwayew API's nyeeded fow Cidew to function. To vewify if youw active twiaw wiww wowk with Cidew go to <a hwef='{{ amWebUrl }}'>{{ amWebUrl }}</a> log in and try to play some music. If it works, great! You're ready to use Cider, however if it does not consider subscribing to Apple Music here: <a href='{{ subscribeUrl }}'>{{ subscribeUrl }}</a>",
|
||||||
|
"oobe.intro.title": "Wewcome to Cidew",
|
||||||
|
"oobe.intro.subtitle": "",
|
||||||
|
"oobe.intro.text": "Wet's get a few things set up so you can use Cidew, how you'd wike. You can awways change these settings watew.",
|
||||||
|
"oobe.general.title": "Genyewaw",
|
||||||
|
"oobe.general.subtitle": "",
|
||||||
|
"oobe.general.text": "",
|
||||||
|
"oobe.audio.title": "Audio",
|
||||||
|
"oobe.audio.subtitle": "",
|
||||||
|
"oobe.audio.text": "Cidew featuwes a custom tunyed and designyed audio stack that dewivews a wich high quawity audio expewience.\nFeatuwing Cidew Adwenyawinye, Atmosphewe Weawizew, and Spatiawized Audio.\nTo enyabwe this functionyawity \"Advanced Audio Functionyawity\" must be enyabwed.\nEnyabwing Advanced Audio Functionyawity wiww give you access to these enhancements in the Cidew Audio Wabs, found in the app settings.",
|
||||||
|
"oobe.audio.advancedFunctionality": "",
|
||||||
|
"oobe.visual.title": "Visuaw",
|
||||||
|
"oobe.visual.subtitle": "",
|
||||||
|
"oobe.visual.text": "",
|
||||||
|
"oobe.visual.layout.text": "Cidew featuwes two window diffewent wayouts.\nMavewick is an iTunyes wike wayout with the pwayew at the top of the window.\nMojave is a nyew spin cweated by the Cidew Cowwective.\n\nYou can change the wayout any time in the settings.",
|
||||||
|
"oobe.visual.suggestingThemes": "Theming is a gweat way to pewsonyawize youw expewience. Hewe awe a few we suggest: ",
|
||||||
|
"oobe.visual.suggestingThemes.subtext": "(These themes wiww be downwoaded fwom GitHub)",
|
||||||
|
"oobe.visual.suggestingThemes.default": "Cidew",
|
||||||
|
"oobe.visual.suggestingThemes.default.text": "The cwassic Cidew theme.",
|
||||||
|
"oobe.visual.suggestingThemes.dark": "Dawk",
|
||||||
|
"oobe.visual.suggestingThemes.dark.text": "Dawknyess.",
|
||||||
|
"oobe.visual.suggestingThemes.community1": "Gwoovy",
|
||||||
|
"oobe.visual.suggestingThemes.community1.text": "A WinUI infwuenced theme",
|
||||||
|
"oobe.visual.suggestingThemes.community2": "iTheme",
|
||||||
|
"oobe.visual.suggestingThemes.community2.text": "The cwassic big fwuit wayout.",
|
||||||
|
"oobe.visual.suggestingThemes.community3": "Dwacuwa",
|
||||||
|
"oobe.visual.suggestingThemes.community3.text": "The iconyic Dwacuwa cowow scheme.",
|
||||||
|
"oobe.amsignin.title": ""
|
||||||
}
|
}
|
|
@ -2,7 +2,7 @@
|
||||||
"i18n.languageName": "English (US)",
|
"i18n.languageName": "English (US)",
|
||||||
"i18n.languageNameEnglish": "English (US)",
|
"i18n.languageNameEnglish": "English (US)",
|
||||||
"i18n.category": "main",
|
"i18n.category": "main",
|
||||||
"i18n.authors": "@maikirakiwi @kyw504100 @nosh118",
|
"i18n.authors": "@notmaikiwi @kyw504100 @nosh118 @cryptofyre",
|
||||||
"app.name": "Cider",
|
"app.name": "Cider",
|
||||||
"date.format": "${m} ${d}, ${y}",
|
"date.format": "${m} ${d}, ${y}",
|
||||||
"dialog.cancel": "Cancel",
|
"dialog.cancel": "Cancel",
|
||||||
|
@ -42,6 +42,7 @@
|
||||||
"term.artists": "Artists",
|
"term.artists": "Artists",
|
||||||
"term.podcasts": "Podcasts",
|
"term.podcasts": "Podcasts",
|
||||||
"term.playlists": "Playlists",
|
"term.playlists": "Playlists",
|
||||||
|
"term.charts": "Charts",
|
||||||
"term.playlist": "Playlist",
|
"term.playlist": "Playlist",
|
||||||
"term.newPlaylist": "New Playlist",
|
"term.newPlaylist": "New Playlist",
|
||||||
"term.newPlaylistFolder": "New Playlist Folder",
|
"term.newPlaylistFolder": "New Playlist Folder",
|
||||||
|
@ -133,6 +134,7 @@
|
||||||
"term.recentStations": "Recent Stations",
|
"term.recentStations": "Recent Stations",
|
||||||
"term.personalStations": "Personal Stations",
|
"term.personalStations": "Personal Stations",
|
||||||
"term.amLive": "Apple Music Live",
|
"term.amLive": "Apple Music Live",
|
||||||
|
"term.live": "LIVE",
|
||||||
"term.language": "Language",
|
"term.language": "Language",
|
||||||
"term.funLanguages": "Fun",
|
"term.funLanguages": "Fun",
|
||||||
"term.noLyrics": "Loading... / Lyrics not found./ Instrumental.",
|
"term.noLyrics": "Loading... / Lyrics not found./ Instrumental.",
|
||||||
|
@ -153,6 +155,7 @@
|
||||||
},
|
},
|
||||||
"term.videos": "Videos",
|
"term.videos": "Videos",
|
||||||
"term.menu": "Menu",
|
"term.menu": "Menu",
|
||||||
|
"term.themeManaged": "Managed by a theme",
|
||||||
"term.check": "Check",
|
"term.check": "Check",
|
||||||
"term.aboutArtist": "About {{artistName}}",
|
"term.aboutArtist": "About {{artistName}}",
|
||||||
"term.topResult": "Top Result",
|
"term.topResult": "Top Result",
|
||||||
|
@ -192,6 +195,8 @@
|
||||||
"term.confirmLogout": "Are you sure you want to logout?",
|
"term.confirmLogout": "Are you sure you want to logout?",
|
||||||
"term.creditDesignedBy": "Designed by ${authorUsername}",
|
"term.creditDesignedBy": "Designed by ${authorUsername}",
|
||||||
"term.discNumber": "Disc ${discNumber}",
|
"term.discNumber": "Disc ${discNumber}",
|
||||||
|
"home.syncFavorites": "Sync Favorites",
|
||||||
|
"home.syncFavorites.gettingArtists": "Getting Favorited Artists...",
|
||||||
"home.title": "Home",
|
"home.title": "Home",
|
||||||
"home.recentlyPlayed": "Recently Played",
|
"home.recentlyPlayed": "Recently Played",
|
||||||
"home.recentlyAdded": "Recently Added",
|
"home.recentlyAdded": "Recently Added",
|
||||||
|
@ -212,6 +217,14 @@
|
||||||
"podcast.episodes": "Episodes",
|
"podcast.episodes": "Episodes",
|
||||||
"podcast.playEpisode": "Play Episode",
|
"podcast.playEpisode": "Play Episode",
|
||||||
"podcast.website": "Podcast Website",
|
"podcast.website": "Podcast Website",
|
||||||
|
"action.favorite": "Favorite",
|
||||||
|
"action.removeFavorite": "Remove Favorite",
|
||||||
|
"action.hideLibrary": "Hide Library",
|
||||||
|
"action.showLibrary": "Show Library",
|
||||||
|
"action.cut": "Cut",
|
||||||
|
"action.paste": "Paste",
|
||||||
|
"action.selectAll": "Select All",
|
||||||
|
"action.delete": "Delete",
|
||||||
"action.edit": "Edit",
|
"action.edit": "Edit",
|
||||||
"action.done": "Done",
|
"action.done": "Done",
|
||||||
"action.editTracklist": "Edit Tracklist",
|
"action.editTracklist": "Edit Tracklist",
|
||||||
|
@ -367,6 +380,7 @@
|
||||||
"settings.header.audio": "Audio",
|
"settings.header.audio": "Audio",
|
||||||
"settings.header.audio.description": "Adjust the audio settings for Cider.",
|
"settings.header.audio.description": "Adjust the audio settings for Cider.",
|
||||||
"settings.option.audio.volumeStep": "Volume Step",
|
"settings.option.audio.volumeStep": "Volume Step",
|
||||||
|
"settings.option.audio.advanced": "Advanced Volume Control",
|
||||||
"settings.option.audio.maxVolume": "Max Volume",
|
"settings.option.audio.maxVolume": "Max Volume",
|
||||||
"settings.option.audio.changePlaybackRate": "Change Playback Rate",
|
"settings.option.audio.changePlaybackRate": "Change Playback Rate",
|
||||||
"settings.option.audio.playbackRate": "Playback Rate",
|
"settings.option.audio.playbackRate": "Playback Rate",
|
||||||
|
@ -405,19 +419,25 @@
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_2": "Uji Matcha Milk Tea",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_2": "Uji Matcha Milk Tea",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E168_1": "Jasmine Macchiato",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E168_1": "Jasmine Macchiato",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z3600": "Hokkaido Milk Tea",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z3600": "Hokkaido Milk Tea",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500": "Moonlight Softcake",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500A": "Moonlight Softcake",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500B": "Clafoutis aux Cerises",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500C": "Uji Matcha Mochi",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.BSCBM": "Brown Sugar Creme Brûlée Milk",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.CUDDLE": "Cuddle Warmth",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Enhances the perceived audio quality of AAC encoded audio by using a real-time algorithm that takes advantage of both psychoacoustic models of human hearing and AAC encoding characteristics.",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Enhances the perceived audio quality of AAC encoded audio by using a real-time algorithm that takes advantage of both psychoacoustic models of human hearing and AAC encoding characteristics.",
|
||||||
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP is not compatible with Spatialization. Please disable Spatialization to continue.",
|
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP is not compatible with Spatialization. Please disable Spatialization to continue.",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Strength",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Strength",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Changes the strength of the processing done to the audio. (Aggressive may yield undesirable results)",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Changes the strength of the processing done to the audio. (Aggressive may yield undesirable results)",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Standard",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Standard",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.adaptive": "Adaptive",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.legacy": "Legacy",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Aggressive",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Aggressive",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Audio Normalization",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Audio Normalization",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalizes peak volume for individual tracks to create a more uniform listening experience. (Does not work on user uploaded tracks)",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalizes peak volume for individual tracks to create a more uniform listening experience. (Does not work on user uploaded tracks)",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Managed by Audio Lab",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Managed by Audio Lab",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider Tuned Spatialization",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider Tuned Spatialization",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Pre-tuned Spatializing Effect, disables the customizable settings of Audio Spatialization. Spatialization must be enabled as a prerequisite.",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Pre-tuned Spatializing Effect, disables the customizable settings of Audio Spatialization.",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider Spatialization Profile",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider Spatialization Profile",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Changes the Tuning Profile of the Spatialization.",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Changes the Tuning Profile of the Spatialization.",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Standard",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Standard",
|
||||||
|
@ -426,6 +446,8 @@
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.minimal": "Minimal",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.minimal": "Minimal",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Audiophile",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Audiophile",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.diffused": "Diffused",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.diffused": "Diffused",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.bplk": "Encore",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.hw2k": "Expanded Encore",
|
||||||
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "Spatialization is not compatible with CAP. Please disable CAP to continue.",
|
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "Spatialization is not compatible with CAP. Please disable CAP to continue.",
|
||||||
"settings.option.audio.dbspl.display": "dB SPL Display",
|
"settings.option.audio.dbspl.display": "dB SPL Display",
|
||||||
"settings.option.audio.dbspl.description": "(Advanced users only) Display dB SPL instead of dBFS on the volume slider.",
|
"settings.option.audio.dbspl.description": "(Advanced users only) Display dB SPL instead of dBFS on the volume slider.",
|
||||||
|
@ -434,10 +456,15 @@
|
||||||
"settings.header.visual": "Visual",
|
"settings.header.visual": "Visual",
|
||||||
"settings.header.visual.description": "Adjust the visual settings for Cider.",
|
"settings.header.visual.description": "Adjust the visual settings for Cider.",
|
||||||
"settings.option.visual.windowStyle": "Window Style",
|
"settings.option.visual.windowStyle": "Window Style",
|
||||||
|
"settings.option.visual.customAccentColor": "Custom Accent Color",
|
||||||
|
"settings.option.visual.accentColor": "Accent Color",
|
||||||
|
"settings.option.visual.purplePodcastPlaybackBar": "Purple Playback Bar for Podcasts",
|
||||||
|
"settings.option.visual.windowColor": "Window Tint Color",
|
||||||
"settings.option.visual.windowBackgroundStyle": "Window Background Style",
|
"settings.option.visual.windowBackgroundStyle": "Window Background Style",
|
||||||
"settings.header.visual.windowBackgroundStyle.none": "None",
|
"settings.header.visual.windowBackgroundStyle.none": "None",
|
||||||
"settings.header.visual.windowBackgroundStyle.artwork": "Artwork",
|
"settings.header.visual.windowBackgroundStyle.artwork": "Artwork",
|
||||||
"settings.header.visual.windowBackgroundStyle.image": "Image",
|
"settings.header.visual.windowBackgroundStyle.image": "Image",
|
||||||
|
"settings.header.visual.windowBackgroundStyle.color": "Color Tint",
|
||||||
"settings.option.visual.animatedArtwork": "Animated Artwork",
|
"settings.option.visual.animatedArtwork": "Animated Artwork",
|
||||||
"settings.header.visual.animatedArtwork.always": "Always",
|
"settings.header.visual.animatedArtwork.always": "Always",
|
||||||
"settings.header.visual.animatedArtwork.limited": "Limited to pages and special entries",
|
"settings.header.visual.animatedArtwork.limited": "Limited to pages and special entries",
|
||||||
|
@ -507,6 +534,8 @@
|
||||||
"settings.option.connectivity.discordRPC.hideTimestamp": "Hide timestamp on Discord Rich Presence",
|
"settings.option.connectivity.discordRPC.hideTimestamp": "Hide timestamp on Discord Rich Presence",
|
||||||
"settings.option.connectivity.discordRPC.detailsFormat": "Details Format",
|
"settings.option.connectivity.discordRPC.detailsFormat": "Details Format",
|
||||||
"settings.option.connectivity.discordRPC.stateFormat": "State Format",
|
"settings.option.connectivity.discordRPC.stateFormat": "State Format",
|
||||||
|
"settings.option.connectivity.discordRPC.reload": "Reload DiscordRPC",
|
||||||
|
"settings.option.connectivity.discordRPC.reconnectedToUser": "DiscordRPC Reconnected to User: {{user}} ({{userid}})",
|
||||||
"settings.option.connectivity.lastfmScrobble": "Last.fm Scrobbling",
|
"settings.option.connectivity.lastfmScrobble": "Last.fm Scrobbling",
|
||||||
"settings.option.connectivity.lastfmScrobble.delay": "Last.fm Scrobble Delay (%)",
|
"settings.option.connectivity.lastfmScrobble.delay": "Last.fm Scrobble Delay (%)",
|
||||||
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Enable Last.fm Now Playing",
|
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Enable Last.fm Now Playing",
|
||||||
|
@ -564,5 +593,44 @@
|
||||||
"share.platform.email": "Email",
|
"share.platform.email": "Email",
|
||||||
"share.platform.songLink": "Copy with song.link",
|
"share.platform.songLink": "Copy with song.link",
|
||||||
"share.platform.clipboard": "Copy Link",
|
"share.platform.clipboard": "Copy Link",
|
||||||
"about.thanks": "Major thanks to the Cider Collective Team and all of our contributors."
|
"about.thanks": "Major thanks to the Cider Collective Team and all of our contributors.",
|
||||||
|
"oobe.yes": "Yes",
|
||||||
|
"oobe.no": "No",
|
||||||
|
"oobe.next": "Next",
|
||||||
|
"oobe.previous": "Previous",
|
||||||
|
"oobe.done": "Done",
|
||||||
|
"oobe.amupsell.title": "Before we start",
|
||||||
|
"oobe.amupsell.text": "Cider requires an active, paid Apple Music subscription\nCider will not work with Apple Music Voice Plan or some promotional trial subscriptions. If you already have a qualified Apple Music subscription click Next to continue.",
|
||||||
|
"oobe.amupsell.subscribeBtn": "Subscribe to Apple Music",
|
||||||
|
"oobe.amupsell.explainBtn": "Explain",
|
||||||
|
"oobe.amupsell.subscribeUrl": "https://apple.co/3MdqJVQ",
|
||||||
|
"oobe.amupsell.amWebUrl": "https://beta.music.apple.com/",
|
||||||
|
"oobe.amupsell.promoExplained": "Some promotional and non US Apple Music trial subscriptions do not have access to the required Apple Music Web Player API's needed for Cider to function. To verify if your active trial will work with Cider go to <a href='{{ amWebUrl }}'>{{ amWebUrl }}</a> log in and try to play some music. If it works, great! You're ready to use Cider, however if it does not consider subscribing to Apple Music here: <a href='{{ subscribeUrl }}'>{{ subscribeUrl }}</a>",
|
||||||
|
"oobe.intro.title": "Welcome to Cider",
|
||||||
|
"oobe.intro.subtitle": "",
|
||||||
|
"oobe.intro.text": "Let's get a few things set up so you can use Cider, how you'd like. You can always change these settings later.",
|
||||||
|
"oobe.general.title": "General",
|
||||||
|
"oobe.general.subtitle": "",
|
||||||
|
"oobe.general.text": "",
|
||||||
|
"oobe.audio.title": "Audio",
|
||||||
|
"oobe.audio.subtitle": "",
|
||||||
|
"oobe.audio.text": "Cider features a custom tuned and designed audio stack that delivers a rich high quality audio experience.\nFeaturing Cider Adrenaline, Atmosphere Realizer, and Spatialized Audio.\nTo enable this functionality \"Advanced Audio Functionality\" must be enabled.\nEnabling Advanced Audio Functionality will give you access to these enhancements in the Cider Audio Labs, found in the app settings.",
|
||||||
|
"oobe.audio.advancedFunctionality": "",
|
||||||
|
"oobe.visual.title": "Visual",
|
||||||
|
"oobe.visual.subtitle": "",
|
||||||
|
"oobe.visual.text": "",
|
||||||
|
"oobe.visual.layout.text": "Cider features two window different layouts.\nMaverick is an iTunes like layout with the player at the top of the window.\nMojave is a new spin created by the Cider Collective.\n\nYou can change the layout any time in the settings.",
|
||||||
|
"oobe.visual.suggestingThemes": "Theming is a great way to personalize your experience. Here are a few we suggest: ",
|
||||||
|
"oobe.visual.suggestingThemes.subtext": "(These themes will be downloaded from GitHub)",
|
||||||
|
"oobe.visual.suggestingThemes.default": "Cider",
|
||||||
|
"oobe.visual.suggestingThemes.default.text": "The classic Cider theme.",
|
||||||
|
"oobe.visual.suggestingThemes.dark": "Dark",
|
||||||
|
"oobe.visual.suggestingThemes.dark.text": "Darkness.",
|
||||||
|
"oobe.visual.suggestingThemes.community1": "Groovy",
|
||||||
|
"oobe.visual.suggestingThemes.community1.text": "A WinUI influenced theme",
|
||||||
|
"oobe.visual.suggestingThemes.community2": "iTheme",
|
||||||
|
"oobe.visual.suggestingThemes.community2.text": "The classic big fruit layout.",
|
||||||
|
"oobe.visual.suggestingThemes.community3": "Dracula",
|
||||||
|
"oobe.visual.suggestingThemes.community3.text": "The iconic Dracula color scheme.",
|
||||||
|
"oobe.amsignin.title": ""
|
||||||
}
|
}
|
||||||
|
|
313
src/i18n/fi_FI.json
Normal file
|
@ -0,0 +1,313 @@
|
||||||
|
{
|
||||||
|
"i18n.languageName": "Suomi (FI)",
|
||||||
|
"i18n.languageNameEnglish": "Finnish (FI)",
|
||||||
|
"i18n.category": "main",
|
||||||
|
"i18n.authors": "@marcusziade",
|
||||||
|
"app.name": "Cider",
|
||||||
|
"date.format": "${d} ${m}, ${y}",
|
||||||
|
"dialog.cancel": "Peruuta",
|
||||||
|
"dialog.ok": "OK",
|
||||||
|
"notification.updatingLibrarySongs": "Päivitä kirjaston kappaleet...",
|
||||||
|
"notification.updatingLibraryAlbums": "Päivitä kirjaston albumit...",
|
||||||
|
"notification.updatingLibraryArtists": "Päivitä kirjaston artistit...",
|
||||||
|
"term.appleInc": "Apple Inc.",
|
||||||
|
"term.appleMusic": "Apple Music",
|
||||||
|
"term.applePodcasts": "Apple Podcasts",
|
||||||
|
"term.itunes": "iTunes",
|
||||||
|
"term.github": "GitHub",
|
||||||
|
"term.discord": "Discord",
|
||||||
|
"term.learnMore": "Näytä lisää",
|
||||||
|
"term.accountSettings": "Tilin asetukset",
|
||||||
|
"term.logout": "Kirjaudu ulos",
|
||||||
|
"term.login": "Kirjaudu sisään",
|
||||||
|
"term.about": "Lisätietoja",
|
||||||
|
"term.privateSession": "Yksityinen tila",
|
||||||
|
"term.queue": "Jono",
|
||||||
|
"term.search": "Etsi",
|
||||||
|
"term.library": "Kirjasto",
|
||||||
|
"term.listenNow": "Kuuntele nyt",
|
||||||
|
"term.browse": "Selaa",
|
||||||
|
"term.radio": "Radio",
|
||||||
|
"term.recentlyAdded": "Viimeksi lisätyt",
|
||||||
|
"term.songs": "Kappaleet",
|
||||||
|
"term.albums": "Albumit",
|
||||||
|
"term.artists": "Artistit",
|
||||||
|
"term.podcasts": "Podcastit",
|
||||||
|
"term.playlists": "Soittolistat",
|
||||||
|
"term.playlist": "Soittolista",
|
||||||
|
"term.newPlaylist": "Uusi soittolista",
|
||||||
|
"term.newPlaylistFolder": "Uusi soittolistakansio",
|
||||||
|
"term.createNewPlaylist": "Luo uusi soittolista",
|
||||||
|
"term.createNewPlaylistFolder": "Luo uusi soittolistakansio",
|
||||||
|
"term.deletePlaylist": "Oletko varma, että haluat poistaa tämän soittolistan?",
|
||||||
|
"term.play": "Soita",
|
||||||
|
"term.pause": "Tauko",
|
||||||
|
"term.previous": "Edellinen",
|
||||||
|
"term.next": "Seuraava",
|
||||||
|
"term.shuffle": "Sekoita",
|
||||||
|
"term.repeat": "Toista",
|
||||||
|
"term.volume": "Volyymi",
|
||||||
|
"term.mute": "Mykistä",
|
||||||
|
"term.unmute": "Poista mykistys",
|
||||||
|
"term.share": "Jaa",
|
||||||
|
"term.settings": "Asetukset",
|
||||||
|
"term.seeAll": "Näe kaikki",
|
||||||
|
"term.sortBy": "Järjestä",
|
||||||
|
"term.sortBy.album": "Järjestä albumin mukaan",
|
||||||
|
"term.sortBy.artist": "Järjestä artistin mukaan",
|
||||||
|
"term.sortBy.name": "Järjestä nimen mukaan",
|
||||||
|
"term.sortBy.genre": "Järjestä genren mukaan",
|
||||||
|
"term.sortBy.releaseDate": "Julkaisupäivä",
|
||||||
|
"term.sortBy.duration": "Pituus",
|
||||||
|
"term.sortOrder": "Järjestys",
|
||||||
|
"term.sortOrder.ascending": "Nousevassa järjestyksessä",
|
||||||
|
"term.sortOrder.descending": "Laskevassa järjestyksessä",
|
||||||
|
"term.viewAs": "Näytä kuin",
|
||||||
|
"term.viewAs.coverArt": "Kansikuva",
|
||||||
|
"term.viewAs.list": "Lista",
|
||||||
|
"term.size": "Koko",
|
||||||
|
"term.size.normal": "Normaali",
|
||||||
|
"term.size.compact": "Kompakti",
|
||||||
|
"term.enable": "Ota käyttöön",
|
||||||
|
"term.disable": "Poista käytöstä",
|
||||||
|
"term.enabled": "Käytössä",
|
||||||
|
"term.disabled": "Poissa käytöstä",
|
||||||
|
"term.connect": "Yhdistä",
|
||||||
|
"term.connecting": "Yhdistää",
|
||||||
|
"term.disconnect": "Katkaise",
|
||||||
|
"term.authed": "Tunnistettu",
|
||||||
|
"term.confirm": "Vahvista",
|
||||||
|
"term.more": "Lisää",
|
||||||
|
"term.less": "Vähemmän",
|
||||||
|
"term.showMore": "Näytä lisää",
|
||||||
|
"term.showLess": "Näytä vähemmän",
|
||||||
|
"term.topSongs": "Huippukappaleet",
|
||||||
|
"term.latestReleases": "Viimeisimmät julkaisut",
|
||||||
|
"term.time.added": "Lisätty",
|
||||||
|
"term.time.released": "Julkaistu",
|
||||||
|
"term.time.updated": "Päivitetty",
|
||||||
|
"term.time.hours": "Tuntia",
|
||||||
|
"term.time.hour": "Tunti",
|
||||||
|
"term.time.minutes": "Minuuttiaa",
|
||||||
|
"term.time.minute": "Minuutti",
|
||||||
|
"term.time.seconds": "Sekuntia",
|
||||||
|
"term.time.second": "Sekunti",
|
||||||
|
"term.fullscreenView": "Koko näytön näkymä",
|
||||||
|
"term.defaultView": "Oletusnäkymä",
|
||||||
|
"term.audioSettings": "Ääniasetukset",
|
||||||
|
"term.clearAll": "Puhdista kaikki",
|
||||||
|
"term.recentStations": "Viimeisimmät asemat",
|
||||||
|
"term.language": "Kieli",
|
||||||
|
"term.funLanguages": "Hauskat kielet",
|
||||||
|
"term.noLyrics": "Ei sanoituksia",
|
||||||
|
"term.copyright": "Tekijänoikeus",
|
||||||
|
"term.rightsReserved": "Oikeudet pidätetään",
|
||||||
|
"term.sponsor": "Sponsoroi tätä projektia",
|
||||||
|
"term.ciderTeam": "Cider tiimi",
|
||||||
|
"term.developer": "Kehittäjä",
|
||||||
|
"term.socialTeam": "Sosiaalinen tiimi",
|
||||||
|
"term.socials": "Sosiaaliset mediat",
|
||||||
|
"term.contributors": "Avustaja",
|
||||||
|
"term.equalizer": "Taajuuskorjain",
|
||||||
|
"term.reset": "Nollaa",
|
||||||
|
"term.tracks": "Kappaleita",
|
||||||
|
"term.videos": "Videoita",
|
||||||
|
"term.menu": "Valikko",
|
||||||
|
"term.check": "Tarkista",
|
||||||
|
"term.aboutArtist": "Lisätiedot {{artistName}}",
|
||||||
|
"home.title": "Koti",
|
||||||
|
"home.recentlyPlayed": "Viimeksi soitetut",
|
||||||
|
"home.recentlyAdded": "Viimeksi lisätyt",
|
||||||
|
"home.artistsFeed": "Artisti syöte",
|
||||||
|
"home.artistsFeed.noArtist": "Seuraa joitain artisteja nähdäksesi heidän uusimmat julkaisunsa.",
|
||||||
|
"home.madeForYou": "Tehty sinulle",
|
||||||
|
"home.friendsListeningTo": "Kaverit kuuntelee",
|
||||||
|
"home.followedArtists": "Seuratut artistit",
|
||||||
|
"error.appleMusicSubRequired": "Apple Music vaatii tilauksen.",
|
||||||
|
"error.connectionError": "Apple Musiciin yhdistämisessä oli ongelma.",
|
||||||
|
"error.noResults": "Ei tuloksia.",
|
||||||
|
"error.noResults.description": "Kokeile uutta hakua.",
|
||||||
|
"podcast.followOnCider": "Seuraa Ciderissa",
|
||||||
|
"podcast.followedOnCider": "Seurattu Ciderissa",
|
||||||
|
"podcast.subscribeOnItunes": "Tilaa iTunesissa",
|
||||||
|
"podcast.subscribedOnItunes": "Tilattu iTunesissa",
|
||||||
|
"podcast.itunesStore": "iTunes Store",
|
||||||
|
"podcast.episodes": "Jakso",
|
||||||
|
"podcast.playEpisode": "Toista jakso",
|
||||||
|
"podcast.website": "Avaa nettisivu",
|
||||||
|
"action.addToLibrary": "Lisää kirjastoon",
|
||||||
|
"action.addToLibrary.success": "Lisätty kirjastoon",
|
||||||
|
"action.addToLibrary.error": "Virhe lisättäessä kirjastoon",
|
||||||
|
"action.removeFromLibrary": "Poista kirjastosta",
|
||||||
|
"action.removeFromLibrary.success": "Poistettu kirjastosta",
|
||||||
|
"action.addToQueue": "Lisää jonoon",
|
||||||
|
"action.addToQueue.success": "Lisätty jonoon",
|
||||||
|
"action.addToQueue.error": "Virhe lisättäessä jonoon",
|
||||||
|
"action.removeFromQueue": "Poista jonosta",
|
||||||
|
"action.removeFromQueue.success": "Poistettu jonosta",
|
||||||
|
"action.removeFromQueue.error": "Virhe poistettaessa jonosta",
|
||||||
|
"action.createPlaylist": "Luo uusi soittolista",
|
||||||
|
"action.addToPlaylist": "Lisää soittolistaan",
|
||||||
|
"action.removeFromPlaylist": "Poista soittolistasta",
|
||||||
|
"action.addToFavorites": "Lisää suosikkeihin",
|
||||||
|
"action.follow": "Seuraa",
|
||||||
|
"action.follow.success": "Seurattu",
|
||||||
|
"action.follow.error": "Virhe seurattaessa",
|
||||||
|
"action.unfollow": "Lopeta seuraaminen",
|
||||||
|
"action.unfollow.success": "Seuraaminen lopetettu",
|
||||||
|
"action.unfollow.error": "Virhe seuraamisen lopetuksessa",
|
||||||
|
"action.playNext": "Toista seuraavaksi",
|
||||||
|
"action.playLater": "Toista myöhemmin",
|
||||||
|
"action.startRadio": "Aloita radio",
|
||||||
|
"action.goToArtist": "Näytä artisti",
|
||||||
|
"action.goToAlbum": "Näytä albumi",
|
||||||
|
"action.moveToTop": "Siirrä kärkeen",
|
||||||
|
"action.share": "Jaa",
|
||||||
|
"action.rename": "Nimeä uudelleen",
|
||||||
|
"action.love": "Tykkää",
|
||||||
|
"action.unlove": "Poista tykkäys",
|
||||||
|
"action.dislike": "En tykkää",
|
||||||
|
"action.undoDislike": "Kumoa en tykkää",
|
||||||
|
"action.showWebRemoteQR": "Cider web kaukoohjain",
|
||||||
|
"action.playTracksNext": "Toista ${app.selectedMediaItems.length} kappaleet seuraavaksi",
|
||||||
|
"action.playTracksLater": "Toista ${app.selectedMediaItems.length} kappaleet myöhemmin",
|
||||||
|
"action.removeTracks": "Poista ${self.selectedItems.length} kappaleet jonosta",
|
||||||
|
"action.import": "Tuonti",
|
||||||
|
"action.export": "Vienti",
|
||||||
|
"action.showAlbum": "Näytä albumi",
|
||||||
|
"action.tray.minimize": "Pienennä",
|
||||||
|
"action.tray.quit": "Sammuta",
|
||||||
|
"action.tray.show": "Näytä",
|
||||||
|
"action.update": "Päivitä",
|
||||||
|
"settings.header.general": "Yleistä",
|
||||||
|
"settings.header.general.description": "Muuta yleisasetuksia",
|
||||||
|
"settings.option.general.language": "Kieli",
|
||||||
|
"settings.option.general.language.main": "Kieli",
|
||||||
|
"settings.option.general.language.fun": "Hauskat kielet",
|
||||||
|
"settings.option.general.language.unsorted": "Lajittelematon",
|
||||||
|
"settings.header.audio": "Ääni",
|
||||||
|
"settings.header.audio.description": "Muuta ääniasetuksia",
|
||||||
|
"settings.option.audio.quality": "Äänenlaatu",
|
||||||
|
"settings.header.audio.quality.high": "Korkea",
|
||||||
|
"settings.option.audio.seamlessTransition": "Saumaton siirtyminen",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality": "Ota lisätoiminnot käyttöön",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.description": "AudioContext-toiminnon ottaminen käyttöön mahdollistaa laajennetut ääniominaisuudet, kuten äänen normalisoinnin, taajuuskorjaimet ja visualisoijat, mutta joissakin järjestelmissä tämä voi aiheuttaa ääniraitojen pätkimistä.",
|
||||||
|
"settings.warn.audio.enableAdvancedFunctionality.lowcores": "Cider uskoo, että tietokoneesi ei voi käsitellä näitä ominaisuuksia. Oletko varma, että haluat jatkaa?",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Äänen normalisointi",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalisoi yksittäisten kappaleiden huippuäänenvoimakkuuden luodakseen yhtenäisemmän kuuntelukokemuksen. (Ei toimi käyttäjien lataamilla kappaleilla)",
|
||||||
|
"settings.header.visual": "Ulkonäkö",
|
||||||
|
"settings.header.visual.description": "Muuta ulkonäköä.",
|
||||||
|
"settings.option.visual.windowBackgroundStyle": "Taustatyyli",
|
||||||
|
"settings.header.visual.windowBackgroundStyle.none": "Ei taustatyyliä",
|
||||||
|
"settings.header.visual.windowBackgroundStyle.artwork": "Taideteos",
|
||||||
|
"settings.header.visual.windowBackgroundStyle.image": "Kuva",
|
||||||
|
"settings.option.visual.animatedArtwork": "Animoitu taideteos",
|
||||||
|
"settings.header.visual.animatedArtwork.always": "Aina",
|
||||||
|
"settings.header.visual.animatedArtwork.limited": "Ainoastaa sivuilla joilla se on tarvittua",
|
||||||
|
"settings.header.visual.animatedArtwork.disable": "Ei koskaan",
|
||||||
|
"settings.option.visual.animatedArtworkQuality": "Animoinnin laatu",
|
||||||
|
"settings.header.visual.animatedArtworkQuality.low": "Alhainen",
|
||||||
|
"settings.header.visual.animatedArtworkQuality.medium": "Keskinkertainen",
|
||||||
|
"settings.header.visual.animatedArtworkQuality.high": "Korkea",
|
||||||
|
"settings.header.visual.animatedArtworkQuality.veryHigh": "Erittäin korkea",
|
||||||
|
"settings.header.visual.animatedArtworkQuality.extreme": "Korkein",
|
||||||
|
"settings.option.visual.animatedWindowBackground": "Animoitu tausta",
|
||||||
|
"settings.option.visual.hardwareAcceleration": "Laitteistokiihdytys",
|
||||||
|
"settings.option.visual.hardwareAcceleration.description": "Vaatii uudelleenkäynnistyksen",
|
||||||
|
"settings.header.visual.hardwareAcceleration.default": "Vakio",
|
||||||
|
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
|
||||||
|
"settings.option.visual.showPersonalInfo": "Näytä henkilökohtaiset tiedot",
|
||||||
|
"settings.header.lyrics": "Sanoitukset",
|
||||||
|
"settings.header.lyrics.description": "Muuta sanoitusasetuksia",
|
||||||
|
"settings.option.lyrics.enableMusixmatch": "Käytä MusicXMatchia Apple Music sanoituksien sijaan",
|
||||||
|
"settings.option.lyrics.enableMusixmatchKaraoke": "Aktivoi karaoketila (Vain MusicXMatch)",
|
||||||
|
"settings.option.lyrics.musixmatchPreferredLanguage": "MusicXMatch ensisijainen kieli",
|
||||||
|
"settings.option.lyrics.enableYoutubeLyrics": "Käytä Youtube sanoituksia videoissa",
|
||||||
|
"settings.header.connectivity": "Yhteys",
|
||||||
|
"settings.header.connectivity.description": "Muuta yhteysasetuksia",
|
||||||
|
"settings.option.connectivity.discordRPC": "Discord integraatio (discordRPC)",
|
||||||
|
"settings.option.connectivity.playbackNotifications": "Toistoilmoitukset",
|
||||||
|
"settings.option.connectivity.discordRPC.clearOnPause": "Poista Discord ilmoitus, kun tauotat kappaleen",
|
||||||
|
"settings.option.connectivity.lastfmScrobble": "Last.fm integraatio",
|
||||||
|
"settings.option.connectivity.lastfmScrobble.delay": "Last.fm viive i %",
|
||||||
|
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Näytä mikä kappale Last.fm palvelussa",
|
||||||
|
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Älä näytä extra tietoja Last.fm palvelussa",
|
||||||
|
"settings.option.connectivity.lastfmScrobble.filterLoop": "Suodata pakkotoisteut kappaleet",
|
||||||
|
"settings.header.experimental": "Testi",
|
||||||
|
"settings.header.experimental.description": "Muuta testi asetuksia.",
|
||||||
|
"settings.option.experimental.compactUI": "Kompakti näkymä",
|
||||||
|
"settings.option.window.close_button_hide": "Suljenappi pienentää Cider ikkunan",
|
||||||
|
"spatial.notTurnedOn": "Äänen spatialisointi on poistettu käytöstä. Ota se käyttöön ennen käyttöä.",
|
||||||
|
"spatial.spatialProperties": "Äänen spatialisointi asetukset",
|
||||||
|
"spatial.width": "Leveys",
|
||||||
|
"spatial.height": "Korkeus",
|
||||||
|
"spatial.depth": "Syvyys",
|
||||||
|
"spatial.gain": "Tilavyöhyke",
|
||||||
|
"spatial.roomMaterials": "Huoneen materiaalit",
|
||||||
|
"spatial.roomDimensions": "Huoneen koko",
|
||||||
|
"spatial.roomPositions": "Huoneen sijainti",
|
||||||
|
"spatial.setDimensions": "Valitse koko",
|
||||||
|
"spatial.setPositions": "Valitse sijainnit",
|
||||||
|
"spatial.up": "Ylös",
|
||||||
|
"spatial.front": "Eteenpäin",
|
||||||
|
"spatial.left": "Vasemmalle",
|
||||||
|
"spatial.right": "Oikealle",
|
||||||
|
"spatial.back": "Taaksepäin",
|
||||||
|
"spatial.down": "Alaspäin",
|
||||||
|
"spatial.listener": "Kuuntelija",
|
||||||
|
"spatial.audioSource": "Äänenlähde",
|
||||||
|
"settings.header.unfinished": "Keskeneräinen",
|
||||||
|
"remote.web.title": "Ciderin kaukosäädin",
|
||||||
|
"remote.web.description": "Skannaa QR-koodi yhdistääksesi puhelimesi tämän Cider-instanssin kanssa",
|
||||||
|
"about.thanks": "Suuri kiitos Cider Collective Teamille ja kaikille avustajillemme.",
|
||||||
|
"oobe.yes": "Kyllä",
|
||||||
|
"oobe.no": "Ei",
|
||||||
|
"oobe.next": "Seuraava",
|
||||||
|
"oobe.previous": "Edellinen",
|
||||||
|
"oobe.done": "Valmis",
|
||||||
|
"oobe.amupsell.title": "Ennenkuin aloitamme",
|
||||||
|
"oobe.amupsell.text": "Cider vaatii aktiivisen, maksullisen Apple Music -tilauksen\nCider ei toimi Apple Music Voice Planin tai joidenkin tarjouskilpailutilausten kanssa. Jos sinulla on jo hyväksytty Apple Music -tilaus, napsauta Seuraava jatkaaksesi",
|
||||||
|
"oobe.amupsell.subscribeBtn": "Tilaa Apple Music",
|
||||||
|
"oobe.amupsell.explainBtn": "Selitä",
|
||||||
|
"oobe.amupsell.subscribeUrl": "https://apple.co/3MdqJVQ",
|
||||||
|
"oobe.amupsell.amWebUrl": "https://beta.music.apple.com/",
|
||||||
|
"oobe.amupsell.promoExplained": "Joillakin promootiotilauksilla ja muilla kuin yhdysvaltalaisilla Apple Music -kokeilutilauksilla ei ole pääsyä vaadittuihin Apple Music Web Player API:ihin, joita Cider tarvitsee toimiakseen. Tarkistaaksesi, toimiiko aktiivinen kokeiluversiosi Ciderin kanssa, mene osoitteeseen: <a href='{{ subscribeUrl }}'>{{ subscribeUrl }}</a>",
|
||||||
|
"oobe.intro.title": "Tervetuloa Cideriin",
|
||||||
|
"oobe.intro.subtitle": "",
|
||||||
|
"oobe.intro.text": "Otetaan käyttöön muutamia asioita, jotta voit käyttää Cideriä haluamallasi tavalla. Voit aina muuttaa näitä asetuksia myöhemmin.",
|
||||||
|
"oobe.general.title": "Yleistä",
|
||||||
|
"oobe.general.subtitle": "",
|
||||||
|
"oobe.general.text": "",
|
||||||
|
"oobe.audio.title": "Ääni",
|
||||||
|
"oobe.audio.subtitle": "",
|
||||||
|
"oobe.audio.text": "Cider sisältää mukautetun viritetyn ja suunnitellun äänipinon, joka tarjoaa rikkaan korkealaatuisen äänikokemuksen.\nSisältää Cider Adrenaliinin, Atmosphere Realizerin ja Spatialized Audion.\nTämän toiminnon mahdollistamiseksi \"Advanced Audio Functionality\" on otettava käyttöön.\nOta käyttöön Advanced Audio Toiminnallisuus antaa sinulle pääsyn näihin parannuksiin Cider Audio Labsissa, joka löytyy sovelluksen asetuksista.",
|
||||||
|
"oobe.audio.advancedFunctionality": "",
|
||||||
|
"oobe.visual.title": "Ulkonäkö",
|
||||||
|
"oobe.visual.subtitle": "",
|
||||||
|
"oobe.visual.text": "",
|
||||||
|
"oobe.visual.layout.text": "Ciderissä on kaksi erilaista ikkuna-asettelua.\nMaverick on iTunesin kaltainen asettelu, jossa soitin on ikkunan yläosassa.\nMojave on Cider Collectiven luoma uusi kierros.\n\nVoit muuttaa asettelua milloin tahansa asetuksista.",
|
||||||
|
"oobe.visual.suggestingThemes": "Teema on loistava tapa muokata kokemustasi. Tässä on muutamia ehdotuksia: ",
|
||||||
|
"oobe.visual.suggestingThemes.subtext": "(Nämä teemat ladataan GitHubista)",
|
||||||
|
"oobe.visual.suggestingThemes.default": "Cider",
|
||||||
|
"oobe.visual.suggestingThemes.default.text": "Klassinen Ciderteema.",
|
||||||
|
"oobe.visual.suggestingThemes.dark": "Pimeys",
|
||||||
|
"oobe.visual.suggestingThemes.dark.text": "Pimeys",
|
||||||
|
"oobe.visual.suggestingThemes.community1": "Groovy",
|
||||||
|
"oobe.visual.suggestingThemes.community1.text": "WinUI-vaikutteinen teema",
|
||||||
|
"oobe.visual.suggestingThemes.community2": "iTheme",
|
||||||
|
"oobe.visual.suggestingThemes.community2.text": "Klassinen Big fruit teema",
|
||||||
|
"oobe.visual.suggestingThemes.community3": "Dracula",
|
||||||
|
"oobe.visual.suggestingThemes.community3.text": "Ikoninen Dracula-värimaailma",
|
||||||
|
"oobe.amsignin.title": "",
|
||||||
|
"share.platform.twitter.tweet": "Kuuntele kappaletta {{song}} Apple Musicissa.\n\n{{url}}\n\n#AppleMusic #Cider",
|
||||||
|
"share.platform.twitter": "Twitter",
|
||||||
|
"share.platform.facebook": "Facebook",
|
||||||
|
"share.platform.reddit": "Reddit",
|
||||||
|
"share.platform.telegram": "Telegram",
|
||||||
|
"share.platform.whatsapp": "WhatsApp",
|
||||||
|
"share.platform.messenger": "Messenger",
|
||||||
|
"share.platform.email": "Sähköposti",
|
||||||
|
"share.platform.songLink": "Kopioi song.link",
|
||||||
|
"share.platform.clipboard": "Kopioi linkki"
|
||||||
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"i18n.languageName": "हिन्दी",
|
"i18n.languageName": "हिन्दी",
|
||||||
"i18n.languageNameEnglish": "Hindi",
|
"i18n.languageNameEnglish": "Hindi",
|
||||||
"i18n.category": "main",
|
"i18n.category": "main",
|
||||||
"i18n.authors": "@maikirakiwi @vringster",
|
"i18n.authors": "@notmaikiwi @vringster",
|
||||||
"app.name": "Cider",
|
"app.name": "Cider",
|
||||||
"date.format": "${m} ${d}, ${y}",
|
"date.format": "${m} ${d}, ${y}",
|
||||||
"dialog.cancel": "रोकें",
|
"dialog.cancel": "रोकें",
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
"term.albums": "Albumok",
|
"term.albums": "Albumok",
|
||||||
"term.artists": "Előadók",
|
"term.artists": "Előadók",
|
||||||
"term.podcasts": "Podcastok",
|
"term.podcasts": "Podcastok",
|
||||||
|
"term.charts": "Listák",
|
||||||
"term.playlists": "Lejátszási listák",
|
"term.playlists": "Lejátszási listák",
|
||||||
"term.playlist": "Lejátszási lista",
|
"term.playlist": "Lejátszási lista",
|
||||||
"term.newPlaylist": "Új lejátszási lista",
|
"term.newPlaylist": "Új lejátszási lista",
|
||||||
|
@ -52,6 +53,7 @@
|
||||||
"term.navigateForward": "Előrelépés",
|
"term.navigateForward": "Előrelépés",
|
||||||
"term.play": "Lejátszás",
|
"term.play": "Lejátszás",
|
||||||
"term.pause": "Megállítás",
|
"term.pause": "Megállítás",
|
||||||
|
"term.stop": "Leállítás",
|
||||||
"term.previous": "Előző",
|
"term.previous": "Előző",
|
||||||
"term.next": "Következő",
|
"term.next": "Következő",
|
||||||
"term.shuffle": "Keverés",
|
"term.shuffle": "Keverés",
|
||||||
|
@ -130,6 +132,8 @@
|
||||||
"term.audioControls": "Hangerő beállítás",
|
"term.audioControls": "Hangerő beállítás",
|
||||||
"term.clearAll": "Összes törlése",
|
"term.clearAll": "Összes törlése",
|
||||||
"term.recentStations": "Nemrég játszott",
|
"term.recentStations": "Nemrég játszott",
|
||||||
|
"term.personalStations": "Személyes állomások",
|
||||||
|
"term.amLive": "Apple Music Live",
|
||||||
"term.language": "Nyelv",
|
"term.language": "Nyelv",
|
||||||
"term.funLanguages": "Fantázianyelvek",
|
"term.funLanguages": "Fantázianyelvek",
|
||||||
"term.noLyrics": "Betöltés... / Dalszöveg nem található / Instrumentális",
|
"term.noLyrics": "Betöltés... / Dalszöveg nem található / Instrumentális",
|
||||||
|
@ -150,6 +154,7 @@
|
||||||
},
|
},
|
||||||
"term.videos": "Videók",
|
"term.videos": "Videók",
|
||||||
"term.menu": "Menü",
|
"term.menu": "Menü",
|
||||||
|
"term.themeManaged": "Egy téma kezeli a beállítást",
|
||||||
"term.check": "Ellenőrzés",
|
"term.check": "Ellenőrzés",
|
||||||
"term.aboutArtist": "{{artistName}}-ról/ről",
|
"term.aboutArtist": "{{artistName}}-ról/ről",
|
||||||
"term.topResult": "Legjobb találatok",
|
"term.topResult": "Legjobb találatok",
|
||||||
|
@ -209,6 +214,12 @@
|
||||||
"podcast.episodes": "Epizódok",
|
"podcast.episodes": "Epizódok",
|
||||||
"podcast.playEpisode": "Epizód lejátszása",
|
"podcast.playEpisode": "Epizód lejátszása",
|
||||||
"podcast.website": "Podcast weboldala",
|
"podcast.website": "Podcast weboldala",
|
||||||
|
"action.hideLibrary": "Könyvtár elrejtése",
|
||||||
|
"action.showLibrary": "Könyvtár megjelenítése",
|
||||||
|
"action.cut": "Kivágás",
|
||||||
|
"action.paste": "Beillesztés",
|
||||||
|
"action.selectAll": "Összes kijelölése",
|
||||||
|
"action.delete": "Törlés",
|
||||||
"action.edit": "Szerkesztés",
|
"action.edit": "Szerkesztés",
|
||||||
"action.done": "Kész",
|
"action.done": "Kész",
|
||||||
"action.editTracklist": "Dalok szerkesztése",
|
"action.editTracklist": "Dalok szerkesztése",
|
||||||
|
@ -257,6 +268,10 @@
|
||||||
"action.tray.minimize": "Kicsinyítés a Tálcára",
|
"action.tray.minimize": "Kicsinyítés a Tálcára",
|
||||||
"action.tray.quit": "Bezárás",
|
"action.tray.quit": "Bezárás",
|
||||||
"action.tray.show": "Cider megjelenítése",
|
"action.tray.show": "Cider megjelenítése",
|
||||||
|
"action.tray.playpause": "Lejátszás/Megállítás",
|
||||||
|
"action.tray.next": "Következő",
|
||||||
|
"action.tray.previous": "Előző",
|
||||||
|
"action.tray.listento": "Ezt hallgatja:",
|
||||||
"action.update": "Frissítés",
|
"action.update": "Frissítés",
|
||||||
"action.install": "Telepítés",
|
"action.install": "Telepítés",
|
||||||
"action.copy": "Másolás",
|
"action.copy": "Másolás",
|
||||||
|
@ -360,6 +375,7 @@
|
||||||
"settings.header.audio": "Hang",
|
"settings.header.audio": "Hang",
|
||||||
"settings.header.audio.description": "A Cider hangbeállításainak módosítása.",
|
"settings.header.audio.description": "A Cider hangbeállításainak módosítása.",
|
||||||
"settings.option.audio.volumeStep": "Hangerő lépték",
|
"settings.option.audio.volumeStep": "Hangerő lépték",
|
||||||
|
"settings.option.audio.advanced": "Haladó hangerőkezelés",
|
||||||
"settings.option.audio.maxVolume": "Maximum hangerő",
|
"settings.option.audio.maxVolume": "Maximum hangerő",
|
||||||
"settings.option.audio.changePlaybackRate": "Lejátszási sebesség módosítása",
|
"settings.option.audio.changePlaybackRate": "Lejátszási sebesség módosítása",
|
||||||
"settings.option.audio.playbackRate": "Sebesség",
|
"settings.option.audio.playbackRate": "Sebesség",
|
||||||
|
@ -400,6 +416,8 @@
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Erősség",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Erősség",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Megváltoztatja a hangra végzett feldolgozás erősségét. (Az Agresszív mód nemkívánatos eredményeket hozhat!)",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Megváltoztatja a hangra végzett feldolgozás erősségét. (Az Agresszív mód nemkívánatos eredményeket hozhat!)",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Szokásos",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Szokásos",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.adaptive": "Adaptív",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.legacy": "Régi",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Agresszív",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Agresszív",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Normalizálás",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Normalizálás",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalizálja az egyes zeneszámok hangosabb részeit, hogy egységesebb hallgatási élményt hozzon létre. (Nem működik a felhasználó által feltöltött zenéken)",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalizálja az egyes zeneszámok hangosabb részeit, hogy egységesebb hallgatási élményt hozzon létre. (Nem működik a felhasználó által feltöltött zenéken)",
|
||||||
|
@ -413,6 +431,9 @@
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.separation": "Separation",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.separation": "Separation",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.minimal": "Minimal",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.minimal": "Minimal",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Audiophile",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Audiophile",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.diffused": "Diffused",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.bplk": "Encore",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.hw2k": "Expanded Encore",
|
||||||
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "A Térbeli Hang nem kompatibilis a CAP-pal. Kapcsold ki a CAP-ot a folytatáshoz.",
|
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "A Térbeli Hang nem kompatibilis a CAP-pal. Kapcsold ki a CAP-ot a folytatáshoz.",
|
||||||
"settings.option.audio.dbspl.display": "dB SPL kijelzés",
|
"settings.option.audio.dbspl.display": "dB SPL kijelzés",
|
||||||
"settings.option.audio.dbspl.description": "(Haladó felhasználóknak) A hangerő dB SPL-ben történő kijelzése a dBFS helyett.",
|
"settings.option.audio.dbspl.description": "(Haladó felhasználóknak) A hangerő dB SPL-ben történő kijelzése a dBFS helyett.",
|
||||||
|
@ -421,6 +442,7 @@
|
||||||
"settings.header.visual": "Vizuális",
|
"settings.header.visual": "Vizuális",
|
||||||
"settings.header.visual.description": "A Cider vizuális beállításainak módosítása.",
|
"settings.header.visual.description": "A Cider vizuális beállításainak módosítása.",
|
||||||
"settings.option.visual.windowStyle": "Ablakelrendezés",
|
"settings.option.visual.windowStyle": "Ablakelrendezés",
|
||||||
|
"settings.option.visual.purplePodcastPlaybackBar": "Lila lejátszási sáv a Podcastoknál",
|
||||||
"settings.option.visual.windowBackgroundStyle": "Ablakháttér stílusa",
|
"settings.option.visual.windowBackgroundStyle": "Ablakháttér stílusa",
|
||||||
"settings.header.visual.windowBackgroundStyle.none": "Sehol",
|
"settings.header.visual.windowBackgroundStyle.none": "Sehol",
|
||||||
"settings.header.visual.windowBackgroundStyle.artwork": "Borító",
|
"settings.header.visual.windowBackgroundStyle.artwork": "Borító",
|
||||||
|
@ -493,6 +515,8 @@
|
||||||
"settings.option.connectivity.discordRPC.hideTimestamp": "Rich Presence visszaszámláló elrejtése",
|
"settings.option.connectivity.discordRPC.hideTimestamp": "Rich Presence visszaszámláló elrejtése",
|
||||||
"settings.option.connectivity.discordRPC.detailsFormat": "Részletek formátuma",
|
"settings.option.connectivity.discordRPC.detailsFormat": "Részletek formátuma",
|
||||||
"settings.option.connectivity.discordRPC.stateFormat": "Állapot formátuma",
|
"settings.option.connectivity.discordRPC.stateFormat": "Állapot formátuma",
|
||||||
|
"settings.option.connectivity.discordRPC.reload": "DiscordRPC újratöltése",
|
||||||
|
"settings.option.connectivity.discordRPC.reconnectedToUser": "A DiscordRPC újracsatlakozott a következő felhasználóhoz: {{user}} ({{userid}})",
|
||||||
"settings.option.connectivity.lastfmScrobble": "Last.fm Scrobbling",
|
"settings.option.connectivity.lastfmScrobble": "Last.fm Scrobbling",
|
||||||
"settings.option.connectivity.lastfmScrobble.delay": "Last.fm Scrobble késleltetés (%)",
|
"settings.option.connectivity.lastfmScrobble.delay": "Last.fm Scrobble késleltetés (%)",
|
||||||
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Last.fm Now Playing engedélyezése",
|
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Last.fm Now Playing engedélyezése",
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"i18n.languageName": "日本語",
|
"i18n.languageName": "日本語",
|
||||||
"i18n.languageNameEnglish": "Japanese",
|
"i18n.languageNameEnglish": "Japanese",
|
||||||
"i18n.category": "main",
|
"i18n.category": "main",
|
||||||
"i18n.authors": "@maikirakiwi @tanaka_kakuel",
|
"i18n.authors": "@notmaikiwi @tanaka_kakuel @YTJVDCM",
|
||||||
"app.name": "Cider",
|
"app.name": "Cider",
|
||||||
"date.format": "${y}年${m}月${d}日",
|
"date.format": "${y}年${m}月${d}日",
|
||||||
"dialog.cancel": "キャンセル",
|
"dialog.cancel": "キャンセル",
|
||||||
|
@ -21,11 +21,13 @@
|
||||||
"term.accountSettings": "アカウント設定",
|
"term.accountSettings": "アカウント設定",
|
||||||
"term.logout": "サインアウト",
|
"term.logout": "サインアウト",
|
||||||
"term.login": "サインイン",
|
"term.login": "サインイン",
|
||||||
|
"term.quickNav": "Quick Nav",
|
||||||
"term.cast": "Cast",
|
"term.cast": "Cast",
|
||||||
"term.about": "Ciderについて",
|
"term.about": "Ciderについて",
|
||||||
"term.privateSession": "プライベートセッション",
|
"term.privateSession": "プライベートセッション",
|
||||||
"term.disablePrivateSession": "プライベートセッションを無効にする",
|
"term.disablePrivateSession": "プライベートセッションを無効にする",
|
||||||
"term.queue": "次はこちら",
|
"term.queue": "次はこちら",
|
||||||
|
"term.autoplay": "自動再生",
|
||||||
"term.lyrics": "歌詞",
|
"term.lyrics": "歌詞",
|
||||||
"term.miniplayer": "ミニプレイヤー",
|
"term.miniplayer": "ミニプレイヤー",
|
||||||
"term.history": "履歴",
|
"term.history": "履歴",
|
||||||
|
@ -40,22 +42,32 @@
|
||||||
"term.artists": "アーティスト",
|
"term.artists": "アーティスト",
|
||||||
"term.podcasts": "ポッドキャスト",
|
"term.podcasts": "ポッドキャスト",
|
||||||
"term.playlists": "プレイリスト",
|
"term.playlists": "プレイリスト",
|
||||||
|
"term.charts": "チャート",
|
||||||
"term.playlist": "プレイリスト",
|
"term.playlist": "プレイリスト",
|
||||||
"term.newPlaylist": "New Playlist",
|
"term.newPlaylist": "New Playlist",
|
||||||
"term.newPlaylistFolder": "新しいプレイリストフォルダ",
|
"term.newPlaylistFolder": "新しいプレイリストフォルダ",
|
||||||
"term.createNewPlaylist": "新しいプレイリストを作る",
|
"term.createNewPlaylist": "新しいプレイリストを作る",
|
||||||
"term.createNewPlaylistFolder": "新しいプレイリストフォルダを作る",
|
"term.createNewPlaylistFolder": "新しいプレイリストフォルダを作る",
|
||||||
"term.deletePlaylist": "本当にこのプレイリストを削除しますか?",
|
"term.deletePlaylist": "本当にこのプレイリストを削除しますか?",
|
||||||
|
"term.navigateBack": "戻る",
|
||||||
|
"term.navigateForward": "進む",
|
||||||
"term.play": "再生",
|
"term.play": "再生",
|
||||||
"term.pause": "停止",
|
"term.pause": "一時停止",
|
||||||
|
"term.stop": "停止",
|
||||||
"term.previous": "戻る",
|
"term.previous": "戻る",
|
||||||
"term.next": "次へ",
|
"term.next": "次へ",
|
||||||
"term.shuffle": "シャッフル",
|
"term.shuffle": "シャッフル",
|
||||||
|
"term.enableShuffle": "シャッフル再生を有効化",
|
||||||
|
"term.disableShuffle": "シャッフル再生を無効化",
|
||||||
"term.repeat": "リピート",
|
"term.repeat": "リピート",
|
||||||
|
"term.enableRepeatOne": "1曲リピートを有効化",
|
||||||
|
"term.disableRepeatOne": "1曲リピートを無効化",
|
||||||
|
"term.disableRepeat": "リピート再生を無効化",
|
||||||
"term.volume": "音量",
|
"term.volume": "音量",
|
||||||
"term.mute": "ミュート",
|
"term.mute": "ミュート",
|
||||||
"term.unmute": "ミュート解除",
|
"term.unmute": "ミュート解除",
|
||||||
"term.share": "共有",
|
"term.share": "共有",
|
||||||
|
"term.share.success": "クリップボードにコピーしました",
|
||||||
"term.settings": "設定",
|
"term.settings": "設定",
|
||||||
"term.seeAll": "すべて見る",
|
"term.seeAll": "すべて見る",
|
||||||
"term.sortBy": "並べ替え",
|
"term.sortBy": "並べ替え",
|
||||||
|
@ -72,13 +84,14 @@
|
||||||
"term.viewAs": "表示",
|
"term.viewAs": "表示",
|
||||||
"term.viewAs.coverArt": "カバーアート",
|
"term.viewAs.coverArt": "カバーアート",
|
||||||
"term.viewAs.list": "リスト",
|
"term.viewAs.list": "リスト",
|
||||||
|
"term.dynamic": "ダイナミック",
|
||||||
"term.size": "サイズ",
|
"term.size": "サイズ",
|
||||||
"term.size.normal": "普通",
|
"term.size.normal": "普通",
|
||||||
"term.size.compact": "コンパクト",
|
"term.size.compact": "コンパクト",
|
||||||
"term.enabled": "ON",
|
|
||||||
"term.disable": "OFF",
|
|
||||||
"term.disabled": "OFF",
|
|
||||||
"term.enable": "ON",
|
"term.enable": "ON",
|
||||||
|
"term.disable": "OFF",
|
||||||
|
"term.enabled": "ON",
|
||||||
|
"term.disabled": "OFF",
|
||||||
"term.connect": "接続",
|
"term.connect": "接続",
|
||||||
"term.connecting": "接続中",
|
"term.connecting": "接続中",
|
||||||
"term.disconnect": "切断",
|
"term.disconnect": "切断",
|
||||||
|
@ -119,9 +132,11 @@
|
||||||
"term.audioControls": "ボリューム設定",
|
"term.audioControls": "ボリューム設定",
|
||||||
"term.clearAll": "消去",
|
"term.clearAll": "消去",
|
||||||
"term.recentStations": "最近の再生",
|
"term.recentStations": "最近の再生",
|
||||||
|
"term.personalStations": "あなたのステーション",
|
||||||
|
"term.amLive": "Apple Music Live",
|
||||||
"term.language": "言語",
|
"term.language": "言語",
|
||||||
"term.funLanguages": "Fun",
|
"term.funLanguages": "Fun",
|
||||||
"term.noLyrics": "ローディング。。 / 歌詞が見つからない / 器楽曲.",
|
"term.noLyrics": "ロード中... / 歌詞が見つかりません / インストゥルメンタル.",
|
||||||
"term.copyright": "Copyright",
|
"term.copyright": "Copyright",
|
||||||
"term.rightsReserved": "All Rights Reserved.",
|
"term.rightsReserved": "All Rights Reserved.",
|
||||||
"term.sponsor": "スポンサーになりましょう",
|
"term.sponsor": "スポンサーになりましょう",
|
||||||
|
@ -178,6 +193,8 @@
|
||||||
"term.confirmLogout": "本当にログアウトしますか?",
|
"term.confirmLogout": "本当にログアウトしますか?",
|
||||||
"term.creditDesignedBy": "${authorUsername}によってデザインされました",
|
"term.creditDesignedBy": "${authorUsername}によってデザインされました",
|
||||||
"term.discNumber": "ディスク ${discNumber}",
|
"term.discNumber": "ディスク ${discNumber}",
|
||||||
|
"home.syncFavorites": "お気に入りを同期",
|
||||||
|
"home.syncFavorites.gettingArtists": "お気に入りのアーティストを同期中...",
|
||||||
"home.title": "ホーム",
|
"home.title": "ホーム",
|
||||||
"home.recentlyPlayed": "最近の再生",
|
"home.recentlyPlayed": "最近の再生",
|
||||||
"home.recentlyAdded": "最近追加した項目",
|
"home.recentlyAdded": "最近追加した項目",
|
||||||
|
@ -198,6 +215,14 @@
|
||||||
"podcast.episodes": "番組",
|
"podcast.episodes": "番組",
|
||||||
"podcast.playEpisode": "再生",
|
"podcast.playEpisode": "再生",
|
||||||
"podcast.website": "Podcastウェブ",
|
"podcast.website": "Podcastウェブ",
|
||||||
|
"action.favorite": "お気に入り",
|
||||||
|
"action.removeFavorite": "リモートでお気に入り",
|
||||||
|
"action.hideLibrary": "ライブラリから非表示",
|
||||||
|
"action.showLibrary": "ライブラリに表示",
|
||||||
|
"action.cut": "切り取り",
|
||||||
|
"action.paste": "貼り付け",
|
||||||
|
"action.selectAll": "全選択",
|
||||||
|
"action.delete": "削除",
|
||||||
"action.edit": "編集",
|
"action.edit": "編集",
|
||||||
"action.done": "完了",
|
"action.done": "完了",
|
||||||
"action.editTracklist": "トラックリストを編集",
|
"action.editTracklist": "トラックリストを編集",
|
||||||
|
@ -227,6 +252,8 @@
|
||||||
"action.startRadio": "ステーションを作成",
|
"action.startRadio": "ステーションを作成",
|
||||||
"action.goToArtist": "アーティストへ移動",
|
"action.goToArtist": "アーティストへ移動",
|
||||||
"action.goToAlbum": "アルバムへ移動",
|
"action.goToAlbum": "アルバムへ移動",
|
||||||
|
"action.showInPlaylist": "プレイリストを表示",
|
||||||
|
"action.showInAppleMusic": "Apple Musicで表示",
|
||||||
"action.moveToTop": "上に戻る",
|
"action.moveToTop": "上に戻る",
|
||||||
"action.share": "曲を共有",
|
"action.share": "曲を共有",
|
||||||
"action.rename": "名前の変更",
|
"action.rename": "名前の変更",
|
||||||
|
@ -243,13 +270,18 @@
|
||||||
"action.showAlbum": "アルバムを表示",
|
"action.showAlbum": "アルバムを表示",
|
||||||
"action.tray.minimize": "最小化",
|
"action.tray.minimize": "最小化",
|
||||||
"action.tray.quit": "終了",
|
"action.tray.quit": "終了",
|
||||||
"action.tray.show": "表示",
|
"action.tray.show": "Ciderで表示",
|
||||||
|
"action.tray.playpause": "再生/停止",
|
||||||
|
"action.tray.next": "次へ",
|
||||||
|
"action.tray.previous": "前へ",
|
||||||
|
"action.tray.listento": "次で聞く:",
|
||||||
"action.update": "アップデート",
|
"action.update": "アップデート",
|
||||||
"action.install": "インストール",
|
"action.install": "インストール",
|
||||||
"action.copy": "コピー",
|
"action.copy": "コピー",
|
||||||
"action.newpreset": "新しいプリセット",
|
"action.newpreset": "新しいプリセット",
|
||||||
"action.deletepreset": "プリセットを削除",
|
"action.deletepreset": "プリセットを削除",
|
||||||
"action.open": "開く",
|
"action.open": "開く",
|
||||||
|
"action.close": "閉じる",
|
||||||
"action.relaunch.confirm": "Ciderを再開しますか?",
|
"action.relaunch.confirm": "Ciderを再開しますか?",
|
||||||
"action.cast.chromecast": "Chromecast",
|
"action.cast.chromecast": "Chromecast",
|
||||||
"action.cast.todevices": "デバイスにキャストする",
|
"action.cast.todevices": "デバイスにキャストする",
|
||||||
|
@ -260,6 +292,46 @@
|
||||||
"action.cast.scanning": "スキャン中...",
|
"action.cast.scanning": "スキャン中...",
|
||||||
"action.createNew": "新規作成...",
|
"action.createNew": "新規作成...",
|
||||||
"action.openArtworkInBrowser": "アートワークをブラウザで表示する",
|
"action.openArtworkInBrowser": "アートワークをブラウザで表示する",
|
||||||
|
"action.scrollToTop": "上に戻る",
|
||||||
|
"menubar.options.about": "詳細",
|
||||||
|
"menubar.options.settings": "設定",
|
||||||
|
"menubar.options.quit": "Ciderを終了",
|
||||||
|
"menubar.options.view": "表示 ",
|
||||||
|
"menubar.options.reload": "再読み込み",
|
||||||
|
"menubar.options.forcereload": "強制的に再読み込み",
|
||||||
|
"menubar.options.toggledevtools": "Developer Toolsを切り替え",
|
||||||
|
"menubar.options.window": "ウィンドウ",
|
||||||
|
"menubar.options.minimize": "最小化",
|
||||||
|
"menubar.options.toggleprivate": "プライベートセッションに切り替え",
|
||||||
|
"menubar.options.webremote": "Webリモコン",
|
||||||
|
"menubar.options.audio": "オーティオ設定",
|
||||||
|
"menubar.options.plugins": "プラグインメニュー",
|
||||||
|
"menubar.options.controls": "操作",
|
||||||
|
"menubar.options.next": "次へ",
|
||||||
|
"menubar.options.playpause": "再生/停止",
|
||||||
|
"menubar.options.previous": "前に戻る",
|
||||||
|
"menubar.options.volumeup": "音量を上げる",
|
||||||
|
"menubar.options.volumedown": "音量を下げる",
|
||||||
|
"menubar.options.browse": "見つける",
|
||||||
|
"menubar.options.artists": "アーティスト",
|
||||||
|
"menubar.options.search": "検索",
|
||||||
|
"menubar.options.albums": "アルバム",
|
||||||
|
"menubar.options.cast": "デバイスにキャスト",
|
||||||
|
"menubar.options.account": "アカウント",
|
||||||
|
"menubar.options.accountsettings": "アカウント設定",
|
||||||
|
"menubar.options.signout": "サインアウト",
|
||||||
|
"menubar.options.support": "サポート",
|
||||||
|
"menubar.options.discord": "Discord",
|
||||||
|
"menubar.options.github": "GitHub Wiki",
|
||||||
|
"menubar.options.report": "報告...",
|
||||||
|
"menubar.options.bug": "バグ",
|
||||||
|
"menubar.options.feature": "将来的な提案",
|
||||||
|
"menubar.options.trans": "翻訳に関する報告/提案",
|
||||||
|
"menubar.options.license": "ライセンスを表示",
|
||||||
|
"menubar.options.conf": "設定ファイルをエディタで開く",
|
||||||
|
"menubar.options.listennow": "Listen Now",
|
||||||
|
"menubar.options.recentlyAdded": "最近追加した項目",
|
||||||
|
"menubar.options.songs": "曲",
|
||||||
"settings.header.general": "一般",
|
"settings.header.general": "一般",
|
||||||
"settings.header.general.description": "Ciderの一般設定",
|
"settings.header.general.description": "Ciderの一般設定",
|
||||||
"settings.option.general.language": "言語",
|
"settings.option.general.language": "言語",
|
||||||
|
@ -279,10 +351,14 @@
|
||||||
"settings.option.general.customizeSidebar": "サイドバーをカスタマイズ",
|
"settings.option.general.customizeSidebar": "サイドバーをカスタマイズ",
|
||||||
"settings.option.general.customizeSidebar.customize": "カスタマイズ",
|
"settings.option.general.customizeSidebar.customize": "カスタマイズ",
|
||||||
"settings.option.general.keybindings": "キーバインド",
|
"settings.option.general.keybindings": "キーバインド",
|
||||||
|
"settings.option.general.keybindings.pressCombination": "2つのキーを同時に押してキーバインドを更新します",
|
||||||
|
"settings.option.general.keybindings.pressEscape": "Escキーを押すと戻ります",
|
||||||
"settings.notyf.general.keybindings.update.success": "キーバインドのアップデートに成功しました",
|
"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.keybindings.open": "開く",
|
"settings.option.general.keybindings.open": "開く",
|
||||||
"settings.description.search": "検索",
|
"settings.description.search": "検索",
|
||||||
|
"settings.option.general.themeUpdateNotification": "テーマのアップデートを自動的に確認",
|
||||||
|
"settings.option.general.showLovedTracksInline": "ラブした楽曲を列挙",
|
||||||
"settings.description.albums": "ライブラリのアルバム",
|
"settings.description.albums": "ライブラリのアルバム",
|
||||||
"settings.description.artists": "ライブラリのアーティスト",
|
"settings.description.artists": "ライブラリのアーティスト",
|
||||||
"settings.description.browse": "検索",
|
"settings.description.browse": "検索",
|
||||||
|
@ -293,12 +369,16 @@
|
||||||
"settings.description.cast": "デバイスでキャストする",
|
"settings.description.cast": "デバイスでキャストする",
|
||||||
"settings.description.settings": "設定",
|
"settings.description.settings": "設定",
|
||||||
"settings.description.developer": "デベロッパーツール",
|
"settings.description.developer": "デベロッパーツール",
|
||||||
|
"settings.description.listnow": "Listen Now",
|
||||||
|
"settings.description.recentAdd": "最近追加した項目",
|
||||||
|
"settings.description.songs": "曲",
|
||||||
"settings.notyf.updateCider.update-not-available": "現在最新版です",
|
"settings.notyf.updateCider.update-not-available": "現在最新版です",
|
||||||
"settings.notyf.updateCider.update-downloaded": "アップデートは再起動後に適用されます",
|
"settings.notyf.updateCider.update-downloaded": "アップデートは再起動後に適用されます",
|
||||||
"settings.notyf.updateCider.update-timeout": "アップデートはタイムアウトしました",
|
"settings.notyf.updateCider.update-timeout": "アップデートはタイムアウトしました",
|
||||||
"settings.header.audio": "オーディオ",
|
"settings.header.audio": "オーディオ",
|
||||||
"settings.header.audio.description": "Ciderのオーディオ設定",
|
"settings.header.audio.description": "Ciderのオーディオ設定",
|
||||||
"settings.option.audio.volumeStep": "音量調整のステップ",
|
"settings.option.audio.volumeStep": "音量調整のステップ",
|
||||||
|
"settings.option.audio.advanced": "追加のボリューム設定",
|
||||||
"settings.option.audio.maxVolume": "最大音量",
|
"settings.option.audio.maxVolume": "最大音量",
|
||||||
"settings.option.audio.changePlaybackRate": "再生速度の変更",
|
"settings.option.audio.changePlaybackRate": "再生速度の変更",
|
||||||
"settings.option.audio.playbackRate": "再生速度の変更",
|
"settings.option.audio.playbackRate": "再生速度の変更",
|
||||||
|
@ -309,14 +389,18 @@
|
||||||
"settings.header.audio.quality.lossless": "ロスレス",
|
"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": "高品質",
|
||||||
|
"settings.header.audio.quality.high.description": "256 kbps",
|
||||||
"settings.header.audio.quality.standard": "高効率",
|
"settings.header.audio.quality.standard": "高効率",
|
||||||
|
"settings.header.audio.quality.standard.description": "64 kbps",
|
||||||
"settings.option.audio.seamlessTransition": "曲間なしで再生",
|
"settings.option.audio.seamlessTransition": "曲間なしで再生",
|
||||||
"settings.option.audio.enableAdvancedFunctionality": "先進的な機能",
|
"settings.option.audio.enableAdvancedFunctionality": "先進的な機能",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.description": "AudioContextを有効にすると、オーディオノーマライズ、空間オーディオ、イコライザーなどの機能を使用できますが、音が途切れるかもしれません。",
|
"settings.option.audio.enableAdvancedFunctionality.description": "AudioContextを有効にすると、オーディオノーマライズ、空間オーディオ、イコライザーなどの機能を使用できますが、音が途切れるかもしれません。",
|
||||||
"settings.warn.audio.enableAdvancedFunctionality.lowcores": "あなたのPCがこの処理に耐えられないかもしれません。",
|
"settings.warn.audio.enableAdvancedFunctionality.lowcores": "あなたのPCがこの処理に耐えられないかもしれません。",
|
||||||
"settings.option.audio.audioLab": "Cider Audio Lab",
|
"settings.option.audio.audioLab": "Cider Audio Lab",
|
||||||
"settings.option.audio.audioLab.description": "An assortment of in-house developed audio effects for Cider.",
|
"settings.option.audio.audioLab.description": "Cider自社開発の各種音響設定",
|
||||||
|
"settings.option.audio.audioLab.subheader": "Designed by Cider Acoustic Technologies in California",
|
||||||
"settings.warn.audioLab.withoutAF": "Cider Audio Labを有効にするにはAudioContextを有効にする必要があります",
|
"settings.warn.audioLab.withoutAF": "Cider Audio Labを有効にするにはAudioContextを有効にする必要があります",
|
||||||
|
"settings.warn.enableAdvancedFunctionality": "AudioContext (高度な機能) はこの機能を有効化する必要があります",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmth": "Analog Warmth",
|
"settings.option.audio.enableAdvancedFunctionality.analogWarmth": "Analog Warmth",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "Korg Nutube 6P1をモデルにしたオーディオをシミュレートします",
|
"settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "Korg Nutube 6P1をモデルにしたオーディオをシミュレートします",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity": "Analog Warmth intensity",
|
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity": "Analog Warmth intensity",
|
||||||
|
@ -333,31 +417,52 @@
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_2": "宇治抹茶ミルクティー",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_2": "宇治抹茶ミルクティー",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E168_1": "春毫ジャスミンマキアート",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E168_1": "春毫ジャスミンマキアート",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z3600": "北海道のロイヤルミルクティー",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z3600": "北海道のロイヤルミルクティー",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500": "ムーンライトソフトケーキ",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500A": "ムーンライトソフトケーキ",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500B": "チェリークラフティ",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500C": "宇治抹茶だいふく",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.BSCBM": "黒糖クレームブリュレミルク",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.CUDDLE": "布団はやわらかいなー",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "音楽をより豊かに、生き生きとさせます",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "人の聴覚心理モデルとAAC符号化の特徴を活用したリアルタイムアルゴリズムにより、AACの認知音質を向上させます。",
|
||||||
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAPはSpatializationと互換性がありません",
|
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAPはSpatializationと互換性がありません",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAPの強さ",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAPの強さ",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "音に施す処理の強さを設定します (強くしすぎると望ましい結果が得られないかもしれません)",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "音に施す処理の強さを設定します (強くしすぎると望ましい結果が得られないかもしれません)",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "標準",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "標準",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "高",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "高",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.adaptive": "アダプティブ",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.legacy": "レガシー",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "オーディオノーマライズ",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "オーディオノーマライズ",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "さまざまな曲の音量を均一にし、より整った音を楽しめるようにする機能です。",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "さまざまな曲の音量を均一にし、より整った音を楽しめるようにする機能です。",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Audio Labの設定",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Audio Labの設定",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider Tuned Spatialization",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider Tuned Spatialization",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "開発チームがチューニングした設定を使用することができます。(オーディオ空間化を有効にする必要があります)",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "開発チームがチューニングした設定を使用することができます。",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider Spatialization Profile",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider Spatialization Profile",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "プロファイルをSpatializationに変更します",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "プロファイルをSpatializationに変更します",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "スタンダード",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "スタンダード",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Audiophile",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.soundstage": "音場",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.separation": "分離感",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.minimal": "ミニマル",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "オーディオマニア",
|
||||||
|
"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と互換性がありません",
|
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "オーディオ空間化はCAPと互換性がありません",
|
||||||
|
"settings.option.audio.dbspl.display": "dB SPL 表示",
|
||||||
|
"settings.option.audio.dbspl.description": "(上級者向け) dBFS の代わりに dB SPL でボリュームスライダーを表示します",
|
||||||
|
"settings.option.audio.dbfs.calibration": "0 dBFS キャリブレーション",
|
||||||
|
"settings.option.audio.dbfs.description": "Ciderが0 dBFSとするZ特性の値を入力してください",
|
||||||
"settings.header.visual": "ビジュアル",
|
"settings.header.visual": "ビジュアル",
|
||||||
"settings.header.visual.description": "Ciderのビジュアル設定",
|
"settings.header.visual.description": "Ciderのビジュアル設定",
|
||||||
"settings.option.visual.windowStyle": "Window Style",
|
"settings.option.visual.windowStyle": "Window Style",
|
||||||
|
"settings.option.visual.customAccentColor": "カスタムアクセントカラー",
|
||||||
|
"settings.option.visual.accentColor": "アクセントカラー",
|
||||||
|
"settings.option.visual.purplePodcastPlaybackBar": "Podcasts再生時に紫色の再生バーにする",
|
||||||
|
"settings.option.visual.windowColor": "ウィンドウの色合い",
|
||||||
"settings.option.visual.windowBackgroundStyle": "背景の設定",
|
"settings.option.visual.windowBackgroundStyle": "背景の設定",
|
||||||
"settings.header.visual.windowBackgroundStyle.none": "なし",
|
"settings.header.visual.windowBackgroundStyle.none": "なし",
|
||||||
"settings.header.visual.windowBackgroundStyle.artwork": "アートワーク",
|
"settings.header.visual.windowBackgroundStyle.artwork": "アートワーク",
|
||||||
"settings.header.visual.windowBackgroundStyle.image": "画像",
|
"settings.header.visual.windowBackgroundStyle.image": "画像",
|
||||||
|
"settings.header.visual.windowBackgroundStyle.color": "色調",
|
||||||
"settings.option.visual.animatedArtwork": "アニメーションアートワーク",
|
"settings.option.visual.animatedArtwork": "アニメーションアートワーク",
|
||||||
"settings.header.visual.animatedArtwork.always": "常に表示",
|
"settings.header.visual.animatedArtwork.always": "常に表示",
|
||||||
"settings.header.visual.animatedArtwork.limited": "アーティストページのみ表示",
|
"settings.header.visual.animatedArtwork.limited": "アーティストページのみ表示",
|
||||||
|
@ -381,6 +486,13 @@
|
||||||
"settings.header.visual.theme.github.page": "GitHub",
|
"settings.header.visual.theme.github.page": "GitHub",
|
||||||
"settings.option.visual.theme.github.install.confirm": "本当に {{ repo }} をインストールしますか?",
|
"settings.option.visual.theme.github.install.confirm": "本当に {{ repo }} をインストールしますか?",
|
||||||
"settings.prompt.visual.theme.github.URL": "インストールしたいテーマのURLを入力してください",
|
"settings.prompt.visual.theme.github.URL": "インストールしたいテーマのURLを入力してください",
|
||||||
|
"settings.prompt.visual.theme.uninstallTheme": "本当に {{ theme }} をアンインストールしますか?",
|
||||||
|
"settings.option.visual.theme.checkForUpdates": "アップデートを確認",
|
||||||
|
"settings.option.visual.theme.manageStyles": "スタイルを管理",
|
||||||
|
"settings.option.visual.theme.uninstall": "アンインストール",
|
||||||
|
"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.notyf.visual.theme.install.error": "テーマのインストールに失敗しました",
|
||||||
"settings.header.visual.plugin": "プラグイン",
|
"settings.header.visual.plugin": "プラグイン",
|
||||||
|
@ -417,8 +529,11 @@
|
||||||
"settings.option.connectivity.discordRPC.clientName": "クライアントの名前",
|
"settings.option.connectivity.discordRPC.clientName": "クライアントの名前",
|
||||||
"settings.option.connectivity.discordRPC.clearOnPause": "一時停止した時にDiscord Rich Presenceを非表示にする",
|
"settings.option.connectivity.discordRPC.clearOnPause": "一時停止した時にDiscord Rich Presenceを非表示にする",
|
||||||
"settings.option.connectivity.discordRPC.hideButtons": "Discord Rich Presenceのボタンを非表示にする",
|
"settings.option.connectivity.discordRPC.hideButtons": "Discord Rich Presenceのボタンを非表示にする",
|
||||||
|
"settings.option.connectivity.discordRPC.hideTimestamp": "Discord Rich Presenceのタイムスタンプを非表示にする",
|
||||||
"settings.option.connectivity.discordRPC.detailsFormat": "ディティールのフォーマット",
|
"settings.option.connectivity.discordRPC.detailsFormat": "ディティールのフォーマット",
|
||||||
"settings.option.connectivity.discordRPC.stateFormat": "状態のフォーマット",
|
"settings.option.connectivity.discordRPC.stateFormat": "状態のフォーマット",
|
||||||
|
"settings.option.connectivity.discordRPC.reload": "DiscordRPCを再読み込み",
|
||||||
|
"settings.option.connectivity.discordRPC.reconnectedToUser": "DiscordRPCは以下のユーザーに再接続しました: {{user}} ({{userid}})",
|
||||||
"settings.option.connectivity.lastfmScrobble": "Last.fm に接続する",
|
"settings.option.connectivity.lastfmScrobble": "Last.fm に接続する",
|
||||||
"settings.option.connectivity.lastfmScrobble.delay": "遅延 (%)",
|
"settings.option.connectivity.lastfmScrobble.delay": "遅延 (%)",
|
||||||
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Last.fm Now Playingを有効化する",
|
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Last.fm Now Playingを有効化する",
|
||||||
|
@ -476,5 +591,44 @@
|
||||||
"share.platform.email": "Email",
|
"share.platform.email": "Email",
|
||||||
"share.platform.songLink": "song.linkのURLをコピーする",
|
"share.platform.songLink": "song.linkのURLをコピーする",
|
||||||
"share.platform.clipboard": "URLをコピーする",
|
"share.platform.clipboard": "URLをコピーする",
|
||||||
"about.thanks": "Cider Collective とご協力いただいた貢献者様に感謝申し上げます。"
|
"about.thanks": "Cider Collective とご協力いただいた貢献者様に感謝申し上げます。",
|
||||||
|
"oobe.yes": "はい",
|
||||||
|
"oobe.no": "いいえ",
|
||||||
|
"oobe.next": "次へ",
|
||||||
|
"oobe.previous": "戻る",
|
||||||
|
"oobe.done": "完了",
|
||||||
|
"oobe.amupsell.title": "始める前に",
|
||||||
|
"oobe.amupsell.text": "Ciderを利用するにはは有効なApple Musicサブスクリプションが必要です\nCiderはApple Music Voiceプランやその他のプロモーション向け試用サブスクリプションでは動作しません。 もし既にApple Musicのサブスクリプション資格がある場合は、次へをクリックして続けてください。",
|
||||||
|
"oobe.amupsell.subscribeBtn": "Apple Musicに登録",
|
||||||
|
"oobe.amupsell.explainBtn": "説明",
|
||||||
|
"oobe.amupsell.subscribeUrl": "https://apple.co/3MdqJVQ",
|
||||||
|
"oobe.amupsell.amWebUrl": "https://beta.music.apple.com/",
|
||||||
|
"oobe.amupsell.promoExplained": "いくつかのプロモーション向けかつアメリカ合衆国以外のApple Music試用サブスクリプションは、Ciderを使うために必要なApple Music Web Player APIにアクセスできません。 あなたの試用プランが有効かどうかを確認するには <a href='{{ amWebUrl }}'>{{ amWebUrl }}</a> にログインして、任意の楽曲が再生できるか確認してください。 もし正常に動作したならば、素晴らしい! あなたはCiderを利用することができます、しかしながら、もしApple Musicの購読をしていない場合はこちらから: <a href='{{ subscribeUrl }}'>{{ subscribeUrl }}</a>",
|
||||||
|
"oobe.intro.title": "Ciderへようこそ",
|
||||||
|
"oobe.intro.subtitle": "",
|
||||||
|
"oobe.intro.text": "Ciderを自分好みに利用するための、いくつかのセットアップを行いましょう。これらの設定はあとから変更することができます。",
|
||||||
|
"oobe.general.title": "一般",
|
||||||
|
"oobe.general.subtitle": "",
|
||||||
|
"oobe.general.text": "",
|
||||||
|
"oobe.audio.title": "オーディオ",
|
||||||
|
"oobe.audio.subtitle": "",
|
||||||
|
"oobe.audio.text": "Ciderにはリッチで高品質なオーディオを提供するための、カスタマイズ、デザインされたオーディオスタック機能があります。\nCider Adrenaline、Atmosphere Realizer、ならびにSpatailized Audioがあります。\nこれらの機能を有効化するには、\"先進的な機能\"を有効化する必要があります。\n先進的な機能を有効化すると、これらの強化機能をアプリ設定のCider Audio Labsから利用することができるようになります。",
|
||||||
|
"oobe.audio.advancedFunctionality": "",
|
||||||
|
"oobe.visual.title": "ビジュアル",
|
||||||
|
"oobe.visual.subtitle": "",
|
||||||
|
"oobe.visual.text": "",
|
||||||
|
"oobe.visual.layout.text": "Ciderには2つの異なるウィンドウレイアウトがあります。\nMaverickはウィンドウ上部にプレイヤーのある、iTunes風のレイアウトです。\nMojaveはCider Collectiveによって作成された新たな試作品です。\n\nこれらのレイアウトはいつでも設定から変更することができます。",
|
||||||
|
"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.amsignin.title": ""
|
||||||
}
|
}
|
||||||
|
|
584
src/i18n/pt_PT.json
Normal file
|
@ -0,0 +1,584 @@
|
||||||
|
{
|
||||||
|
"i18n.languageName": "Português (Portugal)",
|
||||||
|
"i18n.languageNameEnglish": "Portuguese (Portugal)",
|
||||||
|
"i18n.category": "main",
|
||||||
|
"i18n.authors": "@pgalhardo",
|
||||||
|
"app.name": "Cider",
|
||||||
|
"date.format": "${m} ${d}, ${y}",
|
||||||
|
"dialog.cancel": "Cancelar",
|
||||||
|
"dialog.ok": "OK",
|
||||||
|
"notification.updatingLibrarySongs": "A atualizar biblioteca de músicas...",
|
||||||
|
"notification.updatingLibraryAlbums": "A atualizar biblioteca de álbuns...",
|
||||||
|
"notification.updatingLibraryArtists": "A atualizar biblioteca de artistas...",
|
||||||
|
"term.variables": "Variáveis",
|
||||||
|
"term.appleInc": "Apple Inc.",
|
||||||
|
"term.appleMusic": "Apple Music",
|
||||||
|
"term.applePodcasts": "Apple Podcasts",
|
||||||
|
"term.itunes": "iTunes",
|
||||||
|
"term.github": "GitHub",
|
||||||
|
"term.discord": "Discord",
|
||||||
|
"term.learnMore": "Saiba mais",
|
||||||
|
"term.accountSettings": "Definições da conta",
|
||||||
|
"term.logout": "Terminar sessão",
|
||||||
|
"term.login": "Iniciar sessão",
|
||||||
|
"term.quickNav": "Navegação rápida",
|
||||||
|
"term.cast": "Transmitir",
|
||||||
|
"term.about": "Sobre",
|
||||||
|
"term.privateSession": "Sessão privada",
|
||||||
|
"term.disablePrivateSession": "Desativar sessão privada",
|
||||||
|
"term.queue": "Fila",
|
||||||
|
"term.autoplay": "Reprodução automática",
|
||||||
|
"term.lyrics": "Letra",
|
||||||
|
"term.miniplayer": "Mini-leitor",
|
||||||
|
"term.history": "Histórico",
|
||||||
|
"term.search": "Pesquisa",
|
||||||
|
"term.library": "Biblioteca",
|
||||||
|
"term.listenNow": "Ouvir agora",
|
||||||
|
"term.browse": "Explorar",
|
||||||
|
"term.radio": "Rádio",
|
||||||
|
"term.recentlyAdded": "Adições recentes",
|
||||||
|
"term.songs": "Músicas",
|
||||||
|
"term.albums": "Álbuns",
|
||||||
|
"term.artists": "Intérpretes",
|
||||||
|
"term.podcasts": "Podcasts",
|
||||||
|
"term.playlists": "Listas de reprodução",
|
||||||
|
"term.charts": "Gráficos",
|
||||||
|
"term.playlist": "Lista de reprodução",
|
||||||
|
"term.newPlaylist": "Nova lista de reprodução",
|
||||||
|
"term.newPlaylistFolder": "Nova pasta de listas de reprodução",
|
||||||
|
"term.createNewPlaylist": "Criar nova lista de reprodução",
|
||||||
|
"term.createNewPlaylistFolder": "Criar nova pasta de listas de reprodução",
|
||||||
|
"term.deletePlaylist": "Tem a certeza de que pretende apagar esta lista de reprodução?",
|
||||||
|
"term.navigateBack": "Retroceder uma página",
|
||||||
|
"term.navigateForward": "Avançar uma página",
|
||||||
|
"term.play": "Reproduzir",
|
||||||
|
"term.pause": "Pausa",
|
||||||
|
"term.stop": "Parar",
|
||||||
|
"term.previous": "Anterior",
|
||||||
|
"term.next": "Seguinte",
|
||||||
|
"term.shuffle": "Modo aleatório",
|
||||||
|
"term.enableShuffle": "Ativar modo aleatório",
|
||||||
|
"term.disableShuffle": "Desativar modo aleatório",
|
||||||
|
"term.repeat": "Repetir",
|
||||||
|
"term.enableRepeatOne": "Ativar repetir uma",
|
||||||
|
"term.disableRepeatOne": "Desativar repetir uma",
|
||||||
|
"term.disableRepeat": "Não repetir",
|
||||||
|
"term.volume": "Volume",
|
||||||
|
"term.mute": "Mudo",
|
||||||
|
"term.unmute": "Com som",
|
||||||
|
"term.share": "Partilhar",
|
||||||
|
"term.share.success": "Copiado para a área de transferência",
|
||||||
|
"term.settings": "Definições",
|
||||||
|
"term.seeAll": "Ver tudo",
|
||||||
|
"term.sortBy": "Ordenar por",
|
||||||
|
"term.sortBy.album": "Álbum",
|
||||||
|
"term.sortBy.artist": "Intérprete",
|
||||||
|
"term.sortBy.name": "Nome",
|
||||||
|
"term.sortBy.genre": "Género",
|
||||||
|
"term.sortBy.releaseDate": "Data de lançamento",
|
||||||
|
"term.sortBy.duration": "Duração",
|
||||||
|
"term.sortBy.dateAdded": "Data de adição",
|
||||||
|
"term.sortOrder": "A-Z",
|
||||||
|
"term.sortOrder.ascending": "Ascendente",
|
||||||
|
"term.sortOrder.descending": "Descendente",
|
||||||
|
"term.viewAs": "Ver como",
|
||||||
|
"term.viewAs.coverArt": "Grafismos",
|
||||||
|
"term.viewAs.list": "Lista",
|
||||||
|
"term.dynamic": "Dinâmico",
|
||||||
|
"term.size": "Tamanho",
|
||||||
|
"term.size.normal": "Normal",
|
||||||
|
"term.size.compact": "Compacto",
|
||||||
|
"term.enable": "Ativar",
|
||||||
|
"term.disable": "Desativar",
|
||||||
|
"term.enabled": "Ativado",
|
||||||
|
"term.disabled": "Desativado",
|
||||||
|
"term.connect": "Ligar",
|
||||||
|
"term.connecting": "A ligar",
|
||||||
|
"term.disconnect": "Desligar",
|
||||||
|
"term.authed": "Autenticado",
|
||||||
|
"term.confirm": "Confirmar?",
|
||||||
|
"term.more": "Mais",
|
||||||
|
"term.less": "Menos",
|
||||||
|
"term.showMore": "Mostrar mais",
|
||||||
|
"term.showLess": "Mostrar menos",
|
||||||
|
"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.days": "dias",
|
||||||
|
"term.time.day": {
|
||||||
|
"one": "dia",
|
||||||
|
"other": "dias"
|
||||||
|
},
|
||||||
|
"term.time.hours": "horas",
|
||||||
|
"term.time.hour": {
|
||||||
|
"one": "hora",
|
||||||
|
"other": "horas"
|
||||||
|
},
|
||||||
|
"term.time.minutes": "minutos",
|
||||||
|
"term.time.minute": {
|
||||||
|
"one": "minuto",
|
||||||
|
"other": "minutos"
|
||||||
|
},
|
||||||
|
"term.time.seconds": "segundos",
|
||||||
|
"term.time.second": {
|
||||||
|
"one": "segundo",
|
||||||
|
"other": "segundos"
|
||||||
|
},
|
||||||
|
"term.fullscreenView": "Vista de ecrã inteiro",
|
||||||
|
"term.defaultView": "Vista normal",
|
||||||
|
"term.audioSettings": "Definições de áudio",
|
||||||
|
"term.audioControls": "Controlos de volume",
|
||||||
|
"term.clearAll": "Limpar tudo",
|
||||||
|
"term.recentStations": "Estações recentes",
|
||||||
|
"term.personalStations": "Estações pessoais",
|
||||||
|
"term.amLive": "Apple Music Live",
|
||||||
|
"term.language": "Idioma",
|
||||||
|
"term.funLanguages": "Divertido",
|
||||||
|
"term.noLyrics": "A carregar... / Letra não encontrada. / Instrumental.",
|
||||||
|
"term.copyright": "Copyright",
|
||||||
|
"term.rightsReserved": "Todos os direitos reservados.",
|
||||||
|
"term.sponsor": "Patrocine este projecto",
|
||||||
|
"term.ciderTeam": "Equipa do Cider",
|
||||||
|
"term.developer": "Programador",
|
||||||
|
"term.socialTeam": "Equipa social",
|
||||||
|
"term.socials": "Redes sociais",
|
||||||
|
"term.contributors": "Contribuidores",
|
||||||
|
"term.equalizer": "Equalizador",
|
||||||
|
"term.reset": "Repor",
|
||||||
|
"term.tracks": "músicas",
|
||||||
|
"term.track": {
|
||||||
|
"one": "música",
|
||||||
|
"other": "músicas"
|
||||||
|
},
|
||||||
|
"term.videos": "Vídeos",
|
||||||
|
"term.menu": "Menu",
|
||||||
|
"term.check": "Verificar",
|
||||||
|
"term.aboutArtist": "Sobre {{artistName}}",
|
||||||
|
"term.topResult": "Melhor resultado",
|
||||||
|
"term.sharedPlaylists": "Listas de reprodução partilhadas",
|
||||||
|
"term.people": "Pessoas",
|
||||||
|
"term.newpreset.name": "Nome da nova predefinição do EQ",
|
||||||
|
"term.addedpreset": "Predefinição adicionada",
|
||||||
|
"term.deletepreset.warn": "Tem a certeza de que pretende apagar esta predefinição?",
|
||||||
|
"term.deletedpreset": "Predefinição eliminada",
|
||||||
|
"term.defaultPresets": "Predefinições por omissão",
|
||||||
|
"term.userPresets": "Predefinições do utilizador",
|
||||||
|
"term.requestError": "Ocorreu um problema ao processar o pedido.",
|
||||||
|
"term.song.link.generate": "A obter o URL de partilha song.link...",
|
||||||
|
"term.musicVideos": "Videoclipes",
|
||||||
|
"term.stations": "Estações",
|
||||||
|
"term.curators": "Curadores",
|
||||||
|
"term.appleCurators": "Curadores da Apple",
|
||||||
|
"term.radioShows": "Programas de rádio",
|
||||||
|
"term.recordLabels": "Gravadoras",
|
||||||
|
"term.videoExtras": "Vídeos extra",
|
||||||
|
"term.top": "Top",
|
||||||
|
"term.version": "Versão",
|
||||||
|
"term.noVideos": "Não foram encontrados vídeos.",
|
||||||
|
"term.plugin": "Plug-in",
|
||||||
|
"term.pluginMenu": "Menu de plug-ins",
|
||||||
|
"term.pluginMenu.none": "Sem plug-ins interactivos",
|
||||||
|
"term.replay": "Repetir",
|
||||||
|
"term.uniqueAlbums": "Álbuns únicos",
|
||||||
|
"term.uniqueArtists": "Intérpretes únicos",
|
||||||
|
"term.uniqueSongs": "Músicas únicas",
|
||||||
|
"term.topArtists": "Intérpretes populares",
|
||||||
|
"term.listenedTo": "Reproduzido:",
|
||||||
|
"term.times": "vezes",
|
||||||
|
"term.topAlbums": "Álbuns populares",
|
||||||
|
"term.plays": "Reproduções",
|
||||||
|
"term.topGenres": "Géneros populares",
|
||||||
|
"term.confirmLogout": "Tem a certeza de que pretende terminar sessão?",
|
||||||
|
"term.creditDesignedBy": "Concebido por ${authorUsername}",
|
||||||
|
"term.discNumber": "Disco ${discNumber}",
|
||||||
|
"home.title": "Início",
|
||||||
|
"home.recentlyPlayed": "Reproduzido recentemente",
|
||||||
|
"home.recentlyAdded": "Adicionado recentemente",
|
||||||
|
"home.artistsFeed": "Feed dos seus artistas",
|
||||||
|
"home.artistsFeed.noArtist": "Siga alguns artistas para ver os seus últimos lançamentos",
|
||||||
|
"home.madeForYou": "Feito para si",
|
||||||
|
"home.friendsListeningTo": "O que os seus amigos estão a ouvir",
|
||||||
|
"home.followedArtists": "Artistas seguidos",
|
||||||
|
"error.appleMusicSubRequired": "A Apple Music requer uma subscrição.",
|
||||||
|
"error.connectionError": "Ocorreu um problema ao estabelecer ligação à Apple Music.",
|
||||||
|
"error.noResults": "Sem resultados.",
|
||||||
|
"error.noResults.description": "Tente uma nova pesquisa.",
|
||||||
|
"podcast.followOnCider": "Siga no Cider",
|
||||||
|
"podcast.followedOnCider": "A seguir no Cider",
|
||||||
|
"podcast.subscribeOnItunes": "Subscreva no iTunes",
|
||||||
|
"podcast.subscribedOnItunes": "Subscrito no iTunes",
|
||||||
|
"podcast.itunesStore": "iTunes Store",
|
||||||
|
"podcast.episodes": "Episódios",
|
||||||
|
"podcast.playEpisode": "Reproduzir episódio",
|
||||||
|
"podcast.website": "Website do Podcast",
|
||||||
|
"action.hideLibrary": "Ocultar biblioteca",
|
||||||
|
"action.showLibrary": "Mostrar biblioteca",
|
||||||
|
"action.cut": "Cortar",
|
||||||
|
"action.paste": "Colar",
|
||||||
|
"action.selectAll": "Seleccionar tudo",
|
||||||
|
"action.delete": "Apagar",
|
||||||
|
"action.edit": "Editar",
|
||||||
|
"action.done": "Concluído",
|
||||||
|
"action.editTracklist": "Editar lista de reprodução",
|
||||||
|
"action.addToLibrary": "Adicionar à biblioteca",
|
||||||
|
"action.addToLibrary.success": "Adicionado à biblioteca",
|
||||||
|
"action.addToLibrary.error": "Erro ao adicionar à biblioteca",
|
||||||
|
"action.removeFromLibrary": "Remover da biblioteca",
|
||||||
|
"action.removeFromLibrary.success": "Removido da biblioteca",
|
||||||
|
"action.addToQueue": "Adicionar à fila",
|
||||||
|
"action.addToQueue.success": "Adicionado à fila",
|
||||||
|
"action.addToQueue.error": "Erro ao adicionar à fila",
|
||||||
|
"action.removeFromQueue": "Remover da fila",
|
||||||
|
"action.removeFromQueue.success": "Removido da fila",
|
||||||
|
"action.removeFromQueue.error": "Erro ao remover da fila",
|
||||||
|
"action.createPlaylist": "Criar uma nova lista de reprodução",
|
||||||
|
"action.addToPlaylist": "Adicionar à lista de reprodução",
|
||||||
|
"action.removeFromPlaylist": "Removar da lista de reprodução",
|
||||||
|
"action.addToFavorites": "Adicionar aos favoritos",
|
||||||
|
"action.follow": "Seguir",
|
||||||
|
"action.follow.success": "Seguido",
|
||||||
|
"action.follow.error": "Erro ao seguir",
|
||||||
|
"action.unfollow": "Não seguir",
|
||||||
|
"action.unfollow.success": "Não seguido",
|
||||||
|
"action.unfollow.error": "Erro ao deixar de seguir",
|
||||||
|
"action.playNext": "Reproduzir a seguir",
|
||||||
|
"action.playLater": "Reproduzir mais tarde",
|
||||||
|
"action.startRadio": "Criar estação",
|
||||||
|
"action.goToArtist": "Ir para intérprete",
|
||||||
|
"action.goToAlbum": "Ir para álbum",
|
||||||
|
"action.showInPlaylist": "Mostrar na lista de reprodução",
|
||||||
|
"action.showInAppleMusic": "Mostrar na Apple Music",
|
||||||
|
"action.moveToTop": "Mover para fora da pasta",
|
||||||
|
"action.share": "Partilhar",
|
||||||
|
"action.rename": "Renomear",
|
||||||
|
"action.love": "Gostar",
|
||||||
|
"action.unlove": "Desfazer gostar",
|
||||||
|
"action.dislike": "Não gostar",
|
||||||
|
"action.undoDislike": "Desfazer não gostar",
|
||||||
|
"action.showWebRemoteQR": "Web Remote",
|
||||||
|
"action.playTracksNext": "Reproduzir ${app.selectedMediaItems.length} músicas a seguir",
|
||||||
|
"action.playTracksLater": "Reproduzir ${app.selectedMediaItems.length} músicas mais tarde",
|
||||||
|
"action.removeTracks": "Remover ${self.selectedItems.length} músicas da fila",
|
||||||
|
"action.import": "Importar",
|
||||||
|
"action.export": "Exportar",
|
||||||
|
"action.showAlbum": "Mostrar álbum completo",
|
||||||
|
"action.tray.minimize": "Minimizar para a bandeja",
|
||||||
|
"action.tray.quit": "Fechar",
|
||||||
|
"action.tray.show": "Mostrar o Cider",
|
||||||
|
"action.tray.playpause": "Reproduzir/Pausa",
|
||||||
|
"action.tray.next": "Seguinte",
|
||||||
|
"action.tray.previous": "Anterior",
|
||||||
|
"action.tray.listento": "Ouvir:",
|
||||||
|
"action.update": "Atualizar",
|
||||||
|
"action.install": "Instalar",
|
||||||
|
"action.copy": "Copiar",
|
||||||
|
"action.newpreset": "Nova predefinição...",
|
||||||
|
"action.deletepreset": "Eliminar predefinição",
|
||||||
|
"action.open": "Abrir",
|
||||||
|
"action.close": "Fechar",
|
||||||
|
"action.relaunch.confirm": "Pretende reiniciar o Cider?",
|
||||||
|
"action.cast.chromecast": "Chromecast",
|
||||||
|
"action.cast.todevices": "Transmitir para dispositivos",
|
||||||
|
"action.cast.stop": "Parar a transmissão para todos os dispositivos",
|
||||||
|
"action.cast.airplay": "AirPlay",
|
||||||
|
"action.cast.airplay.underdevelopment": "AirPlay ainda está em desenvolvimento",
|
||||||
|
"action.cast.scan": "Procurar",
|
||||||
|
"action.cast.scanning": "A procurar...",
|
||||||
|
"action.createNew": "Criar nova...",
|
||||||
|
"action.openArtworkInBrowser": "Abrir grafismo no navegador",
|
||||||
|
"action.scrollToTop": "Voltar ao topo",
|
||||||
|
"menubar.options.about": "Sobre",
|
||||||
|
"menubar.options.settings": "Definições",
|
||||||
|
"menubar.options.quit": "Fechar o Cider",
|
||||||
|
"menubar.options.view": "Ver",
|
||||||
|
"menubar.options.reload": "Atualizar",
|
||||||
|
"menubar.options.forcereload": "Forçar atualização",
|
||||||
|
"menubar.options.toggledevtools": "Alternar ferramentas do programador",
|
||||||
|
"menubar.options.window": "Janela",
|
||||||
|
"menubar.options.minimize": "Minimizar",
|
||||||
|
"menubar.options.toggleprivate": "Alternar sessão privada",
|
||||||
|
"menubar.options.webremote": "Web Remote",
|
||||||
|
"menubar.options.audio": "Definições de áudio",
|
||||||
|
"menubar.options.plugins": "Menu de plug-ins",
|
||||||
|
"menubar.options.controls": "Controlos",
|
||||||
|
"menubar.options.next": "Seguinte",
|
||||||
|
"menubar.options.playpause": "Reproduzir/Pausa",
|
||||||
|
"menubar.options.previous": "Anterior",
|
||||||
|
"menubar.options.volumeup": "Aumentar o volume",
|
||||||
|
"menubar.options.volumedown": "Diminuir o volume",
|
||||||
|
"menubar.options.browse": "Explorar",
|
||||||
|
"menubar.options.artists": "Intérpretes",
|
||||||
|
"menubar.options.search": "Pesquisa",
|
||||||
|
"menubar.options.albums": "Álbuns",
|
||||||
|
"menubar.options.cast": "Transmitir para dispositivos",
|
||||||
|
"menubar.options.account": "Conta",
|
||||||
|
"menubar.options.accountsettings": "Definições da conta",
|
||||||
|
"menubar.options.signout": "Terminar sessão",
|
||||||
|
"menubar.options.support": "Suporte",
|
||||||
|
"menubar.options.discord": "Discord",
|
||||||
|
"menubar.options.github": "GitHub Wiki",
|
||||||
|
"menubar.options.report": "Reportar um...",
|
||||||
|
"menubar.options.bug": "Problema",
|
||||||
|
"menubar.options.feature": "Pedido de funcionalidade",
|
||||||
|
"menubar.options.trans": "Pedido de tradução",
|
||||||
|
"menubar.options.license": "Ver licença",
|
||||||
|
"menubar.options.conf": "Abrir ficheiro de configuração no editor",
|
||||||
|
"menubar.options.listennow": "Ouvir agora",
|
||||||
|
"menubar.options.recentlyAdded": "Adições recentes",
|
||||||
|
"menubar.options.songs": "Músicas",
|
||||||
|
"settings.header.general": "Geral",
|
||||||
|
"settings.header.general.description": "Ajustar as definições gerais do Cider.",
|
||||||
|
"settings.option.general.language": "Idioma",
|
||||||
|
"settings.option.general.resumebehavior": "Comportamento de retoma",
|
||||||
|
"settings.option.general.resumebehavior.description": "Define a forma como o Cider irá retomar a sua sessão quando regressar à aplicação.",
|
||||||
|
"settings.option.general.resumebehavior.locally": "Localmente",
|
||||||
|
"settings.option.general.resumebehavior.locally.description": "O Cider irá retomar a sua última sessão nesta máquina.",
|
||||||
|
"settings.option.general.resumebehavior.history": "Histórico",
|
||||||
|
"settings.option.general.resumebehavior.history.description": "O Cider irá colocar na fila a última música do seu histórico da Apple Music, através de todos os seus dispositivos.",
|
||||||
|
"settings.option.general.resumetabs": "Abrir separador no arranque",
|
||||||
|
"settings.option.general.resumetabs.description": "Pode escolher que separador quer abrir quando abre o Cider.",
|
||||||
|
"settings.option.general.resumetabs.dynamic": "Dinâmico",
|
||||||
|
"settings.option.general.resumetabs.dynamic.description": "O Cider abrirá o separador que utilizou pela última vez.",
|
||||||
|
"settings.option.general.language.main": "Idiomas",
|
||||||
|
"settings.option.general.language.fun": "Idiomas divertidos",
|
||||||
|
"settings.option.general.language.unsorted": "Indiferenciado",
|
||||||
|
"settings.option.general.customizeSidebar": "Personalizar os itens da barra lateral",
|
||||||
|
"settings.option.general.customizeSidebar.customize": "Personalizar",
|
||||||
|
"settings.option.general.keybindings": "Atalhos do teclado",
|
||||||
|
"settings.option.general.keybindings.pressCombination": "Prima uma combinação de duas teclas para atualizar o atalho.",
|
||||||
|
"settings.option.general.keybindings.pressEscape": "Prima a tecla Escape para voltar atrás.",
|
||||||
|
"settings.notyf.general.keybindings.update.success": "Atalho atualizado com sucesso",
|
||||||
|
"settings.prompt.general.keybindings.update.success": "Atalho atualizado com sucesso. Prima OK para reiniciar o Cider",
|
||||||
|
"settings.option.general.keybindings.open": "Abrir",
|
||||||
|
"settings.option.general.themeUpdateNotification": "Verificação automática de atualizações de temas",
|
||||||
|
"settings.option.general.showLovedTracksInline": "Mostrar músicas que gosta \"inline\"",
|
||||||
|
"settings.description.search": "Pesquisa",
|
||||||
|
"settings.description.albums": "Álbuns da biblioteca",
|
||||||
|
"settings.description.artists": "Intérpretes da biblioteca",
|
||||||
|
"settings.description.browse": "Explorar",
|
||||||
|
"settings.description.private": "Alternar sessão privada",
|
||||||
|
"settings.description.remote": "Web Remote",
|
||||||
|
"settings.description.audio": "Definições de áudio",
|
||||||
|
"settings.description.plugins": "Menu de plug-ins",
|
||||||
|
"settings.description.cast": "Transmitir para dispositivos",
|
||||||
|
"settings.description.settings": "Definições",
|
||||||
|
"settings.description.developer": "Ferramentas do programador",
|
||||||
|
"settings.description.listnow": "Ouvir agora",
|
||||||
|
"settings.description.recentAdd": "Adições recentes",
|
||||||
|
"settings.description.songs": "Músicas",
|
||||||
|
"settings.notyf.updateCider.update-not-available": "Nenhuma atualização disponível",
|
||||||
|
"settings.notyf.updateCider.update-downloaded": "A atualização foi descarregada, reinicie para aplicar",
|
||||||
|
"settings.notyf.updateCider.update-timeout": "O pedido de atualização estou o tempo limite",
|
||||||
|
"settings.header.audio": "Áudio",
|
||||||
|
"settings.header.audio.description": "Ajustar as definições de áudio para o Cider.",
|
||||||
|
"settings.option.audio.volumeStep": "Nível de incremento de volume",
|
||||||
|
"settings.option.audio.advanced": "Controlo avançado de volume",
|
||||||
|
"settings.option.audio.maxVolume": "Volume máximo",
|
||||||
|
"settings.option.audio.changePlaybackRate": "Alterar velocidade de reprodução",
|
||||||
|
"settings.option.audio.playbackRate": "Velocidade de reprodução",
|
||||||
|
"settings.option.audio.playbackRate.change": "Alterar",
|
||||||
|
"settings.option.audio.quality": "Qualidade do áudio",
|
||||||
|
"settings.header.audio.quality.hireslossless": "Alta resolução sem perdas",
|
||||||
|
"settings.header.audio.quality.hireslossless.description": "até 24-bit/192 kHz",
|
||||||
|
"settings.header.audio.quality.lossless": "Sem perdas",
|
||||||
|
"settings.header.audio.quality.lossless.description": "até 24-bit/48 kHz",
|
||||||
|
"settings.header.audio.quality.high": "Alta",
|
||||||
|
"settings.header.audio.quality.high.description": "256 kbps",
|
||||||
|
"settings.header.audio.quality.standard": "Padrão",
|
||||||
|
"settings.header.audio.quality.standard.description": "64 kbps",
|
||||||
|
"settings.option.audio.seamlessTransition": "Transição gradual do áudio",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality": "Ativar funcionalidades avançadas",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.description": "Ativar o AudioContext dá acesso a funcionalidades alargadas como Normalização de Áudio, Equalizadores e Visualizadores - contudo, isto pode causar dificuldades em alguns sistemas.",
|
||||||
|
"settings.warn.audio.enableAdvancedFunctionality.lowcores": "O Cider pensa que o seu PC não é capaz de lidar com estas funcionalidades. Tem a certeza de que pretende continuar?",
|
||||||
|
"settings.option.audio.audioLab": "Cider Audio Lab",
|
||||||
|
"settings.option.audio.audioLab.description": "Efeitos de áudio desenvolvidos internamente para o Cider.",
|
||||||
|
"settings.option.audio.audioLab.subheader": "Designed by Cider Acoustic Technologies in California",
|
||||||
|
"settings.warn.audioLab.withoutAF": "AudioContext (funcionalidade avançada) é necessário para suportar o Cider Audio Lab.",
|
||||||
|
"settings.warn.enableAdvancedFunctionality": "AudioContext (funcionalidade avançada) é necessário para suportar esta funcionalidade.",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.analogWarmth": "Calor Analógico",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "Simula o calor analógico inspirado no Korg Nutube 6P1",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity": "Intensidade do calor analógico",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description": "Altera a intensidade do processamento do módulo de calor analógico.",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "Suave",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "Quente",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer": "Cider Atmosphere Realizer™️",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer.description": "Cria uma atmosfera musical diferente inspirada nas mais modernas aparelhagens.",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode": "Modo do Cider Atmosphere Realizer™️",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.description": "Altera o modo de funcionamento do módulo Atmosphere Realizer.",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_STANDARD": "Hōjicha Cheese Foam Tea",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_PLUS": "Genmaicha Tapioca Milk Tea",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_1": "Rock Salt Cheese Foam Tea",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_2": "Uji Matcha Milk Tea",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E168_1": "Jasmine Macchiato",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z3600": "Hokkaido Milk Tea",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500": "Moonlight Softcake",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.BSCBM": "Brown Sugar Creme Brûlée Milk",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.CUDDLE": "Cuddle Warmth",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Melhora a qualidade de áudio percecionada do áudio codificado em AAC, utilizando um algoritmo de tempo real que tira partido tanto dos modelos psicoacústicos da audição humana como das características de codificação do AAC.",
|
||||||
|
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "O CAP não é compatível com a espacialização. Por favor, desative a espacialização para continuar.",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "Intensidade do CAP",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Muda a intensidade do processamento feito ao áudio (a agressividade pode produzir resultados indesejáveis).",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Padrão",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.adaptive": "Adaptativo",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.legacy": "Antigo",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Agressivo",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Normalização de áudio",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normaliza o volume de pico das músicas para criar uma experiência de audição mais uniforme (não funciona em músicas carregadas pelo utilizador).",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Gerido pelo Audio Lab",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Espacialização ajustada pelo Cider",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Efeito de espacialização pré-ajustado, desactiva as configurações personalizáveis de espacialização de áudio.",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Perfil de espacialização do Cider",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Altera o perfil de ajuste da espacialização.",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Padrão",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.soundstage": "Palco",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.separation": "Separação",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.minimal": "Mínimo",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Audiófilo",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.diffused": "Difundido",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.bplk": "Encore",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.hw2k": "Encore expandido",
|
||||||
|
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "A espacialização não é compatível com o CAP. Por favor, desative o CAP para continuar.",
|
||||||
|
"settings.option.audio.dbspl.display": "Mostrar dB SPL",
|
||||||
|
"settings.option.audio.dbspl.description": "(Apenas para utilizadores avançados) Mostrar dB SPL em vez de dBFS no controlo de volume.",
|
||||||
|
"settings.option.audio.dbfs.calibration": "Calibração de 0 dBFS",
|
||||||
|
"settings.option.audio.dbfs.description": "Introduza o pico de SPL com ponderação Z quando o Cider está a 0 dBFS.",
|
||||||
|
"settings.header.visual": "Aparência",
|
||||||
|
"settings.header.visual.description": "Ajustar as definições visuais do Cider.",
|
||||||
|
"settings.option.visual.windowStyle": "Estilo da janela",
|
||||||
|
"settings.option.visual.windowBackgroundStyle": "Estilo do fundo da janela",
|
||||||
|
"settings.header.visual.windowBackgroundStyle.none": "Nenhum",
|
||||||
|
"settings.header.visual.windowBackgroundStyle.artwork": "Grafismo",
|
||||||
|
"settings.header.visual.windowBackgroundStyle.image": "Imagem",
|
||||||
|
"settings.option.visual.animatedArtwork": "Grafismo animado",
|
||||||
|
"settings.header.visual.animatedArtwork.always": "Sempre",
|
||||||
|
"settings.header.visual.animatedArtwork.limited": "Limitado a páginas e entradas especiais",
|
||||||
|
"settings.header.visual.animatedArtwork.disable": "Desativar em todo o lado",
|
||||||
|
"settings.option.visual.animatedArtworkQuality": "Qualidade dos grafismos animados",
|
||||||
|
"settings.header.visual.animatedArtworkQuality.low": "Baixa",
|
||||||
|
"settings.header.visual.animatedArtworkQuality.medium": "Média",
|
||||||
|
"settings.header.visual.animatedArtworkQuality.high": "Alta",
|
||||||
|
"settings.header.visual.animatedArtworkQuality.veryHigh": "Muito alta",
|
||||||
|
"settings.header.visual.animatedArtworkQuality.extreme": "Extrema",
|
||||||
|
"settings.option.visual.animatedWindowBackground": "Fundo da janela animado",
|
||||||
|
"settings.option.visual.hardwareAcceleration": "Aceleração de hardware",
|
||||||
|
"settings.option.visual.hardwareAcceleration.description": "Requer reinício",
|
||||||
|
"settings.header.visual.hardwareAcceleration.default": "Padrão",
|
||||||
|
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
|
||||||
|
"settings.option.visual.uiscale": "Escala da UI",
|
||||||
|
"settings.header.visual.theme": "Tema",
|
||||||
|
"settings.option.visual.theme.github.download": "Instalar a partir de um URL do GitHub",
|
||||||
|
"settings.option.visual.theme.github.openfolder": "Abrir pasta de temas",
|
||||||
|
"settings.option.visual.theme.github.explore": "Explorar temas do GitHub",
|
||||||
|
"settings.header.visual.theme.github.page": "Temas do GitHub",
|
||||||
|
"settings.option.visual.theme.github.install.confirm": "Tem a certeza de que pretende instalar {{ repo }}?",
|
||||||
|
"settings.prompt.visual.theme.github.URL": "Introduza o URL do tema que pretende instalar",
|
||||||
|
"settings.prompt.visual.theme.uninstallTheme": "Tem a certeza de que pretende desinstalar {{ theme }}?",
|
||||||
|
"settings.option.visual.theme.checkForUpdates": "Procurar por atualizações",
|
||||||
|
"settings.option.visual.theme.manageStyles": "Gerir 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.notyf.visual.theme.install.success": "Tema instalado com sucesso",
|
||||||
|
"settings.notyf.visual.theme.install.error": "A instalação do tema falhou",
|
||||||
|
"settings.header.visual.plugin": "Plug-in",
|
||||||
|
"settings.option.visual.plugin.github.download": "Instalar a partir de um URL do GitHub",
|
||||||
|
"settings.option.visual.plugin.github.explore": "Explorar plug-ins do GitHub",
|
||||||
|
"settings.header.visual.plugin.github.page": "Plug-ins do GitHub",
|
||||||
|
"settings.option.visual.plugin.github.install.confirm": "Tem a certeza de que pretende instalar {{ repo }}?",
|
||||||
|
"settings.prompt.visual.plugin.github.URL": "Introduza o URL do plug-in que pretende instalar",
|
||||||
|
"settings.prompt.visual.plugin.github.success": "Plug-in instalado com sucesso. Pressione OK para reiniciar o Cider",
|
||||||
|
"settings.notyf.visual.plugin.install.success": "Plug-in instalado com sucesso",
|
||||||
|
"settings.notyf.visual.plugin.install.error": "A instalação do plug-in falhou",
|
||||||
|
"settings.option.visual.theme.default": "Cider",
|
||||||
|
"settings.option.visual.theme.dark": "Escuro",
|
||||||
|
"settings.option.visual.showPersonalInfo": "Mostrar informação pessoal",
|
||||||
|
"settings.header.window": "Janela",
|
||||||
|
"settings.header.window.description": "Ajustar as definições da janela para o Cider.",
|
||||||
|
"settings.option.window.openOnStartup": "Abrir o Cider no arranque",
|
||||||
|
"settings.option.window.openOnStartup.hidden": "Abrir escondido",
|
||||||
|
"settings.option.window.useNativeTitleBar": "Usar barra de título nativa",
|
||||||
|
"settings.option.window.windowControlStyle": "Estilo de controlo da janela",
|
||||||
|
"settings.option.window.windowControlStyle.right": "Direita",
|
||||||
|
"settings.option.window.windowControlStyle.left": "Esquerda",
|
||||||
|
"settings.header.lyrics": "Letras",
|
||||||
|
"settings.header.lyrics.description": "Ajustar as definições de letras para o Cider.",
|
||||||
|
"settings.option.lyrics.enableMusixmatch": "Ativar letras do Musixmatch",
|
||||||
|
"settings.option.lyrics.enableMusixmatchKaraoke": "Ativar o modo Karaoke (apenas para o Musixmatch)",
|
||||||
|
"settings.option.lyrics.musixmatchPreferredLanguage": "Língua preferida para traduções do Musixmatch",
|
||||||
|
"settings.option.lyrics.enableYoutubeLyrics": "Ativar letras do Youtube para videoclipes",
|
||||||
|
"settings.option.lyrics.enableQQLyrics": "Ativar letras do QQ",
|
||||||
|
"settings.header.connectivity": "Conectividade",
|
||||||
|
"settings.header.connectivity.description": "Ajustar as definições de conectividade para o Cider.",
|
||||||
|
"settings.option.connectivity.playbackNotifications": "Notificações de reprodução",
|
||||||
|
"settings.option.connectivity.discordRPC": "Discord Rich Presence",
|
||||||
|
"settings.option.connectivity.discordRPC.clientName": "Nome do cliente",
|
||||||
|
"settings.option.connectivity.discordRPC.clearOnPause": "Limpar o Discord Rich Presence ao colocar em pausa",
|
||||||
|
"settings.option.connectivity.discordRPC.hideButtons": "Esconder botões no Discord Rich Presence",
|
||||||
|
"settings.option.connectivity.discordRPC.hideTimestamp": "Esconder timestamp no Discord Rich Presence",
|
||||||
|
"settings.option.connectivity.discordRPC.detailsFormat": "Formato dos detalhes",
|
||||||
|
"settings.option.connectivity.discordRPC.stateFormat": "Formato do estado",
|
||||||
|
"settings.option.connectivity.discordRPC.reload": "Reiniciar o DiscordRPC",
|
||||||
|
"settings.option.connectivity.discordRPC.reconnectedToUser": "DiscordRPC ligação restabelecida ao utilizador: {{user}} ({{userid}})",
|
||||||
|
"settings.option.connectivity.lastfmScrobble": "Last.fm Scrobbling",
|
||||||
|
"settings.option.connectivity.lastfmScrobble.delay": "Last.fm atraso do scrobble (%)",
|
||||||
|
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Ativar Last.fm Now Playing",
|
||||||
|
"settings.option.connectivity.lastfmScrobble.removeFeatured": "Remover artistas do título da música (Last.fm)",
|
||||||
|
"settings.option.connectivity.lastfmScrobble.filterLoop": "Filtrar música em loop (Last.fm)",
|
||||||
|
"settings.header.debug": "Debug",
|
||||||
|
"settings.option.debug.copy_log": "Copiar logs para a área de transferência",
|
||||||
|
"settings.option.debug.openAppData": "Abrir pasta do Cider",
|
||||||
|
"settings.header.experimental": "Experimental",
|
||||||
|
"settings.header.experimental.description": "Ajustar as definições experimentais para o Cider.",
|
||||||
|
"settings.option.experimental.reinstallwidevine": "Reinstalar WidevineCDM",
|
||||||
|
"settings.option.experimental.reinstallwidevine.confirm": "Tem a certeza de que pretende reinstalar o Widevine?",
|
||||||
|
"settings.option.experimental.unknownPlugin": "Fontes desconhecidas",
|
||||||
|
"settings.option.experimental.unknownPlugin.description": "Permitir a instalação de plug-ins de outros repositórios que não o repositório de plug-ins do Cider",
|
||||||
|
"settings.option.experimental.compactUI": "UI compacta",
|
||||||
|
"settings.option.window.close_button_hide": "Botão fechar oculta a aplicação",
|
||||||
|
"settings.option.experimental.inline_playlists": "Listas de reprodução e álbuns \"inline\"",
|
||||||
|
"settings.option.advanced.playlistTrackMapping": "Mapeamento de músicas de listas de reprodução",
|
||||||
|
"settings.option.advanced.playlistTrackMapping.description": "Ativa uma análise profunda das listas de reprodução para determinar que músicas estão em que listas de reprodução. O tempo de construção da cache das listas de reprodução pode aumentar significativamente.",
|
||||||
|
"settings.option.visual.transparent": "Moldura transparente",
|
||||||
|
"settings.option.visual.transparent.description": "Necessita de suporte do tema, requer reinício",
|
||||||
|
"settings.header.advanced": "Avançado",
|
||||||
|
"settings.header.connect": "Sincronização",
|
||||||
|
"settings.option.connect.link_account": "Ativar a sincronização com o Cider Connect",
|
||||||
|
"settings.option.connect.link_account.description": "Ligar a sua conta Discord ao Cider Connect permite-lhe armazenar dados de utilizador incluindo definições, EQ's, e eventualmente mais uma vez terminado (trabalho em curso).",
|
||||||
|
"spatial.notTurnedOn": "A espacialização de áudio está desativada. Para utilizar, por favor, ative-a primeiro.",
|
||||||
|
"spatial.spatialProperties": "Propriedades espaciais",
|
||||||
|
"spatial.width": "Largura",
|
||||||
|
"spatial.height": "Altura",
|
||||||
|
"spatial.depth": "Profundidade",
|
||||||
|
"spatial.gain": "Ganho",
|
||||||
|
"spatial.roomMaterials": "Materiais da sala",
|
||||||
|
"spatial.roomDimensions": "Dimensões da sala",
|
||||||
|
"spatial.roomPositions": "Posições na sala",
|
||||||
|
"spatial.setDimensions": "Definir dimensões",
|
||||||
|
"spatial.setPositions": "Definir posições",
|
||||||
|
"spatial.up": "Acima",
|
||||||
|
"spatial.front": "Frente",
|
||||||
|
"spatial.left": "Esquerda",
|
||||||
|
"spatial.right": "Direita",
|
||||||
|
"spatial.back": "Atrás",
|
||||||
|
"spatial.down": "Em baixo",
|
||||||
|
"spatial.listener": "Ouvinte",
|
||||||
|
"spatial.audioSource": "Fonte de áudio",
|
||||||
|
"settings.header.unfinished": "Inacabado",
|
||||||
|
"remote.web.title": "Cider Remote",
|
||||||
|
"remote.web.description": "Digitalize o código QR para emparelhar o seu telemóvel com esta instância do Cider",
|
||||||
|
"share.platform.twitter.tweet": "Ouça {{song}} na Apple Music.\n\n{{url}}\n\n#AppleMusic #Cider",
|
||||||
|
"share.platform.twitter": "Twitter",
|
||||||
|
"share.platform.facebook": "Facebook",
|
||||||
|
"share.platform.reddit": "Reddit",
|
||||||
|
"share.platform.telegram": "Telegram",
|
||||||
|
"share.platform.whatsapp": "WhatsApp",
|
||||||
|
"share.platform.messenger": "Messenger",
|
||||||
|
"share.platform.email": "Email",
|
||||||
|
"share.platform.songLink": "Copiar com song.link",
|
||||||
|
"share.platform.clipboard": "Copiar ligação",
|
||||||
|
"about.thanks": "Um grande obrigado à equipa da Cider Collective e a todos os nossos contribuidores."
|
||||||
|
}
|
|
@ -2,7 +2,7 @@
|
||||||
"i18n.languageName": "English (US)",
|
"i18n.languageName": "English (US)",
|
||||||
"i18n.languageNameEnglish": "English (US)",
|
"i18n.languageNameEnglish": "English (US)",
|
||||||
"i18n.category": "main",
|
"i18n.category": "main",
|
||||||
"i18n.authors": "@maikirakiwi @kyw504100 @nosh118",
|
"i18n.authors": "@notmaikiwi @kyw504100 @nosh118 @cryptofyre",
|
||||||
"app.name": "Cider",
|
"app.name": "Cider",
|
||||||
"date.format": "${m} ${d}, ${y}",
|
"date.format": "${m} ${d}, ${y}",
|
||||||
"dialog.cancel": "Cancel",
|
"dialog.cancel": "Cancel",
|
||||||
|
@ -153,6 +153,7 @@
|
||||||
},
|
},
|
||||||
"term.videos": "Videos",
|
"term.videos": "Videos",
|
||||||
"term.menu": "Menu",
|
"term.menu": "Menu",
|
||||||
|
"term.themeManaged": "Managed by a theme",
|
||||||
"term.check": "Check",
|
"term.check": "Check",
|
||||||
"term.aboutArtist": "About {{artistName}}",
|
"term.aboutArtist": "About {{artistName}}",
|
||||||
"term.topResult": "Top Result",
|
"term.topResult": "Top Result",
|
||||||
|
@ -212,6 +213,12 @@
|
||||||
"podcast.episodes": "Episodes",
|
"podcast.episodes": "Episodes",
|
||||||
"podcast.playEpisode": "Play Episode",
|
"podcast.playEpisode": "Play Episode",
|
||||||
"podcast.website": "Podcast Website",
|
"podcast.website": "Podcast Website",
|
||||||
|
"action.hideLibrary": "Hide Library",
|
||||||
|
"action.showLibrary": "Show Library",
|
||||||
|
"action.cut": "Cut",
|
||||||
|
"action.paste": "Paste",
|
||||||
|
"action.selectAll": "Select All",
|
||||||
|
"action.delete": "Delete",
|
||||||
"action.edit": "Edit",
|
"action.edit": "Edit",
|
||||||
"action.done": "Done",
|
"action.done": "Done",
|
||||||
"action.editTracklist": "Edit Tracklist",
|
"action.editTracklist": "Edit Tracklist",
|
||||||
|
@ -263,6 +270,7 @@
|
||||||
"action.tray.playpause": "Play/Pause",
|
"action.tray.playpause": "Play/Pause",
|
||||||
"action.tray.next": "Next",
|
"action.tray.next": "Next",
|
||||||
"action.tray.previous": "Previous",
|
"action.tray.previous": "Previous",
|
||||||
|
"action.tray.listento": "Listen To:",
|
||||||
"action.update": "Update",
|
"action.update": "Update",
|
||||||
"action.install": "Install",
|
"action.install": "Install",
|
||||||
"action.copy": "Copy",
|
"action.copy": "Copy",
|
||||||
|
@ -366,6 +374,7 @@
|
||||||
"settings.header.audio": "Audio",
|
"settings.header.audio": "Audio",
|
||||||
"settings.header.audio.description": "Adjust the audio settings for Cider.",
|
"settings.header.audio.description": "Adjust the audio settings for Cider.",
|
||||||
"settings.option.audio.volumeStep": "Volume Step",
|
"settings.option.audio.volumeStep": "Volume Step",
|
||||||
|
"settings.option.audio.advanced": "Advanced Volume Control",
|
||||||
"settings.option.audio.maxVolume": "Max Volume",
|
"settings.option.audio.maxVolume": "Max Volume",
|
||||||
"settings.option.audio.changePlaybackRate": "Change Playback Rate",
|
"settings.option.audio.changePlaybackRate": "Change Playback Rate",
|
||||||
"settings.option.audio.playbackRate": "Playback Rate",
|
"settings.option.audio.playbackRate": "Playback Rate",
|
||||||
|
@ -398,20 +407,29 @@
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer.description": "Realizes a different musical atmosphere modelled after the state of the art audio setups.",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer.description": "Realizes a different musical atmosphere modelled after the state of the art audio setups.",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode": "Cider Atmosphere Realizer™️ Mode",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode": "Cider Atmosphere Realizer™️ Mode",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.description": "Changes the mode of operation of the Atmosphere Realizer module.",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.description": "Changes the mode of operation of the Atmosphere Realizer module.",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_STANDARD": "Natural (Standard)",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_STANDARD": "Hōjicha Cheese Foam Tea",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_PLUS": "Natural (Plus)",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_PLUS": "Genmaicha Tapioca Milk Tea",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_1": "Rock Salt Cheese Foam Tea",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_2": "Uji Matcha Milk Tea",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E168_1": "Jasmine Macchiato",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z3600": "Hokkaido Milk Tea",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500A": "Moonlight Softcake",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.BSCBM": "Brown Sugar Creme Brûlée Milk",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.CUDDLE": "Cuddle Warmth",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Enhances the perceived audio quality of 256 kbps AAC audio by using a real-time algorithm that takes advantage of both psychoacoustic models of human hearing and AAC encoding characteristics.",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Enhances the perceived audio quality of AAC encoded audio by using a real-time algorithm that takes advantage of both psychoacoustic models of human hearing and AAC encoding characteristics.",
|
||||||
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP is not compatible with Spatialization. Please disable Spatialization to continue.",
|
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP is not compatible with Spatialization. Please disable Spatialization to continue.",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Strength",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Strength",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Changes the strength of the processing done to the audio. (Aggressive may yield undesirable results)",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Changes the strength of the processing done to the audio. (Aggressive may yield undesirable results)",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Standard",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Standard",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.adaptive": "Adaptive",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.legacy": "Legacy",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Aggressive",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Aggressive",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Audio Normalization",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Audio Normalization",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalizes peak volume for individual tracks to create a more uniform listening experience. (Does not work on user uploaded tracks)",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalizes peak volume for individual tracks to create a more uniform listening experience. (Does not work on user uploaded tracks)",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Managed by Audio Lab",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Managed by Audio Lab",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider Tuned Spatialization",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider Tuned Spatialization",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Pre-tuned Spatializing Effect, disables the customizable settings of Audio Spatialization. Spatialization must be enabled as a prerequisite.",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Pre-tuned Spatializing Effect, disables the customizable settings of Audio Spatialization.",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider Spatialization Profile",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider Spatialization Profile",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Changes the Tuning Profile of the Spatialization.",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Changes the Tuning Profile of the Spatialization.",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Standard",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Standard",
|
||||||
|
@ -419,6 +437,9 @@
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.separation": "Separation",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.separation": "Separation",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.minimal": "Minimal",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.minimal": "Minimal",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Audiophile",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Audiophile",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.diffused": "Diffused",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.bplk": "Encore",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.hw2k": "Expanded Encore",
|
||||||
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "Spatialization is not compatible with CAP. Please disable CAP to continue.",
|
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "Spatialization is not compatible with CAP. Please disable CAP to continue.",
|
||||||
"settings.option.audio.dbspl.display": "dB SPL Display",
|
"settings.option.audio.dbspl.display": "dB SPL Display",
|
||||||
"settings.option.audio.dbspl.description": "(Advanced users only) Display dB SPL instead of dBFS on the volume slider.",
|
"settings.option.audio.dbspl.description": "(Advanced users only) Display dB SPL instead of dBFS on the volume slider.",
|
||||||
|
@ -500,6 +521,8 @@
|
||||||
"settings.option.connectivity.discordRPC.hideTimestamp": "Hide timestamp on Discord Rich Presence",
|
"settings.option.connectivity.discordRPC.hideTimestamp": "Hide timestamp on Discord Rich Presence",
|
||||||
"settings.option.connectivity.discordRPC.detailsFormat": "Details Format",
|
"settings.option.connectivity.discordRPC.detailsFormat": "Details Format",
|
||||||
"settings.option.connectivity.discordRPC.stateFormat": "State Format",
|
"settings.option.connectivity.discordRPC.stateFormat": "State Format",
|
||||||
|
"settings.option.connectivity.discordRPC.reload": "Reload DiscordRPC",
|
||||||
|
"settings.option.connectivity.discordRPC.reconnectedToUser": "DiscordRPC Reconnected to User: {{user}} ({{userid}})",
|
||||||
"settings.option.connectivity.lastfmScrobble": "Last.fm Scrobbling",
|
"settings.option.connectivity.lastfmScrobble": "Last.fm Scrobbling",
|
||||||
"settings.option.connectivity.lastfmScrobble.delay": "Last.fm Scrobble Delay (%)",
|
"settings.option.connectivity.lastfmScrobble.delay": "Last.fm Scrobble Delay (%)",
|
||||||
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Enable Last.fm Now Playing",
|
"settings.option.connectivity.lastfmScrobble.nowPlaying": "Enable Last.fm Now Playing",
|
||||||
|
@ -557,5 +580,44 @@
|
||||||
"share.platform.email": "Email",
|
"share.platform.email": "Email",
|
||||||
"share.platform.songLink": "Copy with song.link",
|
"share.platform.songLink": "Copy with song.link",
|
||||||
"share.platform.clipboard": "Copy Link",
|
"share.platform.clipboard": "Copy Link",
|
||||||
"about.thanks": "Major thanks to the Cider Collective Team and all of our contributors."
|
"about.thanks": "Major thanks to the Cider Collective Team and all of our contributors.",
|
||||||
|
"oobe.yes": "Yes",
|
||||||
|
"oobe.no": "No",
|
||||||
|
"oobe.next": "Next",
|
||||||
|
"oobe.previous": "Previous",
|
||||||
|
"oobe.done": "Done",
|
||||||
|
"oobe.amupsell.title": "Before we start",
|
||||||
|
"oobe.amupsell.text": "Cider requires an active, paid Apple Music subscription\nCider will not work with Apple Music Voice Plan or some promotional trial subscriptions. If you already have a qualified Apple Music subscription click Next to continue.",
|
||||||
|
"oobe.amupsell.subscribeBtn": "Subscribe to Apple Music",
|
||||||
|
"oobe.amupsell.explainBtn": "Explain",
|
||||||
|
"oobe.amupsell.subscribeUrl": "https://apple.co/3MdqJVQ",
|
||||||
|
"oobe.amupsell.amWebUrl": "https://beta.music.apple.com/",
|
||||||
|
"oobe.amupsell.promoExplained": "Some promotional and non US Apple Music trial subscriptions do not have access to the required Apple Music Web Player API's needed for Cider to function. To verify if your active trial will work with Cider go to <a href='{{ amWebUrl }}'>{{ amWebUrl }}</a> log in and try to play some music. If it works, great! You're ready to use Cider, however if it does not consider subscribing to Apple Music here: <a href='{{ subscribeUrl }}'>{{ subscribeUrl }}</a>",
|
||||||
|
"oobe.intro.title": "Welcome to Cider",
|
||||||
|
"oobe.intro.subtitle": "",
|
||||||
|
"oobe.intro.text": "Let's get a few things set up so you can use Cider, how you'd like. You can always change these settings later.",
|
||||||
|
"oobe.general.title": "General",
|
||||||
|
"oobe.general.subtitle": "",
|
||||||
|
"oobe.general.text": "",
|
||||||
|
"oobe.audio.title": "Audio",
|
||||||
|
"oobe.audio.subtitle": "",
|
||||||
|
"oobe.audio.text": "Cider features a custom tuned and designed audio stack that delivers a rich high quality audio experience.\nFeaturing Cider Adrenaline, Atmosphere Realizer, and Spatialized Audio.\nTo enable this functionality \"Advanced Audio Functionality\" must be enabled.\nEnabling Advanced Audio Functionality will give you access to these enhancements in the Cider Audio Labs, found in the app settings.",
|
||||||
|
"oobe.audio.advancedFunctionality": "",
|
||||||
|
"oobe.visual.title": "Visual",
|
||||||
|
"oobe.visual.subtitle": "",
|
||||||
|
"oobe.visual.text": "",
|
||||||
|
"oobe.visual.layout.text": "Cider features two window different layouts.\nMaverick is an iTunes like layout with the player at the top of the window.\nMojave is a new spin created by the Cider Collective.\n\nYou can change the layout any time in the settings.",
|
||||||
|
"oobe.visual.suggestingThemes": "Theming is a great way to personalize your experience. Here are a few we suggest: ",
|
||||||
|
"oobe.visual.suggestingThemes.subtext": "(These themes will be downloaded from GitHub)",
|
||||||
|
"oobe.visual.suggestingThemes.default": "Cider",
|
||||||
|
"oobe.visual.suggestingThemes.default.text": "The classic Cider theme.",
|
||||||
|
"oobe.visual.suggestingThemes.dark": "Dark",
|
||||||
|
"oobe.visual.suggestingThemes.dark.text": "Darkness.",
|
||||||
|
"oobe.visual.suggestingThemes.community1": "Groovy",
|
||||||
|
"oobe.visual.suggestingThemes.community1.text": "A WinUI influenced theme",
|
||||||
|
"oobe.visual.suggestingThemes.community2": "iTheme",
|
||||||
|
"oobe.visual.suggestingThemes.community2.text": "The classic big fruit layout.",
|
||||||
|
"oobe.visual.suggestingThemes.community3": "Dracula",
|
||||||
|
"oobe.visual.suggestingThemes.community3.text": "The iconic Dracula color scheme.",
|
||||||
|
"oobe.amsignin.title": ""
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"i18n.languageName": "简体中文(中国)",
|
"i18n.languageName": "简体中文(中国)",
|
||||||
"i18n.languageNameEnglish": "Simp. Chinese (China)",
|
"i18n.languageNameEnglish": "Simp. Chinese (China)",
|
||||||
"i18n.category": "main",
|
"i18n.category": "main",
|
||||||
"i18n.authors": "@maikirakiwi @BillKerman @jay900604",
|
"i18n.authors": "@notmaikiwi @BillKerman @jay900604",
|
||||||
"app.name": "Cider",
|
"app.name": "Cider",
|
||||||
"date.format": "${y}年${m}月${d}日",
|
"date.format": "${y}年${m}月${d}日",
|
||||||
"dialog.cancel": "取消",
|
"dialog.cancel": "取消",
|
||||||
|
@ -10,6 +10,7 @@
|
||||||
"notification.updatingLibrarySongs": "正在更新歌曲资料库...",
|
"notification.updatingLibrarySongs": "正在更新歌曲资料库...",
|
||||||
"notification.updatingLibraryAlbums": "正在更新专辑资料库...",
|
"notification.updatingLibraryAlbums": "正在更新专辑资料库...",
|
||||||
"notification.updatingLibraryArtists": "正在更新艺人资料库...",
|
"notification.updatingLibraryArtists": "正在更新艺人资料库...",
|
||||||
|
"term.variables": "Variables",
|
||||||
"term.appleInc": "Apple Inc.",
|
"term.appleInc": "Apple Inc.",
|
||||||
"term.appleMusic": "Apple Music",
|
"term.appleMusic": "Apple Music",
|
||||||
"term.applePodcasts": "Apple Podcasts",
|
"term.applePodcasts": "Apple Podcasts",
|
||||||
|
@ -20,8 +21,12 @@
|
||||||
"term.accountSettings": "账户设置",
|
"term.accountSettings": "账户设置",
|
||||||
"term.logout": "退出登录",
|
"term.logout": "退出登录",
|
||||||
"term.login": "登录",
|
"term.login": "登录",
|
||||||
|
"term.quickNav":"快速导航",
|
||||||
|
"term.cast":"投射",
|
||||||
"term.about": "关于",
|
"term.about": "关于",
|
||||||
"term.privateSession": "私人聆听",
|
"term.privateSession": "隐身聆听",
|
||||||
|
"term.disablePrivateSession":"停止隐身聆听",
|
||||||
|
"term.autoplay":"自动播放",
|
||||||
"term.lyrics": "歌词",
|
"term.lyrics": "歌词",
|
||||||
"term.queue": "待播清单",
|
"term.queue": "待播清单",
|
||||||
"term.history": "历史记录",
|
"term.history": "历史记录",
|
||||||
|
@ -37,18 +42,27 @@
|
||||||
"term.artists": "艺人",
|
"term.artists": "艺人",
|
||||||
"term.podcasts": "播客",
|
"term.podcasts": "播客",
|
||||||
"term.playlists": "播放列表",
|
"term.playlists": "播放列表",
|
||||||
|
"term.charts":"排行榜",
|
||||||
"term.playlist": "播放列表",
|
"term.playlist": "播放列表",
|
||||||
"term.newPlaylist": "新播放列表",
|
"term.newPlaylist": "新播放列表",
|
||||||
"term.newPlaylistFolder": "新播放列表文件夹",
|
"term.newPlaylistFolder": "新播放列表文件夹",
|
||||||
"term.createNewPlaylist": "新建播放列表",
|
"term.createNewPlaylist": "新建播放列表",
|
||||||
"term.createNewPlaylistFolder": "新建播放列表文件夹",
|
"term.createNewPlaylistFolder": "新建播放列表文件夹",
|
||||||
"term.deletePlaylist": "您确定要删除该播放列表吗?",
|
"term.deletePlaylist": "您确定要删除该播放列表吗?",
|
||||||
|
"term.navigateBack":"上一页",
|
||||||
|
"term.navigateForward":"下一页",
|
||||||
"term.play": "播放",
|
"term.play": "播放",
|
||||||
"term.pause": "暂停",
|
"term.pause": "暂停",
|
||||||
|
"term.stop": "停止",
|
||||||
"term.previous": "上一首",
|
"term.previous": "上一首",
|
||||||
"term.next": "下一首",
|
"term.next": "下一首",
|
||||||
"term.shuffle": "随机播放",
|
"term.shuffle": "随机播放",
|
||||||
"term.repeat": "重复播放",
|
"term.enableShuffle":"开启随机播放",
|
||||||
|
"term.disableShuffle":"关闭随机播放",
|
||||||
|
"term.repeat": "循环播放",
|
||||||
|
"term.enableRepeatOne": "开启单曲循环",
|
||||||
|
"term.disableRepeatOne": "关闭单曲循环",
|
||||||
|
"term.disableRepeat": "关闭循环播放",
|
||||||
"term.volume": "音量",
|
"term.volume": "音量",
|
||||||
"term.mute": "静音",
|
"term.mute": "静音",
|
||||||
"term.unmute": "解除静音",
|
"term.unmute": "解除静音",
|
||||||
|
@ -63,12 +77,14 @@
|
||||||
"term.sortBy.genre": "类型",
|
"term.sortBy.genre": "类型",
|
||||||
"term.sortBy.releaseDate": "发行日期",
|
"term.sortBy.releaseDate": "发行日期",
|
||||||
"term.sortBy.duration": "时长",
|
"term.sortBy.duration": "时长",
|
||||||
|
"term.sortBy.dateAdded":"加入日期",
|
||||||
"term.sortOrder": "字母排序",
|
"term.sortOrder": "字母排序",
|
||||||
"term.sortOrder.ascending": "升序",
|
"term.sortOrder.ascending": "升序",
|
||||||
"term.sortOrder.descending": "倒序",
|
"term.sortOrder.descending": "倒序",
|
||||||
"term.viewAs": "显示模式",
|
"term.viewAs": "显示模式",
|
||||||
"term.viewAs.coverArt": "专辑封面",
|
"term.viewAs.coverArt": "专辑封面",
|
||||||
"term.viewAs.list": "列表",
|
"term.viewAs.list": "列表",
|
||||||
|
"term.dynamic":"动态",
|
||||||
"term.size": "大小",
|
"term.size": "大小",
|
||||||
"term.size.normal": "正常",
|
"term.size.normal": "正常",
|
||||||
"term.size.compact": "紧凑",
|
"term.size.compact": "紧凑",
|
||||||
|
@ -101,7 +117,9 @@
|
||||||
"term.audioControls": "音频控制",
|
"term.audioControls": "音频控制",
|
||||||
"term.audioSettings": "音频设置",
|
"term.audioSettings": "音频设置",
|
||||||
"term.clearAll": "清空",
|
"term.clearAll": "清空",
|
||||||
"term.recentStations": "最近播放的频道",
|
"term.recentStations": "最近播放的广播",
|
||||||
|
"term.personalStations":"最近播放的个人广播",
|
||||||
|
"term.amLive":"amLive",
|
||||||
"term.language": "语言",
|
"term.language": "语言",
|
||||||
"term.funLanguages": "恶搞",
|
"term.funLanguages": "恶搞",
|
||||||
"term.noLyrics": "加载中... / 无搜索结果 / 纯音乐",
|
"term.noLyrics": "加载中... / 无搜索结果 / 纯音乐",
|
||||||
|
@ -140,10 +158,25 @@
|
||||||
"term.radioShows": "广播单集",
|
"term.radioShows": "广播单集",
|
||||||
"term.recordLabels": "唱片公司",
|
"term.recordLabels": "唱片公司",
|
||||||
"term.videoExtras": "视频特辑",
|
"term.videoExtras": "视频特辑",
|
||||||
|
"term.top":"顶部",
|
||||||
"term.version": "版本",
|
"term.version": "版本",
|
||||||
|
"term.noVideos":"无视频",
|
||||||
"term.plugin": "插件",
|
"term.plugin": "插件",
|
||||||
"term.pluginMenu": "插件菜单",
|
"term.pluginMenu": "插件菜单",
|
||||||
"term.pluginMenu.none": "沒有交互式插件",
|
"term.pluginMenu.none": "沒有交互式插件",
|
||||||
|
"term.replay":"重新播放",
|
||||||
|
"term.uniqueAlbums":"Unique Albums",
|
||||||
|
"term.uniqueArtists":"Unique Artists",
|
||||||
|
"term.uniqueSongs":"Unique Songs",
|
||||||
|
"term.topArtists":"热门艺人",
|
||||||
|
"term.listenedTo":"听过",
|
||||||
|
"term.times":"次",
|
||||||
|
"term.topAlbums":"热门专辑",
|
||||||
|
"term.plays":"次",
|
||||||
|
"term.topGenres":"热门类型",
|
||||||
|
"term.confirmLogout":"你确定要退出登录吗?",
|
||||||
|
"term.creditDesignedBy":"由 ${authorUsername} 设计",
|
||||||
|
"term.discNumber":"碟 ${discNumber}",
|
||||||
"home.title": "主页",
|
"home.title": "主页",
|
||||||
"home.recentlyPlayed": "最近播放",
|
"home.recentlyPlayed": "最近播放",
|
||||||
"home.recentlyAdded": "最近添加",
|
"home.recentlyAdded": "最近添加",
|
||||||
|
@ -164,6 +197,12 @@
|
||||||
"podcast.episodes": "单集",
|
"podcast.episodes": "单集",
|
||||||
"podcast.playEpisode": "播放单集",
|
"podcast.playEpisode": "播放单集",
|
||||||
"podcast.website": "Podcast 网站",
|
"podcast.website": "Podcast 网站",
|
||||||
|
"action.hideLibrary":"隐藏资料库",
|
||||||
|
"action.showLibrary":"显示资料可查",
|
||||||
|
"action.cut":"剪切",
|
||||||
|
"action.paste":"粘贴",
|
||||||
|
"action.selectAll":"全选",
|
||||||
|
"action.delete":"删除",
|
||||||
"action.edit": "编辑",
|
"action.edit": "编辑",
|
||||||
"action.done": "完成",
|
"action.done": "完成",
|
||||||
"action.editTracklist": "编辑歌曲清单",
|
"action.editTracklist": "编辑歌曲清单",
|
||||||
|
@ -193,7 +232,8 @@
|
||||||
"action.startRadio": "开始电台",
|
"action.startRadio": "开始电台",
|
||||||
"action.goToArtist": "前往艺人",
|
"action.goToArtist": "前往艺人",
|
||||||
"action.goToAlbum": "前往专辑",
|
"action.goToAlbum": "前往专辑",
|
||||||
"action.showInAppleMusic": "显示于 Apple Music",
|
"action.showInPlaylist":"在播放列表中显示",
|
||||||
|
"action.showInAppleMusic": "在 Apple Music 中显示",
|
||||||
"action.moveToTop": "移到顶部",
|
"action.moveToTop": "移到顶部",
|
||||||
"action.share": "分享歌曲",
|
"action.share": "分享歌曲",
|
||||||
"action.rename": "重命名",
|
"action.rename": "重命名",
|
||||||
|
@ -210,19 +250,68 @@
|
||||||
"action.showAlbum": "显示专辑",
|
"action.showAlbum": "显示专辑",
|
||||||
"action.tray.minimize": "最小化",
|
"action.tray.minimize": "最小化",
|
||||||
"action.tray.quit": "退出",
|
"action.tray.quit": "退出",
|
||||||
|
"action.tray.show": "显示 Cider",
|
||||||
|
"action.tray.playpause": "播放/暂停",
|
||||||
|
"action.tray.next": "下一首",
|
||||||
|
"action.tray.previous": "上一首",
|
||||||
|
"action.tray.listento": "Listen To:",
|
||||||
"action.update": "更新",
|
"action.update": "更新",
|
||||||
|
"action.install": "安装",
|
||||||
"action.copy": "复制",
|
"action.copy": "复制",
|
||||||
"action.newpreset": "新建默认...",
|
"action.newpreset": "新建默认...",
|
||||||
"action.deletepreset": "删除默认",
|
"action.deletepreset": "删除默认",
|
||||||
"action.open": "打开",
|
"action.open": "打开",
|
||||||
|
"action.close": "关闭",
|
||||||
|
"action.relaunch.confirm":"你想重新启动 Cider 吗?",
|
||||||
"action.cast.chromecast": "Chromecast",
|
"action.cast.chromecast": "Chromecast",
|
||||||
"action.cast.todevices": "投射到设备",
|
"action.cast.todevices": "投射到设备",
|
||||||
"action.cast.stop": "停止投射到所有设备",
|
"action.cast.stop": "停止投射到所有设备",
|
||||||
"action.cast.airplay": "AirPlay",
|
"action.cast.airplay": "隔空播放",
|
||||||
"action.cast.airplay.underdevelopment": "AirPlay 仍处于开发阶段中,敬请期待。",
|
"action.cast.airplay.underdevelopment": "隔空播放仍处于开发阶段中,敬请期待。",
|
||||||
"action.cast.scan": "搜索",
|
"action.cast.scan": "搜索",
|
||||||
"action.cast.scanning": "搜索中...",
|
"action.cast.scanning": "搜索中...",
|
||||||
"action.createNew": "添加...",
|
"action.createNew": "添加...",
|
||||||
|
"action.openArtworkInBrowser": "在浏览器中打开专辑封面",
|
||||||
|
"action.scrollToTop": "回到顶部",
|
||||||
|
"menubar.options.about": "关于",
|
||||||
|
"menubar.options.settings": "设置",
|
||||||
|
"menubar.options.quit": "退出 Cider",
|
||||||
|
"menubar.options.view": "查看 ",
|
||||||
|
"menubar.options.reload": "重新载入",
|
||||||
|
"menubar.options.forcereload": "强制重新载入",
|
||||||
|
"menubar.options.toggledevtools": "切换开发人员工具",
|
||||||
|
"menubar.options.window": "窗口",
|
||||||
|
"menubar.options.minimize": "最小化",
|
||||||
|
"menubar.options.toggleprivate": "切换隐身聆听",
|
||||||
|
"menubar.options.webremote": "远程控制",
|
||||||
|
"menubar.options.audio": "音频设定",
|
||||||
|
"menubar.options.plugins": "插件目录",
|
||||||
|
"menubar.options.controls": "控制",
|
||||||
|
"menubar.options.next": "下一首",
|
||||||
|
"menubar.options.playpause": "播放/暂停",
|
||||||
|
"menubar.options.previous": "上一首",
|
||||||
|
"menubar.options.volumeup": "增大音量",
|
||||||
|
"menubar.options.volumedown": "减小音量",
|
||||||
|
"menubar.options.browse": "浏览",
|
||||||
|
"menubar.options.artists": "艺人",
|
||||||
|
"menubar.options.search": "搜索",
|
||||||
|
"menubar.options.albums": "专辑",
|
||||||
|
"menubar.options.cast": "投射至设备",
|
||||||
|
"menubar.options.account": "账户",
|
||||||
|
"menubar.options.accountsettings": "账户设置",
|
||||||
|
"menubar.options.signout": "注销",
|
||||||
|
"menubar.options.support": "支持",
|
||||||
|
"menubar.options.discord": "Discord",
|
||||||
|
"menubar.options.github": "GitHub Wiki",
|
||||||
|
"menubar.options.report": "报告...",
|
||||||
|
"menubar.options.bug": "Bug",
|
||||||
|
"menubar.options.feature": "功能请求",
|
||||||
|
"menubar.options.trans": "翻译报告/请求",
|
||||||
|
"menubar.options.license": "查看授权",
|
||||||
|
"menubar.options.conf": "在编辑器打开配置文件",
|
||||||
|
"menubar.options.listennow": "现在就听",
|
||||||
|
"menubar.options.recentlyAdded": "最近添加",
|
||||||
|
"menubar.options.songs": "歌曲",
|
||||||
"settings.header.general": "通用",
|
"settings.header.general": "通用",
|
||||||
"settings.header.general.description": "调整 Cider 的通用设置",
|
"settings.header.general.description": "调整 Cider 的通用设置",
|
||||||
"settings.option.audio.volumeStep": "音量改变量",
|
"settings.option.audio.volumeStep": "音量改变量",
|
||||||
|
@ -244,25 +333,54 @@
|
||||||
"settings.option.general.customizeSidebar": "自定义侧边栏的功能",
|
"settings.option.general.customizeSidebar": "自定义侧边栏的功能",
|
||||||
"settings.option.general.customizeSidebar.customize": "自定义",
|
"settings.option.general.customizeSidebar.customize": "自定义",
|
||||||
"settings.option.general.keybindings": "快捷操作键",
|
"settings.option.general.keybindings": "快捷操作键",
|
||||||
|
"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.option.general.keybindings.open": "打开",
|
"settings.option.general.keybindings.open": "打开",
|
||||||
|
"settings.option.general.themeUpdateNotification":"自动检查主题更新",
|
||||||
|
"settings.option.general.showLovedTracksInline":"行内显示喜爱曲目",
|
||||||
|
"settings.description.search":"搜索",
|
||||||
|
"settings.description.albums":"资料库专辑",
|
||||||
|
"settings.description.artists":"资料库艺人",
|
||||||
|
"settings.description.browse":"浏览",
|
||||||
|
"settings.description.private":"隐身聆听",
|
||||||
|
"settings.description.remote":"远程控制",
|
||||||
|
"settings.description.audio":"音频设定",
|
||||||
|
"settings.description.plugins":"插件目录",
|
||||||
|
"settings.description.cast":"投射到装置",
|
||||||
|
"settings.description.settings":"设置",
|
||||||
|
"settings.description.developer":"开发者",
|
||||||
|
"settings.description.listnow":"现在就听",
|
||||||
|
"settings.description.recentAdd":"最近加入",
|
||||||
|
"settings.description.songs":"歌曲",
|
||||||
"settings.notyf.updateCider.update-not-available": "没有可用的更新",
|
"settings.notyf.updateCider.update-not-available": "没有可用的更新",
|
||||||
"settings.notyf.updateCider.update-downloaded": "更新已成功下载,重启后进行更新",
|
"settings.notyf.updateCider.update-downloaded": "更新已成功下载,重启后进行更新",
|
||||||
"settings.notyf.updateCider.update-timeout": "更新超时",
|
"settings.notyf.updateCider.update-timeout": "更新超时",
|
||||||
"settings.header.audio": "音频",
|
"settings.header.audio": "音频",
|
||||||
"settings.header.audio.description": "调整 Cider 的音频设置",
|
"settings.header.audio.description": "调整 Cider 的音频设置",
|
||||||
|
"settings.option.audio.advanced":"高级功能",
|
||||||
|
"settings.option.audio.changePlaybackRate":"修改播放速度",
|
||||||
|
"settings.option.audio.playbackRate":"播放速度",
|
||||||
|
"settings.option.audio.playbackRate.change":"播放速度已修改",
|
||||||
"settings.option.audio.quality": "音质",
|
"settings.option.audio.quality": "音质",
|
||||||
"settings.header.audio.quality.hireslossless": "高解析度无损",
|
"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": "无损",
|
||||||
"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": "高音质",
|
||||||
|
"settings.header.audio.quality.high.description":"256 kbps",
|
||||||
"settings.header.audio.quality.standard": "高效率",
|
"settings.header.audio.quality.standard": "高效率",
|
||||||
|
"settings.header.audio.quality.standard.description":"64 kbps",
|
||||||
"settings.option.audio.seamlessTransition": "无缝播放",
|
"settings.option.audio.seamlessTransition": "无缝播放",
|
||||||
"settings.option.audio.enableAdvancedFunctionality": "高级音频功能",
|
"settings.option.audio.enableAdvancedFunctionality": "高级音频功能",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.description": "打开 AudioContext 将启用类似音量平衡和等化器的高级设置。但这并不一定适合每部电脑,可能会发生音乐卡顿。",
|
"settings.option.audio.enableAdvancedFunctionality.description": "打开 AudioContext 将启用类似音量平衡和等化器的高级设置。但这并不一定适合每部电脑,可能会发生音乐卡顿。",
|
||||||
|
"settings.warn.audio.enableAdvancedFunctionality.lowcores":"您的电脑可能无法处理这些功能, 您确定要继续?",
|
||||||
"settings.option.audio.audioLab": "Cider 音频实验室",
|
"settings.option.audio.audioLab": "Cider 音频实验室",
|
||||||
"settings.option.audio.audioLab.description": "包含由 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": "模拟温暖",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "以 Korg Nutube 6P1 为蓝本的模拟温暖。",
|
"settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "以 Korg Nutube 6P1 为蓝本的模拟温暖。",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity": "模拟温暖强度",
|
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity": "模拟温暖强度",
|
||||||
|
@ -280,25 +398,38 @@
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E168_1": "春毫茉莉玛琪雅朵",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E168_1": "春毫茉莉玛琪雅朵",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z3600": "北海道奶茶",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z3600": "北海道奶茶",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500": "月光软饼干",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500": "月光软饼干",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.BSCBM":"布蕾黑糖鲜奶",
|
||||||
|
"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.option.audio.enableAdvancedFunctionality.ciderPPE.description": "通过人类的听力心理学模型和 AAC 编码特色的即时算法,强化 AAC 音频的感知音频质量。",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "数码增强音频处理设置",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "数码增强音频处理设置",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "将更改音频处理的激进/振奋程度(增强选项有可能会引起杂讯)。",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "将更改音频处理的激进/振奋程度(增强选项有可能会引起杂讯)。",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "标准",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "标准",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.adaptive":"自适应",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.legacy":"传统",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "增强",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "增强",
|
||||||
|
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility":"数码增强音频处理与空间音频不兼容,请先停用空间音频。",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "音量平衡",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "音量平衡",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "自动将歌曲播放音量调整到相同水平,享受更舒适的聆听体验。",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "自动将歌曲播放音量调整到相同水平,享受更舒适的聆听体验。",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "此功能由音频实验室管理",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "此功能由音频实验室管理",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider 空间音频效果",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider 空间音频效果",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "预先调整音频空间效果,关闭空间音讯可自订设置。但必须先打开音频空间才可以做设置。",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "预先调整音频空间效果,关闭空间音讯可自订设置。",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider 音频空间配置档",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider 音频空间配置档",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "变更音频空间的配置档,需重新启动应用程序。",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "变更音频空间的配置档,需重新启动应用程序。",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "标准",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "标准",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.soundstage":"声场",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.separation":"分离感",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.minimal":"微调",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "发烧友",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "发烧友",
|
||||||
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "音频空间无法与 CAP 相容,请关闭 CAP 在进行操作。",
|
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "音频空间无法与 CAP 相容,请关闭 CAP 在进行操作。",
|
||||||
|
"settings.option.audio.dbspl.display":"显示 dB SPL(声压)",
|
||||||
|
"settings.option.audio.dbspl.description":"(专业用户选项) 音量滑动条显示 dB SPL 而非 dBFS.",
|
||||||
|
"settings.option.audio.dbfs.calibration":"0 dBFS 校正",
|
||||||
|
"settings.option.audio.dbfs.description":"Enter the peak Z-weighted dB SPL when Cider is at 0 dBFS.",
|
||||||
"settings.option.visual.uiscale": "UI界面大小",
|
"settings.option.visual.uiscale": "UI界面大小",
|
||||||
"settings.header.visual": "外观",
|
"settings.header.visual": "外观",
|
||||||
"settings.header.visual.description": "调整 Cider 的外观",
|
"settings.header.visual.description": "调整 Cider 的外观",
|
||||||
|
"settings.option.visual.windowStyle":"窗口风格",
|
||||||
"settings.option.visual.windowBackgroundStyle": "窗口背景样式",
|
"settings.option.visual.windowBackgroundStyle": "窗口背景样式",
|
||||||
"settings.header.visual.windowBackgroundStyle.none": "无",
|
"settings.header.visual.windowBackgroundStyle.none": "无",
|
||||||
"settings.header.visual.windowBackgroundStyle.artwork": "专辑插图",
|
"settings.header.visual.windowBackgroundStyle.artwork": "专辑插图",
|
||||||
|
@ -320,8 +451,18 @@
|
||||||
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
|
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
|
||||||
"settings.header.visual.theme": "主题",
|
"settings.header.visual.theme": "主题",
|
||||||
"settings.option.visual.theme.github.download": "从 GitHub 链接安装",
|
"settings.option.visual.theme.github.download": "从 GitHub 链接安装",
|
||||||
|
"settings.option.visual.theme.github.openfolder":"开启主题文件夹",
|
||||||
"settings.option.visual.theme.github.explore": "浏览 GitHub 上的主题",
|
"settings.option.visual.theme.github.explore": "浏览 GitHub 上的主题",
|
||||||
|
"settings.header.visual.theme.github.page":"GitHub 上的主题",
|
||||||
|
"settings.option.visual.theme.github.install.confirm":"你确定要安装 {{ repo }}",
|
||||||
"settings.prompt.visual.theme.github.URL": "输入您要安装的窗口主题链接",
|
"settings.prompt.visual.theme.github.URL": "输入您要安装的窗口主题链接",
|
||||||
|
"settings.prompt.visual.theme.uninstallTheme":"你确定要删除 {{ theme }}",
|
||||||
|
"settings.option.visual.theme.checkForUpdates":"检查更新",
|
||||||
|
"settings.option.visual.theme.manageStyles":"管理风格",
|
||||||
|
"settings.option.visual.theme.uninstall":"卸载",
|
||||||
|
"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.notyf.visual.theme.install.error": "主题安装失败",
|
||||||
"settings.header.visual.plugin": "插件",
|
"settings.header.visual.plugin": "插件",
|
||||||
|
@ -358,8 +499,11 @@
|
||||||
"settings.option.connectivity.discordRPC.clientName": "应用程序名称",
|
"settings.option.connectivity.discordRPC.clientName": "应用程序名称",
|
||||||
"settings.option.connectivity.discordRPC.clearOnPause": "暂停时清除 Discord 动态",
|
"settings.option.connectivity.discordRPC.clearOnPause": "暂停时清除 Discord 动态",
|
||||||
"settings.option.connectivity.discordRPC.hideButtons": "隐藏 Discord 动态上的按钮",
|
"settings.option.connectivity.discordRPC.hideButtons": "隐藏 Discord 动态上的按钮",
|
||||||
|
"settings.option.connectivity.discordRPC.hideTimestamp":"隐藏 Discord 动态上的时间戳",
|
||||||
"settings.option.connectivity.discordRPC.detailsFormat": "详细信息格式",
|
"settings.option.connectivity.discordRPC.detailsFormat": "详细信息格式",
|
||||||
"settings.option.connectivity.discordRPC.stateFormat": "动态格式",
|
"settings.option.connectivity.discordRPC.stateFormat": "动态格式",
|
||||||
|
"settings.option.connectivity.discordRPC.reload":"重新加载 DiscordRPC",
|
||||||
|
"settings.option.connectivity.discordRPC.reconnectedToUser":"DiscordRPC 重新连接至用户: {{user}} ({{userid}})",
|
||||||
"settings.option.connectivity.lastfmScrobble": "Last.FM 音乐记录",
|
"settings.option.connectivity.lastfmScrobble": "Last.FM 音乐记录",
|
||||||
"settings.option.connectivity.lastfmScrobble.delay": "Last.FM 歌曲追踪延迟 (%)",
|
"settings.option.connectivity.lastfmScrobble.delay": "Last.FM 歌曲追踪延迟 (%)",
|
||||||
"settings.option.connectivity.lastfmScrobble.nowPlaying": "打开 Last.FM 正在聆听",
|
"settings.option.connectivity.lastfmScrobble.nowPlaying": "打开 Last.FM 正在聆听",
|
||||||
|
@ -382,6 +526,9 @@
|
||||||
"settings.option.visual.transparent": "透明窗口框架",
|
"settings.option.visual.transparent": "透明窗口框架",
|
||||||
"settings.option.visual.transparent.description": "需主题有支持透明框架,且须重新启动才会生效。",
|
"settings.option.visual.transparent.description": "需主题有支持透明框架,且须重新启动才会生效。",
|
||||||
"settings.header.advanced": "高级",
|
"settings.header.advanced": "高级",
|
||||||
|
"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.spatialProperties": "空间属性",
|
||||||
"spatial.width": "宽度",
|
"spatial.width": "宽度",
|
||||||
|
@ -404,5 +551,54 @@
|
||||||
"settings.header.unfinished": "未完成",
|
"settings.header.unfinished": "未完成",
|
||||||
"remote.web.title": "Cider 远程控制",
|
"remote.web.title": "Cider 远程控制",
|
||||||
"remote.web.description": "扫描以下的二维码以控制 Cider",
|
"remote.web.description": "扫描以下的二维码以控制 Cider",
|
||||||
"about.thanks": "郑重感谢 Cider Collective 以及为这个项目提供支持的贡献者。"
|
"about.thanks": "郑重感谢 Cider Collective 以及为这个项目提供支持的贡献者。",
|
||||||
|
"share.platform.twitter.tweet":"在 Apple Music 上聆听 {{song}}。 \n\n{{url}}\n\n#AppleMusic #Cider",
|
||||||
|
"share.platform.twitter":"Twitter",
|
||||||
|
"share.platform.facebook":"Facebook",
|
||||||
|
"share.platform.reddit":"Reddit",
|
||||||
|
"share.platform.telegram":"Telegram",
|
||||||
|
"share.platform.whatsapp":"WhatsApp",
|
||||||
|
"share.platform.messenger":"Messenger",
|
||||||
|
"share.platform.email":"电子邮件",
|
||||||
|
"share.platform.songLink":"复制 song.link 链接",
|
||||||
|
"share.platform.clipboard":"复制到剪贴板",
|
||||||
|
"oobe.yes":"好的",
|
||||||
|
"oobe.no":"不",
|
||||||
|
"oobe.next":"下一步",
|
||||||
|
"oobe.previous":"上一步",
|
||||||
|
"oobe.done":"完成",
|
||||||
|
"oobe.amupsell.title":"在我们开始之前",
|
||||||
|
"oobe.amupsell.text":"使用 Cider 需要付费的 Apple Music 订阅。\nCider 不能在 Apple Music Voice 计划或某些促销试用订阅状态下使用。 如果您已经订阅 Apple Music,请点击下一步继续。",
|
||||||
|
"oobe.amupsell.subscribeBtn":"订阅 Apple Music",
|
||||||
|
"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内使用, 点击<a href='{{ amWebUrl }}'>{{ amWebUrl }}</a>, 登陆后尝试播放音乐。如果能够播放,您就可以使用 Cider 了!否则请考虑订阅 Apple Music 服务: <a href='{{ subscribeUrl }}'>{{ subscribeUrl }}</a>。",
|
||||||
|
"oobe.intro.title":"欢迎使用 Cider",
|
||||||
|
"oobe.intro.subtitle":"",
|
||||||
|
"oobe.intro.text":"为了按您喜欢的方式使用 Cider ,请先完成一些设置。您之后可以随时改变这些设置。",
|
||||||
|
"oobe.general.title":"通用设置",
|
||||||
|
"oobe.general.subtitle":"",
|
||||||
|
"oobe.general.text":"",
|
||||||
|
"oobe.audio.title":"音频设置",
|
||||||
|
"oobe.audio.subtitle":"",
|
||||||
|
"oobe.audio.text":"Cider 能够自定义调整和设置的音频属性,提供丰富的高品质音频体验,包括Cider Adrenaline Processor,气氛实现器和空间音频。要启用这些功能,必须启用 \"高级音频功能\"。",
|
||||||
|
"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":"基于 MacOS Monterey 的 Apple Music bata 主题。",
|
||||||
|
"oobe.visual.suggestingThemes.community3":"Dracula",
|
||||||
|
"oobe.visual.suggestingThemes.community3.text":"著名的德古拉吸血鬼主题。",
|
||||||
|
"oobe.amsignin.title": ""
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"i18n.languageName": "繁體中文(香港)",
|
"i18n.languageName": "繁體中文(香港)",
|
||||||
"i18n.languageNameEnglish": "Trad. Chinese (Hong Kong)",
|
"i18n.languageNameEnglish": "Trad. Chinese (Hong Kong)",
|
||||||
"i18n.category": "main",
|
"i18n.category": "main",
|
||||||
"i18n.authors": "@kyw504100 @maikirakiwi @BillKerman @jay900604",
|
"i18n.authors": "@kyw504100 @notmaikiwi @BillKerman @jay900604",
|
||||||
"app.name": "Cider",
|
"app.name": "Cider",
|
||||||
"date.format": "${y} 年 ${m} 月 ${d} 日",
|
"date.format": "${y} 年 ${m} 月 ${d} 日",
|
||||||
"dialog.cancel": "取消",
|
"dialog.cancel": "取消",
|
||||||
|
@ -387,7 +387,7 @@
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_PLUS": "Genmaicha Tapioca Milk Tea",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_PLUS": "Genmaicha Tapioca Milk Tea",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_STANDARD": "Hōjicha Cheese Foam Tea",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_STANDARD": "Hōjicha Cheese Foam Tea",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z3600": "Hokkaido Milk Tea",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z3600": "Hokkaido Milk Tea",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500": "Moonlight Softcake",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500A": "Moonlight Softcake",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider 數碼音訊增強處理™️",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider 數碼音訊增強處理™️",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "透過人類的聽力心理學模型和 AAC 編碼特色的即時算法,強化 AAC 音訊的感知音訊質素。",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "透過人類的聽力心理學模型和 AAC 編碼特色的即時算法,強化 AAC 音訊的感知音訊質素。",
|
||||||
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "音訊增強處理不相容於空間音訊,請先停用空間音訊。",
|
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "音訊增強處理不相容於空間音訊,請先停用空間音訊。",
|
||||||
|
@ -399,7 +399,7 @@
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "自動將歌曲播放音量調整至相同水平,建立更統一的聆聽體驗。",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "自動將歌曲播放音量調整至相同水平,建立更統一的聆聽體驗。",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "由音訊實驗室管理",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "由音訊實驗室管理",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider 空間音訊效果",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider 空間音訊效果",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "預先調整空間音訊效果,關閉空間音訊可自訂設定。但必須先開啟空間音訊才可以做設定。",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "預先調整空間音訊效果,關閉空間音訊可自訂設定。",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider 空間音訊配置檔案",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider 空間音訊配置檔案",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "變更空間音訊的配置檔案,需要重新啟動應用程式。",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "變更空間音訊的配置檔案,需要重新啟動應用程式。",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.minimal": "Minimal",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.minimal": "Minimal",
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
"i18n.languageName": "繁體中文(臺灣)",
|
"i18n.languageName": "繁體中文(臺灣)",
|
||||||
"i18n.languageNameEnglish": "Trad. Chinese (Taiwan)",
|
"i18n.languageNameEnglish": "Trad. Chinese (Taiwan)",
|
||||||
"i18n.category": "main",
|
"i18n.category": "main",
|
||||||
"i18n.authors": "@maikirakiwi @jay900604 @kyw504100 @BillKerman",
|
"i18n.authors": "@notmaikiwi @jay900604 @kyw504100 @BillKerman",
|
||||||
"app.name": "Cider",
|
"app.name": "Cider",
|
||||||
"date.format": "${y}年${m}月${d}日",
|
"date.format": "${y}年${m}月${d}日",
|
||||||
"dialog.cancel": "取消",
|
"dialog.cancel": "取消",
|
||||||
|
@ -37,6 +37,7 @@
|
||||||
"term.podcasts": "Podcasts",
|
"term.podcasts": "Podcasts",
|
||||||
"term.playlists": "播放列表",
|
"term.playlists": "播放列表",
|
||||||
"term.playlist": "播放列表",
|
"term.playlist": "播放列表",
|
||||||
|
"term.charts": "圖表",
|
||||||
"term.newPlaylist": "新的播放列表",
|
"term.newPlaylist": "新的播放列表",
|
||||||
"term.newPlaylistFolder": "新的播放列表檔案夾",
|
"term.newPlaylistFolder": "新的播放列表檔案夾",
|
||||||
"term.createNewPlaylist": "新增播放列表",
|
"term.createNewPlaylist": "新增播放列表",
|
||||||
|
@ -53,8 +54,9 @@
|
||||||
"term.repeat": "重複播放",
|
"term.repeat": "重複播放",
|
||||||
"term.enableShuffle": "開啟隨機播放",
|
"term.enableShuffle": "開啟隨機播放",
|
||||||
"term.disableShuffle": "取消隨機播放",
|
"term.disableShuffle": "取消隨機播放",
|
||||||
"term.repeat": "開啟單曲循環",
|
"term.disableRepeat": "取消重複",
|
||||||
"term.enableRepeatOne": "取消單曲循環",
|
"term.enableRepeatOne": "開啟單曲循環",
|
||||||
|
"term.disableRepeatOne": "取消單曲循環",
|
||||||
"term.volume": "音量",
|
"term.volume": "音量",
|
||||||
"term.mute": "靜音",
|
"term.mute": "靜音",
|
||||||
"term.unmute": "取消靜音",
|
"term.unmute": "取消靜音",
|
||||||
|
@ -110,11 +112,11 @@
|
||||||
"term.clearAll": "清空",
|
"term.clearAll": "清空",
|
||||||
"term.recentStations": "最近收聽的廣播",
|
"term.recentStations": "最近收聽的廣播",
|
||||||
"term.language": "語言",
|
"term.language": "語言",
|
||||||
"term.noLyrics": "沒有可用的歌詞",
|
"term.noLyrics": "沒有可用的歌詞/純音樂享受",
|
||||||
"term.copyright": "版權聲明",
|
"term.copyright": "版權聲明",
|
||||||
"term.rightsReserved": "保留所有權利。",
|
"term.rightsReserved": "保留所有權利。",
|
||||||
"term.sponsor": "贊助我們",
|
"term.sponsor": "贊助我們",
|
||||||
"term.socials": "社群平台",
|
"term.socials": "追蹤我們",
|
||||||
"term.ciderTeam": "Cider 團隊",
|
"term.ciderTeam": "Cider 團隊",
|
||||||
"term.developer": "開發者",
|
"term.developer": "開發者",
|
||||||
"term.socialTeam": "公關團隊",
|
"term.socialTeam": "公關團隊",
|
||||||
|
@ -145,10 +147,10 @@
|
||||||
"home.madeForYou": "為您推薦",
|
"home.madeForYou": "為您推薦",
|
||||||
"home.friendsListeningTo": "朋友正在聆聽",
|
"home.friendsListeningTo": "朋友正在聆聽",
|
||||||
"home.followedArtists": "追蹤的藝人",
|
"home.followedArtists": "追蹤的藝人",
|
||||||
"error.appleMusicSubRequired": "需要訂閱 Apple Music 服務以使用 Cider",
|
"error.appleMusicSubRequired": "你需要擁有 Apple Music 訂閱,才能使用 Cider 軟體。",
|
||||||
"error.connectionError": "無法連線到 Apple Music。",
|
"error.connectionError": "無法連線到 Apple Music。",
|
||||||
"error.noResults": "沒有結果",
|
"error.noResults": "沒有結果",
|
||||||
"error.noResults.description": "嘗試新的搜尋項目。",
|
"error.noResults.description": "請嘗試透過搜尋功能尋找內容。",
|
||||||
"podcast.followOnCider": "在 Cider 上追蹤",
|
"podcast.followOnCider": "在 Cider 上追蹤",
|
||||||
"podcast.followedOnCider": "已追蹤",
|
"podcast.followedOnCider": "已追蹤",
|
||||||
"podcast.subscribeOnItunes": "在 iTunes 上訂閱",
|
"podcast.subscribeOnItunes": "在 iTunes 上訂閱",
|
||||||
|
@ -159,6 +161,8 @@
|
||||||
"podcast.website": "Podcast 網站",
|
"podcast.website": "Podcast 網站",
|
||||||
"action.edit": "編輯",
|
"action.edit": "編輯",
|
||||||
"action.done": "完成",
|
"action.done": "完成",
|
||||||
|
"action.hideLibrary": "隱藏側邊欄",
|
||||||
|
"action.showLibrary": "顯示側邊欄",
|
||||||
"action.editTracklist": "編輯歌曲清單",
|
"action.editTracklist": "編輯歌曲清單",
|
||||||
"action.addToLibrary": "加入到資料庫",
|
"action.addToLibrary": "加入到資料庫",
|
||||||
"action.addToLibrary.success": "成功加入資料庫",
|
"action.addToLibrary.success": "成功加入資料庫",
|
||||||
|
@ -261,7 +265,7 @@
|
||||||
"settings.header.audio.quality.standard": "高效率",
|
"settings.header.audio.quality.standard": "高效率",
|
||||||
"settings.option.audio.seamlessTransition": "無間斷播放",
|
"settings.option.audio.seamlessTransition": "無間斷播放",
|
||||||
"settings.option.audio.enableAdvancedFunctionality": "進階音訊功能",
|
"settings.option.audio.enableAdvancedFunctionality": "進階音訊功能",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.description": "開啟 AudioContext 將啟用類似音量平衡和等化器的進階設定。但這並不一定適合每部電腦,可能會發生音樂卡頓。",
|
"settings.option.audio.enableAdvancedFunctionality.description": "開啟進階音訊功能將提供包含音量平衡和等化器等進階設定。但這不一定適合每部電腦,可能會發生音樂卡頓。",
|
||||||
"settings.option.audio.audioLab": "Cider 音訊實驗室",
|
"settings.option.audio.audioLab": "Cider 音訊實驗室",
|
||||||
"settings.option.audio.audioLab.description": "包含由 Cider 開發團隊進行的各種音訊改善功能。",
|
"settings.option.audio.audioLab.description": "包含由 Cider 開發團隊進行的各種音訊改善功能。",
|
||||||
"settings.warn.audioLab.withoutAF": "使用 Cider 音訊實驗室需要開啟進階音訊功能才能使用。",
|
"settings.warn.audioLab.withoutAF": "使用 Cider 音訊實驗室需要開啟進階音訊功能才能使用。",
|
||||||
|
@ -272,7 +276,7 @@
|
||||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "溫和",
|
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "溫和",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "溫暖",
|
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "溫暖",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer": "Cider 臨場音效™️",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer": "Cider 臨場音效™️",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer.description": "以業界頂尖的算法,實現擁有臨場感的音樂體驗。",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizer.description": "以業界頂尖的算法,實現擁有臨場感的音樂聆聽體驗。",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode": "Cider 臨場音效™️模式",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode": "Cider 臨場音效™️模式",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.description": "更改臨場音效感的模式。",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.description": "更改臨場音效感的模式。",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_STANDARD": "自然(標準)",
|
"settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_STANDARD": "自然(標準)",
|
||||||
|
@ -285,9 +289,9 @@
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "增強",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "增強",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "音量平衡",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "音量平衡",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "自動將歌曲播放音量調整至相同位準,享受更舒適的聆聽體驗。",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "自動將歌曲播放音量調整至相同位準,享受更舒適的聆聽體驗。",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "此功能由音訊實驗室管理",
|
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "此功能現在由 Cider 音訊實驗室管理。",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider 空間音訊效果",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider 空間音訊效果",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "預先調整空間音訊效果,關閉空間音訊可自訂設定。但必須先開啟空間音訊才可以做設定。",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "預先調整空間音訊效果,關閉空間音訊可自訂設定。",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider 空間音訊配置檔案",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider 空間音訊配置檔案",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "變更空間音訊的配置檔案,需要重新啟動應用程式。",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "變更空間音訊的配置檔案,需要重新啟動應用程式。",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "標準",
|
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "標準",
|
||||||
|
@ -368,11 +372,13 @@
|
||||||
"settings.option.connectivity.discordRPC.hideTimestamp": "隱藏 Discord 動態的時間戳",
|
"settings.option.connectivity.discordRPC.hideTimestamp": "隱藏 Discord 動態的時間戳",
|
||||||
"settings.option.connectivity.discordRPC.detailsFormat": "詳細資訊格式",
|
"settings.option.connectivity.discordRPC.detailsFormat": "詳細資訊格式",
|
||||||
"settings.option.connectivity.discordRPC.stateFormat": "狀態格式",
|
"settings.option.connectivity.discordRPC.stateFormat": "狀態格式",
|
||||||
|
"settings.option.connectivity.discordRPC.reload": "重新載入 Discord 動態",
|
||||||
|
"settings.option.connectivity.discordRPC.reconnectedToUser": "Discord 動態重新連線到使用者: {{user}} ({{userid}})",
|
||||||
"settings.option.connectivity.lastfmScrobble": "Last.FM 音樂記錄",
|
"settings.option.connectivity.lastfmScrobble": "Last.FM 音樂記錄",
|
||||||
"settings.option.connectivity.lastfmScrobble.delay": "Last.FM 歌曲追蹤延遲 (%)",
|
"settings.option.connectivity.lastfmScrobble.delay": "Last.FM 歌曲追蹤延遲 (%)",
|
||||||
"settings.option.connectivity.lastfmScrobble.nowPlaying": "開啟 Last.FM 正在聆聽",
|
"settings.option.connectivity.lastfmScrobble.nowPlaying": "開啟 Last.FM 正在聆聽",
|
||||||
"settings.option.connectivity.lastfmScrobble.removeFeatured": "從歌名中移除客串藝人 (Last.FM)",
|
"settings.option.connectivity.lastfmScrobble.removeFeatured": "從 Last.FM 的歌名中移除客串藝人",
|
||||||
"settings.option.connectivity.lastfmScrobble.filterLoop": "不記錄單曲循環 (Last.FM)",
|
"settings.option.connectivity.lastfmScrobble.filterLoop": "讓 Last.FM 不記錄單曲循環",
|
||||||
"settings.header.debug": "除錯",
|
"settings.header.debug": "除錯",
|
||||||
"settings.option.debug.copy_log": "複製執行紀錄檔至剪貼簿",
|
"settings.option.debug.copy_log": "複製執行紀錄檔至剪貼簿",
|
||||||
"settings.option.debug.openAppData": "打開 Cider 資料夾",
|
"settings.option.debug.openAppData": "打開 Cider 資料夾",
|
||||||
|
@ -380,7 +386,7 @@
|
||||||
"settings.header.experimental.description": "調整 Cider 的實驗性功能",
|
"settings.header.experimental.description": "調整 Cider 的實驗性功能",
|
||||||
"settings.option.experimental.reinstallwidevine": "重新安裝 WidevineCDM",
|
"settings.option.experimental.reinstallwidevine": "重新安裝 WidevineCDM",
|
||||||
"settings.option.experimental.reinstallwidevine.confirm": "你確定要重新安裝 WidevineCDM 嗎?",
|
"settings.option.experimental.reinstallwidevine.confirm": "你確定要重新安裝 WidevineCDM 嗎?",
|
||||||
"settings.option.experimental.unknownPlugin": "未知來源",
|
"settings.option.experimental.unknownPlugin": "其他來源",
|
||||||
"settings.option.experimental.unknownPlugin.description": "允許從 Cider 來源以外的 repo 安裝套件",
|
"settings.option.experimental.unknownPlugin.description": "允許從 Cider 來源以外的 repo 安裝套件",
|
||||||
"settings.option.experimental.compactUI": "使用緊密的介面設計",
|
"settings.option.experimental.compactUI": "使用緊密的介面設計",
|
||||||
"settings.option.window.close_button_hide": "關閉按鈕將 Cider 隱藏至系統列",
|
"settings.option.window.close_button_hide": "關閉按鈕將 Cider 隱藏至系統列",
|
||||||
|
@ -392,7 +398,7 @@
|
||||||
"settings.header.advanced": "進階",
|
"settings.header.advanced": "進階",
|
||||||
"settings.header.connect": "同步",
|
"settings.header.connect": "同步",
|
||||||
"settings.option.connect.link_account": "開啟與 Cider Connect 同步",
|
"settings.option.connect.link_account": "開啟與 Cider Connect 同步",
|
||||||
"settings.option.connect.link_account.description": "將您的 Discord 帳戶與 Cider Connect 連接後,你可以儲存使用者資料,包括設定、等化器,並最終在完成後儲存更多資料。(正在進行中)",
|
"settings.option.connect.link_account.description": "將你的 Discord 帳戶與 Cider 連線後,你將可以儲存使用者資料,且包括設定、等化器以及更多資料。(該功能開發中...)",
|
||||||
"spatial.notTurnedOn": "空間音訊目前是關閉狀態,請先開啟再使用。",
|
"spatial.notTurnedOn": "空間音訊目前是關閉狀態,請先開啟再使用。",
|
||||||
"spatial.spatialProperties": "空間音訊屬性設定",
|
"spatial.spatialProperties": "空間音訊屬性設定",
|
||||||
"spatial.width": "寬度",
|
"spatial.width": "寬度",
|
||||||
|
|
|
@ -55,6 +55,9 @@ export class AppEvents {
|
||||||
app.exit()
|
app.exit()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Try limiting JS memory to 350MB.
|
||||||
|
app.commandLine.appendSwitch('js-flags', '--max-old-space-size=350');
|
||||||
|
|
||||||
// Expose GC
|
// Expose GC
|
||||||
app.commandLine.appendSwitch('js-flags', '--expose_gc')
|
app.commandLine.appendSwitch('js-flags', '--expose_gc')
|
||||||
|
|
||||||
|
@ -314,6 +317,8 @@ export class AppEvents {
|
||||||
{type: 'separator'},
|
{type: 'separator'},
|
||||||
|
|
||||||
/* For now only idea i dont know if posible to implement
|
/* For now only idea i dont know if posible to implement
|
||||||
|
|
||||||
|
this could be implemented in a plugin if you would like track info, it would be impractical to put listeners in this file. -Core
|
||||||
{
|
{
|
||||||
label: this.i18n['action.tray.listento'],
|
label: this.i18n['action.tray.listento'],
|
||||||
enabled: false,
|
enabled: false,
|
||||||
|
@ -329,7 +334,7 @@ export class AppEvents {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
visible: (visible === false),
|
visible: !visible,
|
||||||
label: this.i18n['action.tray.playpause'],
|
label: this.i18n['action.tray.playpause'],
|
||||||
click: () => {
|
click: () => {
|
||||||
utils.getWindow().webContents.executeJavaScript('MusicKitInterop.playPause()')
|
utils.getWindow().webContents.executeJavaScript('MusicKitInterop.playPause()')
|
||||||
|
@ -337,7 +342,7 @@ export class AppEvents {
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
visible: (visible === false),
|
visible: !visible,
|
||||||
label: this.i18n['action.tray.next'],
|
label: this.i18n['action.tray.next'],
|
||||||
click: () => {
|
click: () => {
|
||||||
utils.getWindow().webContents.executeJavaScript(`MusicKitInterop.next()`)
|
utils.getWindow().webContents.executeJavaScript(`MusicKitInterop.next()`)
|
||||||
|
@ -345,14 +350,14 @@ export class AppEvents {
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
visible: (visible === false),
|
visible: !visible,
|
||||||
label: this.i18n['action.tray.previous'],
|
label: this.i18n['action.tray.previous'],
|
||||||
click: () => {
|
click: () => {
|
||||||
utils.getWindow().webContents.executeJavaScript(`MusicKitInterop.previous()`)
|
utils.getWindow().webContents.executeJavaScript(`MusicKitInterop.previous()`)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
{type: 'separator'},
|
{type: 'separator', visible: !visible},
|
||||||
|
|
||||||
{
|
{
|
||||||
label: (visible ? this.i18n['action.tray.minimize'] : `${this.i18n['action.tray.show']}`),
|
label: (visible ? this.i18n['action.tray.minimize'] : `${this.i18n['action.tray.show']}`),
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import {join} from "path";
|
import {join} from "path";
|
||||||
import {app, BrowserWindow as bw, ipcMain, ShareMenu, shell} from "electron";
|
import {app, BrowserWindow as bw, ipcMain, ShareMenu, shell, screen} from "electron";
|
||||||
import * as windowStateKeeper from "electron-window-state";
|
import * as windowStateKeeper from "electron-window-state";
|
||||||
import * as express from "express";
|
import * as express from "express";
|
||||||
import * as getPort from "get-port";
|
import * as getPort from "get-port";
|
||||||
|
@ -14,7 +14,7 @@ import {
|
||||||
statSync,
|
statSync,
|
||||||
unlinkSync,
|
unlinkSync,
|
||||||
rmdirSync,
|
rmdirSync,
|
||||||
lstatSync
|
lstatSync,
|
||||||
} from "fs";
|
} from "fs";
|
||||||
import {Stream} from "stream";
|
import {Stream} from "stream";
|
||||||
import {networkInterfaces} from "os";
|
import {networkInterfaces} from "os";
|
||||||
|
@ -27,6 +27,9 @@ import {watch} from "chokidar";
|
||||||
import * as os from "os";
|
import * as os from "os";
|
||||||
import wallpaper from "wallpaper";
|
import wallpaper from "wallpaper";
|
||||||
import * as AdmZip from "adm-zip";
|
import * as AdmZip from "adm-zip";
|
||||||
|
import * as path from 'path';
|
||||||
|
const { readdir } = require('fs').promises;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file Creates the BrowserWindow
|
* @file Creates the BrowserWindow
|
||||||
|
@ -41,6 +44,7 @@ export class BrowserWindow {
|
||||||
private audioStream: any = new Stream.PassThrough();
|
private audioStream: any = new Stream.PassThrough();
|
||||||
private headerSent: any = false;
|
private headerSent: any = false;
|
||||||
private chromecastIP: any = [];
|
private chromecastIP: any = [];
|
||||||
|
private localSongs: any = [];
|
||||||
private clientPort: number = 0;
|
private clientPort: number = 0;
|
||||||
private remotePort: number = 6942;
|
private remotePort: number = 6942;
|
||||||
private EnvironmentVariables: object = {
|
private EnvironmentVariables: object = {
|
||||||
|
@ -49,14 +53,17 @@ export class BrowserWindow {
|
||||||
dev: app.isPackaged,
|
dev: app.isPackaged,
|
||||||
osRelease: os.release(),
|
osRelease: os.release(),
|
||||||
updatable: !process.windowsStore || !process.mas,
|
updatable: !process.windowsStore || !process.mas,
|
||||||
|
useV3: utils.getStoreValue('advanced.experiments').includes("ampv3"),
|
||||||
components: [
|
components: [
|
||||||
"pages/podcasts",
|
"pages/podcasts",
|
||||||
"pages/apple-account-settings",
|
"pages/apple-account-settings",
|
||||||
"pages/library-songs",
|
"pages/library-songs",
|
||||||
"pages/library-albums",
|
"pages/library-albums",
|
||||||
"pages/library-artists",
|
"pages/library-artists",
|
||||||
|
"pages/library-recentlyadded",
|
||||||
"pages/browse",
|
"pages/browse",
|
||||||
"pages/groupings",
|
"pages/groupings",
|
||||||
|
"pages/charts",
|
||||||
"pages/settings",
|
"pages/settings",
|
||||||
"pages/installed-themes",
|
"pages/installed-themes",
|
||||||
"pages/listen_now",
|
"pages/listen_now",
|
||||||
|
@ -81,11 +88,11 @@ export class BrowserWindow {
|
||||||
"pages/zoo",
|
"pages/zoo",
|
||||||
"pages/plugin-renderer",
|
"pages/plugin-renderer",
|
||||||
"pages/keybinds",
|
"pages/keybinds",
|
||||||
|
"pages/oobe",
|
||||||
"components/mediaitem-artwork",
|
"components/mediaitem-artwork",
|
||||||
"components/artwork-material",
|
"components/artwork-material",
|
||||||
"components/menu-panel",
|
"components/menu-panel",
|
||||||
"components/sidebar-playlist",
|
"components/sidebar-playlist",
|
||||||
"components/spatial-properties",
|
|
||||||
"components/audio-settings",
|
"components/audio-settings",
|
||||||
"components/plugin-menu",
|
"components/plugin-menu",
|
||||||
"components/audio-controls",
|
"components/audio-controls",
|
||||||
|
@ -118,6 +125,11 @@ export class BrowserWindow {
|
||||||
"components/inline-collection-list",
|
"components/inline-collection-list",
|
||||||
],
|
],
|
||||||
appRoutes: [
|
appRoutes: [
|
||||||
|
{
|
||||||
|
page: "library-recentlyadded",
|
||||||
|
component: `<cider-recentlyadded></cider-recentlyadded>`,
|
||||||
|
condition: "page == 'library-recentlyadded'"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
page: "plugin-renderer",
|
page: "plugin-renderer",
|
||||||
component: `<plugin-renderer></plugin-renderer>`,
|
component: `<plugin-renderer></plugin-renderer>`,
|
||||||
|
@ -194,6 +206,11 @@ export class BrowserWindow {
|
||||||
component: `<cider-groupings :data="browsepage"></cider-groupings>`,
|
component: `<cider-groupings :data="browsepage"></cider-groupings>`,
|
||||||
condition: `page == 'groupings'`,
|
condition: `page == 'groupings'`,
|
||||||
onEnter: ``
|
onEnter: ``
|
||||||
|
},{
|
||||||
|
page: "charts",
|
||||||
|
component: `<cider-charts :data="browsepage"></cider-charts>`,
|
||||||
|
condition: `page == 'charts'`,
|
||||||
|
onEnter: ``
|
||||||
}, {
|
}, {
|
||||||
page: "listen_now",
|
page: "listen_now",
|
||||||
component: `<cider-listen-now :data="listennow"></cider-listen-now>`,
|
component: `<cider-listen-now :data="listennow"></cider-listen-now>`,
|
||||||
|
@ -530,6 +547,14 @@ export class BrowserWindow {
|
||||||
res.send(`// Theme not found - ${userThemePath}`);
|
res.send(`// Theme not found - ${userThemePath}`);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
app.get("/ciderlocal/:songs", (req, res) => {
|
||||||
|
const audio = atob(req.params.songs.replace(/_/g, '/').replace(/-/g, '+'));
|
||||||
|
console.log('auss', audio)
|
||||||
|
let data = {data:
|
||||||
|
this.localSongs.filter((f: any) => audio.split(',').includes(f.id))};
|
||||||
|
res.send(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
app.get("/themes/:theme/*", (req: { params: { theme: string, 0: string } }, res) => {
|
app.get("/themes/:theme/*", (req: { params: { theme: string, 0: string } }, res) => {
|
||||||
const theme = req.params.theme;
|
const theme = req.params.theme;
|
||||||
|
@ -634,7 +659,7 @@ export class BrowserWindow {
|
||||||
// intercept "https://js-cdn.music.apple.com/hls.js/2.141.1/hls.js/hls.js" and redirect to local file "./apple-hls.js" instead
|
// intercept "https://js-cdn.music.apple.com/hls.js/2.141.1/hls.js/hls.js" and redirect to local file "./apple-hls.js" instead
|
||||||
BrowserWindow.win.webContents.session.webRequest.onBeforeRequest(
|
BrowserWindow.win.webContents.session.webRequest.onBeforeRequest(
|
||||||
{
|
{
|
||||||
urls: ["https://*/*.js"],
|
urls: ["https://*/*"],
|
||||||
},
|
},
|
||||||
(
|
(
|
||||||
details: { url: string | string[] },
|
details: { url: string | string[] },
|
||||||
|
@ -644,6 +669,12 @@ export class BrowserWindow {
|
||||||
callback({
|
callback({
|
||||||
redirectURL: `http://localhost:${this.clientPort}/apple-hls.js`,
|
redirectURL: `http://localhost:${this.clientPort}/apple-hls.js`,
|
||||||
});
|
});
|
||||||
|
} else if (details.url.includes("ciderlocal")) {
|
||||||
|
let text = details.url.toString().includes('ids=') ? decodeURIComponent(details.url.toString()).split("?ids=")[1] : decodeURIComponent(details.url.toString().substring(details.url.toString().lastIndexOf('/') + 1));
|
||||||
|
console.log('localurl',text)
|
||||||
|
callback({
|
||||||
|
redirectURL: `http://localhost:${this.clientPort}/ciderlocal/${Buffer.from(text).toString('base64url')}`,
|
||||||
|
});
|
||||||
}else {
|
}else {
|
||||||
callback({
|
callback({
|
||||||
cancel: false,
|
cancel: false,
|
||||||
|
@ -738,15 +769,28 @@ export class BrowserWindow {
|
||||||
return json;
|
return json;
|
||||||
})
|
})
|
||||||
|
|
||||||
ipcMain.on("get-wallpaper", async (event) => {
|
ipcMain.on("get-wallpaper", async (event, args) => {
|
||||||
const wpPath: string = await wallpaper.get();
|
const wpPath: string = await wallpaper.get();
|
||||||
// get the wallpaper and encode it to base64 then return
|
const Jimp = require("jimp")
|
||||||
const wpBase64: string = await readFileSync(wpPath, 'base64')
|
const img = await Jimp.read(wpPath)
|
||||||
// add the data:image properties
|
const blurAmount = args.blurAmount ?? 256
|
||||||
const wpData: string = `data:image/png;base64,${wpBase64}`
|
if(blurAmount) {
|
||||||
|
img.blur(blurAmount)
|
||||||
|
}
|
||||||
|
const screens = await screen.getAllDisplays()
|
||||||
|
const width = screens.reduce((a, b) => a + b.size.width, 0)
|
||||||
|
const height = screens.reduce((a, b) => a + b.size.height, 0)
|
||||||
|
|
||||||
|
img.cover(width, height, Jimp.HORIZONTAL_ALIGN_LEFT | Jimp.VERTICAL_ALIGN_MIDDLE)
|
||||||
|
const result = await img.getBase64Async(Jimp.MIME_PNG)
|
||||||
|
|
||||||
event.returnValue = {
|
event.returnValue = {
|
||||||
path: wpPath,
|
path: wpPath,
|
||||||
data: wpData
|
data: result,
|
||||||
|
res: {
|
||||||
|
width: width,
|
||||||
|
height: height
|
||||||
|
}
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -806,6 +850,7 @@ export class BrowserWindow {
|
||||||
})
|
})
|
||||||
|
|
||||||
ipcMain.handle("get-github-plugin", async (event, url) => {
|
ipcMain.handle("get-github-plugin", async (event, url) => {
|
||||||
|
await this.StopWatcher()
|
||||||
const returnVal = {
|
const returnVal = {
|
||||||
success: true,
|
success: true,
|
||||||
theme: null,
|
theme: null,
|
||||||
|
@ -850,9 +895,11 @@ export class BrowserWindow {
|
||||||
returnVal.success = false;
|
returnVal.success = false;
|
||||||
}
|
}
|
||||||
BrowserWindow.win.webContents.send("plugin-installed", returnVal);
|
BrowserWindow.win.webContents.send("plugin-installed", returnVal);
|
||||||
|
this.StartWatcher(utils.getPath('themes'));
|
||||||
});
|
});
|
||||||
|
|
||||||
ipcMain.handle("get-github-theme", async (event, url) => {
|
ipcMain.handle("get-github-theme", async (event, url) => {
|
||||||
|
await this.StopWatcher()
|
||||||
const returnVal = {
|
const returnVal = {
|
||||||
success: true,
|
success: true,
|
||||||
theme: null,
|
theme: null,
|
||||||
|
@ -897,6 +944,8 @@ export class BrowserWindow {
|
||||||
returnVal.success = false;
|
returnVal.success = false;
|
||||||
}
|
}
|
||||||
BrowserWindow.win.webContents.send("theme-installed", returnVal);
|
BrowserWindow.win.webContents.send("theme-installed", returnVal);
|
||||||
|
this.StartWatcher(utils.getPath('themes'));
|
||||||
|
BrowserWindow.win.webContents.send("theme-update", "")
|
||||||
});
|
});
|
||||||
|
|
||||||
ipcMain.on("get-themes", (event, _key) => {
|
ipcMain.on("get-themes", (event, _key) => {
|
||||||
|
@ -1132,6 +1181,104 @@ export class BrowserWindow {
|
||||||
`)
|
`)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
ipcMain.on("scanLibrary", async (event, folders) => {
|
||||||
|
async function getFiles(dir : any) {
|
||||||
|
const dirents = await readdir(dir, { withFileTypes: true });
|
||||||
|
const files = await Promise.all(dirents.map((dirent: any) => {
|
||||||
|
const res = path.resolve(dir, dirent.name);
|
||||||
|
return dirent.isDirectory() ? getFiles(res) : res;
|
||||||
|
}));
|
||||||
|
return Array.prototype.concat(...files);
|
||||||
|
}
|
||||||
|
if (folders == null || folders.length == null || folders.length == 0) folders = ["D:\\Music"]
|
||||||
|
console.log('folders', folders)
|
||||||
|
let files: any[] = []
|
||||||
|
for (var folder of folders){
|
||||||
|
// get files from the Music folder
|
||||||
|
files = files.concat(await getFiles(folder))
|
||||||
|
}
|
||||||
|
|
||||||
|
//console.log("cider.files", files2);
|
||||||
|
let supporttedformats = ["mp3", "aac", "webm", "flac", "m4a", "ogg", "wav", "opus"]
|
||||||
|
let audiofiles = files.filter(f => supporttedformats.includes(f.substring(f.lastIndexOf('.') + 1)));
|
||||||
|
// console.log("cider.files2", audiofiles, audiofiles.length);
|
||||||
|
let metadatalist = []
|
||||||
|
let numid = 0;
|
||||||
|
for (var audio of audiofiles) {
|
||||||
|
try{
|
||||||
|
const metadata = await mm.parseFile(audio);
|
||||||
|
if (metadata != null){
|
||||||
|
let form = {
|
||||||
|
"id": "ciderlocal" + numid,
|
||||||
|
"type": "podcast-episodes",
|
||||||
|
"href": audio,
|
||||||
|
"attributes": {
|
||||||
|
"artwork": {
|
||||||
|
"width": 3000,
|
||||||
|
"height": 3000,
|
||||||
|
"url": metadata.common.picture != undefined ? "data:image/png;base64,"+metadata.common.picture[0].data.toString('base64')+"" : "",
|
||||||
|
},
|
||||||
|
"topics": [],
|
||||||
|
"url": "",
|
||||||
|
"subscribable": true,
|
||||||
|
"mediaKind": "audio",
|
||||||
|
"genreNames": [
|
||||||
|
""
|
||||||
|
],
|
||||||
|
// "playParams": {
|
||||||
|
// "id": "ciderlocal" + numid,
|
||||||
|
// "kind": "podcast",
|
||||||
|
// "isLibrary": true,
|
||||||
|
// "reporting": false },
|
||||||
|
"trackNumber": metadata.common.track?.no ?? 0,
|
||||||
|
"discNumber": metadata.common.disk?.no ?? 0,
|
||||||
|
"name": metadata.common.title ?? audio.substring(audio.lastIndexOf('\\') + 1),
|
||||||
|
"albumName": metadata.common.album,
|
||||||
|
"artistName": metadata.common.artist,
|
||||||
|
"copyright": metadata.common.copyright ?? "",
|
||||||
|
"assetUrl": "file:///" +audio,
|
||||||
|
"contentAdvisory": "",
|
||||||
|
"releaseDateTime": "2022-05-13T00:23:00Z",
|
||||||
|
"durationInMilliseconds": Math.floor((metadata.format.duration?? 0) * 1000),
|
||||||
|
|
||||||
|
"offers": [
|
||||||
|
{
|
||||||
|
"kind": "get",
|
||||||
|
"type": "STDQ"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"contentRating": "clean"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
numid += 1;
|
||||||
|
|
||||||
|
// let form = {"id": "/ciderlocal?" + audio,
|
||||||
|
// "type": "library-songs",
|
||||||
|
// "href": "/ciderlocal?" + audio,
|
||||||
|
// "artwork": {
|
||||||
|
// "url": metadata.common.picture != undefined ? "data:image/png;base64,"+metadata.common.picture[0].data.toString('base64')+"" : "",
|
||||||
|
// },
|
||||||
|
// "attributes":
|
||||||
|
// { "durationInMillis": Math.floor((metadata.format.duration?? 0) * 1000),
|
||||||
|
// "hasLyrics": false,
|
||||||
|
// "playParams": { "id": "/ciderlocal?" + audio, "kind": "song", "isLibrary": true, "reporting": false },
|
||||||
|
// "trackNumber": 0,
|
||||||
|
// "discNumber": 0,
|
||||||
|
// "genreNames": [""],
|
||||||
|
// "name": metadata.common.title,
|
||||||
|
// "albumName": metadata.common.album,
|
||||||
|
// "artistName": metadata.common.artist}}
|
||||||
|
metadatalist.push(form)}
|
||||||
|
} catch (e){}
|
||||||
|
}
|
||||||
|
// console.log('metadatalist', metadatalist);
|
||||||
|
this.localSongs = metadatalist;
|
||||||
|
BrowserWindow.win.webContents.send('getUpdatedLocalList', metadatalist);
|
||||||
|
}
|
||||||
|
|
||||||
|
)
|
||||||
|
|
||||||
ipcMain.on('writeWAV', (event, leftpcm, rightpcm, bufferlength) => {
|
ipcMain.on('writeWAV', (event, leftpcm, rightpcm, bufferlength) => {
|
||||||
|
|
||||||
function interleave16(leftChannel: any, rightChannel: any) {
|
function interleave16(leftChannel: any, rightChannel: any) {
|
||||||
|
@ -1489,4 +1636,3 @@ export class BrowserWindow {
|
||||||
console.log('remote broadcasted')
|
console.log('remote broadcasted')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -84,18 +84,22 @@ export class Store {
|
||||||
],
|
],
|
||||||
"webRemote": [
|
"webRemote": [
|
||||||
"CommandOrControl",
|
"CommandOrControl",
|
||||||
|
process.platform == "darwin" ? "Option" : (process.platform == "linux" ? "Shift" : "Alt"),
|
||||||
"W"
|
"W"
|
||||||
],
|
],
|
||||||
"audioSettings": [
|
"audioSettings": [
|
||||||
process.platform == "darwin" ? "Option" : "Shift",
|
"CommandOrControl",
|
||||||
|
process.platform == "darwin" ? "Option" : (process.platform == "linux" ? "Shift": "Alt"),
|
||||||
"A"
|
"A"
|
||||||
],
|
],
|
||||||
"pluginMenu": [
|
"pluginMenu": [
|
||||||
process.platform == "darwin" ? "Option" : "Shift",
|
"CommandOrControl",
|
||||||
|
process.platform == "darwin" ? "Option" : (process.platform == "linux" ? "Shift": "Alt"),
|
||||||
"P"
|
"P"
|
||||||
],
|
],
|
||||||
"castToDevices": [
|
"castToDevices": [
|
||||||
process.platform == "darwin" ? "Option" : "Shift",
|
"CommandOrControl",
|
||||||
|
process.platform == "darwin" ? "Option" : (process.platform == "linux" ? "Shift": "Alt"),
|
||||||
"C"
|
"C"
|
||||||
],
|
],
|
||||||
"settings": [
|
"settings": [
|
||||||
|
@ -202,7 +206,11 @@ export class Store {
|
||||||
},
|
},
|
||||||
"windowControlPosition": 0, // 0 default right
|
"windowControlPosition": 0, // 0 default right
|
||||||
"nativeTitleBar": false,
|
"nativeTitleBar": false,
|
||||||
"uiScale": 1.0
|
"uiScale": 1.0,
|
||||||
|
"windowColor": "#000000",
|
||||||
|
"customAccentColor": false,
|
||||||
|
"accentColor": "#fc3c44",
|
||||||
|
"purplePodcastPlaybackBar": false
|
||||||
},
|
},
|
||||||
"lyrics": {
|
"lyrics": {
|
||||||
"enable_mxm": false,
|
"enable_mxm": false,
|
||||||
|
|
|
@ -2,7 +2,7 @@ import * as fs from "fs";
|
||||||
import * as path from "path";
|
import * as path from "path";
|
||||||
import {Store} from "./store";
|
import {Store} from "./store";
|
||||||
import {BrowserWindow as bw} from "./browserwindow";
|
import {BrowserWindow as bw} from "./browserwindow";
|
||||||
import {app, dialog, ipcMain, Notification, shell } from "electron";
|
import {app, dialog, ipcMain, Notification, shell, BrowserWindow} from "electron";
|
||||||
import fetch from "electron-fetch";
|
import fetch from "electron-fetch";
|
||||||
import {AppImageUpdater, NsisUpdater} from "electron-updater";
|
import {AppImageUpdater, NsisUpdater} from "electron-updater";
|
||||||
import * as log from "electron-log";
|
import * as log from "electron-log";
|
||||||
|
@ -54,8 +54,18 @@ export class utils {
|
||||||
|
|
||||||
if (language !== "en_US" && fs.existsSync(path.join(this.paths.i18nPath, `${language}.json`))) {
|
if (language !== "en_US" && fs.existsSync(path.join(this.paths.i18nPath, `${language}.json`))) {
|
||||||
i18n = Object.assign(i18n, JSON.parse(fs.readFileSync(path.join(this.paths.i18nPath, `${language}.json`), "utf8")));
|
i18n = Object.assign(i18n, JSON.parse(fs.readFileSync(path.join(this.paths.i18nPath, `${language}.json`), "utf8")));
|
||||||
|
} else if (!fs.existsSync(path.join(this.paths.i18nPath, `${language}.json`))) {
|
||||||
|
fetch(`https://raw.githubusercontent.com/ciderapp/Cider/main/src/i18n/${language}.json`)
|
||||||
|
.then(res => res.json())
|
||||||
|
.then(res => {
|
||||||
|
if (res) {
|
||||||
|
i18n = Object.assign(i18n, res);
|
||||||
|
fs.writeFileSync(path.join(this.paths.i18nPath, `${language}.json`), JSON.stringify(res));
|
||||||
|
} else {
|
||||||
|
i18n = Object.assign(i18n, JSON.parse(fs.readFileSync(path.join(this.paths.i18nPath, `en_US.json`), "utf8")));
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key) {
|
if (key) {
|
||||||
return i18n[key]
|
return i18n[key]
|
||||||
} else {
|
} else {
|
||||||
|
@ -114,7 +124,11 @@ export class utils {
|
||||||
* Gets the browser window
|
* Gets the browser window
|
||||||
*/
|
*/
|
||||||
static getWindow(): Electron.BrowserWindow {
|
static getWindow(): Electron.BrowserWindow {
|
||||||
|
if (bw.win) {
|
||||||
return bw.win
|
return bw.win
|
||||||
|
} else {
|
||||||
|
return BrowserWindow.getAllWindows()[0]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static loadPluginFrontend(path: string): void {
|
static loadPluginFrontend(path: string): void {
|
||||||
|
|
67
src/main/base/vcomponents.json
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
[
|
||||||
|
"pages/podcasts",
|
||||||
|
"pages/apple-account-settings",
|
||||||
|
"pages/library-songs",
|
||||||
|
"pages/library-albums",
|
||||||
|
"pages/library-artists",
|
||||||
|
"pages/browse",
|
||||||
|
"pages/groupings",
|
||||||
|
"pages/settings",
|
||||||
|
"pages/installed-themes",
|
||||||
|
"pages/listen_now",
|
||||||
|
"pages/radio",
|
||||||
|
"pages/home",
|
||||||
|
"pages/artist-feed",
|
||||||
|
"pages/cider-playlist",
|
||||||
|
"pages/playlist-inline",
|
||||||
|
"pages/recordLabel",
|
||||||
|
"pages/cider-multiroom",
|
||||||
|
"pages/collection-list",
|
||||||
|
"pages/apple-curator",
|
||||||
|
"pages/artist",
|
||||||
|
"pages/search",
|
||||||
|
"pages/about",
|
||||||
|
"pages/library-videos",
|
||||||
|
"pages/remote-pair",
|
||||||
|
"pages/themes-github",
|
||||||
|
"pages/plugins-github",
|
||||||
|
"pages/replay",
|
||||||
|
"pages/audiolabs",
|
||||||
|
"pages/zoo",
|
||||||
|
"pages/plugin-renderer",
|
||||||
|
"pages/keybinds",
|
||||||
|
"pages/oobe",
|
||||||
|
"components/mediaitem-artwork",
|
||||||
|
"components/artwork-material",
|
||||||
|
"components/menu-panel",
|
||||||
|
"components/sidebar-playlist",
|
||||||
|
"components/audio-settings",
|
||||||
|
"components/plugin-menu",
|
||||||
|
"components/audio-controls",
|
||||||
|
"components/audio-playbackrate",
|
||||||
|
"components/qrcode-modal",
|
||||||
|
"components/moreinfo-modal",
|
||||||
|
"components/equalizer",
|
||||||
|
"components/add-to-playlist",
|
||||||
|
"components/queue",
|
||||||
|
"components/mediaitem-scroller-horizontal",
|
||||||
|
"components/mediaitem-scroller-horizontal-large",
|
||||||
|
"components/mediaitem-scroller-horizontal-sp",
|
||||||
|
"components/mediaitem-scroller-horizontal-mvview",
|
||||||
|
"components/mediaitem-list-item",
|
||||||
|
"components/mediaitem-hrect",
|
||||||
|
"components/mediaitem-square",
|
||||||
|
"components/mediaitem-mvview",
|
||||||
|
"components/listennow-child",
|
||||||
|
"components/mediaitem-mvview-sp",
|
||||||
|
"components/animatedartwork-view",
|
||||||
|
"components/listitem-horizontal",
|
||||||
|
"components/lyrics-view",
|
||||||
|
"components/fullscreen",
|
||||||
|
"components/miniplayer",
|
||||||
|
"components/castmenu",
|
||||||
|
"components/airplay-modal",
|
||||||
|
"components/artist-chip",
|
||||||
|
"components/hello-world",
|
||||||
|
"components/inline-collection-list"
|
||||||
|
]
|
179
src/main/base/vrouting.json
Normal file
|
@ -0,0 +1,179 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"page": "plugin-renderer",
|
||||||
|
"component": "<plugin-renderer></plugin-renderer>",
|
||||||
|
"condition": "page == 'plugin-renderer'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "zoo",
|
||||||
|
"component": "<cider-zoo></cider-zoo>",
|
||||||
|
"condition": "page == 'zoo'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "podcasts",
|
||||||
|
"component": "<apple-podcasts></apple-podcasts>",
|
||||||
|
"condition": "page == 'podcasts'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "library-videos",
|
||||||
|
"component": "<cider-library-videos></cider-library-videos>",
|
||||||
|
"condition": "page == 'library-videos'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "apple-account-settings",
|
||||||
|
"component": "<apple-account-settings></apple-account-settings>",
|
||||||
|
"condition": "page == 'apple-account-settings'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "about",
|
||||||
|
"component": "<about-page></about-page>",
|
||||||
|
"condition": "page == 'about'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "cider-artist",
|
||||||
|
"component": "<cider-artist :data=\"artistPage.data\"></cider-artist>",
|
||||||
|
"condition": "page == 'artist-page' && artistPage.data.attributes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "collection-list",
|
||||||
|
"component": "<cider-collection-list :data=\"collectionList.response\" :type=\"collectionList.type\" :title=\"collectionList.title\"></cider-collection-list>",
|
||||||
|
"condition": "page == 'collection-list'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "home",
|
||||||
|
"component": "<cider-home></cider-home>",
|
||||||
|
"condition": "page == 'home'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "artist-feed",
|
||||||
|
"component": "<cider-artist-feed></cider-artist-feed>",
|
||||||
|
"condition": "page == 'artist-feed'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "playlist-inline",
|
||||||
|
"component": "<playlist-inline :data=\"showingPlaylist\"></playlist-inline>",
|
||||||
|
"condition": "modals.showPlaylist"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "playlist_",
|
||||||
|
"component": "<cider-playlist :data=\"showingPlaylist\"></cider-playlist>",
|
||||||
|
"condition": "page.includes('playlist_')"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "oobe",
|
||||||
|
"component": "<cider-oobe/>",
|
||||||
|
"condition": "page == 'oobe'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "album_",
|
||||||
|
"component": "<cider-playlist :data=\"showingPlaylist\"></cider-playlist>",
|
||||||
|
"condition": "page.includes('album_')"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "recordLabel_",
|
||||||
|
"component": "<cider-recordlabel :data=\"showingPlaylist\"></cider-recordlabel>",
|
||||||
|
"condition": "page.includes('recordLabel_')"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "multiroom",
|
||||||
|
"component": "<cider-multiroom :data=\"multiroom\"></cider-multiroom>",
|
||||||
|
"condition": "page.includes('multiroom')"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "curator_",
|
||||||
|
"component": "<cider-recordlabel :data=\"showingPlaylist\"></cider-recordlabel>",
|
||||||
|
"condition": "page.includes('curator_')"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "browsepage",
|
||||||
|
"component": "<cider-browse :data=\"browsepage\"></cider-browse>",
|
||||||
|
"condition": "page == 'browse'",
|
||||||
|
"onEnter": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "groupings",
|
||||||
|
"component": "<cider-groupings :data=\"browsepage\"></cider-groupings>",
|
||||||
|
"condition": "page == 'groupings'",
|
||||||
|
"onEnter": ""
|
||||||
|
},{
|
||||||
|
"page": "charts",
|
||||||
|
"component": "<cider-charts :data=\"browsepage\"></cider-charts>",
|
||||||
|
"condition": "page == 'charts'",
|
||||||
|
"onEnter": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "listen_now",
|
||||||
|
"component": "<cider-listen-now :data=\"listennow\"></cider-listen-now>",
|
||||||
|
"condition": "page == 'listen_now'",
|
||||||
|
"onEnter": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "radio",
|
||||||
|
"component": "<cider-radio :data=\"radio\"></cider-radio>",
|
||||||
|
"condition": "page == 'radio'",
|
||||||
|
"onEnter": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "settings",
|
||||||
|
"component": "<cider-settings></cider-settings>",
|
||||||
|
"condition": "page == 'settings'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "installed-themes",
|
||||||
|
"component": "<installed-themes></installed-themes>",
|
||||||
|
"condition": "page == 'installed-themes'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "search",
|
||||||
|
"component": "<cider-search :search=\"search\"></cider-search>",
|
||||||
|
"condition": "page == 'search'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "library-songs",
|
||||||
|
"component": "<cider-library-songs :data=\"library.songs\"></cider-library-songs>",
|
||||||
|
"condition": "page == 'library-songs'",
|
||||||
|
"onEnter": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "library-albums",
|
||||||
|
"component": "<cider-library-albums :data=\"library.songs\"></cider-library-albums>",
|
||||||
|
"condition": "page == 'library-albums'",
|
||||||
|
"onEnter": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "library-artists",
|
||||||
|
"component": "<cider-library-artists></cider-library-artists>",
|
||||||
|
"condition": "page == 'library-artists'",
|
||||||
|
"onEnter": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "appleCurator",
|
||||||
|
"component": "<cider-applecurator :data=\"appleCurator\"></cider-applecurator>",
|
||||||
|
"condition": "page.includes('appleCurator')"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "themes-github",
|
||||||
|
"component": "<themes-github></themes-github>",
|
||||||
|
"condition": "page == 'themes-github'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "plugins-github",
|
||||||
|
"component": "<plugins-github></plugins-github>",
|
||||||
|
"condition": "page == 'plugins-github'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "remote-pair",
|
||||||
|
"component": "<remote-pair></remote-pair>",
|
||||||
|
"condition": "page == 'remote-pair'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "audiolabs",
|
||||||
|
"component": "<audiolabs-page></audiolabs-page>",
|
||||||
|
"condition": "page == 'audiolabs'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"page": "replay",
|
||||||
|
"component": "<replay-page></replay-page>",
|
||||||
|
"condition": "page == 'replay'"
|
||||||
|
}
|
||||||
|
]
|
|
@ -70,6 +70,22 @@ export default class DiscordRPC {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
ipcMain.on("reloadRPC", () => {
|
||||||
|
console.log(`[DiscordRPC][reload] Reloading DiscordRPC.`);
|
||||||
|
this._client.destroy()
|
||||||
|
|
||||||
|
this._client.endlessLogin({clientId: this._utils.getStoreValue("general.discordrpc.client") === "Cider" ? '911790844204437504' : '886578863147192350'})
|
||||||
|
.then(() => {
|
||||||
|
this.ready = true
|
||||||
|
this._utils.getWindow().webContents.send("rpcReloaded", this._client.user)
|
||||||
|
if (this._activityCache && this._activityCache.details && this._activityCache.state) {
|
||||||
|
console.info(`[DiscordRPC][reload] Restoring activity cache.`);
|
||||||
|
this._client.setActivity(this._activityCache)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((e: any) => console.error(`[DiscordRPC][reload] ${e}`));
|
||||||
|
// this.connect(true)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -112,7 +128,6 @@ export default class DiscordRPC {
|
||||||
if (!this._utils.getStoreValue("general.discordrpc.enabled")) {
|
if (!this._utils.getStoreValue("general.discordrpc.enabled")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const clientId = this._utils.getStoreValue("general.discordrpc.client") === "Cider" ? '911790844204437504' : '886578863147192350';
|
|
||||||
|
|
||||||
// Create the client
|
// Create the client
|
||||||
this._client = new AutoClient({transport: "ipc"});
|
this._client = new AutoClient({transport: "ipc"});
|
||||||
|
@ -128,7 +143,7 @@ export default class DiscordRPC {
|
||||||
})
|
})
|
||||||
|
|
||||||
// Login to Discord
|
// Login to Discord
|
||||||
this._client.endlessLogin({clientId: clientId})
|
this._client.endlessLogin({clientId: this._utils.getStoreValue("general.discordrpc.client") === "Cider" ? '911790844204437504' : '886578863147192350'})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
this.ready = true
|
this.ready = true
|
||||||
})
|
})
|
||||||
|
|
8
src/renderer/assets/MissingArtwork.svg
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="100%" height="100%" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||||
|
<rect x="0" y="0" width="1024" height="1024" style="fill:rgb(110,110,110);"/>
|
||||||
|
<g transform="matrix(6.05996,0,0,6.05996,189.003,209)">
|
||||||
|
<path d="M93.161,0.071C59.66,-1.043 32.22,11.314 32.22,11.314L32.2,74.023C28.789,72.669 24.641,72.348 20.428,73.372C11.345,75.579 5.397,83.192 7.143,90.379C8.889,97.566 17.667,101.604 26.749,99.398C35.313,97.317 41.087,90.429 40.256,83.626L40.256,36.771C40.256,36.771 59.66,29.987 84.829,28.286L84.829,63.135C81.455,61.843 77.386,61.55 73.25,62.555C64.167,64.761 58.219,72.374 59.965,79.562C61.71,86.749 70.488,90.786 79.571,88.58C87.502,86.653 93.042,80.603 93.158,74.316L93.161,74.32L93.161,0.071Z" style="fill-opacity:0.16;fill-rule:nonzero;"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
BIN
src/renderer/assets/oobe/maverick.png
Normal file
After Width: | Height: | Size: 346 KiB |
BIN
src/renderer/assets/oobe/mojave.png
Normal file
After Width: | Height: | Size: 326 KiB |
BIN
src/renderer/audio/impulses/AtmosphereRealizer_BSCBM.wav
Normal file
BIN
src/renderer/audio/impulses/AtmosphereRealizer_Cuddle.wav
Normal file
BIN
src/renderer/audio/impulses/AtmosphereRealizer_E168_1.2.wav
Normal file
BIN
src/renderer/audio/impulses/AtmosphereRealizer_E68_1.5.wav
Normal file
BIN
src/renderer/audio/impulses/AtmosphereRealizer_E68_2.2.wav
Normal file
BIN
src/renderer/audio/impulses/AtmosphereRealizer_Z3600.wav
Normal file
BIN
src/renderer/audio/impulses/AtmosphereRealizer_Z8500_A.wav
Normal file
BIN
src/renderer/audio/impulses/AtmosphereRealizer_Z8500_B.wav
Normal file
BIN
src/renderer/audio/impulses/AtmosphereRealizer_Z8500_C.wav
Normal file
BIN
src/renderer/audio/impulses/CAP_256_FINAL_48k.wav
Normal file
BIN
src/renderer/audio/impulses/CAP_64.wav
Normal file
BIN
src/renderer/audio/impulses/CiderSpatial_BPLK.wav
Normal file
BIN
src/renderer/audio/impulses/CiderSpatial_Diffuse.wav
Normal file
BIN
src/renderer/audio/impulses/CiderSpatial_HW2K.wav
Normal file
BIN
src/renderer/audio/impulses/CiderSpatial_LIVE.wav
Normal file
BIN
src/renderer/audio/impulses/CiderSpatial_LIVE_2.wav
Normal file
BIN
src/renderer/audio/impulses/CiderSpatial_Maikiwi.wav
Normal file
BIN
src/renderer/audio/impulses/CiderSpatial_MaikiwiPlus.wav
Normal file
BIN
src/renderer/audio/impulses/CiderSpatial_Natural+.wav
Normal file
BIN
src/renderer/audio/impulses/CiderSpatial_Natural.wav
Normal file
|
@ -2,32 +2,31 @@ var notyf = new Notyf();
|
||||||
|
|
||||||
const MusicKitObjects = {
|
const MusicKitObjects = {
|
||||||
LibraryPlaylist: function () {
|
LibraryPlaylist: function () {
|
||||||
this.id = ""
|
this.id = "";
|
||||||
this.type = "library-playlist-folders"
|
this.type = "library-playlist-folders";
|
||||||
this.href = ""
|
this.href = "";
|
||||||
this.attributes = {
|
this.attributes = {
|
||||||
dateAdded: "",
|
dateAdded: "",
|
||||||
name: ""
|
name: "",
|
||||||
}
|
};
|
||||||
this.playlists = []
|
this.playlists = [];
|
||||||
}
|
},
|
||||||
}
|
};
|
||||||
|
|
||||||
// limit an array to a certain number of items
|
// limit an array to a certain number of items
|
||||||
Array.prototype.limit = function (n) {
|
Array.prototype.limit = function (n) {
|
||||||
return this.slice(0, n);
|
return this.slice(0, n);
|
||||||
};
|
};
|
||||||
|
|
||||||
Vue.component('animated-number', {
|
Vue.component("animated-number", {
|
||||||
|
|
||||||
template: "<div style='display: inline-block;'>{{ displayNumber }}</div>",
|
template: "<div style='display: inline-block;'>{{ displayNumber }}</div>",
|
||||||
props: { 'number': { default: 0 } },
|
props: { number: { default: 0 } },
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
displayNumber: 0,
|
displayNumber: 0,
|
||||||
interval: false
|
interval: false,
|
||||||
}
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
ready() {
|
ready() {
|
||||||
|
@ -49,129 +48,129 @@ Vue.component('animated-number', {
|
||||||
this.displayNumber = this.displayNumber + change;
|
this.displayNumber = this.displayNumber + change;
|
||||||
}
|
}
|
||||||
}, 20);
|
}, 20);
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
})
|
});
|
||||||
|
|
||||||
Vue.component('sidebar-library-item', {
|
Vue.component("sidebar-library-item", {
|
||||||
template: '#sidebar-library-item',
|
template: "#sidebar-library-item",
|
||||||
props: {
|
props: {
|
||||||
name: {
|
name: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true,
|
||||||
},
|
},
|
||||||
page: {
|
page: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true
|
required: true,
|
||||||
},
|
},
|
||||||
svgIcon: {
|
svgIcon: {
|
||||||
type: String,
|
type: String,
|
||||||
required: false,
|
required: false,
|
||||||
default: ''
|
default: "",
|
||||||
},
|
},
|
||||||
cdClick: {
|
cdClick: {
|
||||||
type: Function,
|
type: Function,
|
||||||
required: false
|
required: false,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
data: function () {
|
data: function () {
|
||||||
return {
|
return {
|
||||||
app: app,
|
app: app,
|
||||||
svgIconData: ""
|
svgIconData: "",
|
||||||
}
|
};
|
||||||
},
|
},
|
||||||
async mounted() {
|
async mounted() {
|
||||||
if (this.svgIcon) {
|
if (this.svgIcon) {
|
||||||
this.svgIconData = await this.app.getSvgIcon(this.svgIcon)
|
this.svgIconData = await this.app.getSvgIcon(this.svgIcon);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {}
|
methods: {},
|
||||||
});
|
});
|
||||||
|
|
||||||
function fallbackinitMusicKit() {
|
function fallbackinitMusicKit() {
|
||||||
const request = new XMLHttpRequest();
|
const request = new XMLHttpRequest();
|
||||||
|
|
||||||
function loadAlternateKey() {
|
function loadAlternateKey() {
|
||||||
let parsedJson = JSON.parse(this.responseText)
|
let parsedJson = JSON.parse(this.responseText);
|
||||||
MusicKit.configure({
|
MusicKit.configure({
|
||||||
developerToken: parsedJson.developerToken,
|
developerToken: parsedJson.developerToken,
|
||||||
app: {
|
app: {
|
||||||
name: 'Apple Music',
|
name: "Apple Music",
|
||||||
build: '1978.4.1',
|
build: "1978.4.1",
|
||||||
version: "1.0"
|
version: "1.0",
|
||||||
},
|
},
|
||||||
sourceType: 24,
|
sourceType: 24,
|
||||||
suppressErrorDialog: true
|
suppressErrorDialog: true,
|
||||||
})
|
});
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
app.init()
|
app.init();
|
||||||
if (app.cfg.visual.window_background_style == "mica" && !app.isDev) {
|
if (app.cfg.visual.window_background_style == "mica" && !app.isDev) {
|
||||||
app.spawnMica()
|
app.spawnMica();
|
||||||
}
|
}
|
||||||
}, 1000)
|
}, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
request.addEventListener("load", loadAlternateKey);
|
request.addEventListener("load", loadAlternateKey);
|
||||||
request.open("GET", "https://raw.githubusercontent.com/lujjjh/LitoMusic/main/token.json");
|
request.open(
|
||||||
|
"GET",
|
||||||
|
"https://raw.githubusercontent.com/lujjjh/LitoMusic/main/token.json"
|
||||||
|
);
|
||||||
request.send();
|
request.send();
|
||||||
}
|
}
|
||||||
|
|
||||||
document.addEventListener('musickitloaded', function () {
|
|
||||||
console.log('MusicKit loaded')
|
|
||||||
// MusicKit global is now defined
|
|
||||||
function initMusicKit() {
|
function initMusicKit() {
|
||||||
let parsedJson = JSON.parse(this.responseText)
|
|
||||||
|
let parsedJson = JSON.parse(this.responseText);
|
||||||
MusicKit.configure({
|
MusicKit.configure({
|
||||||
developerToken: parsedJson.token,
|
developerToken: parsedJson.token,
|
||||||
app: {
|
app: {
|
||||||
name: 'Apple Music',
|
name: "Apple Music",
|
||||||
build: '1978.4.1',
|
build: "1978.4.1",
|
||||||
version: "1.0"
|
version: "1.0",
|
||||||
},
|
},
|
||||||
sourceType: 24,
|
sourceType: 24,
|
||||||
suppressErrorDialog: true
|
suppressErrorDialog: true,
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
function waitForApp() {
|
function waitForApp() {
|
||||||
if (typeof app.init !== "undefined") {
|
if (typeof app.init !== "undefined") {
|
||||||
app.init()
|
app.init();
|
||||||
if (app.cfg.visual.window_background_style == "mica" && !app.isDev) {
|
if (app.cfg.visual.window_background_style == "mica" && !app.isDev) {
|
||||||
app.spawnMica()
|
app.spawnMica();
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
setTimeout(waitForApp, 250);
|
setTimeout(waitForApp, 250);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
waitForApp()
|
waitForApp();
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function capiInit() {
|
||||||
const request = new XMLHttpRequest();
|
const request = new XMLHttpRequest();
|
||||||
request.timeout = 5000;
|
request.timeout = 5000;
|
||||||
request.addEventListener("load", initMusicKit);
|
request.addEventListener("load", initMusicKit);
|
||||||
request.onreadystatechange = function (aEvt) {
|
request.onreadystatechange = function (aEvt) {
|
||||||
if (request.readyState == 4) {
|
if (request.readyState == 4) {
|
||||||
if (request.status != 200)
|
if (request.status != 200) fallbackinitMusicKit();
|
||||||
fallbackinitMusicKit()
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
request.open("GET", "https://api.cider.sh/v1/");
|
request.open("GET", "https://api.cider.sh/v1/");
|
||||||
request.send();
|
request.send();
|
||||||
|
}
|
||||||
|
|
||||||
// check for widevine failure and reconfigure the instance.
|
document.addEventListener("musickitloaded", function () {
|
||||||
|
if (showOobe()) return;
|
||||||
|
console.log("MusicKit loaded");
|
||||||
|
// MusicKit global is now defined
|
||||||
|
capiInit()
|
||||||
|
});
|
||||||
window.addEventListener("drmUnsupported", function () {
|
window.addEventListener("drmUnsupported", function () {
|
||||||
initMusicKit()
|
initMusicKit();
|
||||||
});
|
});
|
||||||
});
|
if ("serviceWorker" in navigator) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if ('serviceWorker' in navigator) {
|
|
||||||
// Use the window load event to keep the page load performant
|
// Use the window load event to keep the page load performant
|
||||||
window.addEventListener('load', () => {
|
window.addEventListener("load", () => {
|
||||||
navigator.serviceWorker.register('sw.js?v=1');
|
navigator.serviceWorker.register("sw.js?v=1");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,26 +183,29 @@ const getBase64FromUrl = async (url) => {
|
||||||
reader.onloadend = () => {
|
reader.onloadend = () => {
|
||||||
const base64data = reader.result;
|
const base64data = reader.result;
|
||||||
resolve(base64data);
|
resolve(base64data);
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
function Clone(obj) {
|
function Clone(obj) {
|
||||||
return JSON.parse(JSON.stringify(obj));
|
return JSON.parse(JSON.stringify(obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
function uuidv4() {
|
function uuidv4() {
|
||||||
return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c =>
|
return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>
|
||||||
(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
|
(
|
||||||
|
c ^
|
||||||
|
(crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))
|
||||||
|
).toString(16)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function xmlToJson(xml) {
|
function xmlToJson(xml) {
|
||||||
|
|
||||||
// Create the return object
|
// Create the return object
|
||||||
let obj = {};
|
let obj = {};
|
||||||
|
|
||||||
if (xml.nodeType == 1) { // element
|
if (xml.nodeType == 1) {
|
||||||
|
// element
|
||||||
// do attributes
|
// do attributes
|
||||||
if (xml.attributes.length > 0) {
|
if (xml.attributes.length > 0) {
|
||||||
obj["@attributes"] = {};
|
obj["@attributes"] = {};
|
||||||
|
@ -212,7 +214,8 @@ function xmlToJson(xml) {
|
||||||
obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
|
obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (xml.nodeType == 3) { // text
|
} else if (xml.nodeType == 3) {
|
||||||
|
// text
|
||||||
obj = xml.nodeValue;
|
obj = xml.nodeValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -221,10 +224,10 @@ function xmlToJson(xml) {
|
||||||
for (var i = 0; i < xml.childNodes.length; i++) {
|
for (var i = 0; i < xml.childNodes.length; i++) {
|
||||||
var item = xml.childNodes.item(i);
|
var item = xml.childNodes.item(i);
|
||||||
var nodeName = item.nodeName;
|
var nodeName = item.nodeName;
|
||||||
if (typeof (obj[nodeName]) == "undefined") {
|
if (typeof obj[nodeName] == "undefined") {
|
||||||
obj[nodeName] = xmlToJson(item);
|
obj[nodeName] = xmlToJson(item);
|
||||||
} else {
|
} else {
|
||||||
if (typeof (obj[nodeName].push) == "undefined") {
|
if (typeof obj[nodeName].push == "undefined") {
|
||||||
var old = obj[nodeName];
|
var old = obj[nodeName];
|
||||||
obj[nodeName] = [];
|
obj[nodeName] = [];
|
||||||
obj[nodeName].push(old);
|
obj[nodeName].push(old);
|
||||||
|
@ -235,7 +238,7 @@ function xmlToJson(xml) {
|
||||||
}
|
}
|
||||||
console.log(obj);
|
console.log(obj);
|
||||||
return obj;
|
return obj;
|
||||||
};
|
}
|
||||||
|
|
||||||
async function asyncForEach(array, callback) {
|
async function asyncForEach(array, callback) {
|
||||||
for (let index = 0; index < array.length; index++) {
|
for (let index = 0; index < array.length; index++) {
|
||||||
|
@ -245,30 +248,33 @@ async function asyncForEach(array, callback) {
|
||||||
|
|
||||||
var checkIfScrollIsStatic = setInterval(() => {
|
var checkIfScrollIsStatic = setInterval(() => {
|
||||||
try {
|
try {
|
||||||
if (position === document.getElementsByClassName('lyric-body')[0].scrollTop) {
|
if (
|
||||||
clearInterval(checkIfScrollIsStatic)
|
position === document.getElementsByClassName("lyric-body")[0].scrollTop
|
||||||
|
) {
|
||||||
|
clearInterval(checkIfScrollIsStatic);
|
||||||
// do something
|
// do something
|
||||||
}
|
}
|
||||||
position = document.getElementsByClassName('lyric-body')[0].scrollTop
|
position = document.getElementsByClassName("lyric-body")[0].scrollTop;
|
||||||
} catch (e) {
|
} catch (e) { }
|
||||||
}
|
|
||||||
|
|
||||||
}, 50);
|
}, 50);
|
||||||
|
|
||||||
// WebGPU Console Notification
|
// WebGPU Console Notification
|
||||||
async function webGPU() {
|
async function webGPU() {
|
||||||
try {
|
try {
|
||||||
const currentGPU = await navigator.gpu.requestAdapter()
|
const currentGPU = await navigator.gpu.requestAdapter();
|
||||||
console.log("WebGPU enabled on", currentGPU.name, "with feature ID", currentGPU.features.size)
|
console.log(
|
||||||
|
"WebGPU enabled on",
|
||||||
|
currentGPU.name,
|
||||||
|
"with feature ID",
|
||||||
|
currentGPU.features.size
|
||||||
|
);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log("WebGPU disabled / WebGPU initialization failed")
|
console.log("WebGPU disabled / WebGPU initialization failed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function isJson(item) {
|
function isJson(item) {
|
||||||
item = typeof item !== "string"
|
item = typeof item !== "string" ? JSON.stringify(item) : item;
|
||||||
? JSON.stringify(item)
|
|
||||||
: item;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
item = JSON.parse(item);
|
item = JSON.parse(item);
|
||||||
|
@ -283,12 +289,79 @@ function isJson(item) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
webGPU().then()
|
webGPU().then();
|
||||||
|
|
||||||
|
function showOobe() {
|
||||||
|
return false
|
||||||
|
if (localStorage.getItem("music.ampwebplay.media-user-token") && localStorage.getItem("seenOOBE")) {
|
||||||
|
return false
|
||||||
|
} else {
|
||||||
|
function waitForApp() {
|
||||||
|
if (typeof app.init !== "undefined") {
|
||||||
|
app.oobeInit();
|
||||||
|
} else {
|
||||||
|
setTimeout(waitForApp, 250);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
waitForApp();
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let screenWidth = screen.width;
|
let screenWidth = screen.width;
|
||||||
let screenHeight = screen.height;
|
let screenHeight = screen.height;
|
||||||
|
|
||||||
window.onerror = function (error) {
|
document.addEventListener("DOMContentLoaded", async function () {
|
||||||
console.log(error)
|
// app.oobeInit()
|
||||||
bootbox.alert("Error occurred: " + error)
|
});
|
||||||
|
|
||||||
|
document.addEventListener(
|
||||||
|
"contextmenu",
|
||||||
|
function (e) {
|
||||||
|
if (
|
||||||
|
e.target.tagName.toLowerCase() == "textarea" ||
|
||||||
|
(e.target.tagName.toLowerCase() == "input" &&
|
||||||
|
e.target.type != "checkbox" &&
|
||||||
|
e.target.type != "radio" &&
|
||||||
|
e.target.disabled == false)
|
||||||
|
) {
|
||||||
|
e.preventDefault();
|
||||||
|
const menuPanel = {
|
||||||
|
items: {
|
||||||
|
cut: {
|
||||||
|
name: app.getLz("action.cut"),
|
||||||
|
action: function () {
|
||||||
|
document.execCommand("cut");
|
||||||
|
},
|
||||||
|
},
|
||||||
|
copy: {
|
||||||
|
name: app.getLz("action.copy"),
|
||||||
|
action: function () {
|
||||||
|
document.execCommand("copy");
|
||||||
|
},
|
||||||
|
},
|
||||||
|
paste: {
|
||||||
|
name: app.getLz("action.paste"),
|
||||||
|
action: function () {
|
||||||
|
document.execCommand("paste");
|
||||||
|
},
|
||||||
|
},
|
||||||
|
delete: {
|
||||||
|
name: app.getLz("action.delete"),
|
||||||
|
action: function () {
|
||||||
|
document.execCommand("delete");
|
||||||
|
},
|
||||||
|
},
|
||||||
|
selectAll: {
|
||||||
|
name: app.getLz("action.selectAll"),
|
||||||
|
action: function () {
|
||||||
|
document.execCommand("selectAll");
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
app.showMenuPanel(menuPanel, e);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
|
@ -23,6 +23,10 @@
|
||||||
padding: 14px;
|
padding: 14px;
|
||||||
background: var(--opaquePageBGColor);
|
background: var(--opaquePageBGColor);
|
||||||
font-size: 0.85em;
|
font-size: 0.85em;
|
||||||
|
|
||||||
|
&.child {
|
||||||
|
background: rgb(0 0 0 / 15%);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.md-option-segment.md-option-segment_auto {
|
.md-option-segment.md-option-segment_auto {
|
||||||
|
|
|
@ -17,4 +17,5 @@
|
||||||
--ciderColor: @ciderColor;
|
--ciderColor: @ciderColor;
|
||||||
--appOpacity: @appOpacity;
|
--appOpacity: @appOpacity;
|
||||||
--transparencyRate: @transparencyRate;
|
--transparencyRate: @transparencyRate;
|
||||||
|
--macOSChromeColor: rgb(14 14 14 / 32%);
|
||||||
}
|
}
|
|
@ -6,7 +6,7 @@
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: "codicon";
|
font-family: "codicon";
|
||||||
font-display: block;
|
font-display: block;
|
||||||
src: url("codicon.ttf") format("truetype");
|
src: url("./codicon.ttf?f06865699f1720ee6ca6e0a4aa084d76") format("truetype");
|
||||||
}
|
}
|
||||||
|
|
||||||
.codicon[class*='codicon-'] {
|
.codicon[class*='codicon-'] {
|
||||||
|
@ -43,6 +43,10 @@
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.codicon-modifier-hidden {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* custom speed & easing for loading icon */
|
/* custom speed & easing for loading icon */
|
||||||
.codicon-loading {
|
.codicon-loading {
|
||||||
animation-duration: 1s !important;
|
animation-duration: 1s !important;
|
||||||
|
@ -551,3 +555,7 @@
|
||||||
.codicon-arrow-circle-left:before { content: "\ebfd" }
|
.codicon-arrow-circle-left:before { content: "\ebfd" }
|
||||||
.codicon-arrow-circle-right:before { content: "\ebfe" }
|
.codicon-arrow-circle-right:before { content: "\ebfe" }
|
||||||
.codicon-arrow-circle-up:before { content: "\ebff" }
|
.codicon-arrow-circle-up:before { content: "\ebff" }
|
||||||
|
.codicon-layout-sidebar-right-off:before { content: "\ec00" }
|
||||||
|
.codicon-layout-panel-off:before { content: "\ec01" }
|
||||||
|
.codicon-layout-sidebar-left-off:before { content: "\ec02" }
|
||||||
|
.codicon-blank:before { content: "\ec03" }
|
||||||
|
|
|
@ -274,7 +274,7 @@
|
||||||
|
|
||||||
.song-name {
|
.song-name {
|
||||||
text-align : left;
|
text-align : left;
|
||||||
font-size : 0.98em;
|
font-size : 0.8em;
|
||||||
font-weight : 500;
|
font-weight : 500;
|
||||||
width : 100%;
|
width : 100%;
|
||||||
-webkit-mask-image: linear-gradient(-90deg, transparent 0%, transparent 10%, black 20%);
|
-webkit-mask-image: linear-gradient(-90deg, transparent 0%, transparent 10%, black 20%);
|
||||||
|
@ -285,6 +285,10 @@
|
||||||
font-size: 0.75em;
|
font-size: 0.75em;
|
||||||
opacity: 0.8;
|
opacity: 0.8;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
white-space: nowrap;
|
||||||
|
max-width: 360px;
|
||||||
|
-webkit-mask-image: linear-gradient(-90deg, transparent 0%, transparent 10%, black 20%);
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
|
|
|
@ -211,7 +211,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Media Item Elements
|
// Media Item Elements
|
||||||
|
|
||||||
.mediaitem-artwork {
|
.mediaitem-artwork {
|
||||||
|
@ -221,9 +220,6 @@
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background-image: url("https://beta.music.apple.com/assets/product/MissingArtworkMusic.svg");
|
|
||||||
background-size: cover;
|
|
||||||
background-position: center;
|
|
||||||
|
|
||||||
.animatedartwork-view-box {
|
.animatedartwork-view-box {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
@ -270,6 +266,9 @@
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
image-rendering: -webkit-optimize-contrast;
|
image-rendering: -webkit-optimize-contrast;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
|
background-image: url("./assets/MissingArtwork.svg");
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.no-shadow {
|
&.no-shadow {
|
||||||
|
@ -289,6 +288,11 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#artworkLCD img {
|
||||||
|
image-rendering: auto;
|
||||||
|
}
|
||||||
|
|
||||||
/* queue item */
|
/* queue item */
|
||||||
.cd-queue-item {
|
.cd-queue-item {
|
||||||
border-bottom: 0px solid rgb(200 200 200 / 10%);
|
border-bottom: 0px solid rgb(200 200 200 / 10%);
|
||||||
|
@ -393,11 +397,26 @@
|
||||||
align-items: center;
|
align-items: center;
|
||||||
border-radius: var(--mediaItemRadius);
|
border-radius: var(--mediaItemRadius);
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
|
.listitem-content {
|
||||||
|
width: 100%;
|
||||||
|
height: 60px;
|
||||||
|
display: flex;
|
||||||
|
flex: 0 0 auto;
|
||||||
|
flex-direction: row;
|
||||||
|
font-size: 14px;
|
||||||
|
justify-content: center-between;
|
||||||
|
align-items: center;
|
||||||
|
border-radius: var(--mediaItemRadius);
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
.heart-icon {
|
.heart-icon {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.popular {
|
.popular {
|
||||||
background-image: url(assets/star.svg);
|
background-image: url(assets/star.svg);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
|
@ -411,7 +430,6 @@
|
||||||
.artwork {
|
.artwork {
|
||||||
height: 42px;
|
height: 42px;
|
||||||
width: 42px;
|
width: 42px;
|
||||||
border-radius: var(--mediaItemRadius);
|
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
object-position: center;
|
object-position: center;
|
||||||
flex: 0 0 auto;
|
flex: 0 0 auto;
|
||||||
|
@ -421,6 +439,11 @@
|
||||||
outline: none;
|
outline: none;
|
||||||
position: relative;
|
position: relative;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
border-radius: var(--mediaItemRadiusSmall);
|
||||||
|
|
||||||
|
.mediaitem-artwork {
|
||||||
|
border-radius: var(--mediaItemRadiusSmall);
|
||||||
|
}
|
||||||
|
|
||||||
.overlay-play {
|
.overlay-play {
|
||||||
background: rgba(0, 0, 0, 0.5);
|
background: rgba(0, 0, 0, 0.5);
|
||||||
|
@ -522,27 +545,35 @@
|
||||||
10% {
|
10% {
|
||||||
box-shadow: inset 0 -4px 0
|
box-shadow: inset 0 -4px 0
|
||||||
}
|
}
|
||||||
|
|
||||||
20% {
|
20% {
|
||||||
box-shadow: inset 0 -10px 0
|
box-shadow: inset 0 -10px 0
|
||||||
}
|
}
|
||||||
|
|
||||||
30% {
|
30% {
|
||||||
box-shadow: inset 0 -12px 0
|
box-shadow: inset 0 -12px 0
|
||||||
}
|
}
|
||||||
|
|
||||||
40% {
|
40% {
|
||||||
box-shadow: inset 0 -8px 0
|
box-shadow: inset 0 -8px 0
|
||||||
}
|
}
|
||||||
|
|
||||||
50% {
|
50% {
|
||||||
box-shadow: inset 0 -4px 0
|
box-shadow: inset 0 -4px 0
|
||||||
}
|
}
|
||||||
|
|
||||||
60% {
|
60% {
|
||||||
box-shadow: inset 0 -6px 0
|
box-shadow: inset 0 -6px 0
|
||||||
}
|
}
|
||||||
|
|
||||||
80% {
|
80% {
|
||||||
box-shadow: inset 0 -12px 0
|
box-shadow: inset 0 -12px 0
|
||||||
}
|
}
|
||||||
|
|
||||||
90% {
|
90% {
|
||||||
box-shadow: inset 0 -6px 0
|
box-shadow: inset 0 -6px 0
|
||||||
}
|
}
|
||||||
|
|
||||||
to {
|
to {
|
||||||
box-shadow: inset 0 -2px 0
|
box-shadow: inset 0 -2px 0
|
||||||
}
|
}
|
||||||
|
@ -927,6 +958,7 @@
|
||||||
|
|
||||||
/* mediaitem-square */
|
/* mediaitem-square */
|
||||||
.cd-mediaitem-square {
|
.cd-mediaitem-square {
|
||||||
|
--transitionDuration: .25s;
|
||||||
--scaleRate: 1.25;
|
--scaleRate: 1.25;
|
||||||
--scaleRateArtwork: 1;
|
--scaleRateArtwork: 1;
|
||||||
width: 200px;
|
width: 200px;
|
||||||
|
@ -938,6 +970,7 @@
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
|
transition: width var(--transitionDuration) linear, height var(--transitionDuration) linear;
|
||||||
|
|
||||||
.artwork-container {
|
.artwork-container {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -952,6 +985,8 @@
|
||||||
flex: 0 0 auto;
|
flex: 0 0 auto;
|
||||||
margin: 6px;
|
margin: 6px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
transition: width var(--transitionDuration) linear, height var(--transitionDuration) linear;
|
||||||
|
|
||||||
.mediaitem-artwork {
|
.mediaitem-artwork {
|
||||||
box-shadow: unset;
|
box-shadow: unset;
|
||||||
}
|
}
|
||||||
|
@ -1024,15 +1059,33 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (min-width: 1600px) {
|
&:not(.mediaitem-card):not(.mediaitem-brick):not(.mediaitem-video):not(.noscale) {
|
||||||
|
@media (min-width: 1460px) {
|
||||||
|
--scaleRate: 1.1;
|
||||||
|
--scaleRateArtwork: 0.9;
|
||||||
width: calc(200px * var(--scaleRate));
|
width: calc(200px * var(--scaleRate));
|
||||||
height: calc(200px * var(--scaleRate));
|
height: calc(200px * var(--scaleRate));
|
||||||
|
|
||||||
.artwork-container > .artwork {
|
.artwork-container > .artwork {
|
||||||
width: calc(190px * var(--scaleRateArtwork));
|
width: calc(190px * var(--scaleRateArtwork));
|
||||||
height: calc(190px * var(--scaleRateArtwork));
|
height: calc(190px * var(--scaleRateArtwork));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1550px) {
|
||||||
|
--scaleRate: 1.25;
|
||||||
|
--scaleRateArtwork: 1;
|
||||||
|
width: calc(200px * var(--scaleRate));
|
||||||
|
height: calc(200px * var(--scaleRate));
|
||||||
|
|
||||||
|
.artwork-container > .artwork {
|
||||||
|
width: calc(190px * var(--scaleRateArtwork));
|
||||||
|
height: calc(190px * var(--scaleRateArtwork));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.info-rect {
|
.info-rect {
|
||||||
width: 90%;
|
width: 90%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
@ -1080,8 +1133,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
&.mediaitem-video {
|
&.mediaitem-video {
|
||||||
--scaleRate: 1.25;
|
|
||||||
--scaleRateArtwork: 1.25;
|
|
||||||
height: 200px;
|
height: 200px;
|
||||||
width: 240px;
|
width: 240px;
|
||||||
|
|
||||||
|
@ -1090,12 +1141,29 @@
|
||||||
width: 212px;
|
width: 212px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (min-width: 1600px) {
|
&:not(.noscale) {
|
||||||
|
@media (min-width: 1460px) {
|
||||||
|
--scaleRate: 1.1;
|
||||||
|
--scaleRateArtwork: 1.1;
|
||||||
width: calc(240px * var(--scaleRate));
|
width: calc(240px * var(--scaleRate));
|
||||||
height: calc(200px * var(--scaleRate));
|
height: calc(200px * var(--scaleRate));
|
||||||
|
|
||||||
.artwork-container > .artwork {
|
.artwork-container > .artwork {
|
||||||
width: calc(212px * var(--scaleRateArtwork));
|
width: calc(220px * var(--scaleRateArtwork));
|
||||||
height: calc(120px * var(--scaleRateArtwork));
|
height: calc(123px * var(--scaleRateArtwork));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1550px) {
|
||||||
|
--scaleRate: 1.25;
|
||||||
|
--scaleRateArtwork: 1.25;
|
||||||
|
width: calc(240px * var(--scaleRate));
|
||||||
|
height: calc(200px * var(--scaleRate));
|
||||||
|
|
||||||
|
.artwork-container > .artwork {
|
||||||
|
width: calc(220px * var(--scaleRateArtwork));
|
||||||
|
height: calc(123px * var(--scaleRateArtwork));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1108,6 +1176,32 @@
|
||||||
height: 123px;
|
height: 123px;
|
||||||
width: 220px;
|
width: 220px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&:not(.noscale) {
|
||||||
|
@media (min-width: 1460px) {
|
||||||
|
--scaleRate: 1.1;
|
||||||
|
--scaleRateArtwork: 1.1;
|
||||||
|
width: calc(240px * var(--scaleRate));
|
||||||
|
height: calc(200px * var(--scaleRate));
|
||||||
|
|
||||||
|
.artwork-container > .artwork {
|
||||||
|
width: calc(220px * var(--scaleRateArtwork));
|
||||||
|
height: calc(123px * var(--scaleRateArtwork));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1550px) {
|
||||||
|
--scaleRate: 1.25;
|
||||||
|
--scaleRateArtwork: 1.25;
|
||||||
|
width: calc(240px * var(--scaleRate));
|
||||||
|
height: calc(200px * var(--scaleRate));
|
||||||
|
|
||||||
|
.artwork-container > .artwork {
|
||||||
|
width: calc(220px * var(--scaleRateArtwork));
|
||||||
|
height: calc(123px * var(--scaleRateArtwork));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.mediaitem-small {
|
&.mediaitem-small {
|
||||||
|
@ -1123,7 +1217,7 @@
|
||||||
&.mediaitem-card {
|
&.mediaitem-card {
|
||||||
background: #ccc;
|
background: #ccc;
|
||||||
background: var(--spcolor);
|
background: var(--spcolor);
|
||||||
height: 298px;
|
height: 302px;
|
||||||
width: 230px;
|
width: 230px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -1136,7 +1230,7 @@
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
border-radius: 0px;
|
border-radius: 0px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
transition: width var(--transitionDuration) linear, height var(--transitionDuration) linear, filter 0.2s ease-in-out;
|
||||||
.mediaitem-artwork {
|
.mediaitem-artwork {
|
||||||
border-radius: 0px;
|
border-radius: 0px;
|
||||||
|
|
||||||
|
@ -1150,6 +1244,8 @@
|
||||||
padding: 10px 10px 14px;
|
padding: 10px 10px 14px;
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
display: grid;
|
||||||
|
align-content: center;
|
||||||
|
|
||||||
&::before {
|
&::before {
|
||||||
background: var(--bgartwork);
|
background: var(--bgartwork);
|
||||||
|
@ -1164,6 +1260,7 @@
|
||||||
z-index: 0;
|
z-index: 0;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
filter: brightness(0.5) blur(50px) saturate(180%);
|
filter: brightness(0.5) blur(50px) saturate(180%);
|
||||||
|
transition: filter 0.2s ease-in-out;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1175,9 +1272,10 @@
|
||||||
font-size: 0.9em;
|
font-size: 0.9em;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
|
|
||||||
& + .subtitle {
|
& + .subtitle {
|
||||||
max-height: none !important;
|
max-height: none !important;
|
||||||
margin-top: -0.5em;
|
// margin-top: -0.5em;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1191,7 +1289,7 @@
|
||||||
-webkit-box-orient: vertical;
|
-webkit-box-orient: vertical;
|
||||||
-webkit-line-clamp: 3;
|
-webkit-line-clamp: 3;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
max-height: 3.8em;
|
max-height: 4.8em;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1207,14 +1305,34 @@
|
||||||
border-radius: inherit;
|
border-radius: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
//@media (min-width: 1600px) {
|
&:hover {
|
||||||
// width: calc(230px * 1.25);
|
.artwork{
|
||||||
// height: calc(298px * 1.25);
|
filter: brightness(0.8);
|
||||||
// .artwork-container>.artwork {
|
}
|
||||||
// width: calc(230px * 1.25);
|
.info-rect-card::before {
|
||||||
// height: calc(230px * 1.25);
|
filter: brightness(0.3) blur(50px) saturate(180%);
|
||||||
// }
|
}
|
||||||
//}
|
}
|
||||||
|
|
||||||
|
&:not(.noscale) {
|
||||||
|
@media (min-width: 1460px) {
|
||||||
|
width: calc(230px * 1.1);
|
||||||
|
height: calc(298px * 1.1);
|
||||||
|
.artwork-container > .artwork {
|
||||||
|
width: calc(230px * 1.1);
|
||||||
|
height: calc(230px * 1.1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 1550px) {
|
||||||
|
width: calc(230px * 1.25);
|
||||||
|
height: calc(298px * 1.25);
|
||||||
|
.artwork-container > .artwork {
|
||||||
|
width: calc(230px * 1.25);
|
||||||
|
height: calc(230px * 1.25);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1460,7 +1578,6 @@ input[type=checkbox][switch]:checked:active::before {
|
||||||
/* End Switch Checkbox */
|
/* End Switch Checkbox */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.header-text {
|
.header-text {
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
}
|
}
|
||||||
|
@ -1580,10 +1697,31 @@ input[type=checkbox][switch]:checked:active::before {
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
opacity: 0.70;
|
opacity: 0.70;
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
content: "";
|
||||||
|
display: block;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
background: var(--selected);
|
||||||
|
border-radius: inherit;
|
||||||
|
position: absolute;
|
||||||
|
opacity: 0;
|
||||||
|
z-index: -1;
|
||||||
|
transform: scale(0.5);
|
||||||
|
pointer-events: none;
|
||||||
|
transition: opacity .10s var(--appleEase), transform .10s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
.playback-button:active {
|
&:hover {
|
||||||
transform: scale(0.95);
|
&:before {
|
||||||
|
transform: scale(1);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.playback-button--small {
|
.playback-button--small {
|
||||||
|
@ -1599,22 +1737,47 @@ input[type=checkbox][switch]:checked:active::before {
|
||||||
border: 0px;
|
border: 0px;
|
||||||
box-shadow: unset;
|
box-shadow: unset;
|
||||||
opacity: 0.70;
|
opacity: 0.70;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
content: "";
|
||||||
|
display: block;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
background: var(--selected);
|
||||||
|
border-radius: inherit;
|
||||||
|
position: absolute;
|
||||||
|
opacity: 0;
|
||||||
|
z-index: -1;
|
||||||
|
transform: scale(0.5);
|
||||||
|
pointer-events: none;
|
||||||
|
transition: opacity .10s var(--appleEase), transform .10s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
.playback-button:hover,
|
&:hover {
|
||||||
.playback-button--small:hover {
|
&:before {
|
||||||
background-color: rgb(200 200 200 / 10%);
|
transform: scale(1);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.playback-button:active,
|
|
||||||
.playback-button--small:active {
|
|
||||||
transform: scale(0.9);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.playback-button--small.active {
|
.playback-button--small.active {
|
||||||
background-color: rgb(200 200 200 / 25%);
|
background-color: rgb(200 200 200 / 25%);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.playback-button:hover,
|
||||||
|
.playback-button--small:hover {
|
||||||
|
// background-color: var(--selected);
|
||||||
|
}
|
||||||
|
|
||||||
|
.playback-button:active,
|
||||||
|
.playback-button--small:active {
|
||||||
|
background-color: var(--selected-click);
|
||||||
|
}
|
||||||
|
|
||||||
.playback-button--small.search {
|
.playback-button--small.search {
|
||||||
background-image: url("./assets/search.svg");
|
background-image: url("./assets/search.svg");
|
||||||
}
|
}
|
||||||
|
@ -1655,6 +1818,18 @@ input[type=checkbox][switch]:checked:active::before {
|
||||||
background-position: center;
|
background-position: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.playback-button.collapseLibrary {
|
||||||
|
font-family: "codicon";
|
||||||
|
font-size: 1em;
|
||||||
|
color: var(--textColor);
|
||||||
|
display: grid;
|
||||||
|
place-items: center;
|
||||||
|
|
||||||
|
span {
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.playback-button.pause {
|
.playback-button.pause {
|
||||||
background-image: url('./assets/cider-icons/pause.svg');
|
background-image: url('./assets/cider-icons/pause.svg');
|
||||||
background-size: 38px;
|
background-size: 38px;
|
||||||
|
@ -1678,10 +1853,13 @@ input[type=checkbox][switch]:checked:active::before {
|
||||||
background-size: 60%;
|
background-size: 60%;
|
||||||
background-position: center;
|
background-position: center;
|
||||||
}
|
}
|
||||||
.playback-button.disabled, .playback-button--small.disabled {
|
|
||||||
|
.playback-button.disabled,
|
||||||
|
.playback-button--small.disabled {
|
||||||
opacity: 0.25 !important;
|
opacity: 0.25 !important;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
transform: none !important;
|
transform: none !important;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: transparent !important;
|
background-color: transparent !important;
|
||||||
transform: none !important;
|
transform: none !important;
|
||||||
|
@ -1694,6 +1872,7 @@ input[type=checkbox][switch]:checked:active::before {
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
color: white;
|
color: white;
|
||||||
|
|
||||||
> svg {
|
> svg {
|
||||||
height: 16px;
|
height: 16px;
|
||||||
width: 16px;
|
width: 16px;
|
||||||
|
@ -1907,6 +2086,7 @@ input[type=checkbox][switch]:checked:active::before {
|
||||||
border-radius: inherit;
|
border-radius: inherit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.artist-chip__name {
|
.artist-chip__name {
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
@ -1990,6 +2170,7 @@ input[type=checkbox][switch]:checked:active::before {
|
||||||
// fancy pills
|
// fancy pills
|
||||||
.nav-pills {
|
.nav-pills {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
.nav-link {
|
.nav-link {
|
||||||
transition: transform .3s var(--appleEase);
|
transition: transform .3s var(--appleEase);
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -2095,6 +2276,7 @@ input[type=checkbox][switch]:checked:active::before {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(3, 1fr);
|
grid-template-columns: repeat(3, 1fr);
|
||||||
gap: 16px;
|
gap: 16px;
|
||||||
|
|
||||||
.grouping-btn {
|
.grouping-btn {
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
appearance: none;
|
appearance: none;
|
||||||
|
@ -2126,8 +2308,7 @@ input[type=checkbox][switch]:checked:active::before {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.app-sidebar-header
|
.app-sidebar-header .search-input-container .search-hints-container {
|
||||||
.search-input-container .search-hints-container {
|
|
||||||
top: 38px;
|
top: 38px;
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
}
|
}
|
||||||
|
@ -2137,15 +2318,14 @@ input[type=checkbox][switch]:checked:active::before {
|
||||||
.heart-icon {
|
.heart-icon {
|
||||||
left: 7px;
|
left: 7px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cd-mediaitem-list-item {
|
.cd-mediaitem-list-item {
|
||||||
padding-left: 25px;
|
padding-left: 25px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.library-artists-page {
|
&.library-artists-page {
|
||||||
.inner-container
|
.inner-container .list-container .podcasts-list {
|
||||||
.list-container
|
|
||||||
.podcasts-list {
|
|
||||||
background: rgba(27, 27, 27);
|
background: rgba(27, 27, 27);
|
||||||
padding-top: 14px;
|
padding-top: 14px;
|
||||||
width: 272px;
|
width: 272px;
|
||||||
|
@ -2153,6 +2333,7 @@ input[type=checkbox][switch]:checked:active::before {
|
||||||
.cd-mediaitem-list-item {
|
.cd-mediaitem-list-item {
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cd-mediaitem-list-item:hover {
|
.cd-mediaitem-list-item:hover {
|
||||||
width: 96%;
|
width: 96%;
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,22 +153,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.close-btn {
|
.close-btn {
|
||||||
width : 50px;
|
.menu-panel.menu-header-text.close-btn
|
||||||
height : 100%;
|
|
||||||
background-image : var(--gfx-closeBtn);
|
|
||||||
background-position: center;
|
|
||||||
background-repeat : no-repeat;
|
|
||||||
-webkit-app-region : no-drag;
|
|
||||||
appearance : none;
|
|
||||||
border : 0;
|
|
||||||
background-color : transparent;
|
|
||||||
position : absolute;
|
|
||||||
top : 0;
|
|
||||||
right : 0;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background-color: rgb(196, 43, 28)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -191,22 +177,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.close-btn {
|
.close-btn {
|
||||||
width : 50px;
|
.menu-panel.menu-header-text.close-btn
|
||||||
height : 100%;
|
|
||||||
background-image : var(--gfx-closeBtn);
|
|
||||||
background-position: center;
|
|
||||||
background-repeat : no-repeat;
|
|
||||||
-webkit-app-region : no-drag;
|
|
||||||
appearance : none;
|
|
||||||
border : 0;
|
|
||||||
background-color : transparent;
|
|
||||||
position : absolute;
|
|
||||||
top : 0;
|
|
||||||
right : 0;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background-color: rgb(196, 43, 28)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -371,14 +342,12 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.menu-header-text {
|
.menu-header-text {
|
||||||
margin: 18px 6px;
|
margin: 18px 6px;
|
||||||
|
|
||||||
.close-btn {
|
.close-btn {
|
||||||
width : 50px;
|
width: 36px;
|
||||||
height : 42px;
|
height: 36px;
|
||||||
background-image : var(--gfx-closeBtn);
|
|
||||||
background-position: center;
|
background-position: center;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
-webkit-app-region: no-drag;
|
-webkit-app-region: no-drag;
|
||||||
|
@ -386,8 +355,18 @@
|
||||||
border: 0;
|
border: 0;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top : 0;
|
top: 10px;
|
||||||
right : 0;
|
right: 10px;
|
||||||
|
border-radius: 50px;
|
||||||
|
display: grid;
|
||||||
|
align-content: center;
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
content: "";
|
||||||
|
font-family: "codicon";
|
||||||
|
color: var(--textColor);
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: rgb(196, 43, 28)
|
background-color: rgb(196, 43, 28)
|
||||||
|
@ -505,7 +484,8 @@
|
||||||
.popover-artwork {
|
.popover-artwork {
|
||||||
width: 200px;
|
width: 200px;
|
||||||
height: 200px;
|
height: 200px;
|
||||||
margin: 0 0 20px 0;
|
margin: 0 auto;
|
||||||
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.song-name {
|
.song-name {
|
||||||
|
|
|
@ -3,4 +3,57 @@ body[platform="linux"] {
|
||||||
#window-controls-container {
|
#window-controls-container {
|
||||||
//display: none;
|
//display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.window-controls {
|
||||||
|
justify-content: flex-end;
|
||||||
|
align-items : center;
|
||||||
|
padding-right : 6px;
|
||||||
|
|
||||||
|
>div {
|
||||||
|
--iconSize: 16px;
|
||||||
|
|
||||||
|
&.close,
|
||||||
|
&.minmax,
|
||||||
|
&.minimize,
|
||||||
|
&.minmax.restore {
|
||||||
|
background-image: unset!important;
|
||||||
|
position : relative;
|
||||||
|
display : grid;
|
||||||
|
align-content : center;
|
||||||
|
text-align : center;
|
||||||
|
height : 36px!important;
|
||||||
|
width : 36px!important;
|
||||||
|
border-radius : 50px;
|
||||||
|
transition: background-color .1s ease-in-out;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: rgb(200 200 200 / 10%)!important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.close::before {
|
||||||
|
font-family: "codicon";
|
||||||
|
font-size : var(--iconSize);
|
||||||
|
content : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
&.minmax::before {
|
||||||
|
font-family: "codicon";
|
||||||
|
font-size : var(--iconSize);
|
||||||
|
content : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
&.minimize::before {
|
||||||
|
font-family: "codicon";
|
||||||
|
font-size : var(--iconSize);
|
||||||
|
content : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
&.restore::before {
|
||||||
|
font-family: "codicon";
|
||||||
|
font-size : var(--iconSize);
|
||||||
|
content : "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -13,5 +13,37 @@ body[platform="darwin"] {
|
||||||
&::before {
|
&::before {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.app-chrome {
|
||||||
|
background-color: var(--macOSChromeColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.twopanel {
|
||||||
|
--chromeHeight1: 55px;
|
||||||
|
--chromeHeight: calc(var(--chromeHeight1) + var(--chromeHeight2));
|
||||||
|
|
||||||
|
.app-chrome .app-chrome-item.search {
|
||||||
|
margin-right: 12px;
|
||||||
|
}
|
||||||
|
.app-chrome .app-mainmenu {
|
||||||
|
width: 46px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.app-chrome.chrome-bottom {
|
||||||
|
background-color: var(--macOSChromeColor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#app-main {
|
||||||
|
background-color: transparent;
|
||||||
|
|
||||||
|
.app-navigation {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#app-content {
|
||||||
|
background-color: var(--baseColor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -114,15 +114,27 @@
|
||||||
margin: 2em;
|
margin: 2em;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Search Page
|
// Search Page
|
||||||
&.search-page {
|
&.search-page {
|
||||||
|
|
||||||
|
.searchToggle {
|
||||||
|
float: right;
|
||||||
|
|
||||||
|
>button {
|
||||||
|
min-width: 120px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.cd-mediaitem-square.mediaitem-brick {
|
.cd-mediaitem-square.mediaitem-brick {
|
||||||
width: 530px !important;
|
width: 530px !important;
|
||||||
|
|
||||||
.artwork-container .artwork {
|
.artwork-container .artwork {
|
||||||
height : 168px !important;
|
height : 168px !important;
|
||||||
width : 507px !important;
|
width : 507px !important;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
font-weight : bold;
|
font-weight : bold;
|
||||||
justify-content: left;
|
justify-content: left;
|
||||||
|
@ -553,7 +565,7 @@
|
||||||
overflow-y : overlay;
|
overflow-y : overlay;
|
||||||
height : 100%;
|
height : 100%;
|
||||||
padding : 0px;
|
padding : 0px;
|
||||||
background-color: var(--color1);
|
background-color: var(--color3);
|
||||||
|
|
||||||
&.scrollbody {
|
&.scrollbody {
|
||||||
.tabs {
|
.tabs {
|
||||||
|
@ -622,7 +634,7 @@
|
||||||
opacity : .7;
|
opacity : .7;
|
||||||
animation : playlistArtworkFadeIn 1s var(--appleEase);
|
animation : playlistArtworkFadeIn 1s var(--appleEase);
|
||||||
|
|
||||||
.artworkMaterial>img {
|
.artworkMaterial img {
|
||||||
filter : brightness(100%) blur(80px) saturate(100%) contrast(1);
|
filter : brightness(100%) blur(80px) saturate(100%) contrast(1);
|
||||||
object-position: center;
|
object-position: center;
|
||||||
object-fit : cover;
|
object-fit : cover;
|
||||||
|
@ -684,6 +696,16 @@
|
||||||
width : 60vw;
|
width : 60vw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.descriptionEdit {
|
||||||
|
font-size : 14px;
|
||||||
|
flex-shrink : unset;
|
||||||
|
background : transparent;
|
||||||
|
border : 0px;
|
||||||
|
color : inherit;
|
||||||
|
font-family : inherit;
|
||||||
|
width : 60vw;
|
||||||
|
}
|
||||||
|
|
||||||
.playlist-artist {
|
.playlist-artist {
|
||||||
font-size : 20px;
|
font-size : 20px;
|
||||||
margin-bottom: 6px;
|
margin-bottom: 6px;
|
||||||
|
@ -950,6 +972,10 @@
|
||||||
right : 28px;
|
right : 28px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.animated .artist-header {
|
||||||
|
min-height: 500px;
|
||||||
|
}
|
||||||
|
|
||||||
.artist-header {
|
.artist-header {
|
||||||
//background: linear-gradient(45deg, var(--keyColor), #0e0e0e);
|
//background: linear-gradient(45deg, var(--keyColor), #0e0e0e);
|
||||||
color : white;
|
color : white;
|
||||||
|
@ -965,6 +991,19 @@
|
||||||
// margin-top: -16px;
|
// margin-top: -16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.artist-hero {
|
||||||
|
height:100%;
|
||||||
|
position: absolute;
|
||||||
|
top:0;
|
||||||
|
left:0;
|
||||||
|
right:0;
|
||||||
|
bottom:0;
|
||||||
|
|
||||||
|
.mediaitem-artwork {
|
||||||
|
border-radius: 0px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.artworkContainer {
|
.artworkContainer {
|
||||||
position : absolute;
|
position : absolute;
|
||||||
|
@ -978,7 +1017,7 @@
|
||||||
opacity : .7;
|
opacity : .7;
|
||||||
animation : playlistArtworkFadeIn 1s var(--appleEase);
|
animation : playlistArtworkFadeIn 1s var(--appleEase);
|
||||||
|
|
||||||
.artworkMaterial>img {
|
.artworkMaterial img {
|
||||||
filter : brightness(100%) blur(80px) saturate(100%) contrast(1);
|
filter : brightness(100%) blur(80px) saturate(100%) contrast(1);
|
||||||
object-position: center;
|
object-position: center;
|
||||||
object-fit : cover;
|
object-fit : cover;
|
||||||
|
@ -1001,6 +1040,7 @@
|
||||||
position : absolute;
|
position : absolute;
|
||||||
overflow : hidden;
|
overflow : hidden;
|
||||||
box-shadow: rgb(0 0 0 / 50%) 0 0 0 1000000px inset;
|
box-shadow: rgb(0 0 0 / 50%) 0 0 0 1000000px inset;
|
||||||
|
z-index: 1;
|
||||||
|
|
||||||
video {
|
video {
|
||||||
overflow : hidden;
|
overflow : hidden;
|
||||||
|
@ -1166,6 +1206,7 @@
|
||||||
&.addon {
|
&.addon {
|
||||||
background: rgb(86 86 86 / 20%);
|
background: rgb(86 86 86 / 20%);
|
||||||
}
|
}
|
||||||
|
|
||||||
&.applied {
|
&.applied {
|
||||||
background : var(--keyColor-disabled);
|
background : var(--keyColor-disabled);
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
|
@ -1229,6 +1270,7 @@
|
||||||
&:hover {
|
&:hover {
|
||||||
cursor: grab;
|
cursor: grab;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:active {
|
&:active {
|
||||||
cursor: grabbing;
|
cursor: grabbing;
|
||||||
}
|
}
|
||||||
|
@ -1645,24 +1687,221 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.content-inner.oobe {
|
||||||
|
position : absolute;
|
||||||
|
overflow : hidden;
|
||||||
|
top : 0;
|
||||||
|
left : 0;
|
||||||
|
bottom : 0;
|
||||||
|
right : 0;
|
||||||
|
display : grid;
|
||||||
|
place-items: center;
|
||||||
|
width : 100%;
|
||||||
|
background : #1e1e1e;
|
||||||
|
|
||||||
|
.oobe-view {
|
||||||
|
display : flex;
|
||||||
|
flex-direction : column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items : center;
|
||||||
|
gap : 32px;
|
||||||
|
max-width : 1280px;
|
||||||
|
max-height : 720px;
|
||||||
|
align-self : center;
|
||||||
|
justify-self : center;
|
||||||
|
height : 100%;
|
||||||
|
width : 100%;
|
||||||
|
|
||||||
|
|
||||||
|
.oobe-header {
|
||||||
|
font-size : 3em;
|
||||||
|
text-shadow: var(--replayTextShadow);
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.oobe-body {
|
||||||
|
flex : 1;
|
||||||
|
width : 100%;
|
||||||
|
background : #ffffff0d;
|
||||||
|
border-radius: 20px;
|
||||||
|
padding : 3em;
|
||||||
|
overflow-y : scroll;
|
||||||
|
overflow-x : hidden;
|
||||||
|
|
||||||
|
@media screen and (max-width: 1161px) {
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.text {
|
||||||
|
white-space: pre-wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blurb {
|
||||||
|
white-space: pre-wrap;
|
||||||
|
margin : 16px;
|
||||||
|
line-height: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.visual {
|
||||||
|
padding: 1em;
|
||||||
|
|
||||||
|
.stylePicker {
|
||||||
|
border-radius: 10px;
|
||||||
|
overflow : hidden;
|
||||||
|
cursor : pointer;
|
||||||
|
transition : 0.25s all;
|
||||||
|
box-shadow : 0px 2px 6px rgba(0, 0, 0, 0.25);
|
||||||
|
width : 450px;
|
||||||
|
margin : 0 auto;
|
||||||
|
|
||||||
|
.visualPreview {
|
||||||
|
pointer-events: none;
|
||||||
|
transition : .25s all;
|
||||||
|
width : 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-body {
|
||||||
|
padding : 0;
|
||||||
|
display : flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items : center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-footer {
|
||||||
|
font-size : 1.25em;
|
||||||
|
font-weight: 500;
|
||||||
|
position : absolute;
|
||||||
|
bottom : 0;
|
||||||
|
left : 0;
|
||||||
|
width : 100%;
|
||||||
|
border : 0px;
|
||||||
|
text-shadow: 0px 2px 6px rgba(0, 0, 0, 0.25);
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.style-active {
|
||||||
|
outline: 4px solid var(--keyColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
transform : scale(1.10) translateZ(-1px) translateY(10px);
|
||||||
|
z-index : 1;
|
||||||
|
box-shadow: 0px 12px 16px rgb(0 0 0 / 25%);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-height: 688px) {
|
||||||
|
width: 270px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.oobe-footer {
|
||||||
|
display : flex;
|
||||||
|
flex-direction : row;
|
||||||
|
justify-content: center;
|
||||||
|
align-items : center;
|
||||||
|
padding : 16px;
|
||||||
|
|
||||||
|
.md-btn {
|
||||||
|
font-size : 18px;
|
||||||
|
min-width : 128px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.oobe-titlebar {
|
||||||
|
position : absolute;
|
||||||
|
top : 0;
|
||||||
|
left : 0;
|
||||||
|
height : 46px;
|
||||||
|
width : 100%;
|
||||||
|
align-items : center;
|
||||||
|
justify-content : right;
|
||||||
|
display : flex;
|
||||||
|
-webkit-app-region: drag;
|
||||||
|
|
||||||
|
.button-group {
|
||||||
|
-webkit-app-region: no-drag;
|
||||||
|
display : flex;
|
||||||
|
flex-direction : row;
|
||||||
|
width : 100px;
|
||||||
|
height : 100%;
|
||||||
|
justify-content : center;
|
||||||
|
align-items : center;
|
||||||
|
gap : 16px;
|
||||||
|
|
||||||
|
>button {
|
||||||
|
height : 32px;
|
||||||
|
width : 32px;
|
||||||
|
font-size : 16px;
|
||||||
|
border-radius : 0px;
|
||||||
|
border : 0;
|
||||||
|
appearance : none;
|
||||||
|
position : relative;
|
||||||
|
display : flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items : center;
|
||||||
|
border-radius : 100%;
|
||||||
|
|
||||||
|
&.close {
|
||||||
|
background-color: #fc3c44aa;
|
||||||
|
&:hover {
|
||||||
|
background-color: #fc3c44;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.min {
|
||||||
|
background-color: rgb(200 200 200 / 5%);
|
||||||
|
&:hover {
|
||||||
|
background-color: rgb(200 200 200 / 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.close::before {
|
||||||
|
font-family: "codicon";
|
||||||
|
content : "";
|
||||||
|
color : white;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.min::before {
|
||||||
|
font-family: "codicon";
|
||||||
|
content : "";
|
||||||
|
color : white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.content-inner.cider-multiroom {
|
.content-inner.cider-multiroom {
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
|
|
||||||
.detail {
|
.detail {
|
||||||
padding: 32px;
|
padding: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header-desc {
|
.header-desc {
|
||||||
font-size : 1em;
|
font-size : 1em;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
.artworkContainer {
|
.artworkContainer {
|
||||||
height: 300px;
|
height: 300px;
|
||||||
width : 100%;
|
width : 100%;
|
||||||
|
|
||||||
img {
|
img {
|
||||||
height : 100%;
|
height : 100%;
|
||||||
width : 100%;
|
width : 100%;
|
||||||
overflow : hidden;
|
overflow : hidden;
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
filter : unset;
|
filter : unset;
|
||||||
|
|
||||||
&:last-child {
|
&:last-child {
|
||||||
transform: unset;
|
transform: unset;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,66 +1,47 @@
|
||||||
import { CiderCache } from "./cidercache.js"
|
import { CiderCache } from "./cidercache.js";
|
||||||
|
|
||||||
async function spawnMica() {
|
async function spawnMica() {
|
||||||
if (typeof window.micaSpawned !== "undefined") {
|
if (typeof window.micaSpawned !== "undefined") {
|
||||||
return
|
return;
|
||||||
} else {
|
} else {
|
||||||
window.micaSpawned = true
|
window.micaSpawned = true;
|
||||||
}
|
}
|
||||||
const micaDiv = document.createElement('div');
|
const micaDiv = document.createElement("div");
|
||||||
const blurIterations = 6
|
const blurIterations = 6;
|
||||||
micaDiv.id = 'micaEffect';
|
micaDiv.id = "micaEffect";
|
||||||
micaDiv.style.position = "fixed"
|
micaDiv.style.position = "fixed";
|
||||||
micaDiv.style.top = "0"
|
micaDiv.style.top = "0";
|
||||||
micaDiv.style.left = "0"
|
micaDiv.style.left = "0";
|
||||||
micaDiv.style.right = "0"
|
micaDiv.style.right = "0";
|
||||||
micaDiv.style.bottom = "0"
|
micaDiv.style.bottom = "0";
|
||||||
micaDiv.style.zIndex = -1
|
micaDiv.style.zIndex = -1;
|
||||||
|
|
||||||
let lastScreenX;
|
let lastScreenX;
|
||||||
let lastScreenY;
|
let lastScreenY;
|
||||||
let lastScreenWidth;
|
let lastScreenWidth;
|
||||||
let lastScreenHeight;
|
let lastScreenHeight;
|
||||||
|
|
||||||
let regen = true
|
let regen = true;
|
||||||
let imgSrc = await ipcRenderer.sendSync("get-wallpaper")
|
let imgSrc = await ipcRenderer.sendSync("get-wallpaper", {
|
||||||
|
blurAmount: 256
|
||||||
|
});
|
||||||
|
|
||||||
let micaCache = await CiderCache.getCache("mica-cache")
|
// let micaCache = await CiderCache.getCache("mica-cache");
|
||||||
if (!micaCache) {
|
// if (!micaCache) {
|
||||||
micaCache = {
|
// micaCache = {
|
||||||
path: "",
|
// path: "",
|
||||||
data: ""
|
// data: "",
|
||||||
}
|
// };
|
||||||
}
|
// }
|
||||||
if (micaCache.path == imgSrc.path) {
|
// if (micaCache.path == imgSrc.path) {
|
||||||
regen = false
|
// regen = false;
|
||||||
imgSrc = micaCache
|
// imgSrc = micaCache;
|
||||||
}
|
// }
|
||||||
let canvas = document.createElement('canvas');
|
let canvas = document.createElement("canvas");
|
||||||
let ctx = canvas.getContext('2d');
|
let ctx = canvas.getContext("2d");
|
||||||
let img = new Image();
|
let img = new Image();
|
||||||
img.src = imgSrc.data;
|
micaDiv.style.backgroundImage = `url(${imgSrc.data})`;
|
||||||
img.onload = function () {
|
|
||||||
canvas.width = img.width;
|
|
||||||
canvas.height = img.height;
|
|
||||||
ctx.drawImage(img, 0, 0);
|
|
||||||
if (regen) {
|
|
||||||
for (let i = 0; i < blurIterations; i++) {
|
|
||||||
StackBlur.canvasRGB(canvas, 0, 0, img.width, img.height, 128);
|
|
||||||
}
|
|
||||||
micaCache.path = imgSrc.path
|
|
||||||
micaCache.data = canvas.toDataURL()
|
|
||||||
CiderCache.putCache("mica-cache", micaCache)
|
|
||||||
}
|
|
||||||
let imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);
|
|
||||||
micaDiv.style.backgroundImage = `url(${micaCache.data})`;
|
|
||||||
document.body.appendChild(micaDiv);
|
document.body.appendChild(micaDiv);
|
||||||
// on animation finished set animation to unset
|
|
||||||
micaDiv.addEventListener('animationend', function () {
|
|
||||||
micaDiv.style.opacity = '1';
|
|
||||||
micaDiv.style.animation = 'unset';
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function onScreenMove(cb) {
|
function onScreenMove(cb) {
|
||||||
function detectScreenMove() {
|
function detectScreenMove() {
|
||||||
|
@ -70,7 +51,10 @@ async function spawnMica() {
|
||||||
cb();
|
cb();
|
||||||
}
|
}
|
||||||
// window size change
|
// window size change
|
||||||
if (lastScreenWidth !== window.innerWidth || lastScreenHeight !== window.innerHeight) {
|
if (
|
||||||
|
lastScreenWidth !== window.innerWidth ||
|
||||||
|
lastScreenHeight !== window.innerHeight
|
||||||
|
) {
|
||||||
lastScreenWidth = window.innerWidth;
|
lastScreenWidth = window.innerWidth;
|
||||||
lastScreenHeight = window.innerHeight;
|
lastScreenHeight = window.innerHeight;
|
||||||
cb();
|
cb();
|
||||||
|
@ -101,7 +85,7 @@ async function spawnMica() {
|
||||||
micaDiv.style.backgroundPosition = `-${x}px -${y}px`;
|
micaDiv.style.backgroundPosition = `-${x}px -${y}px`;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return true
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
export { spawnMica }
|
export { spawnMica };
|
||||||
|
|
|
@ -26,6 +26,7 @@ const app = new Vue({
|
||||||
showHints: false,
|
showHints: false,
|
||||||
results: {},
|
results: {},
|
||||||
resultsSocial: {},
|
resultsSocial: {},
|
||||||
|
resultsLibrary: {},
|
||||||
limit: 10
|
limit: 10
|
||||||
},
|
},
|
||||||
fullscreenLyrics: false,
|
fullscreenLyrics: false,
|
||||||
|
@ -116,6 +117,7 @@ const app = new Vue({
|
||||||
displayListing: [],
|
displayListing: [],
|
||||||
downloadState: 0 // 0 = not started, 1 = in progress, 2 = complete, 3 = empty library
|
downloadState: 0 // 0 = not started, 1 = in progress, 2 = complete, 3 = empty library
|
||||||
},
|
},
|
||||||
|
localsongs: []
|
||||||
},
|
},
|
||||||
playlists: {
|
playlists: {
|
||||||
listing: [],
|
listing: [],
|
||||||
|
@ -177,9 +179,7 @@ const app = new Vue({
|
||||||
"artwork": { "url": "./assets/logocut.png" }
|
"artwork": { "url": "./assets/logocut.png" }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
forceDirectives: {
|
forceDirectives: {},
|
||||||
|
|
||||||
},
|
|
||||||
menuOpened: false,
|
menuOpened: false,
|
||||||
maximized: false,
|
maximized: false,
|
||||||
drawerOpened: false,
|
drawerOpened: false,
|
||||||
|
@ -274,6 +274,31 @@ const app = new Vue({
|
||||||
}, false)
|
}, false)
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
setWindowHash(route = "") {
|
||||||
|
window.location.hash = `#${route}`;
|
||||||
|
},
|
||||||
|
async oobeInit() {
|
||||||
|
this.appMode = "oobe"
|
||||||
|
this.setLz(this.cfg.general.language)
|
||||||
|
this.setLzManual()
|
||||||
|
clearTimeout(this.hangtimer)
|
||||||
|
document.body.removeAttribute("loading")
|
||||||
|
ipcRenderer.invoke("renderer-ready", true)
|
||||||
|
document.querySelector("#LOADER").remove()
|
||||||
|
},
|
||||||
|
getAppStyle() {
|
||||||
|
let finalStyle = {}
|
||||||
|
if (this.cfg.visual.window_background_style === "color") {
|
||||||
|
finalStyle["background-color"] = this.cfg.visual.windowColor
|
||||||
|
}
|
||||||
|
if (this.cfg.visual.customAccentColor) {
|
||||||
|
finalStyle["--keyColor"] = this.cfg.visual.accentColor
|
||||||
|
finalStyle["--songProgressColor"] = this.cfg.visual.accentColor
|
||||||
|
} else if (this.cfg.visual.purplePodcastPlaybackBar && MusicKit.getInstance().nowPlayingItem?.type == "podcast-episodes") {
|
||||||
|
finalStyle["--songProgressColor"] = '#6929D0'
|
||||||
|
}
|
||||||
|
return finalStyle
|
||||||
|
},
|
||||||
setTimeout(func, time) {
|
setTimeout(func, time) {
|
||||||
return setTimeout(func, time);
|
return setTimeout(func, time);
|
||||||
},
|
},
|
||||||
|
@ -297,10 +322,11 @@ const app = new Vue({
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
formatVolumeTooltip() {
|
formatVolumeTooltip() {
|
||||||
return this.cfg.audio.dBSPL ? (Number(this.cfg.audio.dBSPLcalibration) + (Math.log10(this.mk.volume) * 20)).toFixed(2) + ' dB SPL' : (Math.log10(this.mk.volume) * 20).toFixed(2) + ' dBFS'
|
let advancedTooltip = this.cfg.audio.dBSPL ? (Number(this.cfg.audio.dBSPLcalibration) + (Math.log10(this.mk.volume) * 20)).toFixed(2) + ' dB SPL' : (Math.log10(this.mk.volume) * 20).toFixed(2) + ' dBFS'
|
||||||
|
return this.cfg.audio.advanced ? advancedTooltip : (this.mk.volume * 100).toFixed(0) + '%'
|
||||||
},
|
},
|
||||||
mainMenuVisibility(val) {
|
mainMenuVisibility(val, isContextMenu) {
|
||||||
if(this.chrome.sidebarCollapsed) {
|
if (this.chrome.sidebarCollapsed && !isContextMenu) {
|
||||||
this.chrome.sidebarCollapsed = false
|
this.chrome.sidebarCollapsed = false
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -334,7 +360,8 @@ const app = new Vue({
|
||||||
this.listennow.timestamp = 0;
|
this.listennow.timestamp = 0;
|
||||||
this.browsepage.timestamp = 0;
|
this.browsepage.timestamp = 0;
|
||||||
this.radio.timestamp = 0;
|
this.radio.timestamp = 0;
|
||||||
} catch (e) { }
|
} catch (e) {
|
||||||
|
}
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Grabs translation for localization.
|
* Grabs translation for localization.
|
||||||
|
@ -490,18 +517,20 @@ const app = new Vue({
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
goToGrouping(url = "https://music.apple.com/WebObjects/MZStore.woa/wa/viewGrouping?cc=us&id=34") {
|
goToGrouping(url = "https://music.apple.com/WebObjects/MZStore.woa/wa/viewGrouping?cc=us&id=34") {
|
||||||
|
if (url.includes('viewTop')) {
|
||||||
|
window.location.hash = `#charts/top`
|
||||||
|
} else {
|
||||||
const id = url.split("id=")[1];
|
const id = url.split("id=")[1];
|
||||||
window.location.hash = `#groupings/${id}`
|
window.location.hash = `#groupings/${id}`
|
||||||
|
}
|
||||||
},
|
},
|
||||||
navigateForward() {
|
navigateForward() {
|
||||||
history.forward()
|
history.forward()
|
||||||
},
|
},
|
||||||
getHTMLStyle() {
|
getHTMLStyle() {
|
||||||
if (app.cfg.visual.uiScale != 1) {
|
|
||||||
document.querySelector("#app").style.zoom = app.cfg.visual.uiScale
|
ipcRenderer.send("setScreenScale", app.cfg.visual.uiScale);
|
||||||
} else {
|
|
||||||
document.querySelector("#app").style.zoom = ""
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
resetState() {
|
resetState() {
|
||||||
this.menuPanel.visible = false;
|
this.menuPanel.visible = false;
|
||||||
|
@ -617,7 +646,9 @@ const app = new Vue({
|
||||||
},
|
},
|
||||||
async init() {
|
async init() {
|
||||||
let self = this
|
let self = this
|
||||||
|
if (!localStorage.getItem("seenOOBE")) {
|
||||||
|
localStorage.setItem("seenOOBE", 1)
|
||||||
|
}
|
||||||
if (this.cfg.visual.styles.length != 0) {
|
if (this.cfg.visual.styles.length != 0) {
|
||||||
await this.reloadStyles()
|
await this.reloadStyles()
|
||||||
}
|
}
|
||||||
|
@ -694,9 +725,6 @@ const app = new Vue({
|
||||||
// Set mk.volume to -1 (setting to 0 wont work, so temp solution setting to -1)
|
// Set mk.volume to -1 (setting to 0 wont work, so temp solution setting to -1)
|
||||||
this.mk.volume = -1;
|
this.mk.volume = -1;
|
||||||
}
|
}
|
||||||
// ipcRenderer.invoke('getStoreValue', 'audio.volume').then((value) => {
|
|
||||||
// self.mk.volume = value
|
|
||||||
// })
|
|
||||||
|
|
||||||
// load cached library
|
// load cached library
|
||||||
let librarySongs = await CiderCache.getCache("library-songs")
|
let librarySongs = await CiderCache.getCache("library-songs")
|
||||||
|
@ -809,13 +837,30 @@ const app = new Vue({
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DiscordRPC Reload Return Event
|
||||||
|
* @author @coredev-uk
|
||||||
|
*/
|
||||||
|
ipcRenderer.on('rpcReloaded', (e, user) => {
|
||||||
|
if (user.username) {
|
||||||
|
app.notyf.success(app.stringTemplateParser(app.getLz("settings.option.connectivity.discordRPC.reconnectedToUser"), {
|
||||||
|
user: `${user.username}#${user.discriminator}`,
|
||||||
|
userid: user.id
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
ipcRenderer.on('getUpdatedLocalList', (event, data) => {
|
||||||
|
console.log("cider-local", data);
|
||||||
|
this.library.localsongs = data;
|
||||||
|
})
|
||||||
|
|
||||||
ipcRenderer.on('SoundCheckTag', (event, tag) => {
|
ipcRenderer.on('SoundCheckTag', (event, tag) => {
|
||||||
// let replaygain = self.parseSCTagToRG(tag)
|
// let replaygain = self.parseSCTagToRG(tag)
|
||||||
try {
|
try {
|
||||||
if (app.mk.nowPlayingItem.type !== 'song') {
|
if (app.mk.nowPlayingItem.type !== 'song') {
|
||||||
CiderAudio.audioNodes.gainNode.gain.value = 0.70794578438;
|
CiderAudio.audioNodes.gainNode.gain.value = 0.70794578438;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
let soundcheck = tag.split(" ")
|
let soundcheck = tag.split(" ")
|
||||||
let numbers = []
|
let numbers = []
|
||||||
for (let item of soundcheck) {
|
for (let item of soundcheck) {
|
||||||
|
@ -824,18 +869,23 @@ const app = new Vue({
|
||||||
}
|
}
|
||||||
numbers.shift()
|
numbers.shift()
|
||||||
let peak = Math.max(numbers[6], numbers[7]) / 32768.0
|
let peak = Math.max(numbers[6], numbers[7]) / 32768.0
|
||||||
let gain = Math.pow(10, ((-1.3 - (Math.log10(peak) * 20)) / 20))// EBU R 128 Compliant
|
let gain = Math.pow(10, ((-1.7 - (Math.log10(peak) * 20)) / 20))// EBU R 128 Compliant
|
||||||
console.debug(`[Cider][MaikiwiSoundCheck] Peak Gain: '${(Math.log10(peak) * 20).toFixed(2)}' dB | Adjusting '${(Math.log10(gain) * 20).toFixed(2)}' dB`)
|
console.debug(`[Cider][MaikiwiSoundCheck] Peak Gain: '${(Math.log10(peak) * 20).toFixed(2)}' dB | Adjusting '${(Math.log10(gain) * 20).toFixed(2)}' dB`)
|
||||||
try {
|
try {
|
||||||
//CiderAudio.audioNodes.gainNode.gain.value = (Math.min(Math.pow(10, (replaygain.gain / 20)), (1 / replaygain.peak)))
|
//CiderAudio.audioNodes.gainNode.gain.value = (Math.min(Math.pow(10, (replaygain.gain / 20)), (1 / replaygain.peak)))
|
||||||
CiderAudio.audioNodes.gainNode.gain.value = gain
|
CiderAudio.audioNodes.gainNode.gain.value = gain
|
||||||
} catch (e) { }
|
} catch (e) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
try { ipcRenderer.send('SoundCheckTag', event, tag); }
|
try {
|
||||||
catch (e) {
|
ipcRenderer.send('SoundCheckTag', event, tag);
|
||||||
try {ipcRenderer.send('SoundCheckTag', event, tag);}
|
} catch (e) {
|
||||||
catch (e) {console.log("[Cider][MaikiwiSoundCheck] Error [Gave up after 3 consecutive attempts]: " + e)}
|
try {
|
||||||
|
ipcRenderer.send('SoundCheckTag', event, tag);
|
||||||
|
} catch (e) {
|
||||||
|
console.log("[Cider][MaikiwiSoundCheck] Error [Gave up after 3 consecutive attempts]: " + e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} // brute force until it works
|
} // brute force until it works
|
||||||
})
|
})
|
||||||
|
@ -872,26 +922,41 @@ const app = new Vue({
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Used for Live Radio stations to set Metadata
|
||||||
|
this.mk.addEventListener(MusicKit.Events.timedMetadataDidChange, (e) => {
|
||||||
|
app.mk.nowPlayingItem.attributes.name = e.title
|
||||||
|
app.mk.nowPlayingItem.attributes.artistName = e.performer
|
||||||
|
app.mk.nowPlayingItem.attributes.albumName = e.album
|
||||||
|
if(e.links[1]) {
|
||||||
|
app.currentArtUrl = e.links[1].url
|
||||||
|
app.currentArtUrlRaw = e.links[1].url
|
||||||
|
}else{
|
||||||
|
app.currentArtUrl = e.links[0].url
|
||||||
|
app.currentArtUrlRaw = e.links[0].url
|
||||||
|
}
|
||||||
|
app.mk.nowPlayingItem._songId = e._adamId ? e._adamId : -1
|
||||||
|
app.mk.nowPlayingItem.id = e._adamId ? e._adamId : -1
|
||||||
|
})
|
||||||
|
|
||||||
this.mk.addEventListener(MusicKit.Events.nowPlayingItemDidChange, (a) => {
|
this.mk.addEventListener(MusicKit.Events.nowPlayingItemDidChange, (a) => {
|
||||||
if (self.$refs.queue) {
|
if (self.$refs.queue) {
|
||||||
self.$refs.queue.updateQueue();
|
self.$refs.queue.updateQueue();
|
||||||
}
|
}
|
||||||
this.currentSongInfo = a
|
this.currentSongInfo = a
|
||||||
|
|
||||||
|
if (app.cfg.advanced.AudioContext) {
|
||||||
try {
|
try {
|
||||||
if (app.mk.nowPlayingItem.flavor.includes("64")) {
|
if (app.mk.nowPlayingItem.flavor.includes("64")) {
|
||||||
if (localStorage.getItem("playingBitrate") !== "64") {
|
if (localStorage.getItem("playingBitrate") !== "64") {
|
||||||
localStorage.setItem("playingBitrate", "64")
|
localStorage.setItem("playingBitrate", "64")
|
||||||
CiderAudio.hierarchical_loading();
|
CiderAudio.hierarchical_loading();
|
||||||
}
|
}
|
||||||
}
|
} else if (app.mk.nowPlayingItem.flavor.includes("256")) {
|
||||||
else if (app.mk.nowPlayingItem.flavor.includes("256")) {
|
|
||||||
if (localStorage.getItem("playingBitrate") !== "256") {
|
if (localStorage.getItem("playingBitrate") !== "256") {
|
||||||
localStorage.setItem("playingBitrate", "256")
|
localStorage.setItem("playingBitrate", "256")
|
||||||
CiderAudio.hierarchical_loading();
|
CiderAudio.hierarchical_loading();
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
localStorage.setItem("playingBitrate", "256")
|
localStorage.setItem("playingBitrate", "256")
|
||||||
CiderAudio.hierarchical_loading();
|
CiderAudio.hierarchical_loading();
|
||||||
}
|
}
|
||||||
|
@ -899,6 +964,7 @@ const app = new Vue({
|
||||||
localStorage.setItem("playingBitrate", "256")
|
localStorage.setItem("playingBitrate", "256")
|
||||||
CiderAudio.hierarchical_loading();
|
CiderAudio.hierarchical_loading();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (app.cfg.audio.normalization) {
|
if (app.cfg.audio.normalization) {
|
||||||
// get unencrypted audio previews to get SoundCheck's normalization tag
|
// get unencrypted audio previews to get SoundCheck's normalization tag
|
||||||
|
@ -1019,7 +1085,11 @@ const app = new Vue({
|
||||||
.then(res => res.json())
|
.then(res => res.json())
|
||||||
.then(res => {
|
.then(res => {
|
||||||
if (res[0].sha != theme.commit) {
|
if (res[0].sha != theme.commit) {
|
||||||
const notify = notyf.open({ className: "notyf-info", type: "info", message: `[Themes] ${theme.name} has an update available.` })
|
const notify = notyf.open({
|
||||||
|
className: "notyf-info",
|
||||||
|
type: "info",
|
||||||
|
message: `[Themes] ${theme.name} has an update available.`
|
||||||
|
})
|
||||||
notify.on("click", () => {
|
notify.on("click", () => {
|
||||||
app.appRoute("themes-github")
|
app.appRoute("themes-github")
|
||||||
notyf.dismiss(notify)
|
notyf.dismiss(notify)
|
||||||
|
@ -1118,9 +1188,20 @@ const app = new Vue({
|
||||||
},
|
},
|
||||||
getAppClasses() {
|
getAppClasses() {
|
||||||
let classes = {}
|
let classes = {}
|
||||||
|
switch (this.getThemeDirective('forceUI') ?? "none") {
|
||||||
|
case "compact":
|
||||||
|
classes.compact = true;
|
||||||
|
break;
|
||||||
|
case "standard":
|
||||||
|
classes.compact = false;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
if (this.cfg.advanced.experiments.includes('compactui')) {
|
if (this.cfg.advanced.experiments.includes('compactui')) {
|
||||||
classes.compact = true
|
classes.compact = true;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (this.cfg.visual.window_background_style == "none") {
|
if (this.cfg.visual.window_background_style == "none") {
|
||||||
classes.simplebg = true
|
classes.simplebg = true
|
||||||
}
|
}
|
||||||
|
@ -1202,6 +1283,66 @@ const app = new Vue({
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
async syncFavorites() {
|
||||||
|
const notify = notyf.open({
|
||||||
|
className: "notyf-info",
|
||||||
|
type: "info",
|
||||||
|
message: `[${app.getLz('home.syncFavorites')}] ${app.getLz('home.syncFavorites.gettingArtists')}`
|
||||||
|
})
|
||||||
|
const results = await MusicKitTools.v3Continuous({
|
||||||
|
href: "/v1/me/library/artists", options: {
|
||||||
|
"include": ["catalog"],
|
||||||
|
"fields[artists]": ["inFavorites"]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
let favs = []
|
||||||
|
// for each result
|
||||||
|
results.forEach(result => {
|
||||||
|
try {
|
||||||
|
if (result.relationships?.catalog?.data[0]?.attributes?.inFavorites) {
|
||||||
|
if(!favs.includes(result.relationships?.catalog?.data[0].id)) {
|
||||||
|
favs.push(result.relationships?.catalog?.data[0].id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
e = null
|
||||||
|
}
|
||||||
|
})
|
||||||
|
notyf.success(`[${app.getLz('home.syncFavorites')}] ${app.getLz('action.done')}`)
|
||||||
|
app.cfg.home.followedArtists = favs
|
||||||
|
return favs
|
||||||
|
},
|
||||||
|
async setArtistFavorite(id, val = true) {
|
||||||
|
if(val) {
|
||||||
|
if(!app.cfg.home.followedArtists.includes(id)) {
|
||||||
|
app.cfg.home.followedArtists.push(id)
|
||||||
|
}
|
||||||
|
await app.mk.api.v3.music(`/v1/me/favorites`, {
|
||||||
|
"art[url]": "f",
|
||||||
|
"ids[artists]": app.artistPage.data.id,
|
||||||
|
"l": app.mklang,
|
||||||
|
"platform": "web"
|
||||||
|
}, {
|
||||||
|
fetchOptions: {
|
||||||
|
method: "POST"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
if(app.cfg.home.followedArtists.includes(id)) {
|
||||||
|
app.cfg.home.followedArtists.splice(app.cfg.home.followedArtists.indexOf(id), 1)
|
||||||
|
}
|
||||||
|
await app.mk.api.v3.music(`/v1/me/favorites`, {
|
||||||
|
"art[url]": "f",
|
||||||
|
"ids[artists]": app.artistPage.data.id,
|
||||||
|
"l": app.mklang,
|
||||||
|
"platform": "web"
|
||||||
|
}, {
|
||||||
|
fetchOptions: {
|
||||||
|
method: "DELETE"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
async refreshPlaylists(localOnly = false, useCachedPlaylists = true) {
|
async refreshPlaylists(localOnly = false, useCachedPlaylists = true) {
|
||||||
let self = this
|
let self = this
|
||||||
let trackMap = this.cfg.advanced.playlistTrackMapping
|
let trackMap = this.cfg.advanced.playlistTrackMapping
|
||||||
|
@ -1267,10 +1408,12 @@ const app = new Vue({
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
} catch (e) { }
|
} catch (e) {
|
||||||
|
}
|
||||||
if (playlist.type == "library-playlist-folders") {
|
if (playlist.type == "library-playlist-folders") {
|
||||||
try {
|
try {
|
||||||
await deepScan(playlist.id).catch(e => { })
|
await deepScan(playlist.id).catch(e => {
|
||||||
|
})
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1559,7 +1702,7 @@ const app = new Vue({
|
||||||
this.page = ""
|
this.page = ""
|
||||||
const artistData = await this.mkapi("artists", false, id, {
|
const artistData = await this.mkapi("artists", false, id, {
|
||||||
"views": "featured-release,full-albums,appears-on-albums,featured-albums,featured-on-albums,singles,compilation-albums,live-albums,latest-release,top-music-videos,similar-artists,top-songs,playlists,more-to-hear,more-to-see",
|
"views": "featured-release,full-albums,appears-on-albums,featured-albums,featured-on-albums,singles,compilation-albums,live-albums,latest-release,top-music-videos,similar-artists,top-songs,playlists,more-to-hear,more-to-see",
|
||||||
"extend": "artistBio,bornOrFormed,editorialArtwork,editorialVideo,isGroup,origin,hero",
|
"extend": "centeredFullscreenBackground,artistBio,bornOrFormed,editorialArtwork,editorialVideo,isGroup,origin,hero",
|
||||||
"extend[playlists]": "trackCount",
|
"extend[playlists]": "trackCount",
|
||||||
"include[songs]": "albums",
|
"include[songs]": "albums",
|
||||||
"fields[albums]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,editorialVideo,name,playParams,releaseDate,url,trackCount",
|
"fields[albums]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,editorialVideo,name,playParams,releaseDate,url,trackCount",
|
||||||
|
@ -1654,8 +1797,7 @@ const app = new Vue({
|
||||||
const mDisplay = m > 0 ? `${m} ${app.getLz("term.time.minute", { "count": m })}` : "";
|
const mDisplay = m > 0 ? `${m} ${app.getLz("term.time.minute", { "count": m })}` : "";
|
||||||
|
|
||||||
return dDisplay + (dDisplay && hDisplay ? ", " : "") + hDisplay + (hDisplay && mDisplay ? ", " : "") + mDisplay;
|
return dDisplay + (dDisplay && hDisplay ? ", " : "") + hDisplay + (hDisplay && mDisplay ? ", " : "") + mDisplay;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
let returnTime = datetime.toISOString().substring(11, 19);
|
let returnTime = datetime.toISOString().substring(11, 19);
|
||||||
|
|
||||||
const timeGates = {
|
const timeGates = {
|
||||||
|
@ -1766,7 +1908,8 @@ const app = new Vue({
|
||||||
|
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
window.open(item.attributes.link.url)}
|
window.open(item.attributes.link.url)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (kind == "multirooms") {
|
} else if (kind == "multirooms") {
|
||||||
|
@ -1866,14 +2009,21 @@ const app = new Vue({
|
||||||
},
|
},
|
||||||
|
|
||||||
async getNowPlayingItemDetailed(target) {
|
async getNowPlayingItemDetailed(target) {
|
||||||
|
let nowPlayingItem = JSON.parse(JSON.stringify(this.mk.nowPlayingItem))
|
||||||
|
if(nowPlayingItem.type === "radioStation" && app.mk.nowPlayingItem.id !== -1) {
|
||||||
|
nowPlayingItem.playParams = {kind: "songs"}
|
||||||
|
nowPlayingItem.attributes.playParams.catalogId = app.mk.nowPlayingItem.id
|
||||||
|
nowPlayingItem.attributes.playParams.id = app.mk.nowPlayingItem.id
|
||||||
|
nowPlayingItem.id = app.mk.nowPlayingItem.id
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
let u = await app.mkapi(app.mk.nowPlayingItem.playParams.kind,
|
let u = await app.mkapi(nowPlayingItem.playParams.kind,
|
||||||
(app.mk.nowPlayingItem.songId == -1),
|
(nowPlayingItem.songId == -1),
|
||||||
(app.mk.nowPlayingItem.songId != -1) ? app.mk.nowPlayingItem.songId : app.mk.nowPlayingItem["id"],
|
(nowPlayingItem.songId != -1) ? nowPlayingItem.songId : nowPlayingItem["id"],
|
||||||
{ "include[songs]": "albums,artists", l: app.mklang });
|
{ "include[songs]": "albums,artists", l: app.mklang });
|
||||||
app.searchAndNavigate(u.data.data[0], target)
|
app.searchAndNavigate(u.data.data[0], target)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
app.searchAndNavigate(app.mk.nowPlayingItem, target)
|
app.searchAndNavigate(nowPlayingItem, target)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
async searchAndNavigate(item, target) {
|
async searchAndNavigate(item, target) {
|
||||||
|
@ -1989,16 +2139,6 @@ const app = new Vue({
|
||||||
this.getArtistFromID(id)
|
this.getArtistFromID(id)
|
||||||
//this.getTypeFromID("artist",id,isLibrary,query)
|
//this.getTypeFromID("artist",id,isLibrary,query)
|
||||||
},
|
},
|
||||||
followArtistById(id, follow) {
|
|
||||||
if (follow && !this.followingArtist(id)) {
|
|
||||||
this.cfg.home.followedArtists.push(id)
|
|
||||||
} else {
|
|
||||||
let index = this.cfg.home.followedArtists.indexOf(id)
|
|
||||||
if (index > -1) {
|
|
||||||
this.cfg.home.followedArtists.splice(index, 1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
followingArtist(id) {
|
followingArtist(id) {
|
||||||
console.debug(`check for ${id}`)
|
console.debug(`check for ${id}`)
|
||||||
return this.cfg.home.followedArtists.includes(id)
|
return this.cfg.home.followedArtists.includes(id)
|
||||||
|
@ -2015,8 +2155,7 @@ const app = new Vue({
|
||||||
app.mk.setStationQueue({ artist: 'a-' + id }).then(() => {
|
app.mk.setStationQueue({ artist: 'a-' + id }).then(() => {
|
||||||
app.mk.play()
|
app.mk.play()
|
||||||
})
|
})
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
app.playMediaItemById((id), (kind), (isLibrary), item.attributes.url ?? '')
|
app.playMediaItemById((id), (kind), (isLibrary), item.attributes.url ?? '')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -2292,8 +2431,7 @@ const app = new Vue({
|
||||||
try {
|
try {
|
||||||
if (method.includes(`multiroom`)) {
|
if (method.includes(`multiroom`)) {
|
||||||
return await this.mk.api.v3.music(`v1/editorial/${app.mk.storefrontId}/${truemethod}/${term.toString()}`, params, params2)
|
return await this.mk.api.v3.music(`v1/editorial/${app.mk.storefrontId}/${truemethod}/${term.toString()}`, params, params2)
|
||||||
}
|
} else if (library) {
|
||||||
else if (library) {
|
|
||||||
return await this.mk.api.v3.music(`v1/me/library/${truemethod}/${term.toString()}`, params, params2)
|
return await this.mk.api.v3.music(`v1/me/library/${truemethod}/${term.toString()}`, params, params2)
|
||||||
} else {
|
} else {
|
||||||
return await this.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/${truemethod}/${term.toString()}`, params, params2)
|
return await this.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/${truemethod}/${term.toString()}`, params, params2)
|
||||||
|
@ -2320,6 +2458,7 @@ const app = new Vue({
|
||||||
let library = []
|
let library = []
|
||||||
let cacheId = "library-songs"
|
let cacheId = "library-songs"
|
||||||
let downloaded = null;
|
let downloaded = null;
|
||||||
|
this.$store.commit("resetRecentlyAdded")
|
||||||
if ((this.library.songs.downloadState == 2) && !force) {
|
if ((this.library.songs.downloadState == 2) && !force) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -2642,7 +2781,7 @@ const app = new Vue({
|
||||||
"include[songs]": "artists",
|
"include[songs]": "artists",
|
||||||
"include[music-videos]": "artists",
|
"include[music-videos]": "artists",
|
||||||
"fields[albums]": ["artistName", "artistUrl", "artwork", "contentRating", "editorialArtwork", "editorialVideo", "name", "playParams", "releaseDate", "url"],
|
"fields[albums]": ["artistName", "artistUrl", "artwork", "contentRating", "editorialArtwork", "editorialVideo", "name", "playParams", "releaseDate", "url"],
|
||||||
"fields[artists]": ["name", "url"],
|
"fields[artists]": ["name", "url", "artwork"],
|
||||||
"extend[stations]": ["airDate", "supportsAirTimeUpdates"],
|
"extend[stations]": ["airDate", "supportsAirTimeUpdates"],
|
||||||
"meta[stations]": "inflectionPoints",
|
"meta[stations]": "inflectionPoints",
|
||||||
types: "artists,albums,editorial-items,library-albums,library-playlists,music-movies,music-videos,playlists,stations,uploaded-audios,uploaded-videos,activities,apple-curators,curators,tv-shows,social-upsells",
|
types: "artists,albums,editorial-items,library-albums,library-playlists,music-movies,music-videos,playlists,stations,uploaded-audios,uploaded-videos,activities,apple-curators,curators,tv-shows,social-upsells",
|
||||||
|
@ -3042,7 +3181,8 @@ const app = new Vue({
|
||||||
} else { //4xx rejected
|
} else { //4xx rejected
|
||||||
getToken(2, '', '', id, lang, '');
|
getToken(2, '', '', id, lang, '');
|
||||||
}
|
}
|
||||||
} catch (e) { }
|
} catch (e) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
req2.send();
|
req2.send();
|
||||||
}
|
}
|
||||||
|
@ -3100,8 +3240,7 @@ const app = new Vue({
|
||||||
translation: ''
|
translation: ''
|
||||||
});
|
});
|
||||||
app.lyrics = preLrc.reverse();
|
app.lyrics = preLrc.reverse();
|
||||||
}
|
} catch (e) {
|
||||||
catch (e) {
|
|
||||||
app.lyrics = "";
|
app.lyrics = "";
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -3143,6 +3282,7 @@ const app = new Vue({
|
||||||
function b64_to_utf8(str) {
|
function b64_to_utf8(str) {
|
||||||
return decodeURIComponent(escape(window.atob(str)));
|
return decodeURIComponent(escape(window.atob(str)));
|
||||||
}
|
}
|
||||||
|
|
||||||
const htmlDecode = (input) => {
|
const htmlDecode = (input) => {
|
||||||
const doc = new DOMParser().parseFromString(input, "text/html");
|
const doc = new DOMParser().parseFromString(input, "text/html");
|
||||||
return doc.documentElement.textContent;
|
return doc.documentElement.textContent;
|
||||||
|
@ -3173,8 +3313,7 @@ const app = new Vue({
|
||||||
translation: ''
|
translation: ''
|
||||||
});
|
});
|
||||||
app.lyrics = preLrc.reverse();
|
app.lyrics = preLrc.reverse();
|
||||||
}
|
} catch (e) {
|
||||||
catch (e) {
|
|
||||||
console.log(e)
|
console.log(e)
|
||||||
app.loadNeteaseLyrics();
|
app.loadNeteaseLyrics();
|
||||||
app.lyrics = "";
|
app.lyrics = "";
|
||||||
|
@ -3532,6 +3671,18 @@ const app = new Vue({
|
||||||
friendlyTypes(type) {
|
friendlyTypes(type) {
|
||||||
// use switch statement to return friendly name for media types "songs,artists,albums,playlists,music-videos,stations,apple-curators,curators"
|
// use switch statement to return friendly name for media types "songs,artists,albums,playlists,music-videos,stations,apple-curators,curators"
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
case "library-songs":
|
||||||
|
return app.getLz('term.songs')
|
||||||
|
break;
|
||||||
|
case "library-artists":
|
||||||
|
return app.getLz('term.artists')
|
||||||
|
break;
|
||||||
|
case "library-albums":
|
||||||
|
return app.getLz('term.albums')
|
||||||
|
break;
|
||||||
|
case "library-playlists":
|
||||||
|
return app.getLz('term.playlists')
|
||||||
|
break;
|
||||||
case "song":
|
case "song":
|
||||||
return app.getLz('term.songs')
|
return app.getLz('term.songs')
|
||||||
break;
|
break;
|
||||||
|
@ -3614,6 +3765,13 @@ const app = new Vue({
|
||||||
results.data.results["meta"] = results.data.meta
|
results.data.results["meta"] = results.data.meta
|
||||||
self.search.resultsSocial = results.data.results
|
self.search.resultsSocial = results.data.results
|
||||||
})
|
})
|
||||||
|
|
||||||
|
this.search.resultsLibrary = await app.mk.api.library.search(app.search.term, {
|
||||||
|
types: 'library-songs,library-albums,library-playlists,library-artists',
|
||||||
|
limit: 25,
|
||||||
|
offset: 0
|
||||||
|
})
|
||||||
|
|
||||||
},
|
},
|
||||||
async inLibrary(items = []) {
|
async inLibrary(items = []) {
|
||||||
let types = []
|
let types = []
|
||||||
|
@ -3690,7 +3848,7 @@ const app = new Vue({
|
||||||
},
|
},
|
||||||
getMediaItemArtwork(url, height = 64, width) {
|
getMediaItemArtwork(url, height = 64, width) {
|
||||||
if (typeof url == "undefined" || url == "") {
|
if (typeof url == "undefined" || url == "") {
|
||||||
return "https://beta.music.apple.com/assets/product/MissingArtworkMusic.svg"
|
return "./assets/MissingArtwork.svg"
|
||||||
}
|
}
|
||||||
height = parseInt(height * window.devicePixelRatio)
|
height = parseInt(height * window.devicePixelRatio)
|
||||||
if (width) {
|
if (width) {
|
||||||
|
@ -3766,6 +3924,9 @@ const app = new Vue({
|
||||||
if (app.mk.nowPlayingItem != null && app.mk.nowPlayingItem.attributes != null && app.mk.nowPlayingItem.attributes.artwork != null && app.mk.nowPlayingItem.attributes.artwork.url != null && app.mk.nowPlayingItem.attributes.artwork.url != '') {
|
if (app.mk.nowPlayingItem != null && app.mk.nowPlayingItem.attributes != null && app.mk.nowPlayingItem.attributes.artwork != null && app.mk.nowPlayingItem.attributes.artwork.url != null && app.mk.nowPlayingItem.attributes.artwork.url != '') {
|
||||||
this.currentArtUrlRaw = (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"] ?? '')
|
this.currentArtUrlRaw = (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"] ?? '')
|
||||||
this.currentArtUrl = (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"] ?? '').replace('{w}', artworkSize).replace('{h}', artworkSize);
|
this.currentArtUrl = (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"] ?? '').replace('{w}', artworkSize).replace('{h}', artworkSize);
|
||||||
|
if (this.mk.nowPlayingItem._assets[0].artworkURL) {
|
||||||
|
this.currentArtUrl = this.mk.nowPlayingItem._assets[0].artworkURL
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', `url("${this.currentArtUrl}")`);
|
document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', `url("${this.currentArtUrl}")`);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
@ -3776,6 +3937,9 @@ const app = new Vue({
|
||||||
if (data != null && data !== "" && data.attributes != null && data.attributes.artwork != null) {
|
if (data != null && data !== "" && data.attributes != null && data.attributes.artwork != null) {
|
||||||
this.currentArtUrlRaw = (data["attributes"]["artwork"]["url"] ?? '')
|
this.currentArtUrlRaw = (data["attributes"]["artwork"]["url"] ?? '')
|
||||||
this.currentArtUrl = (data["attributes"]["artwork"]["url"] ?? '').replace('{w}', artworkSize).replace('{h}', artworkSize);
|
this.currentArtUrl = (data["attributes"]["artwork"]["url"] ?? '').replace('{w}', artworkSize).replace('{h}', artworkSize);
|
||||||
|
if (this.mk.nowPlayingItem._assets[0].artworkURL) {
|
||||||
|
this.currentArtUrl = this.mk.nowPlayingItem._assets[0].artworkURL
|
||||||
|
}
|
||||||
ipcRenderer.send('updateRPCImage', this.currentArtUrl ?? '');
|
ipcRenderer.send('updateRPCImage', this.currentArtUrl ?? '');
|
||||||
try {
|
try {
|
||||||
document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', `url("${this.currentArtUrl}")`);
|
document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', `url("${this.currentArtUrl}")`);
|
||||||
|
@ -4183,7 +4347,15 @@ const app = new Vue({
|
||||||
this.showMenuPanel(menus[useMenu], event)
|
this.showMenuPanel(menus[useMenu], event)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
let result = await this.inLibrary([this.mk.nowPlayingItem])
|
// if its a radio station, then change the attributes to match a song
|
||||||
|
const nowPlayingItem = JSON.parse(JSON.stringify(this.mk.nowPlayingItem))
|
||||||
|
if(nowPlayingItem.type == "radioStation" && app.mk.nowPlayingItem.id != -1) {
|
||||||
|
nowPlayingItem.type = "song"
|
||||||
|
nowPlayingItem.attributes.playParams.catalogId = app.mk.nowPlayingItem.id
|
||||||
|
nowPlayingItem.attributes.playParams.id = app.mk.nowPlayingItem.id
|
||||||
|
nowPlayingItem.id = app.mk.nowPlayingItem.id
|
||||||
|
}
|
||||||
|
let result = await this.inLibrary([nowPlayingItem])
|
||||||
if (result[0].attributes.inLibrary) {
|
if (result[0].attributes.inLibrary) {
|
||||||
menus.normal.items.find(x => x.id == 'addToLibrary').hidden = true
|
menus.normal.items.find(x => x.id == 'addToLibrary').hidden = true
|
||||||
menus.normal.items.find(x => x.id == 'removeFromLibrary').hidden = false
|
menus.normal.items.find(x => x.id == 'removeFromLibrary').hidden = false
|
||||||
|
@ -4441,9 +4613,12 @@ const app = new Vue({
|
||||||
xhr.open("GET", e, true);
|
xhr.open("GET", e, true);
|
||||||
xhr.send();
|
xhr.send();
|
||||||
let self = this
|
let self = this
|
||||||
|
|
||||||
function process() {
|
function process() {
|
||||||
if (xhr.readyState == 4) {
|
if (xhr.readyState == 4) {
|
||||||
let sources = xhr.responseText.match(/^(?!#)(?!\s).*$/mg).filter(function(element){return (element);});
|
let sources = xhr.responseText.match(/^(?!#)(?!\s).*$/mg).filter(function (element) {
|
||||||
|
return (element);
|
||||||
|
});
|
||||||
// Load first source
|
// Load first source
|
||||||
let src = sources[0];
|
let src = sources[0];
|
||||||
app.mk._services.mediaItemPlayback._currentPlayer._playAssetURL(src, false)
|
app.mk._services.mediaItemPlayback._currentPlayer._playAssetURL(src, false)
|
||||||
|
|
|
@ -6,11 +6,24 @@ const store = new Vuex.Store({
|
||||||
// recentlyAdded: ipcRenderer.sendSync("get-library-recentlyAdded"),
|
// recentlyAdded: ipcRenderer.sendSync("get-library-recentlyAdded"),
|
||||||
// playlists: ipcRenderer.sendSync("get-library-playlists")
|
// playlists: ipcRenderer.sendSync("get-library-playlists")
|
||||||
},
|
},
|
||||||
|
pageState: {
|
||||||
|
recentlyAdded: {
|
||||||
|
loaded: false,
|
||||||
|
nextUrl: null,
|
||||||
|
items: [],
|
||||||
|
size: "normal"
|
||||||
|
}
|
||||||
|
},
|
||||||
artwork: {
|
artwork: {
|
||||||
playerLCD: ""
|
playerLCD: ""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mutations: {
|
mutations: {
|
||||||
|
resetRecentlyAdded(state) {
|
||||||
|
state.pageState.recentlyAdded.loaded = false;
|
||||||
|
state.pageState.recentlyAdded.nextUrl = null;
|
||||||
|
state.pageState.recentlyAdded.items = [];
|
||||||
|
},
|
||||||
setLCDArtwork(state, artwork) {
|
setLCDArtwork(state, artwork) {
|
||||||
state.artwork.playerLCD = artwork
|
state.artwork.playerLCD = artwork
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
@import url("assets/fonts/Pretendard/pretendardvariable.css");
|
@import url("assets/fonts/Pretendard/pretendardvariable.css");
|
||||||
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@100;300;400;500;700;900&display=swap');
|
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@100;300;400;500;700;900&display=swap");
|
||||||
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@100;300;400;500;700;900&display=swap");
|
|
||||||
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+HK:wght@100;300;400;500;700;900&display=swap");
|
|
||||||
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@100;300;400;500;700;900&display=swap");
|
|
||||||
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap");
|
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap");
|
||||||
|
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@100;300;400;500;700;900&display=swap");
|
||||||
|
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@100;300;400;500;700;900&display=swap");
|
||||||
@import url("less/appvars.less");
|
@import url("less/appvars.less");
|
||||||
@import url("less/bootstrap-vue.min.less");
|
@import url("less/bootstrap-vue.min.less");
|
||||||
@import url("less/ameframework.less");
|
@import url("less/ameframework.less");
|
||||||
|
@ -20,7 +19,9 @@
|
||||||
--mediaItemShadow-Shadow: 0 8px 40px rgb(0 0 0 / 0.55);
|
--mediaItemShadow-Shadow: 0 8px 40px rgb(0 0 0 / 0.55);
|
||||||
--mediaItemShadow-ShadowSubtle: 0 4px 14px rgb(0 0 0 / 10%);
|
--mediaItemShadow-ShadowSubtle: 0 4px 14px rgb(0 0 0 / 10%);
|
||||||
--ciderShadow-Generic: var(--mediaItemShadow), 0 8px 40px rgb(0 0 0 / 0.55);
|
--ciderShadow-Generic: var(--mediaItemShadow), 0 8px 40px rgb(0 0 0 / 0.55);
|
||||||
--mediaItemRadius: 6px;
|
--mediaItemRadius: 8px;
|
||||||
|
--mediaItemRadiusSmall: 6px;
|
||||||
|
--mediaItemRadiusMedium: 8px;
|
||||||
--mediaItemRadiusRound: 100%;
|
--mediaItemRadiusRound: 100%;
|
||||||
--panelRadius: 10px;
|
--panelRadius: 10px;
|
||||||
--contentInnerPadding: 16px;
|
--contentInnerPadding: 16px;
|
||||||
|
@ -31,6 +32,7 @@
|
||||||
--selected-click: rgb(80 80 80 / 30%);
|
--selected-click: rgb(80 80 80 / 30%);
|
||||||
--hover: rgb(200 200 200 / 10%);
|
--hover: rgb(200 200 200 / 10%);
|
||||||
// --keyColor: #fa586a;
|
// --keyColor: #fa586a;
|
||||||
|
--keyColorDefault: @keyColor;
|
||||||
--keyColor: @keyColor;
|
--keyColor: @keyColor;
|
||||||
--keyColor-rgb: 250, 88, 106;
|
--keyColor-rgb: 250, 88, 106;
|
||||||
--keyColor-rollover: #ff8a9c;
|
--keyColor-rollover: #ff8a9c;
|
||||||
|
@ -66,7 +68,7 @@ body {
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
background-position: center;
|
background-position: center;
|
||||||
background: #0000;
|
background: #0000;
|
||||||
font-family: "Pretendard Variable", -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
font-family: "Pretendard Variable", "Noto Sans JP", "Noto Sans KR", "Noto Sans TC", "Noto Sans SC", -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||||
transition: opacity .10s var(--appleEase);
|
transition: opacity .10s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -308,19 +310,19 @@ a.dropdown-item {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
|
|
||||||
> img {
|
img {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 200%;
|
width: 200%;
|
||||||
opacity: 0.5;
|
opacity: 0.5;
|
||||||
filter: brightness(200%) blur(180px) saturate(280%) contrast(2);
|
filter: brightness(200%) blur(180px) saturate(280%) contrast(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
> img:first-child {
|
img:first-child {
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
> img:last-child {
|
img:last-child {
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
right: 0;
|
right: 0;
|
||||||
transform: rotate(180deg);
|
transform: rotate(180deg);
|
||||||
|
@ -374,14 +376,13 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
||||||
}
|
}
|
||||||
|
|
||||||
#app-sidebar {
|
#app-sidebar {
|
||||||
/* background-color: var(--color1); */
|
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: var(--sidebarWidth);
|
width: var(--sidebarWidth);
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
flex: 0 0 auto;
|
flex: 0 0 auto;
|
||||||
position: relative;
|
position: relative;
|
||||||
background : var(--sidebarColorMix);
|
background: linear-gradient(180deg, var(--baseColorMix) calc(var(--chromeHeight1) + 1px), var(--sidebarColorMix) calc(var(--chromeHeight1) + 1px));
|
||||||
max-width: var(--sidebarWidth);
|
max-width: var(--sidebarWidth);
|
||||||
padding-top: var(--chromeHeight1);
|
padding-top: var(--chromeHeight1);
|
||||||
}
|
}
|
||||||
|
@ -451,11 +452,11 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
border: 1px solid rgba(100, 100, 100, 0.35);
|
border: 1px solid rgba(100, 100, 100, 0.35);
|
||||||
border-top: 1px solid rgba(100, 100, 100, 0.5);
|
border-top: 1px solid rgba(100, 100, 100, 0.5);
|
||||||
border-bottom: 1px solid rgb(60 60 60 / 12%);
|
border-bottom: 1px solid rgb(60 60 60 / 62%);
|
||||||
font-family: inherit;
|
font-family: inherit;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
background: rgba(100, 100, 100, 0.25);;
|
background: #1e1e1e99;
|
||||||
color: rgb(200 200 200);
|
color: #c8c8c8;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
padding-left: 32px;
|
padding-left: 32px;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -531,18 +532,15 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
||||||
|
|
||||||
&.collapseTab {
|
&.collapseTab {
|
||||||
display:flex;
|
display:flex;
|
||||||
padding:0px;
|
padding:6px;
|
||||||
|
border:0;
|
||||||
>button {
|
>button {
|
||||||
appearance: none;
|
appearance: none;
|
||||||
border:0px;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
position: relative;
|
position: relative;
|
||||||
padding: 12px;
|
padding-left: 40px;
|
||||||
padding-left: 32px;
|
|
||||||
text-align: left;
|
text-align: left;
|
||||||
font-family: inherit;
|
font-family: inherit;
|
||||||
background-color: var(--color2);
|
|
||||||
color: var(--textColor);
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background-color: var(--selected);
|
background-color: var(--selected);
|
||||||
}
|
}
|
||||||
|
@ -550,17 +548,17 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
||||||
background-color: var(--selected-click);
|
background-color: var(--selected-click);
|
||||||
}
|
}
|
||||||
&:after {
|
&:after {
|
||||||
content: '';
|
content: '';
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
width: 32px;
|
width: 46px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-size: 1.2em;
|
font-size: 1em;
|
||||||
font-family: "codicon";
|
font-family: "codicon";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -667,7 +665,9 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
||||||
#cmenu() {
|
#cmenu() {
|
||||||
.container {
|
.container {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 100%;
|
left: 0px;
|
||||||
|
width: var(--sidebarWidth);
|
||||||
|
max-width: var(--sidebarWidth);
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
}
|
}
|
||||||
|
@ -1018,21 +1018,22 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
-webkit-app-region: no-drag;
|
-webkit-app-region: no-drag;
|
||||||
height: auto;
|
height: auto;
|
||||||
}
|
|
||||||
|
|
||||||
.app-chrome .app-chrome-item.generic {
|
|
||||||
|
&.generic {
|
||||||
width: 50px;
|
width: 50px;
|
||||||
opacity: 0.70;
|
opacity: 0.70;
|
||||||
}
|
}
|
||||||
|
|
||||||
.app-chrome .app-chrome-item.volume {
|
&.volume {
|
||||||
width: 100px;
|
width: 100px;
|
||||||
margin-right: 6px;
|
margin-right: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.app-chrome .app-chrome-item.search {
|
&.search {
|
||||||
margin-right: 6px;
|
margin-right: 6px;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.volume-button {
|
.volume-button {
|
||||||
background-image: url("./assets/feather/volume-2.svg");
|
background-image: url("./assets/feather/volume-2.svg");
|
||||||
|
@ -1161,18 +1162,14 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
||||||
&-macos {
|
&-macos {
|
||||||
width: 100px;
|
width: 100px;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
.app-chrome .app-chrome-item > .window-controls > div {
|
> div {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 32px;
|
width: 32px;
|
||||||
}
|
&:hover {
|
||||||
|
|
||||||
.app-chrome .app-chrome-item > .window-controls > div:hover {
|
|
||||||
background: rgb(200 200 200 / 10%);
|
background: rgb(200 200 200 / 10%);
|
||||||
}
|
}
|
||||||
|
&.close {
|
||||||
.app-chrome .app-chrome-item > .window-controls > div.close {
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background-image: var(--gfx-closeBtn);
|
background-image: var(--gfx-closeBtn);
|
||||||
|
@ -1184,8 +1181,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
||||||
background-color: rgb(196, 43, 28)
|
background-color: rgb(196, 43, 28)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
&.minmax {
|
||||||
.app-chrome .app-chrome-item > .window-controls > div.minmax {
|
|
||||||
background-image: var(--gfx-maxBtn);
|
background-image: var(--gfx-maxBtn);
|
||||||
background-position: center;
|
background-position: center;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
|
@ -1193,12 +1189,10 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
&.minmax.restore {
|
||||||
.app-chrome .app-chrome-item > .window-controls > div.minmax.restore {
|
|
||||||
background-image: var(--gfx-restoreBtn);
|
background-image: var(--gfx-restoreBtn);
|
||||||
}
|
}
|
||||||
|
&.minimize {
|
||||||
.app-chrome .app-chrome-item > .window-controls > div.minimize {
|
|
||||||
background-image: var(--gfx-minBtn);
|
background-image: var(--gfx-minBtn);
|
||||||
background-position: center;
|
background-position: center;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
|
@ -1206,6 +1200,8 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
body[platform="darwin"] .app-chrome .app-chrome-item > .window-controls > div.minimize {
|
body[platform="darwin"] .app-chrome .app-chrome-item > .window-controls > div.minimize {
|
||||||
display: none;
|
display: none;
|
||||||
|
@ -1242,6 +1238,15 @@ body[platform="darwin"] .app-chrome .app-chrome-item > .window-controls > div.cl
|
||||||
}
|
}
|
||||||
|
|
||||||
.app-chrome .app-chrome-item > .app-playback-controls {
|
.app-chrome .app-chrome-item > .app-playback-controls {
|
||||||
|
.info-rect{
|
||||||
|
mask-image: linear-gradient(-90deg, transparent 0%, black 10%, black 90%, transparent 100%);
|
||||||
|
-webkit-mask-image: linear-gradient(-90deg, transparent 3%, black 10%, black 90%, transparent 100%);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
.song-name {
|
.song-name {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
@ -1409,7 +1414,7 @@ div[data-type="musicVideo"] .info-rect .title::before {
|
||||||
width: 12px;
|
width: 12px;
|
||||||
height: 12px;
|
height: 12px;
|
||||||
border-radius: 100%;
|
border-radius: 100%;
|
||||||
background: var(--keyColor);
|
background: var(--songProgressColor);
|
||||||
cursor: default;
|
cursor: default;
|
||||||
transition: opacity .10s var(--appleEase), transform .10s var(--appleEase);
|
transition: opacity .10s var(--appleEase), transform .10s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
@ -1418,7 +1423,7 @@ div[data-type="musicVideo"] .info-rect .title::before {
|
||||||
width: 8px;
|
width: 8px;
|
||||||
height: 8px;
|
height: 8px;
|
||||||
border-radius: 100%;
|
border-radius: 100%;
|
||||||
background: var(--keyColor);
|
background: var(--songProgressColor);
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1441,10 +1446,13 @@ div[data-type="musicVideo"] .info-rect .title::before {
|
||||||
background-position: center;
|
background-position: center;
|
||||||
background-size: contain;
|
background-size: contain;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
border-radius: 4px;
|
border-radius: var(--mediaItemRadiusSmall);
|
||||||
flex: 0 0 auto;
|
flex: 0 0 auto;
|
||||||
margin: 6px;
|
margin: 6px;
|
||||||
image-rendering: -webkit-optimize-contrast;
|
image-rendering: -webkit-optimize-contrast;
|
||||||
|
.mediaitem-artwork {
|
||||||
|
border-radius: var(--mediaItemRadiusSmall);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.app-chrome .app-chrome-item > .app-playback-controls .actions {
|
.app-chrome .app-chrome-item > .app-playback-controls .actions {
|
||||||
|
@ -1515,7 +1523,7 @@ div[data-type="musicVideo"] .info-rect .title::before {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.app-chrome .app-chrome-item > .app-playback-controls > div > .song-artist-album {
|
.app-chrome .app-chrome-item > .app-playback-controls .song-artist-album {
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
@ -1603,12 +1611,12 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
||||||
}
|
}
|
||||||
|
|
||||||
&::-webkit-slider-thumb:hover {
|
&::-webkit-slider-thumb:hover {
|
||||||
background-image: radial-gradient(var(--keyColor) 2px, transparent 3px, transparent 10px);
|
background-image: radial-gradient(var(--songProgressColor) 2px, transparent 3px, transparent 10px);
|
||||||
transform: scale(1.2);
|
transform: scale(1.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
&::-webkit-slider-thumb:active {
|
&::-webkit-slider-thumb:active {
|
||||||
background-image: radial-gradient(var(--keyColor) 3px, transparent 4px, transparent 10px);
|
background-image: radial-gradient(var(--songProgressColor) 3px, transparent 4px, transparent 10px);
|
||||||
transform: scale(1);
|
transform: scale(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1645,7 +1653,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-flow: column;
|
flex-flow: column;
|
||||||
font-family: 'Inter', 'Noto Sans JP', 'Source Han Sans SC', 'Source Han Sans HK', 'Noto Sans SC', 'Noto Sans TC', 'Noto Sans HK', 'Noto Sans KR', sans-serif;
|
font-family: "Pretendard Variable", "Noto Sans JP", "Noto Sans KR", "Noto Sans TC", "Noto Sans SC", -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
.lyric-body .no-lyrics {
|
.lyric-body .no-lyrics {
|
||||||
|
@ -1679,6 +1687,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
||||||
|
|
||||||
.lyric-line.active .verse.verse-active {
|
.lyric-line.active .verse.verse-active {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
|
transition: opacity 0.35s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
.lyric-line:hover {
|
.lyric-line:hover {
|
||||||
|
@ -1704,7 +1713,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
transform: scale(1);
|
transform: scale(1);
|
||||||
/*background: var(--keyColor);*/
|
/*background: var(--keyColor);*/
|
||||||
transition: transform 0.2s var(--appleEase);
|
transition: transform 0.2s var(--appleEase), opacity 0.35s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
.lyric-line:not(.active) {
|
.lyric-line:not(.active) {
|
||||||
|
@ -1749,7 +1758,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
||||||
.lyrics-translation {
|
.lyrics-translation {
|
||||||
font-size: 1.6rem;
|
font-size: 1.6rem;
|
||||||
font-weight: 450;
|
font-weight: 450;
|
||||||
font-family: 'Inter', 'Noto Sans JP', 'Noto Sans SC', 'Noto Sans TC', 'Noto Sans HK', 'Noto Sans KR', sans-serif;
|
font-family: "Pretendard Variable", "Noto Sans JP", "Noto Sans KR", "Noto Sans TC", "Noto Sans SC", -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||||
filter: contrast(0.5);
|
filter: contrast(0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2147,12 +2156,12 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
||||||
}
|
}
|
||||||
|
|
||||||
&::-webkit-slider-thumb:hover {
|
&::-webkit-slider-thumb:hover {
|
||||||
background-image: radial-gradient(var(--keyColor) 2px, transparent 3px, transparent 10px);
|
background-image: radial-gradient(var(--songProgressColor) 2px, transparent 3px, transparent 10px);
|
||||||
transform: scale(1.2);
|
transform: scale(1.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
&::-webkit-slider-thumb:active {
|
&::-webkit-slider-thumb:active {
|
||||||
background-image: radial-gradient(var(--keyColor) 3px, transparent 4px, transparent 10px);
|
background-image: radial-gradient(var(--songProgressColor) 3px, transparent 4px, transparent 10px);
|
||||||
transform: scale(1);
|
transform: scale(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2397,7 +2406,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
||||||
width: 12px;
|
width: 12px;
|
||||||
height: 12px;
|
height: 12px;
|
||||||
border-radius: 100%;
|
border-radius: 100%;
|
||||||
background: var(--keyColor);
|
background: var(--songProgressColor);
|
||||||
cursor: default;
|
cursor: default;
|
||||||
transition: opacity .10s var(--appleEase), transform .10s var(--appleEase);
|
transition: opacity .10s var(--appleEase), transform .10s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
@ -2406,7 +2415,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
||||||
width: 8px;
|
width: 8px;
|
||||||
height: 8px;
|
height: 8px;
|
||||||
border-radius: 100%;
|
border-radius: 100%;
|
||||||
background: var(--keyColor);
|
background: var(--songProgressColor);
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2535,12 +2544,12 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
||||||
}
|
}
|
||||||
|
|
||||||
&::-webkit-slider-thumb:hover {
|
&::-webkit-slider-thumb:hover {
|
||||||
background-image: radial-gradient(var(--keyColor) 2px, transparent 3px, transparent 10px);
|
background-image: radial-gradient(var(--songProgressColor) 2px, transparent 3px, transparent 10px);
|
||||||
transform: scale(1.2);
|
transform: scale(1.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
&::-webkit-slider-thumb:active {
|
&::-webkit-slider-thumb:active {
|
||||||
background-image: radial-gradient(var(--keyColor) 3px, transparent 4px, transparent 10px);
|
background-image: radial-gradient(var(--songProgressColor) 3px, transparent 4px, transparent 10px);
|
||||||
transform: scale(1);
|
transform: scale(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2808,7 +2817,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
||||||
width: 12px;
|
width: 12px;
|
||||||
height: 12px;
|
height: 12px;
|
||||||
border-radius: 100%;
|
border-radius: 100%;
|
||||||
background: var(--keyColor);
|
background: var(--songProgressColor);
|
||||||
cursor: default;
|
cursor: default;
|
||||||
transition: opacity .10s var(--appleEase), transform .10s var(--appleEase);
|
transition: opacity .10s var(--appleEase), transform .10s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
@ -2817,7 +2826,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
||||||
width: 8px;
|
width: 8px;
|
||||||
height: 8px;
|
height: 8px;
|
||||||
border-radius: 100%;
|
border-radius: 100%;
|
||||||
background: var(--keyColor);
|
background: var(--songProgressColor);
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2955,6 +2964,16 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
||||||
transform: translateY(20px);
|
transform: translateY(20px);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.fade-enter-active,
|
||||||
|
.fade-leave-active {
|
||||||
|
transition: opacity .15s var(--appleEase);
|
||||||
|
}
|
||||||
|
|
||||||
|
.fade-enter,
|
||||||
|
.fade-leave-to {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.modal-enter-active,
|
.modal-enter-active,
|
||||||
.modal-leave-active {
|
.modal-leave-active {
|
||||||
transition: opacity .1s var(--appleEase), transform .1s var(--appleEase);
|
transition: opacity .1s var(--appleEase), transform .1s var(--appleEase);
|
||||||
|
@ -3453,22 +3472,7 @@ body.no-gpu {
|
||||||
}
|
}
|
||||||
|
|
||||||
.close-btn {
|
.close-btn {
|
||||||
width: 50px;
|
.menu-panel.menu-header-text.close-btn
|
||||||
height: 100%;
|
|
||||||
background-image: var(--gfx-closeBtn);
|
|
||||||
background-position: center;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
-webkit-app-region: no-drag;
|
|
||||||
appearance: none;
|
|
||||||
border: 0;
|
|
||||||
background-color: transparent;
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
right: 0;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background-color: rgb(196, 43, 28)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,32 @@ body {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.app-chrome:not(.chrome-bottom) {
|
||||||
|
backdrop-filter: unset;
|
||||||
|
background-color: var(--baseColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-panel .menu-panel-body {
|
||||||
|
background: rgb(30 30 30);
|
||||||
|
}
|
||||||
|
.menu-panel .menu-panel-body .menu-option::before {
|
||||||
|
transition: unset!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#app.twopanel .app-chrome:not(.chrome-bottom) .app-chrome--center .top-nav-group .app-sidebar-item:before {
|
||||||
|
transition: unset!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.playback-button:before, .playback-button--small:before {
|
||||||
|
transition: unset!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.floating-header {
|
||||||
|
backdrop-filter: unset!important;
|
||||||
|
background: rgb(0 0 0 / 80%)!important;
|
||||||
|
}
|
||||||
|
|
||||||
.replaycard-enter-active,
|
.replaycard-enter-active,
|
||||||
.replaycard-leave-active {
|
.replaycard-leave-active {
|
||||||
transition: unset;
|
transition: unset;
|
||||||
|
|
|
@ -57,10 +57,6 @@
|
||||||
.cd-mediaitem-square:not(.mediaitem-card) {
|
.cd-mediaitem-square:not(.mediaitem-card) {
|
||||||
transition : transform .2s var(--appleEase);
|
transition : transform .2s var(--appleEase);
|
||||||
transition-delay: .1s;
|
transition-delay: .1s;
|
||||||
padding : 12px;
|
|
||||||
|
|
||||||
// background-color: red;
|
|
||||||
height: 220px;
|
|
||||||
|
|
||||||
|
|
||||||
.artwork-container {}
|
.artwork-container {}
|
||||||
|
@ -73,9 +69,16 @@
|
||||||
transition-delay: .05s;
|
transition-delay: .05s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.artwork-container {
|
||||||
|
transform : scale(0.962) translateZ(0);
|
||||||
|
transition : transform .1s var(--appleEase);
|
||||||
|
transition-delay: 0s;
|
||||||
|
transform-origin: center;
|
||||||
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
.artwork-container {
|
.artwork-container {
|
||||||
transform : scale(1.1);
|
transform : scale(1.0);
|
||||||
transition : transform .1s var(--appleEase);
|
transition : transform .1s var(--appleEase);
|
||||||
transition-delay: 0s;
|
transition-delay: 0s;
|
||||||
transform-origin: center;
|
transform-origin: center;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div id="app-content" @scroll.passive="setContentScrollPos" :scrollpos="chrome.contentScrollPosY" scrollaxis="y" :style="{'overflow': (chrome.contentAreaScrolling ? '' : 'hidden')}">
|
<div id="app-content" :scrollpos="chrome.contentScrollPosY" scrollaxis="y" :style="{'overflow': (chrome.contentAreaScrolling ? '' : 'hidden')}">
|
||||||
<div id="navigation-bar" v-if="getThemeDirective('appNavigation') == 'seperate'">
|
<div id="navigation-bar" v-if="getThemeDirective('appNavigation') == 'seperate'">
|
||||||
<button class="nav-item" @click="navigateBack()">
|
<button class="nav-item" @click="navigateBack()">
|
||||||
<%- include('../svg/chevron-left.svg') %>
|
<%- include('../svg/chevron-left.svg') %>
|
||||||
|
@ -24,11 +24,6 @@
|
||||||
</template>
|
</template>
|
||||||
</transition>
|
</transition>
|
||||||
<% } %>
|
<% } %>
|
||||||
|
|
||||||
<!-- Library - Recently Added -->
|
|
||||||
<transition :name="chrome.desiredPageTransition" v-on:enter="getLibraryAlbumsFull(null, 0); searchLibraryAlbums(0);">
|
|
||||||
<%- include('../pages/library-recentlyadded') %>');
|
|
||||||
</transition>
|
|
||||||
<!-- Library - Made For You -->
|
<!-- Library - Made For You -->
|
||||||
<transition :name="chrome.desiredPageTransition" v-on:enter="getMadeForYou()">
|
<transition :name="chrome.desiredPageTransition" v-on:enter="getMadeForYou()">
|
||||||
<template v-if="page == 'library-madeforyou'">
|
<template v-if="page == 'library-madeforyou'">
|
||||||
|
|
|
@ -1,4 +1,129 @@
|
||||||
<div class="app-navigation" v-cloak>
|
<div class="app-navigation" v-cloak>
|
||||||
|
<transition name="wpfade">
|
||||||
|
<div class="usermenu-container" v-if="chrome.menuOpened">
|
||||||
|
<div class="usermenu-body">
|
||||||
|
<button
|
||||||
|
class="app-sidebar-button"
|
||||||
|
style="width: 100%"
|
||||||
|
@click="appRoute('apple-account-settings')"
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
class="sidebar-user-icon"
|
||||||
|
loading="lazy"
|
||||||
|
:src="getMediaItemArtwork(chrome.hideUserInfo ? './assets/logocut.png' : (chrome.userinfo.attributes['artwork'] ? chrome.userinfo.attributes['artwork']['url'] : ''), 26)"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div class="sidebar-user-text" v-if="!chrome.hideUserInfo">
|
||||||
|
<template v-if="chrome.userinfo.id || mk.isAuthorized">
|
||||||
|
<div class="fullname text-overflow-elipsis">
|
||||||
|
{{
|
||||||
|
chrome.userinfo != null &&
|
||||||
|
chrome.userinfo.attributes != null
|
||||||
|
? chrome.userinfo.attributes.name ?? ""
|
||||||
|
: ""
|
||||||
|
}}
|
||||||
|
</div>
|
||||||
|
<div class="handle-text text-overflow-elipsis">
|
||||||
|
{{
|
||||||
|
chrome.userinfo != null &&
|
||||||
|
chrome.userinfo.attributes != null
|
||||||
|
? chrome.userinfo.attributes.handle ?? ""
|
||||||
|
: ""
|
||||||
|
}}
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
<div @click="mk.authorize()">
|
||||||
|
{{ $root.getLz("term.login") }}
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
<div class="sidebar-user-text" v-else>
|
||||||
|
{{ $root.getLz("app.name") }}
|
||||||
|
</div>
|
||||||
|
</button>
|
||||||
|
<!-- Use 20px SVG for usermenu icon -->
|
||||||
|
<button
|
||||||
|
class="usermenu-item"
|
||||||
|
v-if="cfg.general.privateEnabled"
|
||||||
|
@click="cfg.general.privateEnabled = false"
|
||||||
|
>
|
||||||
|
<span class="usermenu-item-icon">
|
||||||
|
<%- include("../svg/x.svg") %>
|
||||||
|
</span>
|
||||||
|
<span class="usermenu-item-name">{{
|
||||||
|
$root.getLz("term.disablePrivateSession")
|
||||||
|
}}</span>
|
||||||
|
</button>
|
||||||
|
<button class="usermenu-item" @click="appRoute('remote-pair')">
|
||||||
|
<span class="usermenu-item-icon">
|
||||||
|
<%- include("../svg/smartphone.svg") %>
|
||||||
|
</span>
|
||||||
|
<span class="usermenu-item-name">{{
|
||||||
|
$root.getLz("action.showWebRemoteQR")
|
||||||
|
}}</span>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
class="usermenu-item"
|
||||||
|
@click="cfg.advanced.AudioContext ? modals.castMenu = true : $root.notyf.error($root.getLz('settings.warn.enableAdvancedFunctionality'))"
|
||||||
|
>
|
||||||
|
<span class="usermenu-item-icon">
|
||||||
|
<%- include("../svg/cast.svg") %>
|
||||||
|
</span>
|
||||||
|
<span class="usermenu-item-name">{{
|
||||||
|
$root.getLz("term.cast")
|
||||||
|
}}</span>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
class="usermenu-item"
|
||||||
|
@click="cfg.advanced.AudioContext ? modals.audioSettings = true : $root.notyf.error($root.getLz('settings.warn.enableAdvancedFunctionality'))"
|
||||||
|
>
|
||||||
|
<span class="usermenu-item-icon">
|
||||||
|
<%- include("../svg/headphones.svg") %>
|
||||||
|
</span>
|
||||||
|
<span class="usermenu-item-name">{{
|
||||||
|
$root.getLz("term.audioSettings")
|
||||||
|
}}</span>
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
class="usermenu-item"
|
||||||
|
v-if="pluginInstalled"
|
||||||
|
@click="modals.pluginMenu = true"
|
||||||
|
>
|
||||||
|
<span class="usermenu-item-icon">
|
||||||
|
<%- include("../svg/grid.svg") %>
|
||||||
|
</span>
|
||||||
|
<span class="usermenu-item-name">{{
|
||||||
|
$root.getLz("term.plugin")
|
||||||
|
}}</span>
|
||||||
|
</button>
|
||||||
|
<button class="usermenu-item" @click="appRoute('about')">
|
||||||
|
<span class="usermenu-item-icon">
|
||||||
|
<%- include("../svg/info.svg") %>
|
||||||
|
</span>
|
||||||
|
<span class="usermenu-item-name">{{
|
||||||
|
$root.getLz("term.about")
|
||||||
|
}}</span>
|
||||||
|
</button>
|
||||||
|
<button class="usermenu-item" @click="appRoute('settings')">
|
||||||
|
<span class="usermenu-item-icon">
|
||||||
|
<%- include("../svg/settings.svg") %>
|
||||||
|
</span>
|
||||||
|
<span class="usermenu-item-name">{{
|
||||||
|
$root.getLz("term.settings")
|
||||||
|
}}</span>
|
||||||
|
</button>
|
||||||
|
<button class="usermenu-item" @click="unauthorize()">
|
||||||
|
<span class="usermenu-item-icon" style="right: 2.5px">
|
||||||
|
<%- include("../svg/log-out.svg") %>
|
||||||
|
</span>
|
||||||
|
<span class="usermenu-item-name">{{
|
||||||
|
$root.getLz("term.logout")
|
||||||
|
}}</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
<transition name="sidebartransition">
|
<transition name="sidebartransition">
|
||||||
<%- include("sidebar") %>
|
<%- include("sidebar") %>
|
||||||
</transition>
|
</transition>
|
||||||
|
|
|
@ -10,10 +10,10 @@
|
||||||
<b-popover custom-class="mediainfo-popover" target="artworkLCD" triggers="hover" placement="right">
|
<b-popover custom-class="mediainfo-popover" target="artworkLCD" triggers="hover" placement="right">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="shadow-artwork">
|
<div class="shadow-artwork">
|
||||||
<mediaitem-artwork :url="currentArtUrl" :url="currentArtUrlRaw"></mediaitem-artwork>
|
<mediaitem-artwork :url="currentArtUrl"></mediaitem-artwork>
|
||||||
</div>
|
</div>
|
||||||
<div class="popover-artwork">
|
<div class="popover-artwork">
|
||||||
<mediaitem-artwork :size="210" :url="currentArtUrlRaw"></mediaitem-artwork>
|
<mediaitem-artwork :url="currentArtUrl"></mediaitem-artwork>
|
||||||
</div>
|
</div>
|
||||||
<div class="song-name">{{ mk.nowPlayingItem["attributes"]["name"] }}</div>
|
<div class="song-name">{{ mk.nowPlayingItem["attributes"]["name"] }}</div>
|
||||||
<div class="song-artist" @click="getNowPlayingItemDetailed(`artist`)">{{ mk.nowPlayingItem["attributes"]["artistName"] }}</div>
|
<div class="song-artist" @click="getNowPlayingItemDetailed(`artist`)">{{ mk.nowPlayingItem["attributes"]["artistName"] }}</div>
|
||||||
|
@ -60,13 +60,27 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<template v-else>
|
||||||
|
<div class="app-playback-controls">
|
||||||
|
<div class="artwork" id="artworkLCD" style="pointer-events: none;">
|
||||||
|
<mediaitem-artwork :url="currentArtUrl"></mediaitem-artwork>
|
||||||
|
</div>
|
||||||
|
<div class="playback-info">
|
||||||
|
<div class="song-name">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="app-chrome--center">
|
<div class="app-chrome--center">
|
||||||
<div class="app-chrome-playback-duration-bottom">
|
<div class="app-chrome-playback-duration-bottom">
|
||||||
<b-row>
|
<b-row v-if="mkReady()">
|
||||||
<b-col sm="auto">{{ convertTime(getSongProgress()) }}</b-col>
|
<b-col sm="auto" v-if="!mk.nowPlayingItem?.isLiveRadioStation">{{ convertTime(getSongProgress()) }}</b-col>
|
||||||
|
<b-col sm="auto" v-else>--:--</b-col>
|
||||||
<b-col>
|
<b-col>
|
||||||
<input type="range" step="0.01" min="0" :style="progressBarStyle()"
|
<input type="range" step="0.01" min="0" :style="progressBarStyle()"
|
||||||
@input="playerLCD.desiredDuration = $event.target.value;playerLCD.userInteraction = true"
|
@input="playerLCD.desiredDuration = $event.target.value;playerLCD.userInteraction = true"
|
||||||
|
@ -74,7 +88,8 @@
|
||||||
@touchend="mk.seekToTime($event.target.value);setTimeout(()=>{playerLCD.desiredDuration = 0;playerLCD.userInteraction = false}, 1000);"
|
@touchend="mk.seekToTime($event.target.value);setTimeout(()=>{playerLCD.desiredDuration = 0;playerLCD.userInteraction = false}, 1000);"
|
||||||
:max="mk.currentPlaybackDuration" :value="getSongProgress()">
|
:max="mk.currentPlaybackDuration" :value="getSongProgress()">
|
||||||
</b-col>
|
</b-col>
|
||||||
<b-col sm="auto">{{ convertTime(mk.currentPlaybackDuration) }}</b-col>
|
<b-col sm="auto" v-if="!mk.nowPlayingItem?.isLiveRadioStation">{{ convertTime(mk.currentPlaybackDuration) }}</b-col>
|
||||||
|
<b-col sm="auto" v-else>{{ getLz("term.live") }}</b-col>
|
||||||
</b-row>
|
</b-row>
|
||||||
</div>
|
</div>
|
||||||
<div class="app-chrome-playback-controls">
|
<div class="app-chrome-playback-controls">
|
||||||
|
|
|
@ -1,197 +1,106 @@
|
||||||
<div
|
<div class="app-chrome" :style="{'display': chrome.topChromeVisible ? '' : 'none'}">
|
||||||
class="app-chrome"
|
|
||||||
:style="{'display': chrome.topChromeVisible ? '' : 'none'}"
|
|
||||||
>
|
|
||||||
<div class="app-chrome--left">
|
<div class="app-chrome--left">
|
||||||
<div
|
<div class="app-chrome-item full-height" v-if="chrome.windowControlPosition == 'left' && !chrome.nativeControls">
|
||||||
class="app-chrome-item full-height"
|
|
||||||
v-if="chrome.windowControlPosition == 'left' && !chrome.nativeControls"
|
|
||||||
>
|
|
||||||
<div class="window-controls-macos">
|
<div class="window-controls-macos">
|
||||||
<div class="close" @click="ipcRenderer.send('close')"></div>
|
<div class="close" @click="ipcRenderer.send('close')"></div>
|
||||||
<div class="minimize" @click="ipcRenderer.send('minimize')"></div>
|
<div class="minimize" @click="ipcRenderer.send('minimize')"></div>
|
||||||
<div
|
<div class="minmax restore" v-if="chrome.maximized" @click="ipcRenderer.send('maximize')"></div>
|
||||||
class="minmax restore"
|
|
||||||
v-if="chrome.maximized"
|
|
||||||
@click="ipcRenderer.send('maximize')"
|
|
||||||
></div>
|
|
||||||
<div class="minmax" v-else @click="ipcRenderer.send('maximize')"></div>
|
<div class="minmax" v-else @click="ipcRenderer.send('maximize')"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="app-chrome-item full-height" v-else>
|
<div class="app-chrome-item full-height" v-else>
|
||||||
<button
|
<button class="app-mainmenu" @blur="mainMenuVisibility(false, true)" @click="mainMenuVisibility(true, false)"
|
||||||
class="app-mainmenu"
|
@contextmenu="mainMenuVisibility(true, true)" :class="{active: chrome.menuOpened}"
|
||||||
@blur="mainMenuVisibility(false)"
|
:aria-label="$root.getLz('term.quickNav')"></button>
|
||||||
@click="mainMenuVisibility(true)"
|
|
||||||
:class="{active: chrome.menuOpened}"
|
|
||||||
:aria-label="$root.getLz('term.quickNav')"
|
|
||||||
></button>
|
|
||||||
</div>
|
</div>
|
||||||
<template v-if="getThemeDirective('appNavigation') != 'seperate'">
|
<template v-if="getThemeDirective('appNavigation') != 'seperate'">
|
||||||
<div
|
<div class="vdiv" v-if="getThemeDirective('windowLayout') == 'twopanel'"></div>
|
||||||
class="vdiv"
|
|
||||||
v-if="getThemeDirective('windowLayout') == 'twopanel'"
|
|
||||||
></div>
|
|
||||||
<div class="app-chrome-item">
|
<div class="app-chrome-item">
|
||||||
<button
|
<button class="playback-button navigation" @click="navigateBack()" :title="$root.getLz('term.navigateBack')"
|
||||||
class="playback-button navigation"
|
v-b-tooltip.hover>
|
||||||
@click="navigateBack()"
|
|
||||||
:title="$root.getLz('term.navigateBack')"
|
|
||||||
v-b-tooltip.hover
|
|
||||||
>
|
|
||||||
<%- include('../svg/chevron-left.svg') %>
|
<%- include('../svg/chevron-left.svg') %>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="app-chrome-item">
|
<div class="app-chrome-item">
|
||||||
<button
|
<button class="playback-button navigation" @click="navigateForward()"
|
||||||
class="playback-button navigation"
|
:title="$root.getLz('term.navigateForward')" v-b-tooltip.hover>
|
||||||
@click="navigateForward()"
|
|
||||||
:title="$root.getLz('term.navigateForward')"
|
|
||||||
v-b-tooltip.hover
|
|
||||||
>
|
|
||||||
<%- include('../svg/chevron-right.svg') %>
|
<%- include('../svg/chevron-right.svg') %>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="app-chrome-item" v-if="getThemeDirective('windowLayout') == 'twopanel'">
|
||||||
class="vdiv display--large"
|
<button class="playback-button collapseLibrary" v-b-tooltip.hover
|
||||||
v-if="getThemeDirective('windowLayout') != 'twopanel'"
|
:title="chrome.sidebarCollapsed ? getLz('action.showLibrary') : getLz('action.hideLibrary')"
|
||||||
></div>
|
@click="chrome.sidebarCollapsed = !chrome.sidebarCollapsed">
|
||||||
|
<transition name="fade">
|
||||||
|
<span v-if="chrome.sidebarCollapsed"></span>
|
||||||
|
</transition>
|
||||||
|
<transition name="fade">
|
||||||
|
<span v-if="!chrome.sidebarCollapsed"></span>
|
||||||
|
</transition>
|
||||||
|
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="vdiv display--large" v-if="getThemeDirective('windowLayout') != 'twopanel'"></div>
|
||||||
</template>
|
</template>
|
||||||
<template v-if="getThemeDirective('windowLayout') != 'twopanel'">
|
<template v-if="getThemeDirective('windowLayout') != 'twopanel'">
|
||||||
<div class="app-chrome-item display--large">
|
<div class="app-chrome-item display--large">
|
||||||
<button
|
<button class="playback-button--small shuffle" v-if="mk.shuffleMode == 0" :class="isDisabled() && 'disabled'"
|
||||||
class="playback-button--small shuffle"
|
@click="mk.shuffleMode = 1" :title="$root.getLz('term.enableShuffle')" v-b-tooltip.hover></button>
|
||||||
v-if="mk.shuffleMode == 0"
|
<button class="playback-button--small shuffle active" v-else :class="isDisabled() && 'disabled'"
|
||||||
:class="isDisabled() && 'disabled'"
|
@click="mk.shuffleMode = 0" :title="$root.getLz('term.disableShuffle')" v-b-tooltip.hover></button>
|
||||||
@click="mk.shuffleMode = 1"
|
|
||||||
:title="$root.getLz('term.enableShuffle')"
|
|
||||||
v-b-tooltip.hover
|
|
||||||
></button>
|
|
||||||
<button
|
|
||||||
class="playback-button--small shuffle active"
|
|
||||||
v-else
|
|
||||||
:class="isDisabled() && 'disabled'"
|
|
||||||
@click="mk.shuffleMode = 0"
|
|
||||||
:title="$root.getLz('term.disableShuffle')"
|
|
||||||
v-b-tooltip.hover
|
|
||||||
></button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="app-chrome-item display--large">
|
<div class="app-chrome-item display--large">
|
||||||
<button
|
<button class="playback-button previous" @click="prevButton()" :class="isPrevDisabled() && 'disabled'"
|
||||||
class="playback-button previous"
|
:title="$root.getLz('term.previous')" v-b-tooltip.hover></button>
|
||||||
@click="prevButton()"
|
|
||||||
:class="isPrevDisabled() && 'disabled'"
|
|
||||||
:title="$root.getLz('term.previous')"
|
|
||||||
v-b-tooltip.hover
|
|
||||||
></button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="app-chrome-item display--large">
|
<div class="app-chrome-item display--large">
|
||||||
<button
|
<button class="playback-button stop" @click="mk.stop()"
|
||||||
class="playback-button stop"
|
|
||||||
@click="mk.stop()"
|
|
||||||
v-if="mk.isPlaying && mk.nowPlayingItem.attributes.playParams.kind == 'radioStation'"
|
v-if="mk.isPlaying && mk.nowPlayingItem.attributes.playParams.kind == 'radioStation'"
|
||||||
:title="$root.getLz('term.stop')"
|
:title="$root.getLz('term.stop')" v-b-tooltip.hover></button>
|
||||||
v-b-tooltip.hover
|
<button class="playback-button pause" @click="mk.pause()" v-else-if="mk.isPlaying"
|
||||||
></button>
|
:title="$root.getLz('term.pause')" v-b-tooltip.hover></button>
|
||||||
<button
|
<button class="playback-button play" @click="mk.play()" v-else :title="$root.getLz('term.play')"
|
||||||
class="playback-button pause"
|
v-b-tooltip.hover></button>
|
||||||
@click="mk.pause()"
|
|
||||||
v-else-if="mk.isPlaying"
|
|
||||||
:title="$root.getLz('term.pause')"
|
|
||||||
v-b-tooltip.hover
|
|
||||||
></button>
|
|
||||||
<button
|
|
||||||
class="playback-button play"
|
|
||||||
@click="mk.play()"
|
|
||||||
v-else
|
|
||||||
:title="$root.getLz('term.play')"
|
|
||||||
v-b-tooltip.hover
|
|
||||||
></button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="app-chrome-item display--large">
|
<div class="app-chrome-item display--large">
|
||||||
<button
|
<button class="playback-button next" @click="skipToNextItem()" :class="isNextDisabled() && 'disabled'"
|
||||||
class="playback-button next"
|
:title="$root.getLz('term.next')" v-b-tooltip.hover></button>
|
||||||
@click="skipToNextItem()"
|
|
||||||
:class="isNextDisabled() && 'disabled'"
|
|
||||||
:title="$root.getLz('term.next')"
|
|
||||||
v-b-tooltip.hover
|
|
||||||
></button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="app-chrome-item display--large">
|
<div class="app-chrome-item display--large">
|
||||||
<button
|
<button class="playback-button--small repeat" v-if="mk.repeatMode == 0" :class="isDisabled() && 'disabled'"
|
||||||
class="playback-button--small repeat"
|
@click="mk.repeatMode = 1" :title="$root.getLz('term.enableRepeatOne')" v-b-tooltip.hover></button>
|
||||||
v-if="mk.repeatMode == 0"
|
<button class="playback-button--small repeat repeatOne" @click="mk.repeatMode = 2"
|
||||||
:class="isDisabled() && 'disabled'"
|
:class="isDisabled() && 'disabled'" v-else-if="mk.repeatMode == 1"
|
||||||
@click="mk.repeatMode = 1"
|
:title="$root.getLz('term.disableRepeatOne')" v-b-tooltip.hover></button>
|
||||||
:title="$root.getLz('term.enableRepeatOne')"
|
<button class="playback-button--small repeat active" @click="mk.repeatMode = 0"
|
||||||
v-b-tooltip.hover
|
:class="isDisabled() && 'disabled'" v-else-if="mk.repeatMode == 2" :title="$root.getLz('term.disableRepeat')"
|
||||||
></button>
|
v-b-tooltip.hover></button>
|
||||||
<button
|
|
||||||
class="playback-button--small repeat repeatOne"
|
|
||||||
@click="mk.repeatMode = 2"
|
|
||||||
:class="isDisabled() && 'disabled'"
|
|
||||||
v-else-if="mk.repeatMode == 1"
|
|
||||||
:title="$root.getLz('term.disableRepeatOne')"
|
|
||||||
v-b-tooltip.hover
|
|
||||||
></button>
|
|
||||||
<button
|
|
||||||
class="playback-button--small repeat active"
|
|
||||||
@click="mk.repeatMode = 0"
|
|
||||||
:class="isDisabled() && 'disabled'"
|
|
||||||
v-else-if="mk.repeatMode == 2"
|
|
||||||
:title="$root.getLz('term.disableRepeat')"
|
|
||||||
v-b-tooltip.hover
|
|
||||||
></button>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
<div class="app-chrome--center">
|
<div class="app-chrome--center">
|
||||||
<div
|
<div class="app-chrome-item playback-controls" v-if="getThemeDirective('windowLayout') != 'twopanel'">
|
||||||
class="app-chrome-item playback-controls"
|
|
||||||
v-if="getThemeDirective('windowLayout') != 'twopanel'"
|
|
||||||
>
|
|
||||||
<template v-if="mkReady()">
|
<template v-if="mkReady()">
|
||||||
<div
|
<div class="app-playback-controls" @mouseover="chrome.progresshover = true"
|
||||||
class="app-playback-controls"
|
@mouseleave="chrome.progresshover = false" @contextmenu="nowPlayingContextMenu">
|
||||||
@mouseover="chrome.progresshover = true"
|
|
||||||
@mouseleave="chrome.progresshover = false"
|
|
||||||
@contextmenu="nowPlayingContextMenu"
|
|
||||||
>
|
|
||||||
<div class="artwork" id="artworkLCD">
|
<div class="artwork" id="artworkLCD">
|
||||||
<mediaitem-artwork :url="currentArtUrl"></mediaitem-artwork>
|
<mediaitem-artwork :url="currentArtUrl"></mediaitem-artwork>
|
||||||
</div>
|
</div>
|
||||||
<b-popover
|
<b-popover custom-class="mediainfo-popover" target="artworkLCD" triggers="hover" placement="bottom">
|
||||||
custom-class="mediainfo-popover"
|
|
||||||
target="artworkLCD"
|
|
||||||
triggers="hover"
|
|
||||||
placement="bottom"
|
|
||||||
>
|
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="shadow-artwork">
|
<div class="shadow-artwork">
|
||||||
<mediaitem-artwork
|
<mediaitem-artwork :url="currentArtUrl"></mediaitem-artwork>
|
||||||
:url="currentArtUrl"
|
|
||||||
:url="currentArtUrlRaw"
|
|
||||||
></mediaitem-artwork>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="popover-artwork">
|
<div class="popover-artwork">
|
||||||
<mediaitem-artwork
|
<mediaitem-artwork :size="210" :url="currentArtUrl"></mediaitem-artwork>
|
||||||
:size="210"
|
|
||||||
:url="currentArtUrlRaw"
|
|
||||||
></mediaitem-artwork>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="song-name">
|
<div class="song-name">
|
||||||
{{ mk.nowPlayingItem["attributes"]["name"] }}
|
{{ mk.nowPlayingItem["attributes"]["name"] }}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="song-artist" @click="getNowPlayingItemDetailed(`artist`)">
|
||||||
class="song-artist"
|
|
||||||
@click="getNowPlayingItemDetailed(`artist`)"
|
|
||||||
>
|
|
||||||
{{ mk.nowPlayingItem["attributes"]["artistName"] }}
|
{{ mk.nowPlayingItem["attributes"]["artistName"] }}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="song-album" @click="getNowPlayingItemDetailed(`album`)">
|
||||||
class="song-album"
|
|
||||||
@click="getNowPlayingItemDetailed(`album`)"
|
|
||||||
>
|
|
||||||
{{
|
{{
|
||||||
mk.nowPlayingItem["attributes"]["albumName"]
|
mk.nowPlayingItem["attributes"]["albumName"]
|
||||||
? mk.nowPlayingItem["attributes"]["albumName"]
|
? mk.nowPlayingItem["attributes"]["albumName"]
|
||||||
|
@ -200,18 +109,10 @@
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
<div class="btn-group" style="width: 100%">
|
<div class="btn-group" style="width: 100%">
|
||||||
<button
|
<button class="md-btn md-btn-small" style="width: 100%" @click="drawer.open = false; miniPlayer(true)">
|
||||||
class="md-btn md-btn-small"
|
|
||||||
style="width: 100%"
|
|
||||||
@click="drawer.open = false; miniPlayer(true)"
|
|
||||||
>
|
|
||||||
{{ $root.getLz("term.miniplayer") }}
|
{{ $root.getLz("term.miniplayer") }}
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button class="md-btn md-btn-small" style="width: 100%" @click="drawer.open = false; fullscreen(true)">
|
||||||
class="md-btn md-btn-small"
|
|
||||||
style="width: 100%"
|
|
||||||
@click="drawer.open = false; fullscreen(true)"
|
|
||||||
>
|
|
||||||
{{ $root.getLz("term.fullscreenView") }}
|
{{ $root.getLz("term.fullscreenView") }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -219,49 +120,31 @@
|
||||||
</b-popover>
|
</b-popover>
|
||||||
<div class="playback-info">
|
<div class="playback-info">
|
||||||
<div class="chrome-icon-container">
|
<div class="chrome-icon-container">
|
||||||
<div
|
<div class="audio-type private-icon" v-if="cfg.general.privateEnabled === true"></div>
|
||||||
class="audio-type private-icon"
|
<div class="audio-type ppe-icon" v-if="cfg.audio.maikiwiAudio.ciderPPE === true"></div>
|
||||||
v-if="cfg.general.privateEnabled === true"
|
|
||||||
></div>
|
|
||||||
<div
|
|
||||||
class="audio-type ppe-icon"
|
|
||||||
v-if="cfg.audio.maikiwiAudio.ciderPPE === true"
|
|
||||||
></div>
|
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="info-rect">
|
||||||
class="song-name"
|
<div class="song-name"
|
||||||
:class="[isElementOverflowing('#app-main > div.app-chrome > div.app-chrome--center > div > div > div.playback-info > div.song-name') ? 'marquee' : '']"
|
:class="[isElementOverflowing('#app-main > div.app-chrome > div.app-chrome--center > div > div > div.playback-info > div.song-name') ? 'marquee' : '']">
|
||||||
>
|
|
||||||
{{ mk.nowPlayingItem["attributes"]["name"] }}
|
{{ mk.nowPlayingItem["attributes"]["name"] }}
|
||||||
<div
|
<div class="explicit-icon" v-if="mk.nowPlayingItem['attributes']['contentRating'] == 'explicit'"
|
||||||
class="explicit-icon"
|
style="display: inline-block"></div>
|
||||||
v-if="mk.nowPlayingItem['attributes']['contentRating'] == 'explicit'"
|
|
||||||
style="display: inline-block"
|
|
||||||
></div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="song-artist-album">
|
<div class="song-artist-album">
|
||||||
<div
|
<div class="song-artist-album-content"
|
||||||
class="song-artist-album-content"
|
|
||||||
:class="[isElementOverflowing('#app-main > .app-chrome .app-chrome-item > .app-playback-controls > div >.song-artist-album > .song-artist-album-content') ? 'marquee' : '']"
|
:class="[isElementOverflowing('#app-main > .app-chrome .app-chrome-item > .app-playback-controls > div >.song-artist-album > .song-artist-album-content') ? 'marquee' : '']"
|
||||||
style="
|
style="
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
-webkit-box-orient: horizontal;
|
-webkit-box-orient: horizontal;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
"
|
">
|
||||||
>
|
<div class="item-navigate song-artist" style="display: inline-block"
|
||||||
<div
|
@click="getNowPlayingItemDetailed(`artist`)">
|
||||||
class="item-navigate song-artist"
|
|
||||||
style="display: inline-block"
|
|
||||||
@click="getNowPlayingItemDetailed(`artist`)"
|
|
||||||
>
|
|
||||||
{{ mk.nowPlayingItem["attributes"]["artistName"] }}
|
{{ mk.nowPlayingItem["attributes"]["artistName"] }}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="song-artist item-navigate" style="display: inline-block"
|
||||||
class="song-artist item-navigate"
|
|
||||||
style="display: inline-block"
|
|
||||||
@click="getNowPlayingItemDetailed('album')"
|
@click="getNowPlayingItemDetailed('album')"
|
||||||
v-if="mk.nowPlayingItem['attributes']['albumName'] != ''"
|
v-if="mk.nowPlayingItem['attributes']['albumName'] != ''">
|
||||||
>
|
|
||||||
<div class="separator" style="display: inline-block">
|
<div class="separator" style="display: inline-block">
|
||||||
{{ "—" }}
|
{{ "—" }}
|
||||||
</div>
|
</div>
|
||||||
|
@ -273,129 +156,85 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
<div class="song-progress">
|
<div class="song-progress">
|
||||||
<div
|
<div class="song-duration" style="justify-content: space-between; height: 1px"
|
||||||
class="song-duration"
|
:style="[chrome.progresshover ? {'display': 'flex'} : {'display' : 'none'} ]">
|
||||||
style="justify-content: space-between; height: 1px"
|
|
||||||
:style="[chrome.progresshover ? {'display': 'flex'} : {'display' : 'none'} ]"
|
|
||||||
>
|
|
||||||
<p style="width: auto">{{ convertTime(getSongProgress()) }}</p>
|
<p style="width: auto">{{ convertTime(getSongProgress()) }}</p>
|
||||||
<p style="width: auto">
|
<p style="width: auto">
|
||||||
{{ convertTime(mk.currentPlaybackDuration) }}
|
{{ convertTime(mk.currentPlaybackDuration) }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<input
|
<input type="range" step="0.01" min="0" :style="progressBarStyle()"
|
||||||
type="range"
|
|
||||||
step="0.01"
|
|
||||||
min="0"
|
|
||||||
:style="progressBarStyle()"
|
|
||||||
@input="playerLCD.desiredDuration = $event.target.value;playerLCD.userInteraction = true"
|
@input="playerLCD.desiredDuration = $event.target.value;playerLCD.userInteraction = true"
|
||||||
@mouseup="mk.seekToTime($event.target.value);setTimeout(()=>{playerLCD.desiredDuration = 0;playerLCD.userInteraction = false}, 1000);"
|
@mouseup="mk.seekToTime($event.target.value);setTimeout(()=>{playerLCD.desiredDuration = 0;playerLCD.userInteraction = false}, 1000);"
|
||||||
@touchend="mk.seekToTime($event.target.value);setTimeout(()=>{playerLCD.desiredDuration = 0;playerLCD.userInteraction = false}, 1000);"
|
@touchend="mk.seekToTime($event.target.value);setTimeout(()=>{playerLCD.desiredDuration = 0;playerLCD.userInteraction = false}, 1000);"
|
||||||
:max="mk.currentPlaybackDuration"
|
:max="mk.currentPlaybackDuration" :value="getSongProgress()" />
|
||||||
:value="getSongProgress()"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<template v-if="mk.nowPlayingItem['attributes']['playParams']">
|
<template v-if="mk.nowPlayingItem['attributes']['playParams']">
|
||||||
<div class="actions">
|
<div class="actions">
|
||||||
<button
|
<button class="lcdMenu" @click="nowPlayingContextMenu" :title="$root.getLz('term.more')"
|
||||||
class="lcdMenu"
|
v-b-tooltip.hover>
|
||||||
@click="nowPlayingContextMenu"
|
|
||||||
:title="$root.getLz('term.more')"
|
|
||||||
v-b-tooltip.hover
|
|
||||||
>
|
|
||||||
<div class="svg-icon"></div>
|
<div class="svg-icon"></div>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
<div class="app-playback-controls">
|
||||||
|
<div class="artwork" id="artworkLCD" style="pointer-events: none;">
|
||||||
|
<mediaitem-artwork :url="currentArtUrl"></mediaitem-artwork>
|
||||||
|
</div>
|
||||||
|
<div class="playback-info">
|
||||||
|
<div class="info-rect">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
</div>
|
</div>
|
||||||
<div class="app-chrome-item" v-else>
|
<div class="app-chrome-item" v-else>
|
||||||
<div class="top-nav-group">
|
<div class="top-nav-group">
|
||||||
<sidebar-library-item
|
<sidebar-library-item :name="$root.getLz('home.title')" svg-icon="./assets/feather/home.svg" page="home">
|
||||||
:name="$root.getLz('home.title')"
|
|
||||||
svg-icon="./assets/feather/home.svg"
|
|
||||||
page="home"
|
|
||||||
>
|
|
||||||
</sidebar-library-item>
|
</sidebar-library-item>
|
||||||
<sidebar-library-item
|
<sidebar-library-item :name="$root.getLz('term.listenNow')" svg-icon="./assets/feather/play-circle.svg"
|
||||||
:name="$root.getLz('term.listenNow')"
|
page="listen_now"></sidebar-library-item>
|
||||||
svg-icon="./assets/feather/play-circle.svg"
|
<sidebar-library-item :name="$root.getLz('term.browse')" svg-icon="./assets/feather/globe.svg" page="browse">
|
||||||
page="listen_now"
|
</sidebar-library-item>
|
||||||
></sidebar-library-item>
|
<sidebar-library-item :name="$root.getLz('term.radio')" svg-icon="./assets/feather/radio.svg" page="radio">
|
||||||
<sidebar-library-item
|
|
||||||
:name="$root.getLz('term.browse')"
|
|
||||||
svg-icon="./assets/feather/globe.svg"
|
|
||||||
page="browse"
|
|
||||||
>
|
|
||||||
</sidebar-library-item>
|
</sidebar-library-item>
|
||||||
<sidebar-library-item
|
|
||||||
:name="$root.getLz('term.radio')"
|
|
||||||
svg-icon="./assets/feather/radio.svg"
|
|
||||||
page="radio"
|
|
||||||
></sidebar-library-item>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="app-chrome--right">
|
<div class="app-chrome--right">
|
||||||
<template v-if="getThemeDirective('windowLayout') != 'twopanel'">
|
<template v-if="getThemeDirective('windowLayout') != 'twopanel'">
|
||||||
<div class="app-chrome-item volume display--large">
|
<div class="app-chrome-item volume display--large">
|
||||||
<button
|
<button class="volume-button--small volume" @click="muteButtonPressed()"
|
||||||
class="volume-button--small volume"
|
|
||||||
@click="muteButtonPressed()"
|
|
||||||
:class="{'active': this.cfg.audio.volume == 0}"
|
:class="{'active': this.cfg.audio.volume == 0}"
|
||||||
:title="cfg.audio.muted ? $root.getLz('term.unmute') : $root.getLz('term.mute')"
|
:title="cfg.audio.muted ? $root.getLz('term.unmute') : $root.getLz('term.mute')" v-b-tooltip.hover></button>
|
||||||
v-b-tooltip.hover
|
<input type="range" @wheel="volumeWheel" :step="cfg.audio.volumeStep" min="0" :max="cfg.audio.maxVolume"
|
||||||
></button>
|
v-model="mk.volume" v-if="typeof mk.volume != 'undefined'" @change="checkMuteChange()" v-b-tooltip.hover
|
||||||
<input
|
:title="formatVolumeTooltip()" />
|
||||||
type="range"
|
|
||||||
@wheel="volumeWheel"
|
|
||||||
:step="cfg.audio.volumeStep"
|
|
||||||
min="0"
|
|
||||||
:max="cfg.audio.maxVolume"
|
|
||||||
v-model="mk.volume"
|
|
||||||
v-if="typeof mk.volume != 'undefined'"
|
|
||||||
@change="checkMuteChange()"
|
|
||||||
v-b-tooltip.hover
|
|
||||||
:title="formatVolumeTooltip()"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="app-chrome-item generic">
|
<div class="app-chrome-item generic">
|
||||||
<button
|
<button class="playback-button--small cast" :title="$root.getLz('term.cast')"
|
||||||
class="playback-button--small cast"
|
|
||||||
:title="$root.getLz('term.cast')"
|
|
||||||
@click="cfg.advanced.AudioContext ? modals.castMenu = true : $root.notyf.error($root.getLz('settings.warn.enableAdvancedFunctionality'))"
|
@click="cfg.advanced.AudioContext ? modals.castMenu = true : $root.notyf.error($root.getLz('settings.warn.enableAdvancedFunctionality'))"
|
||||||
v-b-tooltip.hover
|
v-b-tooltip.hover></button>
|
||||||
></button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="app-chrome-item generic">
|
<div class="app-chrome-item generic">
|
||||||
<button
|
<button class="playback-button--small queue" :title="$root.getLz('term.queue')" v-b-tooltip.hover
|
||||||
class="playback-button--small queue"
|
:class="{'active': drawer.panel == 'queue'}" @click="invokeDrawer('queue')"></button>
|
||||||
:title="$root.getLz('term.queue')"
|
|
||||||
v-b-tooltip.hover
|
|
||||||
:class="{'active': drawer.panel == 'queue'}"
|
|
||||||
@click="invokeDrawer('queue')"
|
|
||||||
></button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="app-chrome-item generic">
|
<div class="app-chrome-item generic">
|
||||||
<template v-if="lyrics && lyrics != [] && lyrics.length > 0">
|
<template v-if="lyrics && lyrics != [] && lyrics.length > 0">
|
||||||
<button
|
<button class="playback-button--small lyrics" :title="$root.getLz('term.lyrics')" v-b-tooltip.hover
|
||||||
class="playback-button--small lyrics"
|
:class="{'active': drawer.panel == 'lyrics'}" @click="invokeDrawer('lyrics')"></button>
|
||||||
:title="$root.getLz('term.lyrics')"
|
|
||||||
v-b-tooltip.hover
|
|
||||||
:class="{'active': drawer.panel == 'lyrics'}"
|
|
||||||
@click="invokeDrawer('lyrics')"
|
|
||||||
></button>
|
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<button
|
<button class="playback-button--small lyrics" :style="{'opacity': 0.3, 'pointer-events': 'none'}"></button>
|
||||||
class="playback-button--small lyrics"
|
|
||||||
:style="{'opacity': 0.3, 'pointer-events': 'none'}"
|
|
||||||
></button>
|
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -403,31 +242,16 @@
|
||||||
<div class="app-chrome-item search">
|
<div class="app-chrome-item search">
|
||||||
<div class="search-input-container">
|
<div class="search-input-container">
|
||||||
<div class="search-input--icon"></div>
|
<div class="search-input--icon"></div>
|
||||||
<input
|
<input type="search" spellcheck="false" @click="showSearch()" @focus="search.showHints = true"
|
||||||
type="search"
|
|
||||||
spellcheck="false"
|
|
||||||
@click="showSearch()"
|
|
||||||
@focus="search.showHints = true"
|
|
||||||
@blur="setTimeout(()=>{search.showHints = false}, 300)"
|
@blur="setTimeout(()=>{search.showHints = false}, 300)"
|
||||||
v-on:keyup.enter="searchQuery();search.showHints = false"
|
v-on:keyup.enter="searchQuery();search.showHints = false" @change="showSearch();" @input="getSearchHints()"
|
||||||
@change="showSearch();"
|
:placeholder="$root.getLz('term.search') + '...'" v-model="search.term" ref="searchInput"
|
||||||
@input="getSearchHints()"
|
class="search-input" />
|
||||||
:placeholder="$root.getLz('term.search') + '...'"
|
|
||||||
v-model="search.term"
|
|
||||||
ref="searchInput"
|
|
||||||
class="search-input"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<div
|
<div class="search-hints-container" v-if="search.showHints && search.hints.length != 0">
|
||||||
class="search-hints-container"
|
|
||||||
v-if="search.showHints && search.hints.length != 0"
|
|
||||||
>
|
|
||||||
<div class="search-hints">
|
<div class="search-hints">
|
||||||
<button
|
<button class="search-hint text-overflow-elipsis" v-for="hint in search.hints"
|
||||||
class="search-hint text-overflow-elipsis"
|
@click="search.term = hint;search.showHints = false;searchQuery(hint)">
|
||||||
v-for="hint in search.hints"
|
|
||||||
@click="search.term = hint;search.showHints = false;searchQuery(hint)"
|
|
||||||
>
|
|
||||||
{{ hint }}
|
{{ hint }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -435,32 +259,18 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div
|
<div class="app-chrome-item full-height" id="window-controls-container"
|
||||||
class="app-chrome-item full-height"
|
v-if="chrome.windowControlPosition == 'right' && !chrome.nativeControls">
|
||||||
id="window-controls-container"
|
|
||||||
v-if="chrome.windowControlPosition == 'right' && !chrome.nativeControls"
|
|
||||||
>
|
|
||||||
<div class="window-controls">
|
<div class="window-controls">
|
||||||
<div class="minimize" @click="ipcRenderer.send('minimize')"></div>
|
<div class="minimize" @click="ipcRenderer.send('minimize')"></div>
|
||||||
<div
|
<div class="minmax restore" v-if="chrome.maximized" @click="ipcRenderer.send('maximize')"></div>
|
||||||
class="minmax restore"
|
|
||||||
v-if="chrome.maximized"
|
|
||||||
@click="ipcRenderer.send('maximize')"
|
|
||||||
></div>
|
|
||||||
<div class="minmax" v-else @click="ipcRenderer.send('maximize')"></div>
|
<div class="minmax" v-else @click="ipcRenderer.send('maximize')"></div>
|
||||||
<div class="close" @click="ipcRenderer.send('close')"></div>
|
<div class="close" @click="ipcRenderer.send('close')"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div class="app-chrome-item full-height" v-else-if="platform != 'darwin' && !chrome.nativeControls">
|
||||||
class="app-chrome-item full-height"
|
<button class="app-mainmenu" @blur="mainMenuVisibility(false, true)" @click="mainMenuVisibility(true, false)"
|
||||||
v-else-if="platform != 'darwin' && !chrome.nativeControls"
|
@contextmenu="mainMenuVisibility(true, true)" :class="{active: chrome.menuOpened}"></button>
|
||||||
>
|
|
||||||
<button
|
|
||||||
class="app-mainmenu"
|
|
||||||
@blur="mainMenuVisibility(false)"
|
|
||||||
@click="mainMenuVisibility(true)"
|
|
||||||
:class="{active: chrome.menuOpened}"
|
|
||||||
></button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
|
@ -13,9 +13,6 @@
|
||||||
<transition name="modal">
|
<transition name="modal">
|
||||||
<add-to-playlist :playlists="playlists.listing" v-if="modals.addToPlaylist"></add-to-playlist>
|
<add-to-playlist :playlists="playlists.listing" v-if="modals.addToPlaylist"></add-to-playlist>
|
||||||
</transition>
|
</transition>
|
||||||
<transition name="modal">
|
|
||||||
<spatial-properties v-if="modals.spatialProperties"></spatial-properties>
|
|
||||||
</transition>
|
|
||||||
<transition name="modal">
|
<transition name="modal">
|
||||||
<audio-controls v-if="modals.audioControls"></audio-controls>
|
<audio-controls v-if="modals.audioControls"></audio-controls>
|
||||||
</transition>
|
</transition>
|
||||||
|
|
|
@ -183,136 +183,6 @@
|
||||||
</sidebar-playlist>
|
</sidebar-playlist>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
<transition name="wpfade">
|
|
||||||
<div class="usermenu-container" v-if="chrome.menuOpened">
|
|
||||||
<div class="usermenu-body">
|
|
||||||
<button
|
|
||||||
class="app-sidebar-button"
|
|
||||||
style="width: 100%"
|
|
||||||
@click="appRoute('apple-account-settings')"
|
|
||||||
>
|
|
||||||
<img
|
|
||||||
class="sidebar-user-icon"
|
|
||||||
loading="lazy"
|
|
||||||
:src="getMediaItemArtwork(chrome.hideUserInfo ? 'http://localhost:9000/assets/logocut.png' : (chrome.userinfo.attributes['artwork'] ? chrome.userinfo.attributes['artwork']['url'] : ''), 26)"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<div class="sidebar-user-text" v-if="!chrome.hideUserInfo">
|
|
||||||
<template v-if="chrome.userinfo.id || mk.isAuthorized">
|
|
||||||
<div class="fullname text-overflow-elipsis">
|
|
||||||
{{
|
|
||||||
chrome.userinfo != null &&
|
|
||||||
chrome.userinfo.attributes != null
|
|
||||||
? chrome.userinfo.attributes.name ?? ""
|
|
||||||
: ""
|
|
||||||
}}
|
|
||||||
</div>
|
|
||||||
<div class="handle-text text-overflow-elipsis">
|
|
||||||
{{
|
|
||||||
chrome.userinfo != null &&
|
|
||||||
chrome.userinfo.attributes != null
|
|
||||||
? chrome.userinfo.attributes.handle ?? ""
|
|
||||||
: ""
|
|
||||||
}}
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
<div @click="mk.authorize()">
|
|
||||||
{{ $root.getLz("term.login") }}
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</div>
|
|
||||||
<div class="sidebar-user-text" v-else>
|
|
||||||
{{ $root.getLz("app.name") }}
|
|
||||||
</div>
|
|
||||||
</button>
|
|
||||||
<!-- Use 20px SVG for usermenu icon -->
|
|
||||||
<button
|
|
||||||
class="usermenu-item"
|
|
||||||
v-if="cfg.general.privateEnabled"
|
|
||||||
@click="cfg.general.privateEnabled = false"
|
|
||||||
>
|
|
||||||
<span class="usermenu-item-icon">
|
|
||||||
<%- include("../svg/x.svg") %>
|
|
||||||
</span>
|
|
||||||
<span class="usermenu-item-name">{{
|
|
||||||
$root.getLz("term.disablePrivateSession")
|
|
||||||
}}</span>
|
|
||||||
</button>
|
|
||||||
<button class="usermenu-item" @click="appRoute('remote-pair')">
|
|
||||||
<span class="usermenu-item-icon">
|
|
||||||
<%- include("../svg/smartphone.svg") %>
|
|
||||||
</span>
|
|
||||||
<span class="usermenu-item-name">{{
|
|
||||||
$root.getLz("action.showWebRemoteQR")
|
|
||||||
}}</span>
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
class="usermenu-item"
|
|
||||||
@click="cfg.advanced.AudioContext ? modals.castMenu = true : $root.notyf.error($root.getLz('settings.warn.enableAdvancedFunctionality'))"
|
|
||||||
>
|
|
||||||
<span class="usermenu-item-icon">
|
|
||||||
<%- include("../svg/cast.svg") %>
|
|
||||||
</span>
|
|
||||||
<span class="usermenu-item-name">{{
|
|
||||||
$root.getLz("term.cast")
|
|
||||||
}}</span>
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
class="usermenu-item"
|
|
||||||
@click="cfg.advanced.AudioContext ? modals.audioSettings = true : $root.notyf.error($root.getLz('settings.warn.enableAdvancedFunctionality'))"
|
|
||||||
>
|
|
||||||
<span class="usermenu-item-icon">
|
|
||||||
<%- include("../svg/headphones.svg") %>
|
|
||||||
</span>
|
|
||||||
<span class="usermenu-item-name">{{
|
|
||||||
$root.getLz("term.audioSettings")
|
|
||||||
}}</span>
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
class="usermenu-item"
|
|
||||||
v-if="pluginInstalled"
|
|
||||||
@click="modals.pluginMenu = true"
|
|
||||||
>
|
|
||||||
<span class="usermenu-item-icon">
|
|
||||||
<%- include("../svg/grid.svg") %>
|
|
||||||
</span>
|
|
||||||
<span class="usermenu-item-name">{{
|
|
||||||
$root.getLz("term.plugin")
|
|
||||||
}}</span>
|
|
||||||
</button>
|
|
||||||
<button class="usermenu-item" @click="appRoute('about')">
|
|
||||||
<span class="usermenu-item-icon">
|
|
||||||
<%- include("../svg/info.svg") %>
|
|
||||||
</span>
|
|
||||||
<span class="usermenu-item-name">{{
|
|
||||||
$root.getLz("term.about")
|
|
||||||
}}</span>
|
|
||||||
</button>
|
|
||||||
<button class="usermenu-item" @click="appRoute('settings')">
|
|
||||||
<span class="usermenu-item-icon">
|
|
||||||
<%- include("../svg/settings.svg") %>
|
|
||||||
</span>
|
|
||||||
<span class="usermenu-item-name">{{
|
|
||||||
$root.getLz("term.settings")
|
|
||||||
}}</span>
|
|
||||||
</button>
|
|
||||||
<button class="usermenu-item" @click="unauthorize()">
|
|
||||||
<span class="usermenu-item-icon" style="right: 2.5px">
|
|
||||||
<%- include("../svg/log-out.svg") %>
|
|
||||||
</span>
|
|
||||||
<span class="usermenu-item-name">{{
|
|
||||||
$root.getLz("term.logout")
|
|
||||||
}}</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</transition>
|
|
||||||
<div class="app-sidebar-footer collapseTab" v-if="cfg.advanced.experiments.includes('collapseSidebar')">
|
|
||||||
<button @click="chrome.sidebarCollapsed = !chrome.sidebarCollapsed">
|
|
||||||
Collapse
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="app-sidebar-footer display--small app-sidebar-footer--controls">
|
<div class="app-sidebar-footer display--small app-sidebar-footer--controls">
|
||||||
<div
|
<div
|
||||||
class="app-playback-controls"
|
class="app-playback-controls"
|
||||||
|
@ -326,6 +196,7 @@
|
||||||
v-if="mk.shuffleMode == 0"
|
v-if="mk.shuffleMode == 0"
|
||||||
@click="mk.shuffleMode = 1"
|
@click="mk.shuffleMode = 1"
|
||||||
:title="$root.getLz('term.enableShuffle')"
|
:title="$root.getLz('term.enableShuffle')"
|
||||||
|
:class="$root.isDisabled() && 'disabled'"
|
||||||
v-b-tooltip.hover.righttop
|
v-b-tooltip.hover.righttop
|
||||||
></button>
|
></button>
|
||||||
<button
|
<button
|
||||||
|
@ -333,6 +204,7 @@
|
||||||
v-else
|
v-else
|
||||||
@click="mk.shuffleMode = 0"
|
@click="mk.shuffleMode = 0"
|
||||||
:title="$root.getLz('term.disableShuffle')"
|
:title="$root.getLz('term.disableShuffle')"
|
||||||
|
:class="$root.isDisabled() && 'disabled'"
|
||||||
v-b-tooltip.hover.righttop
|
v-b-tooltip.hover.righttop
|
||||||
></button>
|
></button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -340,31 +212,26 @@
|
||||||
<button
|
<button
|
||||||
class="playback-button previous"
|
class="playback-button previous"
|
||||||
@click="prevButton()"
|
@click="prevButton()"
|
||||||
|
:class="$root.isPrevDisabled() && 'disabled'"
|
||||||
:title="$root.getLz('term.previous')"
|
:title="$root.getLz('term.previous')"
|
||||||
v-b-tooltip.hover
|
v-b-tooltip.hover
|
||||||
></button>
|
></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="app-chrome-item">
|
<div class="app-chrome-item">
|
||||||
<button
|
<button class="playback-button stop" @click="$root.mk.stop()"
|
||||||
class="playback-button pause"
|
v-if="$root.mk.isPlaying && $root.mk.nowPlayingItem.attributes.playParams.kind == 'radioStation'"
|
||||||
@click="mk.pause()"
|
:title="$root.getLz('term.stop')" v-b-tooltip.hover></button>
|
||||||
v-if="mk.isPlaying"
|
<button class="playback-button pause" @click="$root.mk.pause()" v-else-if="$root.mk.isPlaying"
|
||||||
:title="$root.getLz('term.pause')"
|
:title="$root.getLz('term.pause')" v-b-tooltip.hover></button>
|
||||||
v-b-tooltip.hover
|
<button class="playback-button play" @click="$root.mk.play()" v-else :title="$root.getLz('term.play')"
|
||||||
></button>
|
v-b-tooltip.hover></button>
|
||||||
<button
|
|
||||||
class="playback-button play"
|
|
||||||
@click="mk.play()"
|
|
||||||
v-else
|
|
||||||
:title="$root.getLz('term.play')"
|
|
||||||
v-b-tooltip.hover
|
|
||||||
></button>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="app-chrome-item">
|
<div class="app-chrome-item">
|
||||||
<button
|
<button
|
||||||
class="playback-button next"
|
class="playback-button next"
|
||||||
@click="skipToNextItem()"
|
@click="skipToNextItem()"
|
||||||
:title="$root.getLz('term.next')"
|
:title="$root.getLz('term.next')"
|
||||||
|
:class="$root.isNextDisabled() && 'disabled'"
|
||||||
v-b-tooltip.hover
|
v-b-tooltip.hover
|
||||||
></button>
|
></button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -373,6 +240,7 @@
|
||||||
class="playback-button--small repeat"
|
class="playback-button--small repeat"
|
||||||
v-if="mk.repeatMode == 0"
|
v-if="mk.repeatMode == 0"
|
||||||
@click="mk.repeatMode = 1"
|
@click="mk.repeatMode = 1"
|
||||||
|
:class="$root.isDisabled() && 'disabled'"
|
||||||
:title="$root.getLz('term.enableRepeatOne')"
|
:title="$root.getLz('term.enableRepeatOne')"
|
||||||
v-b-tooltip.hover
|
v-b-tooltip.hover
|
||||||
></button>
|
></button>
|
||||||
|
@ -381,6 +249,7 @@
|
||||||
@click="mk.repeatMode = 2"
|
@click="mk.repeatMode = 2"
|
||||||
v-else-if="mk.repeatMode == 1"
|
v-else-if="mk.repeatMode == 1"
|
||||||
:title="$root.getLz('term.disableRepeatOne')"
|
:title="$root.getLz('term.disableRepeatOne')"
|
||||||
|
:class="$root.isDisabled() && 'disabled'"
|
||||||
v-b-tooltip.hover
|
v-b-tooltip.hover
|
||||||
></button>
|
></button>
|
||||||
<button
|
<button
|
||||||
|
@ -388,6 +257,7 @@
|
||||||
@click="mk.repeatMode = 0"
|
@click="mk.repeatMode = 0"
|
||||||
v-else-if="mk.repeatMode == 2"
|
v-else-if="mk.repeatMode == 2"
|
||||||
:title="$root.getLz('term.disableRepeat')"
|
:title="$root.getLz('term.disableRepeat')"
|
||||||
|
:class="$root.isDisabled() && 'disabled'"
|
||||||
v-b-tooltip.hover
|
v-b-tooltip.hover
|
||||||
></button>
|
></button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
<script type="text/x-template" id="artist-chip">
|
<script type="text/x-template" id="artist-chip">
|
||||||
<div class="artist-chip" @click.self="route" tabindex="0">
|
<div class="artist-chip" @click.self="route" tabindex="0">
|
||||||
<div class="artist-chip__image">
|
<div class="artist-chip__image" v-if="image" :style="{backgroundColor: '#' + (artist.attributes.artwork?.bgColor ?? '000')}">
|
||||||
<mediaitem-artwork v-if="artist.id != null" :url="artist.attributes.artwork.url" :size="32"></mediaitem-artwork>
|
<mediaitem-artwork v-if="artist.id != null" :url="artist.attributes.artwork.url" :size="80"></mediaitem-artwork>
|
||||||
|
</div>
|
||||||
|
<div class="artist-chip__image" v-else>
|
||||||
</div>
|
</div>
|
||||||
<div class="artist-chip__name">
|
<div class="artist-chip__name">
|
||||||
<span>{{ item.attributes.name }}</span>
|
<span>{{ item.attributes.name }}</span>
|
||||||
</div>
|
</div>
|
||||||
<button @click="$root.followArtistById(artist.id, true)" title="Follow" v-if="!$root.followingArtist(artist.id)" class="artist-chip__follow codicon codicon-add"></button>
|
<button @click="$root.setArtistFavorite(artist.id, true)" title="Follow" v-if="!$root.followingArtist(artist.id)" class="artist-chip__follow codicon codicon-add"></button>
|
||||||
<button @click="$root.followArtistById(artist.id, false)" title="Following" v-else class="artist-chip__follow codicon codicon-check"></button>
|
<button @click="$root.setArtistFavorite(artist.id, false)" title="Following" v-else class="artist-chip__follow codicon codicon-check"></button>
|
||||||
</div>
|
</div>
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -21,6 +23,7 @@
|
||||||
},
|
},
|
||||||
data: function() {
|
data: function() {
|
||||||
return {
|
return {
|
||||||
|
image: false,
|
||||||
artist: {
|
artist: {
|
||||||
id: null
|
id: null
|
||||||
}
|
}
|
||||||
|
@ -34,6 +37,7 @@
|
||||||
}
|
}
|
||||||
app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/artists/${artistId}`).then(response => {
|
app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/artists/${artistId}`).then(response => {
|
||||||
this.artist = response.data.data[0];
|
this.artist = response.data.data[0];
|
||||||
|
this.image = true;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<script type="text/x-template" id="artwork-material">
|
<script type="text/x-template" id="artwork-material">
|
||||||
<div class="artworkMaterial">
|
<div class="artworkMaterial">
|
||||||
<img :src="src" v-for="image in images"/>
|
<mediaitem-artwork :url="src" :size="500" v-for="image in images"/>
|
||||||
</div>
|
</div>
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|