Merge branch 'main' into enhancement/radio

This commit is contained in:
Core 2022-05-21 12:42:45 +01:00 committed by GitHub
commit f1fb5e7cb7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
34 changed files with 75755 additions and 25524 deletions

View file

@ -18,6 +18,9 @@ jobs:
# - run: # - run:
# name: Rename Repository # name: Rename Repository
# command: sed -i 's/github:ciderapp\/Cider/github:ciderapp\/cider-releases/' package.json # command: sed -i 's/github:ciderapp\/Cider/github:ciderapp\/cider-releases/' package.json
- run:
name: Update Version Number of App
command: sudo chmod +x resources/version.sh && ./resources/version.sh || true
- run: - run:
name: Update Package Managers name: Update Package Managers
command: sudo npm update -g npm yarn command: sudo npm update -g npm yarn
@ -153,13 +156,16 @@ jobs:
mv ~/Cider/dist/*.blockmap ~/Cider/dist/artifacts mv ~/Cider/dist/*.blockmap ~/Cider/dist/artifacts
- store_artifacts: - store_artifacts:
path: ~/Cider/dist/artifacts path: ~/Cider/dist/artifacts
- run:
name: Fix Versioning and Add Channel
command: yarn circle:script
- run: - run:
name: Set App Version name: Set App Version
command: echo "export APP_VERSION=$(grep '"version":.*' package.json | cut -d '"' -f 4 | head -1)" >> $BASH_ENV command: echo "export APP_VERSION=$(grep '"version":.*' package.json | cut -d '"' -f 4 | head -1)" >> $BASH_ENV
- run: - run:
name: Publish Release name: Publish Release
command: | command: |
gh release create "v${APP_VERSION}.${CIRCLE_BUILD_NUM}" --title "Cider Version ${APP_VERSION} - Build ${CIRCLE_BUILD_NUM} (${CIRCLE_BRANCH})" --generate-notes -R ciderapp/cider-releases ~/Cider/dist/artifacts/*.deb ~/Cider/dist/artifacts/*.AppImage ~/Cider/dist/artifacts/*.snap ~/Cider/dist/artifacts/*.exe ~/Cider/dist/artifacts/*.yml ~/Cider/dist/artifacts/*.blockmap gh release create "v${APP_VERSION}" --title "Cider Version ${APP_VERSION} (${CIRCLE_BRANCH})" --generate-notes -R ciderapp/cider-releases ~/Cider/dist/artifacts/*.deb ~/Cider/dist/artifacts/*.AppImage ~/Cider/dist/artifacts/*.snap ~/Cider/dist/artifacts/*.exe ~/Cider/dist/artifacts/*.yml ~/Cider/dist/artifacts/*.blockmap
# Orchestrate our job run sequence # Orchestrate our job run sequence
workflows: workflows:
@ -168,25 +174,33 @@ workflows:
- prepare-build: - prepare-build:
filters: filters:
branches: branches:
only: develop only:
- main
- stable
- build-windows: - build-windows:
requires: requires:
- prepare-build - prepare-build
filters: filters:
branches: branches:
only: develop only:
- main
- stable
- build-linux: - build-linux:
requires: requires:
- prepare-build - prepare-build
filters: filters:
branches: branches:
only: develop only:
- main
- stable
- build-winget: - build-winget:
requires: requires:
- prepare-build - prepare-build
filters: filters:
branches: branches:
only: develop only:
- main
- stable
- release: - release:
requires: requires:
- build-windows - build-windows
@ -194,4 +208,6 @@ workflows:
- build-winget - build-winget
filters: filters:
branches: branches:
only: develop only:
- main
- stable

View file

@ -35,7 +35,7 @@ body:
- **OS**: Ubuntu 20.04 - **OS**: Ubuntu 20.04
- **App Version** and/or **Commit ID**: 1.0.0 c9d43be - **App Version** and/or **Commit ID**: 1.0.0 c9d43be
To find app version, go to the About page. To find app version, Cider Menu -> About
value: | value: |
- OS: - OS:
- App Version and/or Commit ID: - App Version and/or Commit ID:

View file

@ -13,7 +13,7 @@ name: "macOS build"
on: on:
push: push:
branches: [ develop ] branches: [ main ]
paths-ignore: paths-ignore:
- 'README.md' - 'README.md'
- 'SECURITY.md' - 'SECURITY.md'

View file

@ -39,7 +39,7 @@
"dependencies": { "dependencies": {
"@sentry/electron": "^3.0.7", "@sentry/electron": "^3.0.7",
"@sentry/integrations": "^6.19.6", "@sentry/integrations": "^6.19.6",
"adm-zip": "0.5.9", "adm-zip": "0.4.10",
"airtunes2": "git+https://github.com/vapormusic/node_airtunes2.git#hap", "airtunes2": "git+https://github.com/vapormusic/node_airtunes2.git#hap",
"castv2-client": "^1.2.0", "castv2-client": "^1.2.0",
"chokidar": "^3.5.3", "chokidar": "^3.5.3",
@ -179,6 +179,15 @@
"isRelocatable": false, "isRelocatable": false,
"overwriteAction": "upgrade" "overwriteAction": "upgrade"
}, },
"snap": {
"slots": [
{
"mpris": {
"interface": "mpris"
}
}
]
},
"dmg": { "dmg": {
"background": "./resources/bg.png", "background": "./resources/bg.png",
"icon": "resources/icons/icon.ico" "icon": "resources/icons/icon.ico"

View file

@ -9,23 +9,24 @@ exports.default = function(context) {
fs.unlinkSync('dist/mac-universal--x64/Cider.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/Electron Framework.sig') fs.unlinkSync('dist/mac-universal--x64/Cider.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/Electron Framework.sig')
if (fs.existsSync('dist/mac-universal--arm64/Cider.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/Electron Framework.sig')) if (fs.existsSync('dist/mac-universal--arm64/Cider.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/Electron Framework.sig'))
fs.unlinkSync('dist/mac-universal--arm64/Cider.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/Electron Framework.sig') fs.unlinkSync('dist/mac-universal--arm64/Cider.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/Electron Framework.sig')
console.log('Castlabs-evs update start') // console.log('Castlabs-evs update start')
execSync('python3 -m pip install --upgrade castlabs-evs') // execSync('python3 -m pip install --upgrade castlabs-evs')
console.log('Castlabs-evs update complete') // console.log('Castlabs-evs update complete')
// xcode 13 // xcode 13
if (fs.existsSync('dist/mac-universal--x64') && fs.existsSync('dist/mac-universal--arm64')) if (fs.existsSync('dist/mac-universal--x64') && fs.existsSync('dist/mac-universal--arm64'))
execSync("cp 'dist/mac-universal--x64/Cider.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/MainMenu.nib/keyedobjects-101300.nib' 'dist/mac-universal--arm64/Cider.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/MainMenu.nib/keyedobjects-101300.nib'",{stdio: 'inherit'}) execSync("cp 'dist/mac-universal--x64/Cider.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/MainMenu.nib/keyedobjects-101300.nib' 'dist/mac-universal--arm64/Cider.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/MainMenu.nib/keyedobjects-101300.nib'",{stdio: 'inherit'})
console.log('VMP signing start') // console.log('VMP signing start')
if (fs.existsSync('dist/mac-universal')) // if (fs.existsSync('dist/mac-universal'))
execSync('python3 -m castlabs_evs.vmp -n sign-pkg dist/mac-universal',{stdio: 'inherit'}) // execSync('python3 -m castlabs_evs.vmp -n sign-pkg dist/mac-universal',{stdio: 'inherit'})
if (fs.existsSync('dist/mac')) // if (fs.existsSync('dist/mac'))
execSync('python3 -m castlabs_evs.vmp -n sign-pkg dist/mac',{stdio: 'inherit'}) // execSync('python3 -m castlabs_evs.vmp -n sign-pkg dist/mac',{stdio: 'inherit'})
if (fs.existsSync('dist/mac-arm64')) // if (fs.existsSync('dist/mac-arm64'))
execSync('python3 -m castlabs_evs.vmp -n sign-pkg dist/mac-arm64 -z',{stdio: 'inherit'}) // execSync('python3 -m castlabs_evs.vmp -n sign-pkg dist/mac-arm64 -z',{stdio: 'inherit'})
if (fs.existsSync('dist/mac-x64')) // if (fs.existsSync('dist/mac-x64'))
execSync('python3 -m castlabs_evs.vmp -n sign-pkg dist/mac-x64',{stdio: 'inherit'}) // execSync('python3 -m castlabs_evs.vmp -n sign-pkg dist/mac-x64',{stdio: 'inherit'})
console.log('VMP signing complete') // console.log('VMP signing complete')
} }

View file

@ -5,7 +5,6 @@ if (!process.env['CIRCLECI']) {
const {readFileSync, writeFile} = require('fs') const {readFileSync, writeFile} = require('fs')
const pkg = JSON.parse(readFileSync('package.json').toString()); const pkg = JSON.parse(readFileSync('package.json').toString());
let channel = process.env['CIRCLE_BRANCH']; let channel = process.env['CIRCLE_BRANCH'];
if (process.env['CIRCLE_BRANCH'] === 'lts') { if (process.env['CIRCLE_BRANCH'] === 'lts') {
@ -20,7 +19,8 @@ channel = channel.split('/').join('-')
// https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables // https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables
const version = pkg.version.split('.'); const version = pkg.version.split('.');
pkg.version = `${version[0]}.${version[1]}.${version[2]}-${channel}` const patch = version[2].split('-');
pkg.version = `${version[0]}.${version[1]}.${patch[0]}-${channel}.${patch[1]}`
// package.build.channel = channel // package.build.channel = channel
pkg.publish = { pkg.publish = {
"provider": "github", "provider": "github",
@ -34,13 +34,13 @@ pkg.publish = {
const {exec} = require('child_process') const {exec} = require('child_process')
exec('echo $APP_VERSION', {env: {'APP_VERSION': pkg.version}}, function (error, stdout, stderr) { exec(`echo $APP_VERSION`, {env: {'APP_VERSION': pkg.version}}, function (error, stdout, stderr) {
console.log(stdout, stderr, error); console.log(stdout, stderr, error);
}); });
writeFile('package.json', JSON.stringify(pkg), err => { writeFile('package.json', JSON.stringify(pkg), err => {
// error checking // error checking
if (err) throw err; if (err) throw err;
console.log(`VERSION CHANGED TO ${pkg.version}`); console.log(`VERSION CHANGED TO ${pkg.version}`, pkg);
}); });

8
resources/version.sh Executable file
View file

@ -0,0 +1,8 @@
#!/bin/bash
LATESTSHA=$(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)
VERSION=$(grep '"version":.*' package.json | cut -d '"' -f 4 | head -1)
echo
NEWVERSION=${VERSION/-/.}-$COMMITSINCESTABLE
npm version $NEWVERSION

View file

@ -375,18 +375,25 @@ Update 12/05/2022 19:00 UTC
Update 12/05/2022 22:50 UTC Update 12/05/2022 22:50 UTC
* `settings.option.audio.dbspl.display`: Added for `en_US` * `settings.option.audio.dbspl.display`: Added for `en_US`,
* `settings.option.audio.dbspl.description`: Added for `en_US` * `settings.option.audio.dbspl.description`: Added for `en_US`,
* `settings.option.audio.dbfs.calibration`: Added for `en_US` * `settings.option.audio.dbfs.calibration`: Added for `en_US`,
* `settings.option.audio.dbfs.description`: Added for `en_US` * `settings.option.audio.dbfs.description`: Added for `en_US`,
Update 14/05/2022 02:00 UTC Update 14/05/2022 02:00 UTC
* `settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_HIGH`: Deleted for all language files * `settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_HIGH`: Deleted for all language files
* `settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_STANDARD`: Renamed for `en_US` * `settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_STANDARD`: Renamed for `en_US`,
* `settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_PLUS`: Renamed for `en_US` * `settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.NATURAL_PLUS`: Renamed for `en_US`,
* `settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_1`: Added for `en_US` * `settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_1`: Added for `en_US`,
* `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.Z8500`: Added for `en_US`,
Update 18/05/2022 14:20 UTC
* `action.tray.playpause`: Added for `en_US`,
* `action.tray.next`: Added for `en_US`,
* `action.tray.previous`: Added for `en_US`,

View file

@ -311,6 +311,9 @@
"menubar.options.trans": "Twanswation Wepowt/Wequest", "menubar.options.trans": "Twanswation Wepowt/Wequest",
"menubar.options.license": "View Wicense", "menubar.options.license": "View Wicense",
"menubar.options.conf": "Open Configuwation Fiwe in Editow", "menubar.options.conf": "Open Configuwation Fiwe in Editow",
"menubar.options.listennow": "Wisten Nyow",
"menubar.options.recentlyAdded": "Wecentwy Added",
"menubar.options.songs": "Songs",
"settings.header.general": "Genyewaw", "settings.header.general": "Genyewaw",
"settings.header.general.description": "Adjust the genyewaw settings fow Cidew.", "settings.header.general.description": "Adjust the genyewaw settings fow Cidew.",
"settings.option.general.language": "Wanguage", "settings.option.general.language": "Wanguage",
@ -335,9 +338,13 @@
"settings.option.general.customizeSidebar": "Customize Sidebaw Items", "settings.option.general.customizeSidebar": "Customize Sidebaw Items",
"settings.option.general.customizeSidebar.customize": "Customize", "settings.option.general.customizeSidebar.customize": "Customize",
"settings.option.general.keybindings": "Keybindings", "settings.option.general.keybindings": "Keybindings",
"settings.option.general.keybindings.pressCombination": "Pwess a combinyation of two keys to update keybind.",
"settings.option.general.keybindings.pressEscape": "Pwess Escape key to go back.",
"settings.notyf.general.keybindings.update.success": "Keybind updated successfuwwy", "settings.notyf.general.keybindings.update.success": "Keybind updated successfuwwy",
"settings.prompt.general.keybindings.update.success": "Keybind updated successfuwwy. Pwess OK to wewaunch Cidew", "settings.prompt.general.keybindings.update.success": "Keybind updated successfuwwy. Pwess OK to wewaunch Cidew",
"settings.option.general.keybindings.open": "Open", "settings.option.general.keybindings.open": "Open",
"settings.option.general.themeUpdateNotification": "Automaticawwy check fow theme updates",
"settings.option.general.showLovedTracksInline": "Show wuvd twacks inwinye",
"settings.description.search": "Seawch", "settings.description.search": "Seawch",
"settings.description.albums": "Wibwawy Awbums", "settings.description.albums": "Wibwawy Awbums",
"settings.description.artists": "Wibwawy Awtists", "settings.description.artists": "Wibwawy Awtists",
@ -349,6 +356,9 @@
"settings.description.cast": "Cast to Devices", "settings.description.cast": "Cast to Devices",
"settings.description.settings": "Settings", "settings.description.settings": "Settings",
"settings.description.developer": "Devewopew Toows", "settings.description.developer": "Devewopew Toows",
"settings.description.listnow": "Wisten Nyow",
"settings.description.recentAdd": "Wecentwy Added",
"settings.description.songs": "Songs",
"settings.notyf.updateCider.update-not-available": "Nyo update avaiwabwe", "settings.notyf.updateCider.update-not-available": "Nyo update avaiwabwe",
"settings.notyf.updateCider.update-downloaded": "Update has been downwoaded, westawt to appwy", "settings.notyf.updateCider.update-downloaded": "Update has been downwoaded, westawt to appwy",
"settings.notyf.updateCider.update-error": "Ewwow updating Cidew", "settings.notyf.updateCider.update-error": "Ewwow updating Cidew",
@ -406,8 +416,15 @@
"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",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.soundstage": "Soundstage",
"settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.separation": "Sepawation",
"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.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.description": "(Advanced usews onwy) Dispway dB SPW instead of dBFS on the vowume swidew.",
"settings.option.audio.dbfs.calibration": "0 dBFS Cawibwation",
"settings.option.audio.dbfs.description": "Entew the peak Z-weighted dB SPW when Cidew is at 0 dBFS.",
"settings.header.visual": "Visuaw", "settings.header.visual": "Visuaw",
"settings.header.visual.description": "Adjust the visuaw settings fow Cidew.", "settings.header.visual.description": "Adjust the visuaw settings fow Cidew.",
"settings.option.visual.windowStyle": "Window Stywe", "settings.option.visual.windowStyle": "Window Stywe",

View file

@ -259,6 +259,10 @@
"action.tray.minimize": "Minimize to Tray", "action.tray.minimize": "Minimize to Tray",
"action.tray.quit": "Quit", "action.tray.quit": "Quit",
"action.tray.show": "Show Cider", "action.tray.show": "Show Cider",
"action.tray.playpause": "Play/Pause",
"action.tray.next": "Next",
"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",

View file

@ -259,6 +259,9 @@
"action.tray.minimize": "Minimize to Tray", "action.tray.minimize": "Minimize to Tray",
"action.tray.quit": "Quit", "action.tray.quit": "Quit",
"action.tray.show": "Show Cider", "action.tray.show": "Show Cider",
"action.tray.playpause": "Play/Pause",
"action.tray.next": "Next",
"action.tray.previous": "Previous",
"action.update": "Update", "action.update": "Update",
"action.install": "Install", "action.install": "Install",
"action.copy": "Copy", "action.copy": "Copy",

View file

@ -233,6 +233,12 @@
"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.themeUpdateNotification": "自動檢查主題更新",
"settings.option.general.showLovedTracksInline": "顯示點擊喜愛的歌曲",
"settings.option.general.keybindings.open": "開啟", "settings.option.general.keybindings.open": "開啟",
"settings.notyf.updateCider.update-not-available": "沒有可用的更新", "settings.notyf.updateCider.update-not-available": "沒有可用的更新",
"settings.notyf.updateCider.update-downloaded": "更新已成功下載,重啟後進行更新", "settings.notyf.updateCider.update-downloaded": "更新已成功下載,重啟後進行更新",
@ -310,13 +316,13 @@
"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.openfolder": "主題存放位置",
"settings.option.visual.theme.github.explore": "探索 GitHub 上的主題", "settings.option.visual.theme.github.explore": "探索 GitHub 上的主題",
"settings.prompt.visual.theme.github.URL": "輸入你要安裝的主題網址", "settings.prompt.visual.theme.github.URL": "輸入你要安裝的主題網址",
"settings.option.visual.theme.manageStyles": "管理主題", "settings.option.visual.theme.manageStyles": "管理主題",
"settings.option.visual.theme.uninstall": "移除", "settings.option.visual.theme.uninstall": "移除",
"settings.option.visual.theme.viewInfo": "查看資訊", "settings.option.visual.theme.viewInfo": "查看資訊",
"settings.option.visual.theme.github.available": "可用", "settings.option.visual.theme.github.available": "可使用",
"settings.option.visual.theme.github.applied": "已套用", "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": "主題安裝失敗",
@ -354,6 +360,7 @@
"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.lastfmScrobble": "Last.FM 音樂記錄", "settings.option.connectivity.lastfmScrobble": "Last.FM 音樂記錄",

View file

@ -259,7 +259,6 @@ export class AppEvents {
height: 20 height: 20
}), }),
} }
this.tray = new Tray(process.platform === 'win32' ? icons.win32 : (process.platform === 'darwin' ? icons.darwin : icons.linux)) this.tray = new Tray(process.platform === 'win32' ? icons.win32 : (process.platform === 'darwin' ? icons.darwin : icons.linux))
this.tray.setToolTip(app.getName()) this.tray.setToolTip(app.getName())
this.setTray(false) this.setTray(false)
@ -298,7 +297,63 @@ export class AppEvents {
private setTray(visible: boolean = utils.getWindow().isVisible()) { private setTray(visible: boolean = utils.getWindow().isVisible()) {
this.i18n = utils.getLocale(utils.getStoreValue('general.language')) this.i18n = utils.getLocale(utils.getStoreValue('general.language'))
const ciderIcon = nativeImage.createFromPath(path.join(__dirname, `../../resources/icons/icon.png`)).resize({
width: 24,
height: 24
})
const menu = Menu.buildFromTemplate([ const menu = Menu.buildFromTemplate([
{
label: app.getName(),
enabled: false,
icon: ciderIcon,
},
{type: 'separator'},
/* For now only idea i dont know if posible to implement
{
label: this.i18n['action.tray.listento'],
enabled: false,
},
{
visible: visible,
label: 'track info',
enabled: false,
},
{type: 'separator'},
*/
{
visible: (visible === false),
label: this.i18n['action.tray.playpause'],
click: () => {
utils.getWindow().webContents.executeJavaScript('MusicKitInterop.playPause()')
}
},
{
visible: (visible === false),
label: this.i18n['action.tray.next'],
click: () => {
utils.getWindow().webContents.executeJavaScript(`MusicKitInterop.next()`)
}
},
{
visible: (visible === false),
label: this.i18n['action.tray.previous'],
click: () => {
utils.getWindow().webContents.executeJavaScript(`MusicKitInterop.previous()`)
}
},
{type: 'separator'},
{ {
label: (visible ? this.i18n['action.tray.minimize'] : `${this.i18n['action.tray.show']}`), label: (visible ? this.i18n['action.tray.minimize'] : `${this.i18n['action.tray.show']}`),
click: () => { click: () => {

View file

@ -65,6 +65,7 @@ export class BrowserWindow {
"pages/cider-playlist", "pages/cider-playlist",
"pages/playlist-inline", "pages/playlist-inline",
"pages/recordLabel", "pages/recordLabel",
"pages/cider-multiroom",
"pages/collection-list", "pages/collection-list",
"pages/apple-curator", "pages/apple-curator",
"pages/artist", "pages/artist",
@ -175,6 +176,10 @@ export class BrowserWindow {
page: "recordLabel_", page: "recordLabel_",
component: `<cider-recordlabel :data="showingPlaylist"></cider-recordlabel>`, component: `<cider-recordlabel :data="showingPlaylist"></cider-recordlabel>`,
condition: `page.includes('recordLabel_')` condition: `page.includes('recordLabel_')`
}, {
page: "multiroom",
component: `<cider-multiroom :data="multiroom"></cider-multiroom>`,
condition: `page.includes('multiroom')`
}, { }, {
page: "curator_", page: "curator_",
component: `<cider-recordlabel :data="showingPlaylist"></cider-recordlabel>`, component: `<cider-recordlabel :data="showingPlaylist"></cider-recordlabel>`,

View file

@ -101,7 +101,7 @@ export class Store {
], ],
"settings": [ "settings": [
"CommandOrControl", // Who the hell uses a different key for this? Fucking Option? "CommandOrControl", // Who the hell uses a different key for this? Fucking Option?
"S" ","
], ],
"openDeveloperTools": [ "openDeveloperTools": [
"CommandOrControl", "CommandOrControl",

View file

@ -22,43 +22,50 @@ export default class Thumbar {
{ {
label: app.getName(), label: app.getName(),
submenu: [ submenu: [
{
label: `${utils.getLocale(utils.getStoreValue('general.language'), 'term.about')} ${app.getName()}`,
click: () => utils.getWindow().webContents.executeJavaScript(`app.appRoute('about')`)
},
{type: 'separator'},
{ {
label: utils.getLocale(utils.getStoreValue('general.language'), 'menubar.options.toggleprivate'), label: utils.getLocale(utils.getStoreValue('general.language'), 'menubar.options.toggleprivate'),
accelerator: utils.getStoreValue("general.keybindings.togglePrivateSession").join('+'), accelerator: utils.getStoreValue("general.keybindings.togglePrivateSession").join('+'),
click: () => utils.getWindow().webContents.executeJavaScript(`app.cfg.general.privateEnabled = !app.cfg.general.privateEnabled`) click: () => utils.getWindow().webContents.executeJavaScript(`app.cfg.general.privateEnabled = !app.cfg.general.privateEnabled`)
}, },
{type: 'separator'},
{ {
label: utils.getLocale(utils.getStoreValue('general.language'), 'menubar.options.settings'), label: utils.getLocale(utils.getStoreValue('general.language'), 'menubar.options.settings'),
accelerator: utils.getStoreValue("general.keybindings.settings").join('+'), accelerator: utils.getStoreValue("general.keybindings.settings").join('+'),
click: () => utils.getWindow().webContents.executeJavaScript(`app.appRoute('settings')`), click: () => utils.getWindow().webContents.executeJavaScript(`app.appRoute('settings')`)
}, },
...(this.isMac ? [ ...(this.isMac ? [
{type: 'separator'}, {type: 'separator'},
{role: 'services'}, {role: 'services'},
{type: 'separator'}, {type: 'separator'},
{role: 'hide'}, {role: 'hide'},
{role: 'hideOthers'}, {role: 'hideOthers'},
{role: 'unhide'}, {role: 'unhide'},
]: [ {type: 'separator'},
{type: 'separator'}, {role: 'quit'}
{ ] : []),
label: utils.getLocale(utils.getStoreValue('general.language'), 'menubar.options.about'), ]
click: () => utils.getWindow().webContents.executeJavaScript(`app.appRoute('about')`)
},
{type: 'separator'},
{role: 'quit', label: utils.getLocale(utils.getStoreValue('general.language'), 'menubar.options.quit')},
]),
],
}, },
{ {
label: utils.getLocale(utils.getStoreValue('general.language'), 'menubar.options.view'), label: utils.getLocale(utils.getStoreValue('general.language'), 'menubar.options.view'),
submenu: [ submenu: [
{role: 'reload'},
{role: 'forceReload'},
{role: 'toggleDevTools'},
{type: 'separator'},
{role: 'resetZoom'},
{role: 'zoomIn'},
{role: 'zoomOut'},
{type: 'separator'},
{role: 'togglefullscreen'},
{type: 'separator'},
{ {
label: utils.getLocale(utils.getStoreValue('general.language'), 'menubar.options.search'), label: utils.getLocale(utils.getStoreValue('general.language'), 'menubar.options.search'),
accelerator: utils.getStoreValue("general.keybindings.search").join('+'), accelerator: utils.getStoreValue("general.keybindings.search").join('+'),
click: () => utils.getWindow().webContents.executeJavaScript(`app.appRoute('search')`) click: () => utils.getWindow().webContents.executeJavaScript('app.focusSearch()')
}, },
{type:'separator'}, {type:'separator'},
{ {
@ -91,13 +98,9 @@ export default class Thumbar {
label: utils.getLocale(utils.getStoreValue('general.language'), 'menubar.options.artists'), label: utils.getLocale(utils.getStoreValue('general.language'), 'menubar.options.artists'),
accelerator: utils.getStoreValue("general.keybindings.artists").join('+'), accelerator: utils.getStoreValue("general.keybindings.artists").join('+'),
click: () => utils.getWindow().webContents.executeJavaScript(`app.appRoute('library-artists')`) click: () => utils.getWindow().webContents.executeJavaScript(`app.appRoute('library-artists')`)
}, },
{type: 'separator'}, ]
...(this.isMac ? [
]: []),
],
}, },
{ {
label: utils.getLocale(utils.getStoreValue('general.language'), 'menubar.options.window'), label: utils.getLocale(utils.getStoreValue('general.language'), 'menubar.options.window'),
submenu: [ submenu: [

View file

@ -93,7 +93,7 @@ export default class Thumbar {
/** /**
* Runs on plugin load (Currently run on application start) * Runs on plugin load (Currently run on application start)
*/ */
constructor(utils: { getApp: () => any; }) { constructor(a: { getApp: () => any; }) {
this._app = utils.getApp(); this._app = utils.getApp();
console.debug(`[Plugin][${this.name}] Loading Complete.`); console.debug(`[Plugin][${this.name}] Loading Complete.`);
} }

25453
src/renderer/apple-hls-old.js Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -254,6 +254,9 @@
height: 32px; height: 32px;
flex: 0 0 auto; flex: 0 0 auto;
} }
.cd-queue-item:hover {
background: var(--selected);
}
.cd-queue-item.selected { .cd-queue-item.selected {
background: var(--selected); background: var(--selected);
} }

View file

@ -306,6 +306,10 @@
flex: 0 0 auto; flex: 0 0 auto;
} }
&:hover {
background: var(--selected);
}
&.selected { &.selected {
background: var(--selected); background: var(--selected);
} }

View file

@ -1637,4 +1637,29 @@
background: transparent; background: transparent;
border : 0px; border : 0px;
} }
}
.content-inner.cider-multiroom{
padding: 0px;
.detail{
padding: 32px;
}
.header-desc{
font-size: 1em;
font-weight: 400;
}
.artworkContainer{
height: 300px;
width : 100%;
img{
height: 100%;
width: 100%;
overflow: hidden;
object-fit: cover;
filter: unset;
&:last-child{
transform: unset;
}
}
}
} }

View file

@ -55,6 +55,7 @@ const app = new Vue({
}, },
showingPlaylist: [], showingPlaylist: [],
appleCurator: [], appleCurator: [],
multiroom: [],
artistPage: { artistPage: {
data: {}, data: {},
}, },
@ -820,7 +821,13 @@ const app = new Vue({
CiderAudio.audioNodes.gainNode.gain.value = gain CiderAudio.audioNodes.gainNode.gain.value = gain
} catch (e) { } } catch (e) { }
} }
} catch (e) { ipcRenderer.send('SoundCheckTag', event, tag); } // brute force until it works } catch (e) {
try { ipcRenderer.send('SoundCheckTag', event, tag); }
catch (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
}) })
ipcRenderer.on('play', function (_event, mode, id) { ipcRenderer.on('play', function (_event, mode, id) {
@ -913,7 +920,7 @@ const app = new Vue({
} }
let type = (self.mk.nowPlayingItem != null) ? self.mk.nowPlayingItem["type"] ?? '' : ''; let type = (self.mk.nowPlayingItem != null) ? self.mk.nowPlayingItem["type"] ?? '' : '';
if (type.includes("musicVideo") || type.includes("uploadedVideo") || type.includes("music-movie")) { if (type.includes("musicVideo") || type.includes("uploadedVideo") || type.includes("music-movie") || (self.mk.nowPlayingItem?.type == "radioStation" & self.mk.nowPlayingItem?.attributes?.mediaKind == "video")) {
document.getElementById("apple-music-video-container").style.display = "block"; document.getElementById("apple-music-video-container").style.display = "block";
document.body.setAttribute("video-playing", "true") document.body.setAttribute("video-playing", "true")
// app.chrome.topChromeVisible = false // app.chrome.topChromeVisible = false
@ -1680,10 +1687,9 @@ const app = new Vue({
}) })
}, },
routeView(item) { routeView(item) {
let kind = (item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')) : (item.type ?? '')); let kind = (item.attributes?.playParams ? (item.attributes?.playParams?.kind ?? (item.type ?? '')) : (item.type ?? ''));
let id = (item.attributes.playParams ? (item.attributes.playParams.id ?? (item.id ?? '')) : (item.id ?? '')); let id = (item.attributes?.playParams ? (item.attributes?.playParams?.id ?? (item.id ?? '')) : (item.id ?? ''));
; let isLibrary = item.attributes?.playParams ? (item.attributes?.playParams?.isLibrary ?? false) : false;
let isLibrary = item.attributes.playParams ? (item.attributes.playParams.isLibrary ?? false) : false;
if (kind.includes("playlist") || kind.includes("album")) { if (kind.includes("playlist") || kind.includes("album")) {
app.showingPlaylist = []; app.showingPlaylist = [];
} }
@ -1697,14 +1703,39 @@ const app = new Vue({
}); });
window.location.hash = `${kind}/${id}` window.location.hash = `${kind}/${id}`
document.querySelector("#app-content").scrollTop = 0 document.querySelector("#app-content").scrollTop = 0
} else if (kind == "editorial-elements") { } else if (kind == "editorial-elements" || kind == "editorial-items") {
console.debug(item) console.debug(item)
if (item.relationships?.contents?.data != null && item.relationships?.contents?.data.length > 0) { if (item.relationships?.contents?.data != null && item.relationships?.contents?.data.length > 0) {
this.routeView(item.relationships.contents.data[0]) this.routeView(item.relationships.contents.data[0])
} else if (item.attributes?.link?.url != null) { } else if (item.attributes?.link?.url != null) {
window.open(item.attributes.link.url) if (item.attributes.link.url.includes("viewMultiRoom")) {
const params = new Proxy(new URLSearchParams(item.attributes.link.url), {
get: (searchParams, prop) => searchParams.get(prop),
});
id = params.fcId
app.getTypeFromID("multiroom", id, false, {
platform: "web",
extend: "editorialArtwork,uber,lockupStyle"
}).then(()=> {
kind = "multiroom"
window.location.hash = `${kind}/${id}`
document.querySelector("#app-content").scrollTop = 0
})
return;
} else {
window.open(item.attributes.link.url)}
} }
} else if (kind == "multirooms"){
app.getTypeFromID("multiroom", id, false, {
platform: "web",
extend: "editorialArtwork,uber,lockupStyle"
}).then(()=> {
kind = "multiroom"
window.location.hash = `${kind}/${id}`
document.querySelector("#app-content").scrollTop = 0
})
} else if (kind.toString().includes("artist")) { } else if (kind.toString().includes("artist")) {
app.getArtistInfo(id, isLibrary) app.getArtistInfo(id, isLibrary)
window.location.hash = `${kind}/${id}${isLibrary ? "/" + isLibrary : ''}` window.location.hash = `${kind}/${id}${isLibrary ? "/" + isLibrary : ''}`
@ -1947,6 +1978,8 @@ const app = new Vue({
} finally { } finally {
if (kind == "appleCurator") { if (kind == "appleCurator") {
app.appleCurator = a.data.data[0] app.appleCurator = a.data.data[0]
} else if (kind == "multiroom"){
app.multiroom = a.data.data[0]
} else { } else {
this.getPlaylistContinuous(a, true) this.getPlaylistContinuous(a, true)
} }
@ -1954,6 +1987,8 @@ const app = new Vue({
} finally { } finally {
if (kind == "appleCurator") { if (kind == "appleCurator") {
app.appleCurator = a.data.data[0] app.appleCurator = a.data.data[0]
} else if (kind == "multiroom"){
app.multiroom = a.data.data[0]
} else { } else {
this.getPlaylistContinuous(a, true) this.getPlaylistContinuous(a, true)
} }
@ -2168,6 +2203,13 @@ const app = new Vue({
sortArtists() sortArtists()
} }
}, },
focusSearch() {
app.appRoute('search')
const search = document.getElementsByClassName("search-input")
if (search.length > 0) {
search[0].focus()
}
},
getSidebarItemClass(page) { getSidebarItemClass(page) {
if (this.page == page) { if (this.page == page) {
return ["active"] return ["active"]
@ -2187,7 +2229,10 @@ const app = new Vue({
} }
let truemethod = (!method.endsWith("s")) ? (method + "s") : method; let truemethod = (!method.endsWith("s")) ? (method + "s") : method;
try { try {
if (library) { if (method.includes(`multiroom`)) {
return await this.mk.api.v3.music(`v1/editorial/${app.mk.storefrontId}/${truemethod}/${term.toString()}`, params, params2)
}
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)

View file

@ -1605,6 +1605,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
margin: 10px; margin: 10px;
margin-left: 5%; margin-left: 5%;
margin-right: 0px; margin-right: 0px;
overflow-wrap: break-word;
} }
.lyric-line.active .verse { .lyric-line.active .verse {

View file

@ -45,9 +45,9 @@
</transition> </transition>
<div id="apple-music-video-container"> <div id="apple-music-video-container">
<div id="apple-music-video-player-controls"> <div id="apple-music-video-player-controls">
<div id="player-exit" title="Close" @click="exitMV()"> <div id="player-exit" title="Close" @click="exitMV();fullscreen(false);">
<svg fill="white" xmlns="http://www.w3.org/2000/svg" width="21" height="21" viewBox="0 0 21 21" <svg fill="white" xmlns="http://www.w3.org/2000/svg" width="21" height="21" viewBox="0 0 21 21"
aria-role="presentation" focusable="false"> aria-role="presentation" focusable="false" @click="exitMV();fullscreen(false);">
<path <path
d="M10.5 21C4.724 21 0 16.275 0 10.5S4.724 0 10.5 0 21 4.725 21 10.5 16.276 21 10.5 21zm-3.543-5.967a.96.96 0 00.693-.295l2.837-2.842 2.85 2.842c.167.167.41.295.693.295.552 0 1.001-.461 1.001-1.012 0-.281-.115-.512-.295-.704L11.899 10.5l2.85-2.855a.875.875 0 00.295-.68c0-.55-.45-.998-1.001-.998a.871.871 0 00-.668.295l-2.888 2.855-2.862-2.843a.891.891 0 00-.668-.281.99.99 0 00-1.001.986c0 .269.116.512.295.678L9.088 10.5l-2.837 2.843a.926.926 0 00-.295.678c0 .551.45 1.012 1.001 1.012z" d="M10.5 21C4.724 21 0 16.275 0 10.5S4.724 0 10.5 0 21 4.725 21 10.5 16.276 21 10.5 21zm-3.543-5.967a.96.96 0 00.693-.295l2.837-2.842 2.85 2.842c.167.167.41.295.693.295.552 0 1.001-.461 1.001-1.012 0-.281-.115-.512-.295-.704L11.899 10.5l2.85-2.855a.875.875 0 00.295-.68c0-.55-.45-.998-1.001-.998a.871.871 0 00-.668.295l-2.888 2.855-2.862-2.843a.891.891 0 00-.668-.281.99.99 0 00-1.001.986c0 .269.116.512.295.678L9.088 10.5l-2.837 2.843a.926.926 0 00-.295.678c0 .551.45 1.012 1.001 1.012z"
fill-rule="nonzero"/> fill-rule="nonzero"/>

View file

@ -1,30 +1,30 @@
<script type="text/x-template" id="mediaitem-mvview-sp"> <script type="text/x-template" id="mediaitem-mvview-sp">
<div style="position: relative; display: inline-flex;"> <div style="position: relative; display: inline-flex;">
<div @click.self='app.routeView(item)' <div @click.self='log(item);app.routeView(item)'
class="cd-mediaitem-mvview"> class="cd-mediaitem-mvview">
<div style="height: 70px; min-height: 70px; max-height: 70px; width: 100%; margin-left: 5px;"> <div style="height: 70px; min-height: 70px; max-height: 70px; width: 100%; margin-left: 5px;">
<div class="title-browse-sp bold " @click='app.routeView(item)' style="color: darkgrey;"> <div class="title-browse-sp bold " @click='log(item);app.routeView(item)' style="color: darkgrey;">
{{ badge ? badge.designBadge : ''}} {{ badge ? badge?.designBadge : ''}}
</div> </div>
<div class="title-browse-sp "> <div class="title-browse-sp ">
{{ (badge != null && badge.designTag != null) ? badge.designTag : (item.attributes.name ?? '') }} {{ (badge != null && badge?.designTag != null) ? badge?.designTag : (item.attributes?.name ?? '') }}
</div> </div>
<div class="title-browse-sp semibold" style="color: darkgrey;"> <div class="title-browse-sp semibold" style="color: darkgrey;">
{{ (item.attributes.artistName ?? (item.attributes.curatorName ?? '')) }} {{ (item?.attributes?.artistName ?? (item?.attributes?.curatorName ?? '')) }}
</div> </div>
</div> </div>
<div class="artwork"> <div class="artwork">
<mediaitem-artwork <mediaitem-artwork
:url="item.attributes.artwork ? item.attributes.artwork.url : ''" :url="item.attributes?.artwork ? item.attributes?.artwork?.url : ''"
:video="(item.attributes != null && item.attributes.editorialVideo != null) ? (item.attributes.editorialVideo.motionDetailSquare ? item.attributes.editorialVideo.motionDetailSquare.video : (item.attributes.editorialVideo.motionSquareVideo1x1 ? item.attributes.editorialVideo.motionSquareVideo1x1.video : '')) : '' " :video="(item.attributes != null && item.attributes?.editorialVideo != null) ? (item.attributes?.editorialVideo?.motionDetailSquare ? item.attributes?.editorialVideo?.motionDetailSquare?.video : (item.attributes?.editorialVideo?.motionSquareVideo1x1 ? item?.attributes?.editorialVideo?.motionSquareVideo1x1?.video : '')) : '' "
:size="516" :width="900" :size="516" :width="900"
></mediaitem-artwork> ></mediaitem-artwork>
</div> </div>
<div class="cd-mediaitem-mvview-overlay" @click.self='app.routeView(item)'> <div class="cd-mediaitem-mvview-overlay" @click.self='log(item);app.routeView(item)'>
<div class="button" style=" <div class="button" style="
border-radius: 50%; border-radius: 50%;
background: rgba(50,50,50,0.7);" background: rgba(50,50,50,0.7);"
:style="[(!(item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')): (item.type ?? '')).includes('radioStation') && !(item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')): (item.type ?? '')).includes('song')) ? :style="[(!(item.attributes?.playParams ? (item.attributes?.playParams?.kind ?? (item.type ?? '')): (item.type ?? '')).includes('radioStation') && !(item.attributes?.playParams ? (item.attributes?.playParams?.kind ?? (item.type ?? '')): (item.type ?? '')).includes('song')) ?
{'margin': '205px', {'margin': '205px',
'margin-left': '260px', 'margin-bottom': '140px', 'margin-left': '260px', 'margin-bottom': '140px',
width: '30px', width: '30px',
@ -37,11 +37,11 @@
</div> </div>
</div> </div>
</div> </div>
<div class="cd-mediaitem-mvview-overlay" @click.self='app.routeView(item)' tabindex="0"> <div class="cd-mediaitem-mvview-overlay" @click.self='log(item);app.routeView(item)' tabindex="0">
<div class="button" style=" <div class="button" style="
border-radius: 50%; border-radius: 50%;
background: rgba(50,50,50,0.7);" background: rgba(50,50,50,0.7);"
:style="[(!(item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')): (item.type ?? '')).includes('radioStation') && !(item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')): (item.type ?? '')).includes('song')) ? :style="[(!(item.attributes?.playParams ? (item.attributes?.playParams?.kind ?? (item.type ?? '')): (item.type ?? '')).includes('radioStation') && !(item.attributes?.playParams ? (item.attributes?.playParams?.kind ?? (item.type ?? '')): (item.type ?? '')).includes('song')) ?
{'margin': '205px', {'margin': '205px',
'margin-left': '260px', 'margin-bottom': '140px', 'margin-left': '260px', 'margin-bottom': '140px',
width: '30px', width: '30px',
@ -65,6 +65,10 @@
app: this.$root, app: this.$root,
} }
}, },
methods: {} methods: {
log(item) {
console.log(item);
},
}
}); });
</script> </script>

View file

@ -2,9 +2,12 @@
<vue-horizontal> <vue-horizontal>
<template v-if="browsesp"> <template v-if="browsesp">
<mediaitem-mvview-sp <mediaitem-mvview-sp
:item="item ? ((item.attributes?.kind != null || item.attributes?.type == 'editorial-elements') ? item : ((item.relationships && item.relationships.contents ) ? item.relationships.contents.data[0] : item)) : []" :item="
((item?.attributes?.kind != null || item?.attributes?.type == 'editorial-elements')
? item :
((item.relationships && item.relationships.contents ) ? item.relationships.contents.data[0] : item)) ?? (item)"
:imagesize="imagesize" :imagesize="imagesize"
:badge="item.attributes" v-for="item in items"></mediaitem-mvview-sp> :badge="item.attributes ?? [] " v-for="item in items"></mediaitem-mvview-sp>
</template> </template>
<template v-else> <template v-else>
<mediaitem-square :kind="kind" size="600" :key="item?.id ?? ''" <mediaitem-square :kind="kind" size="600" :key="item?.id ?? ''"

View file

@ -40,8 +40,8 @@
</div> </div>
</div> </div>
<div class="info-rect" :class="{'info-rect-card': kind == 'card'}" :style="{'--bgartwork': getArtworkUrl(size, true)}"> <div class="info-rect" :class="{'info-rect-card': kind == 'card'}" :style="{'--bgartwork': getArtworkUrl(size, true)}">
<div class="title" :title="item.attributes?.name ?? (item.relationships?.contents?.data[0]?.attributes?.name ?? '')" v-if="item.attributes.artistNames == null || kind!= 'card'" @click='app.routeView(item)'> <div class="title" :title="item.attributes?.name ?? (item.relationships?.contents?.data[0]?.attributes?.name ?? (item.attributes?.editorialNotes?.name ?? ''))" v-if="item.attributes.artistNames == null || kind != 'card'" @click='app.routeView(item)'>
<div class="item-navigate text-overflow-elipsis">{{ item.attributes?.name ?? (item.relationships?.contents?.data[0]?.attributes?.name ?? '') }}</div> <div class="item-navigate text-overflow-elipsis">{{ item.attributes?.name ?? (item.relationships?.contents?.data[0]?.attributes?.name ?? (item.attributes?.editorialNotes?.name ?? '')) }}</div>
<div class="explicit-icon" v-if="item.attributes && item.attributes.contentRating == 'explicit'" style= "background-image: url(./assets/explicit.svg);height: 12px;width: 12px;filter: contrast(0);background-repeat: no-repeat;margin-top: 2.63px;margin-left: 4px;"></div> <div class="explicit-icon" v-if="item.attributes && item.attributes.contentRating == 'explicit'" style= "background-image: url(./assets/explicit.svg);height: 12px;width: 12px;filter: contrast(0);background-repeat: no-repeat;margin-top: 2.63px;margin-left: 4px;"></div>
</div> </div>
<div :title="getSubtitle()" class="subtitle item-navigate text-overflow-elipsis" @click="getSubtitleNavigation()" <div :title="getSubtitle()" class="subtitle item-navigate text-overflow-elipsis" @click="getSubtitleNavigation()"
@ -87,8 +87,8 @@
isVisible: false, isVisible: false,
addedToLibrary: false, addedToLibrary: false,
guid: this.uuidv4(), guid: this.uuidv4(),
noplay: ["apple-curators", "editorial-elements"], noplay: ["apple-curators", "editorial-elements", "editorial-items"],
nomenu: ["stations", "apple-curators", "editorial-elements"], nomenu: ["stations", "apple-curators", "editorial-elements", "editorial-items"],
app: this.$root, app: this.$root,
badges: this.$root.socialBadges.badgeMap, badges: this.$root.socialBadges.badgeMap,
itemBadges: [], itemBadges: [],
@ -125,7 +125,7 @@
if (typeof this.item.attributes.artistNames != "undefined") { if (typeof this.item.attributes.artistNames != "undefined") {
return this.item.attributes.artistNames return this.item.attributes.artistNames
} else if (typeof this.item.attributes.editorialNotes != "undefined") { } else if (typeof this.item.attributes.editorialNotes != "undefined") {
return this.item.attributes.editorialNotes.short return this.item?.attributes?.editorialNotes?.short ?? (this.item.attributes?.editorialNotes?.name ?? '')
} else if (typeof this.item.attributes.artistName != "undefined") { } else if (typeof this.item.attributes.artistName != "undefined") {
return this.item.attributes.artistName return this.item.attributes.artistName
} else { } else {
@ -227,7 +227,7 @@
); );
}, },
getArtworkUrl(size = -1, includeUrl = false) { getArtworkUrl(size = -1, includeUrl = false) {
let artwork = this.item.attributes.artwork ? this.item.attributes.artwork.url : '' let artwork = this.item?.attributes?.artwork ? this.item?.attributes?.artwork?.url : (this.item?.attributes?.editorialArtwork?.subscriptionCover?.url ?? '')
if (size != -1) { if (size != -1) {
artwork = artwork.replace('{w}', size).replace('{h}', size).replace('{f}', "webp").replace('{c}', ((size === 900) ? "sr" : "cc")) artwork = artwork.replace('{w}', size).replace('{h}', size).replace('{f}', "webp").replace('{c}', ((size === 900) ? "sr" : "cc"))
} }

View file

@ -31,7 +31,7 @@
</div> </div>
<div class="col queue-info"> <div class="col queue-info">
<div class="queue-title text-overflow-elipsis">{{ queueItem.item.attributes.name }}</div> <div class="queue-title text-overflow-elipsis">{{ queueItem.item.attributes.name }}</div>
<div class="queue-subtitle text-overflow-elipsis">{{ queueItem.item.attributes.albumName }} — {{ queueItem.item.attributes.artistName }}</div> <div class="queue-subtitle text-overflow-elipsis">{{ queueItem.item.attributes.artistName }} — {{ queueItem.item.attributes.albumName }}</div>
</div> </div>
</div> </div>
</div> </div>

View file

@ -37,6 +37,6 @@
return { return {
app: this.$root app: this.$root
} }
}, }
}) })
</script> </script>

View file

@ -0,0 +1,48 @@
<script type="text/x-template" id="cider-multiroom">
<div class="content-inner cider-multiroom">
<div class="artworkContainer">
<artwork-material :url="data.attributes.uber.masterArt.url" size="800" images="1"></artwork-material>
</div>
<div class="detail">
<h1 class="header-text">{{data.attributes?.title ?? ""}}</h1>
<h2 class="header-desc" v-html='data.relationships?.children?.data[0]?.attributes?.description ?? ""'></h2>
<template v-if="data.relationships">
<template v-for="(recom,index) in data.relationships.children.data">
<div class="row">
<div class="col" v-if="recom.attributes.name != 'Chart Set'">
<h3>{{ recom.attributes?.title ?? ""}}</h3>
</div>
<div class="col-auto flex-center" v-if="index != 0 && recom.relationships && ((recom.relationships.children && recom.relationships.children.data.length > 10) || (recom.relationships.contents && recom.relationships.contents.data.length > 10))">
<button class="cd-btn-seeall" @click="app.showCollection(recom.relationships.children ? recom.relationships.children : recom.relationships.contents, recom.attributes.name ?? '', 'listen_now')" >{{app.getLz('term.seeAll')}}</button>
</div>
</div>
<template v-if="recom.relationships && ((recom.relationships.children && recom.relationships.children.data) || (recom.relationships.contents && recom.relationships.contents.data))">
<template v-if="(recom.attributes.name && recom.attributes.name.includes('ideo')) || index === 0">
<mediaitem-scroller-horizontal-mvview :imagesize="800" :browsesp="index == 0"
:items="recom.relationships.children ? recom.relationships.children.data.limit(10) : recom.relationships.contents.data.limit(10)"></mediaitem-scroller-horizontal-mvview>
</template>
<template v-else-if="recom.attributes.name == 'Chart Set'">
</template>
<template v-else>
<mediaitem-scroller-horizontal-large
:items="recom.relationships.children ? recom.relationships.children.data.limit(10) : recom.relationships.contents.data.limit(10)"></mediaitem-scroller-horizontal-large>
</template>
</template>
</template>
</template>
</div>
</div>
</script>
<script>
Vue.component('cider-multiroom', {
template: "#cider-multiroom",
props: ["data"],
data: function() {
return {
app: this.$root
}
}
})
</script>

View file

@ -78,7 +78,7 @@
}, },
methods: { methods: {
getArtistPalette(artist) { getArtistPalette(artist) {
if (artist["attributes"]["artwork"]) { if (artist?.attributes?.artwork != null) {
return { return {
"background": "#" + artist["attributes"]["artwork"]["bgColor"], "background": "#" + artist["attributes"]["artwork"]["bgColor"],
"color": "#" + artist["attributes"]["artwork"]["textColor1"], "color": "#" + artist["attributes"]["artwork"]["textColor1"],

View file

@ -1,7 +1,7 @@
{ {
"compilerOptions": { "compilerOptions": {
"experimentalDecorators": true, "experimentalDecorators": true,
"target": "esnext", "target": "es6",
"module": "commonjs", "module": "commonjs",
"allowJs": true, "allowJs": true,
"noImplicitAny": true, "noImplicitAny": true,

View file

@ -1,7 +1,7 @@
{ {
"electronVersion": "18.2.0", "electronVersion": "18.2.3",
"electronDownload": { "electronDownload": {
"version": "18.2.0+wvcus", "version": "18.2.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",