Compare commits
19 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
fea44a75cb | ||
![]() |
7782e430aa | ||
![]() |
237c4eff02 | ||
![]() |
e814b13b22 | ||
![]() |
b1d0f698a1 | ||
![]() |
05d32089dd | ||
![]() |
89ee84b7e4 | ||
![]() |
b1b828dde2 | ||
![]() |
1b4d1c8d3c | ||
![]() |
53d1b80ee1 | ||
![]() |
30bb111f52 | ||
![]() |
868fc9c08b | ||
![]() |
b1e3e7ebe3 | ||
![]() |
9adbd27402 | ||
![]() |
41680a2d47 | ||
![]() |
c20001cd49 | ||
![]() |
dfc75d0bcb | ||
![]() |
f8e16c546d | ||
![]() |
ff5ec2283d |
58 changed files with 6817 additions and 7408 deletions
11
.github/dependabot.yml
vendored
Normal file
11
.github/dependabot.yml
vendored
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
# To get started with Dependabot version updates, you'll need to specify which
|
||||||
|
# package ecosystems to update and where the package manifests are located.
|
||||||
|
# Please see the documentation for all configuration options:
|
||||||
|
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
|
||||||
|
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: "npm" # See documentation for possible values
|
||||||
|
directory: "/" # Location of package manifests
|
||||||
|
schedule:
|
||||||
|
interval: "monthly"
|
33
.github/workflows/cider-chores.yml
vendored
33
.github/workflows/cider-chores.yml
vendored
|
@ -6,6 +6,39 @@ on:
|
||||||
- main
|
- main
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
compile-and-post:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
container:
|
||||||
|
image: electronuserland/builder:wine
|
||||||
|
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout 🛎
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version-file: '.nvmrc'
|
||||||
|
|
||||||
|
- name: Install Dependencies 📦
|
||||||
|
run: yarn install
|
||||||
|
|
||||||
|
- name: Build 🏗
|
||||||
|
run: yarn dist:all
|
||||||
|
|
||||||
|
- name: Upload Release 🚀
|
||||||
|
uses: softprops/action-gh-release@v2.0.5
|
||||||
|
with:
|
||||||
|
files: |
|
||||||
|
./dist/*.exe
|
||||||
|
./dist/*.deb
|
||||||
|
./dist/*.AppImage
|
||||||
|
./dist/*.rpm
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
prettier:
|
prettier:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
|
4
.github/workflows/support-notice.yml
vendored
4
.github/workflows/support-notice.yml
vendored
|
@ -14,5 +14,5 @@ jobs:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
with:
|
with:
|
||||||
respondableId: ${{ github.event.issue.node_id }}
|
respondableId: ${{ github.event.issue.node_id }}
|
||||||
response: "Support for Cider 1.0 is in a reduced state. Do not expect replies or acknowledgement for issues that do not break full functionality of the app (Media playback, plugin functionality etc.).\n\nIf you are interested in joining the Cider 2 open alpha, you can join our Discord [here](https://discord.gg/AppleMusic)."
|
response: "Cider 1.x is no longer actively maintained. We highly suggest moving to the newer version versions of the app available at https://cider.sh through official storefronts ex. Itch.io, or the Microsoft Store."
|
||||||
author: ${{ github.event.issue.user.login }}
|
author: ${{ github.event.issue.user.login }}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
src/renderer/*hls*.js
|
src/renderer/*hls*.js
|
||||||
build/*
|
build/*
|
||||||
|
dist/*
|
||||||
src/renderer/lib/*
|
src/renderer/lib/*
|
||||||
*.min.*
|
*.min.*
|
||||||
.pnpm-store
|
.pnpm-store
|
||||||
|
|
873
.yarn/releases/yarn-3.5.1.cjs
vendored
873
.yarn/releases/yarn-3.5.1.cjs
vendored
File diff suppressed because one or more lines are too long
|
@ -1,2 +1,5 @@
|
||||||
yarnPath: .yarn/releases/yarn-3.5.1.cjs
|
compressionLevel: mixed
|
||||||
nodeLinker: "node-modules"
|
|
||||||
|
enableGlobalCache: false
|
||||||
|
|
||||||
|
nodeLinker: node-modules
|
||||||
|
|
|
@ -4,10 +4,10 @@ No support will be given on Windows.
|
||||||
|
|
||||||
Thanks for your continued support.
|
Thanks for your continued support.
|
||||||
|
|
||||||
[Get Cider 2 today.](https://www.microsoft.com/store/productId/9PL8WPH0QK9M)
|
[Get Cider 2 today.](https://cider.sh/download)
|
||||||
|
|
||||||
<a href="https://www.microsoft.com/store/productId/9PL8WPH0QK9M"><img src="./src/renderer/assets/c1-c2.png" width="20%" alt="Banner"></a>
|
|
||||||
|
|
||||||
|
<a href="https://cider.sh/download"><img src="./src/renderer/assets/c1-c2.png" height="64px" alt="Banner"></a>
|
||||||
|
<a href="https://cidercollective.itch.io/cider"><img src="https://cider.sh/assets/itch-badge.svg" height="64px" alt="Banner"></a>
|
||||||
---
|
---
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
|
|
|
@ -1,275 +0,0 @@
|
||||||
# Cider-1 Azure Pipeline Workflow
|
|
||||||
# Maintained by Cider Devops.
|
|
||||||
# Don't make changes unless you know what you're doing.
|
|
||||||
|
|
||||||
trigger:
|
|
||||||
branches:
|
|
||||||
include:
|
|
||||||
- main
|
|
||||||
paths:
|
|
||||||
include:
|
|
||||||
- src/**/*
|
|
||||||
exclude:
|
|
||||||
- azure-pipelines.yml
|
|
||||||
|
|
||||||
variables:
|
|
||||||
COMMIT_URL: "$(Build.Repository.Uri)/commit/$(Build.SourceVersion)"
|
|
||||||
BUILD_URL: "$(System.CollectionUri)/$(System.TeamProject)/_build/results?buildId=$(Build.BuildId)"
|
|
||||||
YARN_CACHE_FOLDER: $(Pipeline.Workspace)/.yarn/cache
|
|
||||||
YARN_ENABLE_IMMUTABLE_INSTALLS: false
|
|
||||||
jobs:
|
|
||||||
|
|
||||||
# Linux Production Build Test
|
|
||||||
# This job is used to test the production build of the Linux distribution.
|
|
||||||
# Also tests Pull Requests.
|
|
||||||
- job: compile_linux
|
|
||||||
displayName: "Compile Linux Distribution"
|
|
||||||
pool: Linux
|
|
||||||
steps:
|
|
||||||
- task: NodeTool@0
|
|
||||||
displayName: "Install Node.js"
|
|
||||||
inputs:
|
|
||||||
versionSource: "fromFile"
|
|
||||||
versionFilePath: ".nvmrc"
|
|
||||||
|
|
||||||
# - ${{ if ne(variables['Build.Reason'], 'PullRequest') }}:
|
|
||||||
# - task: Cache@2
|
|
||||||
# inputs:
|
|
||||||
# key: 'yarn | "$(Agent.OS)" | yarn.lock'
|
|
||||||
# path: $(YARN_CACHE_FOLDER)
|
|
||||||
# displayName: Cache yarn
|
|
||||||
|
|
||||||
- script: yarn set version from sources
|
|
||||||
displayName: "Setup yarn"
|
|
||||||
|
|
||||||
# Install dependencies (immutable for non-PR builds)
|
|
||||||
- ${{ if ne(variables['Build.Reason'], 'PullRequest') }}:
|
|
||||||
- script: yarn install
|
|
||||||
displayName: "Install Dependencies"
|
|
||||||
- ${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
|
|
||||||
- script: yarn install
|
|
||||||
displayName: "Install Dependencies"
|
|
||||||
|
|
||||||
- script: yarn dist:linux
|
|
||||||
displayName: "Compile Distribution"
|
|
||||||
|
|
||||||
- task: CopyFiles@2
|
|
||||||
displayName: "Copy to artifacts staging directory"
|
|
||||||
inputs:
|
|
||||||
SourceFolder: 'dist'
|
|
||||||
Contents: |
|
|
||||||
*.AppImage
|
|
||||||
*.deb
|
|
||||||
*.snap
|
|
||||||
*.rpm
|
|
||||||
TargetFolder: '$(Build.ArtifactStagingDirectory)'
|
|
||||||
|
|
||||||
- task: PublishBuildArtifacts@1
|
|
||||||
displayName: Upload Artifacts
|
|
||||||
inputs:
|
|
||||||
ArtifactName: "Cider-1"
|
|
||||||
publishLocation: "Container"
|
|
||||||
- task: GitHubRelease@1
|
|
||||||
inputs:
|
|
||||||
gitHubConnection: 'ciderapp'
|
|
||||||
repositoryName: 'ciderapp/Cider'
|
|
||||||
action: 'edit'
|
|
||||||
target: '$(Build.SourceVersion)'
|
|
||||||
tag: 'v1.6.2'
|
|
||||||
title: 'Cider Version 1.6.2'
|
|
||||||
releaseNotesSource: 'inline'
|
|
||||||
releaseNotesInline: 'Builds from [Azure](https://dev.azure.com/cidercollective/Cider/_build?definitionId=14) CI/CD'
|
|
||||||
assets: |
|
|
||||||
$(Build.ArtifactStagingDirectory)/*.exe
|
|
||||||
$(Build.ArtifactStagingDirectory)/*.deb
|
|
||||||
$(Build.ArtifactStagingDirectory)/*.AppImage
|
|
||||||
$(Build.ArtifactStagingDirectory)/*.snap
|
|
||||||
assetUploadMode: 'replace'
|
|
||||||
addChangeLog: false
|
|
||||||
|
|
||||||
# - task: DownloadBuildArtifacts@1
|
|
||||||
# inputs:
|
|
||||||
# buildType: 'current'
|
|
||||||
# downloadType: 'specific'
|
|
||||||
# downloadPath: '$(System.ArtifactsDirectory)'
|
|
||||||
|
|
||||||
# Windows Production Build Test
|
|
||||||
# This job is used to test the production build of the Windows distribution.
|
|
||||||
# Also tests Pull Requests.
|
|
||||||
- job: compile_windows
|
|
||||||
displayName: "Compile Windows Distribution"
|
|
||||||
pool: default
|
|
||||||
steps:
|
|
||||||
- task: NodeTool@0
|
|
||||||
displayName: "Install Node.js"
|
|
||||||
inputs:
|
|
||||||
versionSource: "fromFile"
|
|
||||||
versionFilePath: ".nvmrc"
|
|
||||||
|
|
||||||
# - ${{ if ne(variables['Build.Reason'], 'PullRequest') }}:
|
|
||||||
# - task: Cache@2
|
|
||||||
# inputs:
|
|
||||||
# key: 'yarn | "$(Agent.OS)" | yarn.lock'
|
|
||||||
# path: $(YARN_CACHE_FOLDER)
|
|
||||||
# displayName: Cache yarn
|
|
||||||
|
|
||||||
- script: yarn set version from sources
|
|
||||||
displayName: "Setup yarn"
|
|
||||||
|
|
||||||
# Install dependencies (immutable for non-PR builds)
|
|
||||||
- ${{ if ne(variables['Build.Reason'], 'PullRequest') }}:
|
|
||||||
- script: yarn install
|
|
||||||
displayName: "Install Dependencies"
|
|
||||||
- ${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
|
|
||||||
- script: yarn install
|
|
||||||
displayName: "Install Dependencies"
|
|
||||||
|
|
||||||
- script: yarn dist:win
|
|
||||||
env: {GH_TOKEN : $(GH_TOKEN)}
|
|
||||||
displayName: "Compile Distribution"
|
|
||||||
|
|
||||||
- task: CopyFiles@2
|
|
||||||
displayName: "Copy to artifacts staging directory"
|
|
||||||
inputs:
|
|
||||||
SourceFolder: "dist"
|
|
||||||
Contents: "*.exe"
|
|
||||||
targetFolder: $(Build.ArtifactStagingDirectory)
|
|
||||||
|
|
||||||
- task: GitHubRelease@1
|
|
||||||
inputs:
|
|
||||||
gitHubConnection: 'ciderapp'
|
|
||||||
repositoryName: 'ciderapp/Cider'
|
|
||||||
action: 'edit'
|
|
||||||
target: '$(Build.SourceVersion)'
|
|
||||||
tag: 'v1.6.2'
|
|
||||||
title: 'Cider Version 1.6.2'
|
|
||||||
releaseNotesSource: 'inline'
|
|
||||||
releaseNotesInline: 'Builds from [Azure](https://dev.azure.com/cidercollective/Cider/_build?definitionId=14) CI/CD'
|
|
||||||
assets: |
|
|
||||||
$(Build.ArtifactStagingDirectory)/*.exe
|
|
||||||
$(Build.ArtifactStagingDirectory)/*.deb
|
|
||||||
$(Build.ArtifactStagingDirectory)/*.AppImage
|
|
||||||
$(Build.ArtifactStagingDirectory)/*.snap
|
|
||||||
assetUploadMode: 'replace'
|
|
||||||
addChangeLog: false
|
|
||||||
|
|
||||||
- task: PublishBuildArtifacts@1
|
|
||||||
displayName: Upload Artifacts
|
|
||||||
inputs:
|
|
||||||
ArtifactName: "Cider-1"
|
|
||||||
publishLocation: "Container"
|
|
||||||
|
|
||||||
|
|
||||||
- job: compile_winget
|
|
||||||
displayName: "Compile for Winget"
|
|
||||||
pool: default
|
|
||||||
steps:
|
|
||||||
- task: NodeTool@0
|
|
||||||
displayName: "Install Node.js"
|
|
||||||
inputs:
|
|
||||||
versionSource: "fromFile"
|
|
||||||
versionFilePath: ".nvmrc"
|
|
||||||
|
|
||||||
- script: yarn set version from sources
|
|
||||||
displayName: "Setup yarn"
|
|
||||||
|
|
||||||
- script: yarn install
|
|
||||||
displayName: "Install Dependencies"
|
|
||||||
|
|
||||||
- script: yarn run winget
|
|
||||||
env: {GH_TOKEN : $(GH_TOKEN)}
|
|
||||||
displayName: "Compile Distribution"
|
|
||||||
|
|
||||||
- task: CopyFiles@2
|
|
||||||
displayName: "Copy to artifacts staging directory"
|
|
||||||
inputs:
|
|
||||||
SourceFolder: "dist"
|
|
||||||
Contents: "*.exe"
|
|
||||||
targetFolder: $(Build.ArtifactStagingDirectory)
|
|
||||||
|
|
||||||
- task: GitHubRelease@1
|
|
||||||
inputs:
|
|
||||||
gitHubConnection: 'ciderapp'
|
|
||||||
repositoryName: 'ciderapp/Cider'
|
|
||||||
action: 'edit'
|
|
||||||
target: '$(Build.SourceVersion)'
|
|
||||||
tag: 'v1.6.2'
|
|
||||||
title: 'Cider Version 1.6.2'
|
|
||||||
releaseNotesSource: 'inline'
|
|
||||||
releaseNotesInline: 'Builds from [Azure](https://dev.azure.com/cidercollective/Cider/_build?definitionId=14) CI/CD'
|
|
||||||
assets: |
|
|
||||||
$(Build.ArtifactStagingDirectory)/*.exe
|
|
||||||
$(Build.ArtifactStagingDirectory)/*.deb
|
|
||||||
$(Build.ArtifactStagingDirectory)/*.AppImage
|
|
||||||
$(Build.ArtifactStagingDirectory)/*.snap
|
|
||||||
assetUploadMode: 'replace'
|
|
||||||
addChangeLog: false
|
|
||||||
|
|
||||||
- task: PublishBuildArtifacts@1
|
|
||||||
displayName: Upload Artifacts
|
|
||||||
inputs:
|
|
||||||
ArtifactName: "Cider-1"
|
|
||||||
publishLocation: "Container"
|
|
||||||
|
|
||||||
- job: compile_macos
|
|
||||||
displayName: "Compile MacOS Distribution"
|
|
||||||
pool: Macos
|
|
||||||
steps:
|
|
||||||
- task: NodeTool@0
|
|
||||||
displayName: "Install Node.js"
|
|
||||||
inputs:
|
|
||||||
versionSource: "fromFile"
|
|
||||||
versionFilePath: ".nvmrc"
|
|
||||||
|
|
||||||
- script: yarn set version from sources
|
|
||||||
displayName: "Setup yarn"
|
|
||||||
|
|
||||||
# Install dependencies (immutable for non-PR builds)
|
|
||||||
- ${{ if ne(variables['Build.Reason'], 'PullRequest') }}:
|
|
||||||
- script: yarn install
|
|
||||||
displayName: "Install Dependencies"
|
|
||||||
- ${{ if eq(variables['Build.Reason'], 'PullRequest') }}:
|
|
||||||
- script: yarn install
|
|
||||||
displayName: "Install Dependencies"
|
|
||||||
|
|
||||||
- script: yarn dist -m --publish=never
|
|
||||||
env:
|
|
||||||
CSC_LINK: $(CSC_LINK)
|
|
||||||
CSC_KEY_PASSWORD: $(CSC_KEY_PASS)
|
|
||||||
APPLEID: $(APPLEID)
|
|
||||||
APPLEIDPASS: $(APPLEIDPASS)
|
|
||||||
GH_TOKEN: $(GH_TOKEN)
|
|
||||||
displayName: "Compile Distribution"
|
|
||||||
|
|
||||||
- task: CopyFiles@2
|
|
||||||
displayName: "Copy to artifacts staging directory"
|
|
||||||
inputs:
|
|
||||||
SourceFolder: 'dist'
|
|
||||||
Contents: |
|
|
||||||
*.dmg
|
|
||||||
*.pkg
|
|
||||||
TargetFolder: '$(Build.ArtifactStagingDirectory)'
|
|
||||||
|
|
||||||
- task: PublishBuildArtifacts@1
|
|
||||||
displayName: Upload Artifacts
|
|
||||||
inputs:
|
|
||||||
ArtifactName: "Cider-1"
|
|
||||||
publishLocation: "Container"
|
|
||||||
- task: GitHubRelease@1
|
|
||||||
inputs:
|
|
||||||
gitHubConnection: 'ciderapp'
|
|
||||||
repositoryName: 'ciderapp/Cider'
|
|
||||||
action: 'edit'
|
|
||||||
target: '$(Build.SourceVersion)'
|
|
||||||
tag: 'v1.6.2'
|
|
||||||
title: 'Cider Version 1.6.2'
|
|
||||||
releaseNotesSource: 'inline'
|
|
||||||
releaseNotesInline: 'Builds from [Azure](https://dev.azure.com/cidercollective/Cider/_build?definitionId=14) CI/CD'
|
|
||||||
assets: |
|
|
||||||
$(Build.ArtifactStagingDirectory)/*.pkg
|
|
||||||
$(Build.ArtifactStagingDirectory)/*.dmg
|
|
||||||
assetUploadMode: 'replace'
|
|
||||||
addChangeLog: false
|
|
||||||
|
|
||||||
|
|
||||||
|
|
104
package.json
104
package.json
|
@ -2,12 +2,14 @@
|
||||||
"name": "cider",
|
"name": "cider",
|
||||||
"applicationId": "Cider",
|
"applicationId": "Cider",
|
||||||
"productName": "Cider",
|
"productName": "Cider",
|
||||||
"version": "1.6.2",
|
"version": "1.6.3",
|
||||||
"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",
|
||||||
|
"exports": "./build/index.js",
|
||||||
"main": "./build/index.js",
|
"main": "./build/index.js",
|
||||||
"author": "Cider Collective <cryptofyre@cider.sh> (https://cider.sh)",
|
"author": "Cider Collective <cryptofyre@cider.sh> (https://cider.sh)",
|
||||||
"repository": "github:ciderapp/Cider",
|
"repository": "github:ciderapp/Cider",
|
||||||
|
"type": "module",
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/ciderapp/Cider/issues?q=is%3Aopen+is%3Aissue+label%3Abug"
|
"url": "https://github.com/ciderapp/Cider/issues?q=is%3Aopen+is%3Aissue+label%3Abug"
|
||||||
},
|
},
|
||||||
|
@ -20,6 +22,7 @@
|
||||||
"dist": "npm run build && electron-builder --publish=never",
|
"dist": "npm run build && electron-builder --publish=never",
|
||||||
"dist:win": "npm run build && electron-builder --win --publish=never",
|
"dist:win": "npm run build && electron-builder --win --publish=never",
|
||||||
"dist:linux": "npm run build && electron-builder --linux --publish=never",
|
"dist:linux": "npm run build && electron-builder --linux --publish=never",
|
||||||
|
"dist:all": "npm run build && electron-builder -wl --publish=never",
|
||||||
"dist:universalNotWorking": "npm run build && electron-builder --mac --universal --publish:never",
|
"dist:universalNotWorking": "npm run build && electron-builder --mac --universal --publish:never",
|
||||||
"winget": "npm run build && electron-builder --win -c winget.json",
|
"winget": "npm run build && electron-builder --win -c winget.json",
|
||||||
"msft": "npm run build && electron-builder -c msft-package.json",
|
"msft": "npm run build && electron-builder -c msft-package.json",
|
||||||
|
@ -29,64 +32,66 @@
|
||||||
"format:write": "npx prettier --write \"src/**/*.{js,json,ts,less}\""
|
"format:write": "npx prettier --write \"src/**/*.{js,json,ts,less}\""
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@achingbrain/ssdp": "^4.0.4",
|
"@achingbrain/ssdp": "^4.0.6",
|
||||||
"@crowdin/ota-client": "^1.0.0",
|
"@crowdin/ota-client": "^1.1.1",
|
||||||
"@sentry/electron": "^4.6.0",
|
"@sentry/electron": "^4.24.0",
|
||||||
"@sentry/integrations": "^7.54.0",
|
"@sentry/integrations": "7.114.0",
|
||||||
"adm-zip": "^0.5.10",
|
"adm-zip": "^0.5.12",
|
||||||
"airtunes2": "github:ciderapp/node_airtunes2",
|
"airtunes2": "ciderapp/node_airtunes2",
|
||||||
"castv2-client": "^1.2.0",
|
"castv2-client": "ciderapp/node-castv2-client",
|
||||||
"chokidar": "^3.5.3",
|
"chokidar": "^3.6.0",
|
||||||
"discord-auto-rpc": "^1.0.17",
|
"discord-auto-rpc": "^1.0.17",
|
||||||
"dns-js": "github:ciderapp/node-dns-js",
|
"ejs": "^3.1.10",
|
||||||
"ejs": "^3.1.9",
|
"electron-log": "^5.1.4",
|
||||||
"electron-fetch": "^1.9.1",
|
|
||||||
"electron-log": "^4.4.8",
|
|
||||||
"electron-notarize": "^1.2.2",
|
"electron-notarize": "^1.2.2",
|
||||||
"electron-store": "^8.1.0",
|
"electron-store": "^9.0.0",
|
||||||
"electron-updater": "^5.3.0",
|
"electron-updater": "6.2.1",
|
||||||
"electron-window-state": "^5.0.3",
|
"electron-window-state": "^5.0.3",
|
||||||
"express": "^4.18.2",
|
"express": "^4.19.2",
|
||||||
"get-port": "5.1.1",
|
"get-port": "7.1.0",
|
||||||
"jimp": "^0.22.8",
|
"jimp": "^0.22.12",
|
||||||
"lastfmapi": "^0.1.1",
|
"lastfmapi": "^0.1.1",
|
||||||
"mdns-js": "github:ciderapp/node-mdns-js",
|
"mdns-js": "ciderapp/node-mdns-js",
|
||||||
"mpris-service": "^2.1.2",
|
"mpris-service": "ciderapp/mpris-service",
|
||||||
"music-metadata": "7.12.6",
|
"music-metadata": "7.14.0",
|
||||||
"node-gyp": "^9.3.1",
|
"node-fetch": "^3.3.2",
|
||||||
"node-ssdp": "^4.0.1",
|
"node-ssdp": "^4.0.1",
|
||||||
"node-ssdp-js": "^0.9.6",
|
"node-ssdp-js": "^0.9.6",
|
||||||
"qrcode": "^1.5.3",
|
"qrcode": "^1.5.3",
|
||||||
"request": "^2.88.2",
|
"request": "^2.88.2",
|
||||||
"run-script-os": "^1.1.6",
|
|
||||||
"simple-ssdp": "^1.0.2",
|
"simple-ssdp": "^1.0.2",
|
||||||
"source-map-support": "^0.5.21",
|
"source-map-support": "^0.5.21",
|
||||||
"ssdp-js": "^1.0.1",
|
"ssdp-js": "^1.0.1",
|
||||||
"ts-md5": "1.3.1",
|
"ts-md5": "1.3.1",
|
||||||
"upnp-mediarenderer-client": "github:vapormusic/node-upnp-mediarenderer-client",
|
"upnp-mediarenderer-client": "vapormusic/node-upnp-mediarenderer-client",
|
||||||
"v8-compile-cache": "^2.3.0",
|
"v8-compile-cache": "^2.4.0",
|
||||||
"wallpaper": "5.0.1",
|
"wallpaper": "7.2.1",
|
||||||
"ws": "^8.13.0",
|
"ws": "^8.17.0",
|
||||||
"xml2js": "^0.6.0",
|
"xml2js": "^0.6.2",
|
||||||
"youtube-search-without-api-key": "^1.1.0"
|
"youtube-search-without-api-key": "^2.0.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/adm-zip": "^0.5.0",
|
"@types/adm-zip": "^0.5.5",
|
||||||
"@types/discord-rpc": "4.0.4",
|
"@types/discord-rpc": "4.0.8",
|
||||||
"@types/express": "^4.17.17",
|
"@types/express": "^4.17.21",
|
||||||
"@types/musickit": "github:ciderapp/musickit-types",
|
"@types/musickit": "ciderapp/musickit-types",
|
||||||
"@types/node": "^20.2.5",
|
"@types/node": "^20.12.12",
|
||||||
"@types/qrcode-terminal": "^0.12.0",
|
"@types/node-ssdp": "^4.0.4",
|
||||||
"@types/ws": "^8.5.4",
|
"@types/qrcode-terminal": "^0.12.2",
|
||||||
"electron": "github:castlabs/electron-releases",
|
"@types/request": "^2.48.12",
|
||||||
"electron-builder": "^23.6.0",
|
"@types/upnp-mediarenderer-client": "^1.4.3",
|
||||||
|
"@types/ws": "^8.5.10",
|
||||||
|
"@types/xml2js": "^0.4.14",
|
||||||
|
"electron": "github:castlabs/electron-releases#v30.0.4+wvcus",
|
||||||
|
"electron-builder": "^24.13.3",
|
||||||
"electron-builder-notarize-pkg": "^1.2.0",
|
"electron-builder-notarize-pkg": "^1.2.0",
|
||||||
"electron-webpack": "^2.8.2",
|
"electron-webpack": "^2.8.2",
|
||||||
"less": "^4.1.3",
|
"less": "^4.2.0",
|
||||||
"prettier": "2.8.8",
|
"node-gyp": "^10.1.0",
|
||||||
"typescript": "^5.1.3",
|
"prettier": "3.2.5",
|
||||||
|
"typescript": "^5.4.5",
|
||||||
"vue-devtools": "^5.1.4",
|
"vue-devtools": "^5.1.4",
|
||||||
"webpack": "~5.85.0"
|
"webpack": "~5.91.0"
|
||||||
},
|
},
|
||||||
"fileAssociations": [
|
"fileAssociations": [
|
||||||
{
|
{
|
||||||
|
@ -111,14 +116,14 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"build": {
|
"build": {
|
||||||
"electronVersion": "25.0.0",
|
"electronVersion": "30.0.6",
|
||||||
"electronDownload": {
|
"electronDownload": {
|
||||||
"version": "25.0.0+wvcus",
|
"version": "30.0.6+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",
|
||||||
"afterPack": "./resources/afterPack.js",
|
"afterPack": "./resources/afterPack.cjs",
|
||||||
"afterSign": "./resources/notarize.js",
|
"afterSign": "./resources/notarize.cjs",
|
||||||
"protocols": [
|
"protocols": [
|
||||||
{
|
{
|
||||||
"name": "Cider",
|
"name": "Cider",
|
||||||
|
@ -142,7 +147,7 @@
|
||||||
"target": [
|
"target": [
|
||||||
"AppImage",
|
"AppImage",
|
||||||
"deb",
|
"deb",
|
||||||
"snap"
|
"rpm"
|
||||||
],
|
],
|
||||||
"synopsis": "A new look into listening and enjoying music in style and performance. ",
|
"synopsis": "A new look into listening and enjoying music in style and performance. ",
|
||||||
"category": "AudioVideo",
|
"category": "AudioVideo",
|
||||||
|
@ -226,9 +231,8 @@
|
||||||
"devtool": "source-map"
|
"devtool": "source-map"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 16",
|
"node": ">= 18",
|
||||||
"npm": ">= 6.13.4",
|
"npm": ">= 6.13.4",
|
||||||
"yarn": ">= 1.21.1"
|
"yarn": ">= 1.21.1"
|
||||||
},
|
}
|
||||||
"packageManager": "yarn@3.5.1"
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
import { app, Menu, nativeImage, Tray, ipcMain, clipboard, shell } from "electron";
|
import { Menu, Tray, app, clipboard, ipcMain, nativeImage, shell } from "electron";
|
||||||
import { readFileSync } from "fs";
|
import log from "electron-log";
|
||||||
import * as path from "path";
|
import { readFileSync } from "node:fs";
|
||||||
import * as log from "electron-log";
|
import { dirname, join, resolve } from "node:path";
|
||||||
import * as os from "os";
|
import { fileURLToPath } from "node:url";
|
||||||
import { utils } from "./utils";
|
import os from "os";
|
||||||
|
import { utils } from "../base/utils.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file Creates App instance
|
* @file Creates App instance
|
||||||
|
@ -45,7 +46,7 @@ export class AppEvents {
|
||||||
|
|
||||||
// Log File Location
|
// Log File Location
|
||||||
if (app.commandLine.hasSwitch("log") || app.commandLine.hasSwitch("l")) {
|
if (app.commandLine.hasSwitch("log") || app.commandLine.hasSwitch("l")) {
|
||||||
console.log(path.join(app.getPath("userData"), "logs"));
|
console.log(join(app.getPath("userData"), "logs"));
|
||||||
app.exit();
|
app.exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,7 +108,7 @@ export class AppEvents {
|
||||||
if (process.defaultApp) {
|
if (process.defaultApp) {
|
||||||
if (process.argv.length >= 2) {
|
if (process.argv.length >= 2) {
|
||||||
this.protocols.forEach((protocol: string) => {
|
this.protocols.forEach((protocol: string) => {
|
||||||
app.setAsDefaultProtocolClient(protocol, process.execPath, [path.resolve(process.argv[1])]);
|
app.setAsDefaultProtocolClient(protocol, process.execPath, [resolve(process.argv[1])]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -144,7 +145,7 @@ export class AppEvents {
|
||||||
title: "Web Remote",
|
title: "Web Remote",
|
||||||
description: "Connect to your Web Remote",
|
description: "Connect to your Web Remote",
|
||||||
},
|
},
|
||||||
"https://webremote.cider.sh"
|
"https://webremote.cider.sh",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -263,15 +264,15 @@ export class AppEvents {
|
||||||
*/
|
*/
|
||||||
private InitTray() {
|
private InitTray() {
|
||||||
const icons = {
|
const icons = {
|
||||||
win32: nativeImage.createFromPath(path.join(__dirname, `../../resources/icons/icon.ico`)).resize({
|
win32: nativeImage.createFromPath(join(dirname(fileURLToPath(import.meta.url)), `../../resources/icons/icon.ico`)).resize({
|
||||||
width: 32,
|
width: 32,
|
||||||
height: 32,
|
height: 32,
|
||||||
}),
|
}),
|
||||||
linux: nativeImage.createFromPath(path.join(__dirname, `../../resources/icons/icon.png`)).resize({
|
linux: nativeImage.createFromPath(join(dirname(fileURLToPath(import.meta.url)), `../../resources/icons/icon.png`)).resize({
|
||||||
width: 32,
|
width: 32,
|
||||||
height: 32,
|
height: 32,
|
||||||
}),
|
}),
|
||||||
darwin: nativeImage.createFromPath(path.join(__dirname, `../../resources/icons/icon.png`)).resize({
|
darwin: nativeImage.createFromPath(join(dirname(fileURLToPath(import.meta.url)), `../../resources/icons/icon.png`)).resize({
|
||||||
width: 20,
|
width: 20,
|
||||||
height: 20,
|
height: 20,
|
||||||
}),
|
}),
|
||||||
|
@ -280,7 +281,7 @@ export class AppEvents {
|
||||||
this.tray.setToolTip(app.getName());
|
this.tray.setToolTip(app.getName());
|
||||||
this.setTray(false);
|
this.setTray(false);
|
||||||
|
|
||||||
this.tray.on("double-click", () => {
|
this.tray.on("double-click", () => { // supports windows and mac only
|
||||||
if (utils.getWindow()) {
|
if (utils.getWindow()) {
|
||||||
if (utils.getWindow().isVisible()) {
|
if (utils.getWindow().isVisible()) {
|
||||||
utils.getWindow().focus();
|
utils.getWindow().focus();
|
||||||
|
@ -290,6 +291,16 @@ export class AppEvents {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.tray.on("click", () => {
|
||||||
|
if (utils.getWindow() && process.platform === "linux") { // use single click to open when double doesn't work
|
||||||
|
if (utils.getWindow().isVisible()) {
|
||||||
|
utils.getWindow().focus();
|
||||||
|
} else {
|
||||||
|
utils.getWindow().show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
utils.getWindow().on("show", () => {
|
utils.getWindow().on("show", () => {
|
||||||
this.setTray(true);
|
this.setTray(true);
|
||||||
});
|
});
|
||||||
|
@ -314,7 +325,7 @@ 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({
|
const ciderIcon = nativeImage.createFromPath(join(dirname(fileURLToPath(import.meta.url)), `../../resources/icons/icon.png`)).resize({
|
||||||
width: 24,
|
width: 24,
|
||||||
height: 24,
|
height: 24,
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,22 +1,21 @@
|
||||||
import { join } from "path";
|
import AdmZip from "adm-zip";
|
||||||
import { app, BrowserWindow as bw, ipcMain, ShareMenu, shell, screen, dialog, nativeTheme, ipcRenderer } from "electron";
|
|
||||||
import * as windowStateKeeper from "electron-window-state";
|
|
||||||
import * as express from "express";
|
|
||||||
import * as getPort from "get-port";
|
|
||||||
import { search } from "youtube-search-without-api-key";
|
|
||||||
import { existsSync, rmSync, mkdirSync, readdirSync, readFileSync, writeFileSync, statSync, unlinkSync, rmdirSync, lstatSync } from "fs";
|
|
||||||
import { Stream } from "stream";
|
|
||||||
import { networkInterfaces } from "os";
|
|
||||||
import * as mm from "music-metadata";
|
|
||||||
import fetch from "electron-fetch";
|
|
||||||
import { wsapi } from "./wsapi";
|
|
||||||
import { utils } from "./utils";
|
|
||||||
import { Plugins } from "./plugins";
|
|
||||||
import { watch } from "chokidar";
|
import { watch } from "chokidar";
|
||||||
import * as os from "os";
|
import { ShareMenu, app, BrowserWindow as bw, dialog, ipcMain, nativeTheme, screen, shell } from "electron";
|
||||||
import wallpaper from "wallpaper";
|
import windowStateKeeper from "electron-window-state";
|
||||||
import * as AdmZip from "adm-zip";
|
import express from "express";
|
||||||
import { LocalFiles } from "../providers/local/";
|
import { existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, rmSync, rmdirSync, statSync, unlinkSync, writeFileSync } from "fs";
|
||||||
|
import getPort from "get-port";
|
||||||
|
import { LocalFiles } from "../providers/local/index.js";
|
||||||
|
import mm from "music-metadata";
|
||||||
|
import fetch from "node-fetch";
|
||||||
|
import os, { networkInterfaces } from "os";
|
||||||
|
import { join } from "path";
|
||||||
|
import { Stream } from "stream";
|
||||||
|
import { getWallpaper } from "wallpaper";
|
||||||
|
import { search } from "youtube-search-without-api-key";
|
||||||
|
import { Plugins } from "./plugins.js";
|
||||||
|
import { utils } from "./utils.js";
|
||||||
|
import { wsapi } from "./wsapi.js";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file Creates the BrowserWindow
|
* @file Creates the BrowserWindow
|
||||||
|
@ -708,7 +707,7 @@ export class BrowserWindow {
|
||||||
cancel: false,
|
cancel: false,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
BrowserWindow.win.webContents.session.webRequest.onBeforeSendHeaders(async (details: { url: string; requestHeaders: { [x: string]: string } }, callback: (arg0: { requestHeaders: any }) => void) => {
|
BrowserWindow.win.webContents.session.webRequest.onBeforeSendHeaders(async (details: { url: string; requestHeaders: { [x: string]: string } }, callback: (arg0: { requestHeaders: any }) => void) => {
|
||||||
|
@ -785,15 +784,15 @@ export class BrowserWindow {
|
||||||
"media-user-token": options.mediaToken,
|
"media-user-token": options.mediaToken,
|
||||||
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Cider/1.4.2 Chrome/100.0.4896.75 Electron/18.0.3 Safari/537.36",
|
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Cider/1.4.2 Chrome/100.0.4896.75 Electron/18.0.3 Safari/537.36",
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
let json = await res.json();
|
let json = await res.json();
|
||||||
return json;
|
return json;
|
||||||
});
|
});
|
||||||
|
|
||||||
ipcMain.on("get-wallpaper", async (event, args) => {
|
ipcMain.on("get-wallpaper", async (event, args) => {
|
||||||
const wpPath: string = await wallpaper.get();
|
const wpPath: string = await getWallpaper();
|
||||||
const Jimp = require("jimp");
|
const Jimp = (await import("jimp")).default;
|
||||||
const img = await Jimp.read(wpPath);
|
const img = await Jimp.read(wpPath);
|
||||||
const blurAmount = args.blurAmount ?? 256;
|
const blurAmount = args.blurAmount ?? 256;
|
||||||
if (blurAmount) {
|
if (blurAmount) {
|
||||||
|
@ -885,7 +884,7 @@ export class BrowserWindow {
|
||||||
if (url.endsWith("/")) url = url.slice(0, -1);
|
if (url.endsWith("/")) url = url.slice(0, -1);
|
||||||
let response = await utils.fetch(`${url}/archive/refs/heads/main.zip`);
|
let response = await utils.fetch(`${url}/archive/refs/heads/main.zip`);
|
||||||
let repo = url.split("/").slice(-2).join("/");
|
let repo = url.split("/").slice(-2).join("/");
|
||||||
let apiRepo = await utils.fetch(`https://api.github.com/repos/${repo}`).then((res) => res.json());
|
let apiRepo = await utils.fetch(`https://api.github.com/repos/${repo}`).then((res) => res.json()) as { id: number};
|
||||||
console.debug(`REPO ID: ${apiRepo.id}`);
|
console.debug(`REPO ID: ${apiRepo.id}`);
|
||||||
// extract the files from the first folder in the zip response
|
// extract the files from the first folder in the zip response
|
||||||
let zip = new AdmZip(await response.buffer());
|
let zip = new AdmZip(await response.buffer());
|
||||||
|
@ -895,7 +894,7 @@ export class BrowserWindow {
|
||||||
}
|
}
|
||||||
console.log(join(utils.getPath("plugins"), "gh_" + apiRepo.id));
|
console.log(join(utils.getPath("plugins"), "gh_" + apiRepo.id));
|
||||||
zip.extractEntryTo(entry, join(utils.getPath("plugins"), "gh_" + apiRepo.id), false, true);
|
zip.extractEntryTo(entry, join(utils.getPath("plugins"), "gh_" + apiRepo.id), false, true);
|
||||||
let commit = await utils.fetch(`https://api.github.com/repos/${repo}/commits`).then((res) => res.json());
|
let commit = await utils.fetch(`https://api.github.com/repos/${repo}/commits`).then((res) => res.json()) as { sha: string }[];
|
||||||
console.debug(`COMMIT SHA: ${commit[0].sha}`);
|
console.debug(`COMMIT SHA: ${commit[0].sha}`);
|
||||||
let theme = JSON.parse(readFileSync(join(utils.getPath("plugins"), "gh_" + apiRepo.id, "package.json"), "utf8"));
|
let theme = JSON.parse(readFileSync(join(utils.getPath("plugins"), "gh_" + apiRepo.id, "package.json"), "utf8"));
|
||||||
theme.id = apiRepo.id;
|
theme.id = apiRepo.id;
|
||||||
|
@ -928,7 +927,7 @@ export class BrowserWindow {
|
||||||
"User-Agent": utils.getWindow().webContents.getUserAgent(),
|
"User-Agent": utils.getWindow().webContents.getUserAgent(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
.then((res) => res.json());
|
.then((res) => res.json()) as { id: number}
|
||||||
console.error(apiRepo);
|
console.error(apiRepo);
|
||||||
console.debug(`REPO ID: ${apiRepo.id}`);
|
console.debug(`REPO ID: ${apiRepo.id}`);
|
||||||
// extract the files from the first folder in the zip response
|
// extract the files from the first folder in the zip response
|
||||||
|
@ -942,7 +941,7 @@ export class BrowserWindow {
|
||||||
let subFolder = entry.entryName.split("/").slice(1, -1).join("/");
|
let subFolder = entry.entryName.split("/").slice(1, -1).join("/");
|
||||||
zip.extractEntryTo(entry, join(utils.getPath("themes"), "gh_" + apiRepo.id, "/", subFolder), false, true);
|
zip.extractEntryTo(entry, join(utils.getPath("themes"), "gh_" + apiRepo.id, "/", subFolder), false, true);
|
||||||
});
|
});
|
||||||
let commit = await utils.fetch(`https://api.github.com/repos/${repo}/commits`).then((res) => res.json());
|
let commit = await utils.fetch(`https://api.github.com/repos/${repo}/commits`).then((res) => res.json()) as { sha: string }[];
|
||||||
console.debug(`COMMIT SHA: ${commit[0].sha}`);
|
console.debug(`COMMIT SHA: ${commit[0].sha}`);
|
||||||
let theme = JSON.parse(readFileSync(join(utils.getPath("themes"), "gh_" + apiRepo.id, "theme.json"), "utf8"));
|
let theme = JSON.parse(readFileSync(join(utils.getPath("themes"), "gh_" + apiRepo.id, "theme.json"), "utf8"));
|
||||||
theme.id = apiRepo.id;
|
theme.id = apiRepo.id;
|
||||||
|
@ -1350,11 +1349,12 @@ export class BrowserWindow {
|
||||||
{
|
{
|
||||||
ip: `${BrowserWindow.getIP()}`,
|
ip: `${BrowserWindow.getIP()}`,
|
||||||
},
|
},
|
||||||
`http://${BrowserWindow.getIP()}:${this.remotePort}`
|
`http://${BrowserWindow.getIP()}:${this.remotePort}`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// Get previews for normalization
|
// Get previews for normalization
|
||||||
ipcMain.on("getPreviewURL", (_event, url) => {
|
ipcMain.on("getPreviewURL", (_event, url) => {
|
||||||
|
|
||||||
fetch(url)
|
fetch(url)
|
||||||
.then((res) => res.buffer())
|
.then((res) => res.buffer())
|
||||||
.then(async (buffer) => {
|
.then(async (buffer) => {
|
||||||
|
@ -1664,7 +1664,7 @@ export class BrowserWindow {
|
||||||
*/
|
*/
|
||||||
private async broadcastRemote() {
|
private async broadcastRemote() {
|
||||||
const myString = `http://${BrowserWindow.getIP()}:${this.remotePort}`;
|
const myString = `http://${BrowserWindow.getIP()}:${this.remotePort}`;
|
||||||
const mdns = require("mdns-js");
|
const mdns = (await import("mdns-js")).default;
|
||||||
const encoded = Buffer.from(myString).toString("base64");
|
const encoded = Buffer.from(myString).toString("base64");
|
||||||
const x = mdns.tcp("cider-remote");
|
const x = mdns.tcp("cider-remote");
|
||||||
const txt_record = {
|
const txt_record = {
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
var util = require("util");
|
|
||||||
var castv2Cli = require("castv2-client");
|
|
||||||
var RequestResponseController = castv2Cli.RequestResponseController;
|
|
||||||
|
|
||||||
function CiderCastController(client, sourceId, destinationId) {
|
|
||||||
RequestResponseController.call(this, client, sourceId, destinationId, "urn:x-cast:com.ciderapp.customdata");
|
|
||||||
this.once("close", onclose);
|
|
||||||
var self = this;
|
|
||||||
function onclose() {
|
|
||||||
self.stop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
util.inherits(CiderCastController, RequestResponseController);
|
|
||||||
|
|
||||||
CiderCastController.prototype.sendIp = function (ip) {
|
|
||||||
// TODO: Implement Callback
|
|
||||||
let data = {
|
|
||||||
ip: ip,
|
|
||||||
};
|
|
||||||
this.request(data);
|
|
||||||
};
|
|
||||||
|
|
||||||
CiderCastController.prototype.kill = function () {
|
|
||||||
// TODO: Implement Callback
|
|
||||||
let data = {
|
|
||||||
action: "stop",
|
|
||||||
};
|
|
||||||
this.request(data);
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = CiderCastController;
|
|
32
src/main/base/castcontroller.ts
Normal file
32
src/main/base/castcontroller.ts
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
// @ts-nocheck
|
||||||
|
import castv2Cli from "castv2-client";
|
||||||
|
const RequestResponseController = castv2Cli.RequestResponseController;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export class CiderCastController extends RequestResponseController {
|
||||||
|
constructor(client: string, sourceId: string, destinationId: string) {
|
||||||
|
super(client, sourceId, destinationId, "urn:x-cast:com.ciderapp.customdata");
|
||||||
|
this.once("close", onclose);
|
||||||
|
var self = this;
|
||||||
|
function onclose() {
|
||||||
|
self.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sendIp(ip: string) {
|
||||||
|
// TODO: Implement Callback
|
||||||
|
let data = {
|
||||||
|
ip: ip,
|
||||||
|
};
|
||||||
|
this.request(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
kill() {
|
||||||
|
// TODO: Implement Callback
|
||||||
|
let data = {
|
||||||
|
action: "stop",
|
||||||
|
};
|
||||||
|
this.request(data);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,80 +0,0 @@
|
||||||
//@ts-nocheck
|
|
||||||
var util = require("util");
|
|
||||||
// var debug = require('debug')('castv2-client');
|
|
||||||
var Application = require("castv2-client").Application;
|
|
||||||
var MediaController = require("castv2-client").MediaController;
|
|
||||||
var CiderCastController = require("./castcontroller");
|
|
||||||
|
|
||||||
function CiderReceiver(client, session) {
|
|
||||||
Application.apply(this, arguments);
|
|
||||||
|
|
||||||
this.media = this.createController(MediaController);
|
|
||||||
this.mediaReceiver = this.createController(CiderCastController);
|
|
||||||
|
|
||||||
this.media.on("status", onstatus);
|
|
||||||
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
function onstatus(status) {
|
|
||||||
self.emit("status", status);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// FE96A351
|
|
||||||
// 27E1334F
|
|
||||||
CiderReceiver.APP_ID = "FE96A351";
|
|
||||||
|
|
||||||
util.inherits(CiderReceiver, Application);
|
|
||||||
|
|
||||||
CiderReceiver.prototype.getStatus = function (callback) {
|
|
||||||
this.media.getStatus.apply(this.media, arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
CiderReceiver.prototype.load = function (media, options, callback) {
|
|
||||||
this.media.load.apply(this.media, arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
CiderReceiver.prototype.play = function (callback) {
|
|
||||||
this.media.play.apply(this.media, arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
CiderReceiver.prototype.pause = function (callback) {
|
|
||||||
this.media.pause.apply(this.media, arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
CiderReceiver.prototype.stop = function (callback) {
|
|
||||||
this.media.stop.apply(this.media, arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
CiderReceiver.prototype.seek = function (currentTime, callback) {
|
|
||||||
this.media.seek.apply(this.media, arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
CiderReceiver.prototype.queueLoad = function (items, options, callback) {
|
|
||||||
this.media.queueLoad.apply(this.media, arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
CiderReceiver.prototype.queueInsert = function (items, options, callback) {
|
|
||||||
this.media.queueInsert.apply(this.media, arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
CiderReceiver.prototype.queueRemove = function (itemIds, options, callback) {
|
|
||||||
this.media.queueRemove.apply(this.media, arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
CiderReceiver.prototype.queueReorder = function (itemIds, options, callback) {
|
|
||||||
this.media.queueReorder.apply(this.media, arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
CiderReceiver.prototype.queueUpdate = function (items, callback) {
|
|
||||||
this.media.queueUpdate.apply(this.media, arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
CiderReceiver.prototype.sendIp = function (opts) {
|
|
||||||
this.mediaReceiver.sendIp.apply(this.mediaReceiver, arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
CiderReceiver.prototype.kill = function (opts) {
|
|
||||||
this.mediaReceiver.kill.apply(this.mediaReceiver, arguments);
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = CiderReceiver;
|
|
80
src/main/base/castreceiver.ts
Normal file
80
src/main/base/castreceiver.ts
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
// @ts-nocheck
|
||||||
|
import castv2Cli from "castv2-client";
|
||||||
|
import { CiderCastController } from "./castcontroller.js";
|
||||||
|
|
||||||
|
const Application = castv2Cli.Application;
|
||||||
|
const MediaController = castv2Cli.MediaController;
|
||||||
|
|
||||||
|
export class CiderReceiver extends Application {
|
||||||
|
// FE96A351
|
||||||
|
// 27E1334F
|
||||||
|
public APP_ID = "FE96A351";
|
||||||
|
|
||||||
|
constructor(_client: unknown, _session: unknown) {
|
||||||
|
super();
|
||||||
|
super.apply(this, arguments);
|
||||||
|
|
||||||
|
this.media = this.createController(MediaController);
|
||||||
|
this.mediaReceiver = this.createController(CiderCastController);
|
||||||
|
|
||||||
|
this.media.on("status", onstatus);
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
function onstatus(status: string) {
|
||||||
|
self.emit("status", status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getStatus(callback: unknown) {
|
||||||
|
this.media.getStatus.apply(this.media, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
load(media: unknown, options: unknown, callback: unknown) {
|
||||||
|
this.media.load.apply(this.media, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
play(callback: unknown) {
|
||||||
|
this.media.play.apply(this.media, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
pause(callback: unknown) {
|
||||||
|
this.media.pause.apply(this.media, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
stop(callback: unknown) {
|
||||||
|
this.media.stop.apply(this.media, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
seek(currentTime: unknown, callback: unknown) {
|
||||||
|
this.media.seek.apply(this.media, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
queueLoad(items: unknown, options: unknown, callback: unknown) {
|
||||||
|
this.media.queueLoad.apply(this.media, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
queueInsert(items: unknown, options: unknown, callback: unknown) {
|
||||||
|
this.media.queueInsert.apply(this.media, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
queueRemove(itemIds: unknown, options: unknown, callback: unknown) {
|
||||||
|
this.media.queueRemove.apply(this.media, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
queueReorder(itemIds: unknown, options: unknown, callback: unknown) {
|
||||||
|
this.media.queueReorder.apply(this.media, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
queueUpdate(items: unknown, callback: unknown) {
|
||||||
|
this.media.queueUpdate.apply(this.media, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
sendIp(opts: unknown) {
|
||||||
|
this.mediaReceiver.sendIp.apply(this.mediaReceiver, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
kill(opts: unknown) {
|
||||||
|
this.mediaReceiver.kill.apply(this.mediaReceiver, arguments);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,7 +1,8 @@
|
||||||
import * as fs from "fs";
|
import {app} from "electron";
|
||||||
import * as path from "path";
|
import { existsSync, lstatSync, readdirSync } from "node:fs";
|
||||||
import * as electron from "electron";
|
import { dirname, join } from "node:path";
|
||||||
import { utils } from "./utils";
|
import { fileURLToPath } from "node:url";
|
||||||
|
import { utils } from "./utils.js";
|
||||||
|
|
||||||
//
|
//
|
||||||
// Hello, this is our loader for the various plugins that the Cider Development Team built for our
|
// Hello, this is our loader for the various plugins that the Cider Development Team built for our
|
||||||
|
@ -17,8 +18,8 @@ import { utils } from "./utils";
|
||||||
*/
|
*/
|
||||||
export class Plugins {
|
export class Plugins {
|
||||||
private static PluginMap: any = {};
|
private static PluginMap: any = {};
|
||||||
private basePluginsPath = path.join(__dirname, "../plugins");
|
private basePluginsPath = join(dirname(fileURLToPath(import.meta.url)), "../plugins");
|
||||||
private userPluginsPath = path.join(electron.app.getPath("userData"), "Plugins");
|
private userPluginsPath = join(app.getPath("userData"), "Plugins");
|
||||||
private readonly pluginsList: any = {};
|
private readonly pluginsList: any = {};
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@ -36,10 +37,10 @@ export class Plugins {
|
||||||
public getPlugins(): any {
|
public getPlugins(): any {
|
||||||
let plugins: any = {};
|
let plugins: any = {};
|
||||||
|
|
||||||
if (fs.existsSync(this.basePluginsPath)) {
|
if (existsSync(this.basePluginsPath)) {
|
||||||
fs.readdirSync(this.basePluginsPath).forEach((file) => {
|
readdirSync(this.basePluginsPath).forEach(async (file) => {
|
||||||
if (file.endsWith(".ts") || file.endsWith(".js")) {
|
if (file.endsWith(".ts") || file.endsWith(".js")) {
|
||||||
const plugin = require(path.join(this.basePluginsPath, file)).default;
|
const plugin = (await import(join(this.basePluginsPath, file))).default;
|
||||||
if (plugins[file] || plugin.name in plugins) {
|
if (plugins[file] || plugin.name in plugins) {
|
||||||
console.log(`[${plugin.name}] Plugin already loaded / Duplicate Class Name`);
|
console.log(`[${plugin.name}] Plugin already loaded / Duplicate Class Name`);
|
||||||
} else {
|
} else {
|
||||||
|
@ -49,12 +50,12 @@ export class Plugins {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fs.existsSync(this.userPluginsPath)) {
|
if (existsSync(this.userPluginsPath)) {
|
||||||
fs.readdirSync(this.userPluginsPath).forEach((file) => {
|
readdirSync(this.userPluginsPath).forEach(async (file) => {
|
||||||
// Plugins V1
|
// Plugins V1
|
||||||
if (file.endsWith(".ts") || file.endsWith(".js")) {
|
if (file.endsWith(".ts") || file.endsWith(".js")) {
|
||||||
if (!electron.app.isPackaged) {
|
if (!app.isPackaged) {
|
||||||
const plugin = require(path.join(this.userPluginsPath, file)).default;
|
const plugin = (await import(join(this.userPluginsPath, file))).default;
|
||||||
file = file.replace(".ts", "").replace(".js", "");
|
file = file.replace(".ts", "").replace(".js", "");
|
||||||
if (plugins[file] || plugin in plugins) {
|
if (plugins[file] || plugin in plugins) {
|
||||||
console.log(`[${plugin.name}] Plugin already loaded / Duplicate Class Name`);
|
console.log(`[${plugin.name}] Plugin already loaded / Duplicate Class Name`);
|
||||||
|
@ -62,7 +63,7 @@ export class Plugins {
|
||||||
plugins[file] = new plugin(utils);
|
plugins[file] = new plugin(utils);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const plugin = require(path.join(this.userPluginsPath, file));
|
const plugin = await import(join(this.userPluginsPath, file));
|
||||||
file = file.replace(".ts", "").replace(".js", "");
|
file = file.replace(".ts", "").replace(".js", "");
|
||||||
if (plugins[file] || plugin in plugins) {
|
if (plugins[file] || plugin in plugins) {
|
||||||
console.log(`[${plugin.name}] Plugin already loaded / Duplicate Class Name`);
|
console.log(`[${plugin.name}] Plugin already loaded / Duplicate Class Name`);
|
||||||
|
@ -72,17 +73,17 @@ export class Plugins {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Plugins V2
|
// Plugins V2
|
||||||
else if (fs.lstatSync(path.join(this.userPluginsPath, file)).isDirectory()) {
|
else if (lstatSync(join(this.userPluginsPath, file)).isDirectory()) {
|
||||||
const pluginPath = path.join(this.userPluginsPath, file);
|
const pluginPath = join(this.userPluginsPath, file);
|
||||||
if (fs.existsSync(path.join(pluginPath, "package.json"))) {
|
if (existsSync(join(pluginPath, "package.json"))) {
|
||||||
const pluginPackage = require(path.join(pluginPath, "package.json"));
|
const pluginPackage = await import(join(pluginPath, "package.json"));
|
||||||
const plugin = require(path.join(pluginPath, pluginPackage.main));
|
const plugin = await import(join(pluginPath, pluginPackage.main));
|
||||||
if (plugins[plugin.name] || plugin.name in plugins) {
|
if (plugins[plugin.name] || plugin.name in plugins) {
|
||||||
console.log(`[${plugin.name}] Plugin already loaded / Duplicate Class Name`);
|
console.log(`[${plugin.name}] Plugin already loaded / Duplicate Class Name`);
|
||||||
} else {
|
} else {
|
||||||
Plugins.PluginMap[pluginPackage.name] = file;
|
Plugins.PluginMap[pluginPackage.name] = file;
|
||||||
const pluginEnv = {
|
const pluginEnv = {
|
||||||
app: electron.app,
|
app: app,
|
||||||
store: utils.getStore(),
|
store: utils.getStore(),
|
||||||
utils: utils,
|
utils: utils,
|
||||||
win: utils.getWindow(),
|
win: utils.getWindow(),
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
import * as ElectronStore from "electron-store";
|
import ElectronStore from "electron-store";
|
||||||
import { app, ipcMain } from "electron";
|
import { app, ipcMain } from "electron";
|
||||||
import fetch from "electron-fetch";
|
import fetch from "node-fetch";
|
||||||
|
|
||||||
export class Store {
|
export class Store {
|
||||||
static cfg: ElectronStore;
|
static cfg: ElectronStore<any>;
|
||||||
|
|
||||||
private defaults: any = {
|
private defaults = {
|
||||||
main: {
|
main: {
|
||||||
PLATFORM: process.platform,
|
PLATFORM: process.platform,
|
||||||
UPDATABLE: app.isPackaged && (!process.mas || !process.windowsStore || !process.env.FLATPAK_ID),
|
UPDATABLE: app.isPackaged && (!process.mas || !process.windowsStore || !process.env.FLATPAK_ID),
|
||||||
|
@ -236,18 +236,13 @@ export class Store {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
private migrations: any = {};
|
private migrations = {};
|
||||||
private schema: ElectronStore.Schema<any> = {
|
|
||||||
"connectivity.discord_rpc": {
|
|
||||||
type: "object",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
Store.cfg = new ElectronStore({
|
Store.cfg = new ElectronStore({
|
||||||
name: "cider-config",
|
name: "cider-config",
|
||||||
defaults: this.defaults,
|
defaults: this.defaults,
|
||||||
schema: this.schema,
|
|
||||||
migrations: this.migrations,
|
migrations: this.migrations,
|
||||||
clearInvalidConfig: false, //disabled for now
|
clearInvalidConfig: false, //disabled for now
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
import * as fs from "fs";
|
import { BrowserWindow, app, ipcMain } from "electron";
|
||||||
import * as path from "path";
|
|
||||||
import { Store } from "./store";
|
|
||||||
import { BrowserWindow as bw } from "./browserwindow";
|
|
||||||
import { app, BrowserWindow, ipcMain } from "electron";
|
|
||||||
import OtaClient from "@crowdin/ota-client";
|
|
||||||
import fetch from "electron-fetch";
|
|
||||||
import ElectronStore from "electron-store";
|
import ElectronStore from "electron-store";
|
||||||
|
import fetch from "node-fetch";
|
||||||
|
import { readFileSync } from "node:fs";
|
||||||
|
import { join, resolve,dirname } from "node:path";
|
||||||
|
import { BrowserWindow as bw } from "./browserwindow.js";
|
||||||
|
import { Store } from "./store.js";
|
||||||
|
import { fileURLToPath } from "node:url";
|
||||||
|
|
||||||
export class utils {
|
export class utils {
|
||||||
static crowdinClient: OtaClient = new OtaClient("fda9a6528649ea90dee35390wog");
|
static hash = "fda9a6528649ea90dee35390wog"
|
||||||
static i18n: any = {};
|
static i18n: any = {};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -38,14 +38,14 @@ export class utils {
|
||||||
* Paths for the application to use
|
* Paths for the application to use
|
||||||
*/
|
*/
|
||||||
static paths: any = {
|
static paths: any = {
|
||||||
srcPath: path.join(__dirname, "../../src"),
|
srcPath: join(dirname(fileURLToPath(import.meta.url)), "../../src"),
|
||||||
rendererPath: path.join(__dirname, "../../src/renderer"),
|
rendererPath: join(dirname(fileURLToPath(import.meta.url)), "../../src/renderer"),
|
||||||
mainPath: path.join(__dirname, "../../src/main"),
|
mainPath: join(dirname(fileURLToPath(import.meta.url)), "../../src/main"),
|
||||||
resourcePath: path.join(__dirname, "../../resources"),
|
resourcePath: join(dirname(fileURLToPath(import.meta.url)), "../../resources"),
|
||||||
ciderCache: path.resolve(app.getPath("userData"), "CiderCache"),
|
ciderCache: resolve(app.getPath("userData"), "CiderCache"),
|
||||||
themes: path.resolve(app.getPath("userData"), "Themes"),
|
themes: resolve(app.getPath("userData"), "Themes"),
|
||||||
plugins: path.resolve(app.getPath("userData"), "Plugins"),
|
plugins: resolve(app.getPath("userData"), "Plugins"),
|
||||||
externals: path.resolve(app.getPath("userData"), "externals"),
|
externals: resolve(app.getPath("userData"), "externals"),
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -83,10 +83,8 @@ export class utils {
|
||||||
/**
|
/**
|
||||||
* MitM the electron fetch for a function that proxies github.
|
* MitM the electron fetch for a function that proxies github.
|
||||||
* Written in TS so Maikiwi doesn't fuck up
|
* Written in TS so Maikiwi doesn't fuck up
|
||||||
* @param url {string} URL param
|
|
||||||
* @param opts {object} Other options
|
|
||||||
*/
|
*/
|
||||||
static async fetch(url: string, opts = {}) {
|
static async fetch(url: string, opts: object = {}) {
|
||||||
Object.assign(opts, {
|
Object.assign(opts, {
|
||||||
headers: {
|
headers: {
|
||||||
"User-Agent": utils.getWindow().webContents.getUserAgent(),
|
"User-Agent": utils.getWindow().webContents.getUserAgent(),
|
||||||
|
@ -106,7 +104,10 @@ export class utils {
|
||||||
}
|
}
|
||||||
|
|
||||||
static async initializeTranslations() {
|
static async initializeTranslations() {
|
||||||
this.i18n = await this.crowdinClient.getTranslations();
|
const otaClient = (await import('@crowdin/ota-client')).default.default;
|
||||||
|
const crowdin = new otaClient(this.hash)
|
||||||
|
|
||||||
|
this.i18n = await crowdin.getTranslations();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -186,6 +187,6 @@ export class utils {
|
||||||
static loadPluginFrontend(path: string): void {}
|
static loadPluginFrontend(path: string): void {}
|
||||||
|
|
||||||
static loadJSFrontend(path: string): void {
|
static loadJSFrontend(path: string): void {
|
||||||
bw.win.webContents.executeJavaScript(fs.readFileSync(path, "utf8"));
|
bw.win.webContents.executeJavaScript(readFileSync(path, "utf8"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
import * as ws from "ws";
|
import WebSocket, { WebSocketServer } from 'ws';
|
||||||
import * as electron from "electron";
|
import electron from "electron";
|
||||||
|
|
||||||
const WebSocketServer = ws.Server;
|
|
||||||
|
|
||||||
interface standardResponse {
|
interface standardResponse {
|
||||||
status?: Number;
|
status?: Number;
|
||||||
|
|
|
@ -1,17 +1,22 @@
|
||||||
require("v8-compile-cache");
|
// @ts-ignore
|
||||||
|
await import("v8-compile-cache");
|
||||||
|
|
||||||
import { app, components, ipcMain } from "electron";
|
import { app, components, ipcMain } from "electron";
|
||||||
import { join } from "path";
|
import { join } from "path";
|
||||||
import { Store } from "./base/store";
|
import { Store } from "./base/store.js";
|
||||||
import { AppEvents } from "./base/app";
|
import { AppEvents } from "./base/app.js";
|
||||||
import { Plugins } from "./base/plugins";
|
import { Plugins } from "./base/plugins.js";
|
||||||
import { BrowserWindow } from "./base/browserwindow";
|
import { BrowserWindow } from "./base/browserwindow.js";
|
||||||
import { init as Sentry } from "@sentry/electron";
|
import { init as Sentry } from "@sentry/electron";
|
||||||
import { RewriteFrames } from "@sentry/integrations";
|
import { RewriteFrames } from "@sentry/integrations";
|
||||||
import { utils } from "./base/utils";
|
import { utils } from "./base/utils.js";
|
||||||
|
|
||||||
|
const appName = 'sh.cider.classic';
|
||||||
|
|
||||||
if (!app.isPackaged) {
|
if (!app.isPackaged) {
|
||||||
app.setPath("userData", join(app.getPath("appData"), "Cider"));
|
app.setPath('userData', join(app.getPath('appData'), `${appName}.dev`));
|
||||||
|
} else {
|
||||||
|
app.setPath('userData', join(app.getPath('appData'), appName));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Analytics for debugging fun yeah.
|
// Analytics for debugging fun yeah.
|
||||||
|
@ -38,7 +43,8 @@ app.on("ready", async () => {
|
||||||
console.log("[Cider] Application is Ready. Creating Window.");
|
console.log("[Cider] Application is Ready. Creating Window.");
|
||||||
if (!app.isPackaged) {
|
if (!app.isPackaged) {
|
||||||
console.info("[Cider] Running in development mode.");
|
console.info("[Cider] Running in development mode.");
|
||||||
require("vue-devtools").install();
|
// @ts-ignore
|
||||||
|
(await import("vue-devtools")).default.install();
|
||||||
}
|
}
|
||||||
console.log("aa");
|
console.log("aa");
|
||||||
components.whenReady().then(async () => {
|
components.whenReady().then(async () => {
|
||||||
|
@ -88,27 +94,3 @@ app.on("before-quit", () => {
|
||||||
CiderPlug.callPlugins("onBeforeQuit");
|
CiderPlug.callPlugins("onBeforeQuit");
|
||||||
console.warn(`${app.getName()} exited.`);
|
console.warn(`${app.getName()} exited.`);
|
||||||
});
|
});
|
||||||
|
|
||||||
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
* Widevine Event Handlers
|
|
||||||
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
|
|
||||||
|
|
||||||
// @ts-ignore
|
|
||||||
app.on("widevine-ready", (version, lastVersion) => {
|
|
||||||
if (null !== lastVersion) {
|
|
||||||
console.log("[Cider][Widevine] Widevine " + version + ", upgraded from " + lastVersion + ", is ready to be used!");
|
|
||||||
} else {
|
|
||||||
console.log("[Cider][Widevine] Widevine " + version + " is ready to be used!");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// @ts-ignore
|
|
||||||
app.on("widevine-update-pending", (currentVersion, pendingVersion) => {
|
|
||||||
console.log("[Cider][Widevine] Widevine " + currentVersion + " is ready to be upgraded to " + pendingVersion + "!");
|
|
||||||
});
|
|
||||||
|
|
||||||
// @ts-ignore
|
|
||||||
app.on("widevine-error", (error) => {
|
|
||||||
console.log("[Cider][Widevine] Widevine installation encountered an error: " + error);
|
|
||||||
app.exit();
|
|
||||||
});
|
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
import * as electron from "electron";
|
import electron from "electron";
|
||||||
import * as os from "os";
|
import os from "os";
|
||||||
import { resolve } from "path";
|
import {CiderReceiver} from "../base/castreceiver.js";
|
||||||
import * as CiderReceiver from "../base/castreceiver";
|
import MediaRendererClient from "upnp-mediarenderer-client";
|
||||||
const MediaRendererClient = require("upnp-mediarenderer-client");
|
import request from "request";
|
||||||
|
import castv2 from "castv2-client";
|
||||||
|
import mdnsjs from "mdns-js";
|
||||||
|
|
||||||
export default class ChromecastPlugin {
|
export default class ChromecastPlugin {
|
||||||
/**
|
/**
|
||||||
|
@ -13,8 +15,8 @@ export default class ChromecastPlugin {
|
||||||
private _lastfm: any;
|
private _lastfm: any;
|
||||||
private _store: any;
|
private _store: any;
|
||||||
private _timer: any;
|
private _timer: any;
|
||||||
private audioClient = require("castv2-client").Client;
|
private audioClient = castv2.Client;
|
||||||
private mdns = require("mdns-js");
|
private mdns = mdnsjs;
|
||||||
|
|
||||||
private devices: any = [];
|
private devices: any = [];
|
||||||
private castDevices: any = [];
|
private castDevices: any = [];
|
||||||
|
@ -35,7 +37,7 @@ export default class ChromecastPlugin {
|
||||||
// private bufcount2 = 0;
|
// private bufcount2 = 0;
|
||||||
// private headerSent = false;
|
// private headerSent = false;
|
||||||
|
|
||||||
private searchForGCDevices() {
|
private async searchForGCDevices() {
|
||||||
try {
|
try {
|
||||||
let browser = this.mdns.createBrowser(this.mdns.tcp("googlecast"));
|
let browser = this.mdns.createBrowser(this.mdns.tcp("googlecast"));
|
||||||
browser.on("ready", browser.discover);
|
browser.on("ready", browser.discover);
|
||||||
|
@ -47,7 +49,7 @@ export default class ChromecastPlugin {
|
||||||
this.ondeviceup(service.addresses[0], name + " (" + (service.type[0]?.description ?? "") + ")", "", "googlecast");
|
this.ondeviceup(service.addresses[0], name + " (" + (service.type[0]?.description ?? "") + ")", "", "googlecast");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const Client = require("node-ssdp").Client;
|
const Client = (await import("node-ssdp")).Client;
|
||||||
// also do a SSDP/UPnP search
|
// also do a SSDP/UPnP search
|
||||||
let ssdpBrowser = new Client();
|
let ssdpBrowser = new Client();
|
||||||
ssdpBrowser.on("response", (headers: any, statusCode: any, rinfo: any) => {
|
ssdpBrowser.on("response", (headers: any, statusCode: any, rinfo: any) => {
|
||||||
|
@ -84,7 +86,6 @@ export default class ChromecastPlugin {
|
||||||
}
|
}
|
||||||
|
|
||||||
private getServiceDescription(url: any, address: any) {
|
private getServiceDescription(url: any, address: any) {
|
||||||
const request = require("request");
|
|
||||||
request.get(url, (error: any, response: any, body: any) => {
|
request.get(url, (error: any, response: any, body: any) => {
|
||||||
if (!error && response.statusCode === 200) {
|
if (!error && response.statusCode === 200) {
|
||||||
this.parseServiceDescription(body, address, url);
|
this.parseServiceDescription(body, address, url);
|
||||||
|
@ -113,8 +114,8 @@ export default class ChromecastPlugin {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private parseServiceDescription(body: any, address: any, url: any) {
|
private async parseServiceDescription(body: any, address: any, url: any) {
|
||||||
const parseString = require("xml2js").parseString;
|
const parseString = (await import("xml2js")).parseString;
|
||||||
parseString(body, (err: any, result: any) => {
|
parseString(body, (err: any, result: any) => {
|
||||||
if (!err && result && result.root && result.root.device) {
|
if (!err && result && result.root && result.root.device) {
|
||||||
const device = result.root.device[0];
|
const device = result.root.device[0];
|
||||||
|
@ -167,7 +168,7 @@ export default class ChromecastPlugin {
|
||||||
},
|
},
|
||||||
(err: any, status: any) => {
|
(err: any, status: any) => {
|
||||||
console.log("media loaded playerState=%s", status);
|
console.log("media loaded playerState=%s", status);
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
client.getStatus((x: any, status: any) => {
|
client.getStatus((x: any, status: any) => {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { AutoClient } from "discord-auto-rpc";
|
import { AutoClient } from "discord-auto-rpc";
|
||||||
import { ipcMain } from "electron";
|
import { ipcMain } from "electron";
|
||||||
import fetch from "electron-fetch";
|
import fetch from "node-fetch";
|
||||||
|
|
||||||
export default class DiscordRPC {
|
export default class DiscordRPC {
|
||||||
/**
|
/**
|
||||||
|
@ -67,8 +67,8 @@ export default class DiscordRPC {
|
||||||
url: artworkUrl,
|
url: artworkUrl,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
.then((res) => res.json())
|
.then(async (res) => {
|
||||||
.then(function (json) {
|
const json = await res.json() as { imageUrl: string };
|
||||||
self._activityCache.largeImageKey = "https://images.weserv.nl/?url=" + json.imageUrl + "&w=1024&h=1024&output=jpg";
|
self._activityCache.largeImageKey = "https://images.weserv.nl/?url=" + json.imageUrl + "&w=1024&h=1024&output=jpg";
|
||||||
self._client.setActivity(self._activityCache);
|
self._client.setActivity(self._activityCache);
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
// @ts-ignore
|
||||||
|
import LastfmAPI from "lastfmapi";
|
||||||
|
|
||||||
export default class lastfm {
|
export default class lastfm {
|
||||||
/**
|
/**
|
||||||
* Base Plugin Information
|
* Base Plugin Information
|
||||||
|
@ -73,7 +76,6 @@ export default class lastfm {
|
||||||
*/
|
*/
|
||||||
private initializeLastFM(token: string, api: { key: string; secret: string }): void {
|
private initializeLastFM(token: string, api: { key: string; secret: string }): void {
|
||||||
console.debug(`[${lastfm.name}:initialize] Initializing LastFM`);
|
console.debug(`[${lastfm.name}:initialize] Initializing LastFM`);
|
||||||
const LastfmAPI = require("lastfmapi");
|
|
||||||
this._lfm = new LastfmAPI({
|
this._lfm = new LastfmAPI({
|
||||||
api_key: api.key,
|
api_key: api.key,
|
||||||
secret: api.secret,
|
secret: api.secret,
|
||||||
|
@ -135,7 +137,7 @@ export default class lastfm {
|
||||||
attributes.lfmAlbum = data;
|
attributes.lfmAlbum = data;
|
||||||
callback(attributes);
|
callback(attributes);
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
this._lfm.track.getCorrection(attributes.primaryArtist, attributes.name, (err: any, data: any) => {
|
this._lfm.track.getCorrection(attributes.primaryArtist, attributes.name, (err: any, data: any) => {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { app, Menu, shell } from "electron";
|
import { app, Menu, shell } from "electron";
|
||||||
import { utils } from "../base/utils";
|
import { utils } from "../base/utils.js";
|
||||||
|
|
||||||
export default class Thumbar {
|
export default class Thumbar {
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
// @ts-ignore
|
import Player from 'mpris-service';
|
||||||
import * as Player from "mpris-service";
|
|
||||||
|
|
||||||
export default class mpris {
|
export default class mpris {
|
||||||
/**
|
/**
|
||||||
|
@ -9,7 +8,7 @@ export default class mpris {
|
||||||
/**
|
/**
|
||||||
* MPRIS Service
|
* MPRIS Service
|
||||||
*/
|
*/
|
||||||
private static player: Player.Player;
|
private static player: Player;
|
||||||
/**
|
/**
|
||||||
* Base Plugin Details (Eventually implemented into a GUI in settings)
|
* Base Plugin Details (Eventually implemented into a GUI in settings)
|
||||||
*/
|
*/
|
||||||
|
@ -47,7 +46,7 @@ export default class mpris {
|
||||||
* Connects to MPRIS Service
|
* Connects to MPRIS Service
|
||||||
*/
|
*/
|
||||||
private static connect() {
|
private static connect() {
|
||||||
const player = Player({
|
const player = new Player({
|
||||||
name: "cider",
|
name: "cider",
|
||||||
identity: "Cider",
|
identity: "Cider",
|
||||||
supportedInterfaces: ["player"],
|
supportedInterfaces: ["player"],
|
||||||
|
@ -74,6 +73,10 @@ export default class mpris {
|
||||||
player.on("volume", (volume: string) => {
|
player.on("volume", (volume: string) => {
|
||||||
renderer.executeJavaScript(`app.mk.volume = ${parseFloat(volume)}`);
|
renderer.executeJavaScript(`app.mk.volume = ${parseFloat(volume)}`);
|
||||||
});
|
});
|
||||||
|
player.on("raise", () => {
|
||||||
|
mpris.utils.getWindow().show();
|
||||||
|
mpris.utils.getWindow().focus();
|
||||||
|
});
|
||||||
|
|
||||||
mpris.utils.getIPCMain().on("mpris:playbackTimeDidChange", (event: any, time: number) => {
|
mpris.utils.getIPCMain().on("mpris:playbackTimeDidChange", (event: any, time: number) => {
|
||||||
player.getPosition = () => time;
|
player.getPosition = () => time;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import fetch from "electron-fetch";
|
import fetch from "node-fetch";
|
||||||
import { app, nativeImage, Notification } from "electron";
|
import { app, nativeImage, Notification } from "electron";
|
||||||
import NativeImage = Electron.NativeImage;
|
import NativeImage = Electron.NativeImage;
|
||||||
import { createWriteStream } from "fs";
|
import { createWriteStream } from "fs";
|
||||||
|
@ -17,7 +17,7 @@ export default class playbackNotifications {
|
||||||
private _utils: any;
|
private _utils: any;
|
||||||
private _notification: Notification | undefined;
|
private _notification: Notification | undefined;
|
||||||
private _artworkImage: { [key: string]: NativeImage } = {};
|
private _artworkImage: { [key: string]: NativeImage } = {};
|
||||||
private _artworkNums: Array<string> = [];
|
private _artworkNums: string[] = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates playback notification
|
* Creates playback notification
|
||||||
|
|
|
@ -1,13 +1,8 @@
|
||||||
import * as electron from "electron";
|
import electron from "electron";
|
||||||
import * as os from "os";
|
import fetch from "node-fetch";
|
||||||
import * as fs from "fs";
|
|
||||||
import { join, resolve } from "path";
|
|
||||||
import * as CiderReceiver from "../base/castreceiver";
|
|
||||||
import fetch from "electron-fetch";
|
|
||||||
import { Stream } from "stream";
|
import { Stream } from "stream";
|
||||||
import { spawn } from "child_process";
|
|
||||||
import { Worker } from "worker_threads";
|
import { Worker } from "worker_threads";
|
||||||
import { Blob } from "buffer";
|
import mdnsjs from "mdns-js";
|
||||||
|
|
||||||
export default class RAOP {
|
export default class RAOP {
|
||||||
/**
|
/**
|
||||||
|
@ -24,7 +19,7 @@ export default class RAOP {
|
||||||
|
|
||||||
private airtunes: any;
|
private airtunes: any;
|
||||||
// private device: any;
|
// private device: any;
|
||||||
private mdns = require("mdns-js");
|
private mdns = mdnsjs;
|
||||||
private ok: any = 1;
|
private ok: any = 1;
|
||||||
private devices: any = [];
|
private devices: any = [];
|
||||||
private castDevices: any = [];
|
private castDevices: any = [];
|
||||||
|
@ -163,8 +158,8 @@ export default class RAOP {
|
||||||
/**
|
/**
|
||||||
* Runs on app ready
|
* Runs on app ready
|
||||||
*/
|
*/
|
||||||
onReady(win: any): void {
|
async onReady(win: any): Promise<void> {
|
||||||
this.u = require("airtunes2");
|
this.u = (await import("airtunes2")).default;
|
||||||
this._win = win;
|
this._win = win;
|
||||||
|
|
||||||
electron.ipcMain.on("getKnownAirplayDevices", (event) => {
|
electron.ipcMain.on("getKnownAirplayDevices", (event) => {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { nativeImage, nativeTheme } from "electron";
|
import { nativeImage, nativeTheme } from "electron";
|
||||||
import { utils } from "../base/utils";
|
import { utils } from "../base/utils.js";
|
||||||
import { join } from "path";
|
import { join } from "path";
|
||||||
|
|
||||||
export default class Thumbar {
|
export default class Thumbar {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import * as WebSocket from "ws";
|
import WebSocket from "ws";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 0-pad a number.
|
* 0-pad a number.
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
// import * as PouchDB from "pouchdb-node";
|
|
||||||
// import { join } from "path";
|
|
||||||
// import { app } from "electron";
|
|
||||||
// PouchDB.plugin(require("pouchdb-upsert"));
|
|
||||||
// export class ProviderDB {
|
|
||||||
// public static db: any = null;
|
|
||||||
// static init() {
|
|
||||||
// if (ProviderDB.db == null) {
|
|
||||||
// ProviderDB.db = new PouchDB(join(app.getPath("userData"), "tracksdb"));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
|
@ -1,11 +1,10 @@
|
||||||
// import { ProviderDB } from "./db";
|
// import { ProviderDB } from "./db";
|
||||||
import * as path from "path";
|
|
||||||
const { readdir } = require("fs").promises;
|
|
||||||
import { utils } from "../../base/utils";
|
|
||||||
import * as mm from "music-metadata";
|
|
||||||
import { Md5 } from "ts-md5";
|
|
||||||
import e from "express";
|
|
||||||
import { EventEmitter } from "events";
|
import { EventEmitter } from "events";
|
||||||
|
import mm from "music-metadata";
|
||||||
|
import { resolve } from "node:path";
|
||||||
|
import { Md5 } from "ts-md5";
|
||||||
|
import { utils } from "../../base/utils.js";
|
||||||
|
import { readdirSync } from "node:fs";
|
||||||
|
|
||||||
export class LocalFiles {
|
export class LocalFiles {
|
||||||
static localSongs: any = [];
|
static localSongs: any = [];
|
||||||
|
@ -127,13 +126,14 @@ export class LocalFiles {
|
||||||
this.localSongsArts = metadatalistart;
|
this.localSongsArts = metadatalistart;
|
||||||
return metadatalist;
|
return metadatalist;
|
||||||
}
|
}
|
||||||
static async getFiles(dir: any) {
|
|
||||||
const dirents = await readdir(dir, { withFileTypes: true });
|
static async getFiles(dir: string): Promise<string[]> {
|
||||||
|
const dirents = readdirSync(dir, { withFileTypes: true });
|
||||||
const files = await Promise.all(
|
const files = await Promise.all(
|
||||||
dirents.map((dirent: any) => {
|
dirents.map((dirent: any) => {
|
||||||
const res = path.resolve(dir, dirent.name);
|
const res = resolve(dir, dirent.name);
|
||||||
return dirent.isDirectory() ? this.getFiles(res) : res;
|
return dirent.isDirectory() ? this.getFiles(res) : res;
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
return Array.prototype.concat(...files);
|
return Array.prototype.concat(...files);
|
||||||
}
|
}
|
||||||
|
|
|
@ -292,5 +292,5 @@ document.addEventListener(
|
||||||
app.showMenuPanel(menuPanel, e);
|
app.showMenuPanel(menuPanel, e);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
false
|
false,
|
||||||
);
|
);
|
||||||
|
|
|
@ -129,7 +129,9 @@ input[type="range"].md-slider::-webkit-slider-runnable-track {
|
||||||
|
|
||||||
@media (prefers-color-scheme: light) {
|
@media (prefers-color-scheme: light) {
|
||||||
.md-btn {
|
.md-btn {
|
||||||
box-shadow: rgb(0 0 0 / 10%) 0px 0px 1px, rgb(0 0 0 / 20%) 0px 1px 1px;
|
box-shadow:
|
||||||
|
rgb(0 0 0 / 10%) 0px 0px 1px,
|
||||||
|
rgb(0 0 0 / 20%) 0px 1px 1px;
|
||||||
border: 1px solid rgb(0 0 0 / 15%);
|
border: 1px solid rgb(0 0 0 / 15%);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
14
src/renderer/less/bootstrap.less
vendored
14
src/renderer/less/bootstrap.less
vendored
|
@ -990,7 +990,9 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.modal.fade .modal-dialog {
|
.modal.fade .modal-dialog {
|
||||||
transition: transform 0.1s var(--appleEase), opacity 0.1s var(--appleEase);
|
transition:
|
||||||
|
transform 0.1s var(--appleEase),
|
||||||
|
opacity 0.1s var(--appleEase);
|
||||||
transform: scale(0.9);
|
transform: scale(0.9);
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
@ -1327,7 +1329,11 @@
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
border-radius: 0.25rem;
|
border-radius: 0.25rem;
|
||||||
font-family: inherit;
|
font-family: inherit;
|
||||||
transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
|
transition:
|
||||||
|
color 0.15s ease-in-out,
|
||||||
|
background-color 0.15s ease-in-out,
|
||||||
|
border-color 0.15s ease-in-out,
|
||||||
|
box-shadow 0.15s ease-in-out;
|
||||||
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-radius: 6px;
|
border-radius: 6px;
|
||||||
|
@ -7853,7 +7859,9 @@ fieldset:disabled .btn {
|
||||||
backface-visibility: hidden;
|
backface-visibility: hidden;
|
||||||
transition: -webkit-transform 0.6s ease-in-out;
|
transition: -webkit-transform 0.6s ease-in-out;
|
||||||
transition: transform 0.6s ease-in-out;
|
transition: transform 0.6s ease-in-out;
|
||||||
transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;
|
transition:
|
||||||
|
transform 0.6s ease-in-out,
|
||||||
|
-webkit-transform 0.6s ease-in-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (prefers-reduced-motion: reduce) {
|
@media (prefers-reduced-motion: reduce) {
|
||||||
|
|
|
@ -52,7 +52,9 @@
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
transform: scale(0.5);
|
transform: scale(0.5);
|
||||||
transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out;
|
transition:
|
||||||
|
transform 0.2s ease-in-out,
|
||||||
|
opacity 0.2s ease-in-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:after {
|
&:after {
|
||||||
|
@ -63,7 +65,9 @@
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
|
|
||||||
&:before {
|
&:before {
|
||||||
transition: transform 0.1s ease-in-out, opacity 0.1s ease-in-out;
|
transition:
|
||||||
|
transform 0.1s ease-in-out,
|
||||||
|
opacity 0.1s ease-in-out;
|
||||||
opacity: 0.1;
|
opacity: 0.1;
|
||||||
transform: scale(1);
|
transform: scale(1);
|
||||||
}
|
}
|
||||||
|
@ -103,7 +107,9 @@
|
||||||
background: var(--color2);
|
background: var(--color2);
|
||||||
-webkit-app-region: no-drag;
|
-webkit-app-region: no-drag;
|
||||||
height: var(--chromeHeight2);
|
height: var(--chromeHeight2);
|
||||||
box-shadow: 0px -2px 6px rgb(20 20 20 / 12%), 0px -1px 0px 0px rgb(200 200 200 / 12%);
|
box-shadow:
|
||||||
|
0px -2px 6px rgb(20 20 20 / 12%),
|
||||||
|
0px -1px 0px 0px rgb(200 200 200 / 12%);
|
||||||
z-index: 4;
|
z-index: 4;
|
||||||
|
|
||||||
.app-chrome-playback-duration-bottom {
|
.app-chrome-playback-duration-bottom {
|
||||||
|
@ -140,7 +146,9 @@
|
||||||
border-radius: 100%;
|
border-radius: 100%;
|
||||||
background: var(--keyColor);
|
background: var(--keyColor);
|
||||||
cursor: default;
|
cursor: default;
|
||||||
transition: opacity 0.1s var(--appleEase), transform 0.1s var(--appleEase);
|
transition:
|
||||||
|
opacity 0.1s var(--appleEase),
|
||||||
|
transform 0.1s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
|
@ -239,7 +247,9 @@
|
||||||
border-radius: 100%;
|
border-radius: 100%;
|
||||||
background: var(--keyColor);
|
background: var(--keyColor);
|
||||||
cursor: default;
|
cursor: default;
|
||||||
transition: opacity 0.1s var(--appleEase), transform 0.1s var(--appleEase);
|
transition:
|
||||||
|
opacity 0.1s var(--appleEase),
|
||||||
|
transform 0.1s var(--appleEase);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,9 @@
|
||||||
border-top: 1px solid rgba(100, 100, 100, 0.5);
|
border-top: 1px solid rgba(100, 100, 100, 0.5);
|
||||||
color: #eee;
|
color: #eee;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
transition: transform 0.2s var(--appleEase), box-shadow 0.2s var(--appleEase);
|
transition:
|
||||||
|
transform 0.2s var(--appleEase),
|
||||||
|
box-shadow 0.2s var(--appleEase);
|
||||||
|
|
||||||
&.md-btn-block {
|
&.md-btn-block {
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -70,7 +72,9 @@
|
||||||
&:active {
|
&:active {
|
||||||
filter: brightness(75%);
|
filter: brightness(75%);
|
||||||
transform: scale(0.98);
|
transform: scale(0.98);
|
||||||
transition: transform 0s var(--appleEase), box-shadow 0.2s var(--appleEase);
|
transition:
|
||||||
|
transform 0s var(--appleEase),
|
||||||
|
box-shadow 0.2s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
&.md-btn-icon {
|
&.md-btn-icon {
|
||||||
|
@ -1187,12 +1191,16 @@
|
||||||
&.mediaitem-video {
|
&.mediaitem-video {
|
||||||
height: 200px;
|
height: 200px;
|
||||||
width: 240px;
|
width: 240px;
|
||||||
transition: width var(--transitionDuration) linear, height var(--transitionDuration) linear;
|
transition:
|
||||||
|
width var(--transitionDuration) linear,
|
||||||
|
height var(--transitionDuration) linear;
|
||||||
|
|
||||||
.artwork {
|
.artwork {
|
||||||
height: 120px;
|
height: 120px;
|
||||||
width: 212px;
|
width: 212px;
|
||||||
transition: width var(--transitionDuration) linear, height var(--transitionDuration) linear;
|
transition:
|
||||||
|
width var(--transitionDuration) linear,
|
||||||
|
height var(--transitionDuration) linear;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:not(.noscale) {
|
&:not(.noscale) {
|
||||||
|
@ -1225,12 +1233,16 @@
|
||||||
&.mediaitem-brick {
|
&.mediaitem-brick {
|
||||||
height: 200px;
|
height: 200px;
|
||||||
width: 240px;
|
width: 240px;
|
||||||
transition: width var(--transitionDuration) linear, height var(--transitionDuration) linear;
|
transition:
|
||||||
|
width var(--transitionDuration) linear,
|
||||||
|
height var(--transitionDuration) linear;
|
||||||
|
|
||||||
.artwork {
|
.artwork {
|
||||||
height: 123px;
|
height: 123px;
|
||||||
width: 220px;
|
width: 220px;
|
||||||
transition: width var(--transitionDuration) linear, height var(--transitionDuration) linear;
|
transition:
|
||||||
|
width var(--transitionDuration) linear,
|
||||||
|
height var(--transitionDuration) linear;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:not(.noscale) {
|
&:not(.noscale) {
|
||||||
|
@ -1263,12 +1275,16 @@
|
||||||
&.mediaitem-small {
|
&.mediaitem-small {
|
||||||
width: calc(140px, var(--windowRelativeScale));
|
width: calc(140px, var(--windowRelativeScale));
|
||||||
height: calc(180px, var(--windowRelativeScale));
|
height: calc(180px, var(--windowRelativeScale));
|
||||||
transition: width var(--transitionDuration) linear, height var(--transitionDuration) linear;
|
transition:
|
||||||
|
width var(--transitionDuration) linear,
|
||||||
|
height var(--transitionDuration) linear;
|
||||||
|
|
||||||
.artwork {
|
.artwork {
|
||||||
height: calc(128px, var(--windowRelativeScale));
|
height: calc(128px, var(--windowRelativeScale));
|
||||||
width: calc(128px, var(--windowRelativeScale));
|
width: calc(128px, var(--windowRelativeScale));
|
||||||
transition: width var(--transitionDuration) linear, height var(--transitionDuration) linear;
|
transition:
|
||||||
|
width var(--transitionDuration) linear,
|
||||||
|
height var(--transitionDuration) linear;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1281,7 +1297,9 @@
|
||||||
position: relative;
|
position: relative;
|
||||||
border-radius: calc(var(--mediaItemRadius) * 2);
|
border-radius: calc(var(--mediaItemRadius) * 2);
|
||||||
box-shadow: var(--mediaItemShadow-ShadowSubtle);
|
box-shadow: var(--mediaItemShadow-ShadowSubtle);
|
||||||
transition: width var(--transitionDuration) linear, height var(--transitionDuration) linear;
|
transition:
|
||||||
|
width var(--transitionDuration) linear,
|
||||||
|
height var(--transitionDuration) linear;
|
||||||
|
|
||||||
.artwork {
|
.artwork {
|
||||||
width: 230px;
|
width: 230px;
|
||||||
|
@ -1289,7 +1307,10 @@
|
||||||
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;
|
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;
|
||||||
|
|
||||||
|
@ -1703,7 +1724,9 @@ input[type="checkbox"][switch]:checked:active::before {
|
||||||
background-position: center;
|
background-position: center;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
box-shadow: inset 0px 0px 0px 1px rgb(200 200 200 / 16%), 0 8px 40px rgb(0 0 0 / 0.55);
|
box-shadow:
|
||||||
|
inset 0px 0px 0px 1px rgb(200 200 200 / 16%),
|
||||||
|
0 8px 40px rgb(0 0 0 / 0.55);
|
||||||
transition: transform 0.1s var(--appleEase);
|
transition: transform 0.1s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1765,7 +1788,9 @@ input[type="checkbox"][switch]:checked:active::before {
|
||||||
z-index: -1;
|
z-index: -1;
|
||||||
transform: scale(0.5);
|
transform: scale(0.5);
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
transition: opacity 0.1s var(--appleEase), transform 0.1s var(--appleEase);
|
transition:
|
||||||
|
opacity 0.1s var(--appleEase),
|
||||||
|
transform 0.1s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
|
@ -1805,7 +1830,9 @@ input[type="checkbox"][switch]:checked:active::before {
|
||||||
z-index: -1;
|
z-index: -1;
|
||||||
transform: scale(0.5);
|
transform: scale(0.5);
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
transition: opacity 0.1s var(--appleEase), transform 0.1s var(--appleEase);
|
transition:
|
||||||
|
opacity 0.1s var(--appleEase),
|
||||||
|
transform 0.1s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
|
@ -2056,7 +2083,9 @@ input[type="checkbox"][switch]:checked:active::before {
|
||||||
background-position: center;
|
background-position: center;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
box-shadow: inset 0px 0px 0px 1px rgb(200 200 200 / 16%), 0 8px 40px rgb(0 0 0 / 0.55);
|
box-shadow:
|
||||||
|
inset 0px 0px 0px 1px rgb(200 200 200 / 16%),
|
||||||
|
0 8px 40px rgb(0 0 0 / 0.55);
|
||||||
}
|
}
|
||||||
|
|
||||||
.list-entry-image.artist {
|
.list-entry-image.artist {
|
||||||
|
@ -2254,7 +2283,10 @@ input[type="checkbox"][switch]:checked:active::before {
|
||||||
border-radius: 50px;
|
border-radius: 50px;
|
||||||
z-index: -1;
|
z-index: -1;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transition: background-color 0.5s var(--appleEase), opacity 0.25s var(--appleEase), border-radius 0.32s var(--appleEase);
|
transition:
|
||||||
|
background-color 0.5s var(--appleEase),
|
||||||
|
opacity 0.25s var(--appleEase),
|
||||||
|
border-radius 0.32s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
|
@ -2267,7 +2299,11 @@ input[type="checkbox"][switch]:checked:active::before {
|
||||||
&:after {
|
&:after {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
background-color: #eee;
|
background-color: #eee;
|
||||||
transition: background-color 0.25s var(--appleEase), border-radius 0.25s var(--appleEase), color 0s var(--appleEase), opacity 0s var(--appleEase);
|
transition:
|
||||||
|
background-color 0.25s var(--appleEase),
|
||||||
|
border-radius 0.25s var(--appleEase),
|
||||||
|
color 0s var(--appleEase),
|
||||||
|
opacity 0s var(--appleEase);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -89,7 +89,9 @@
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
transform: scale(0.5);
|
transform: scale(0.5);
|
||||||
transition: transform 0.2s ease-in-out, opacity 0.2s ease-in-out;
|
transition:
|
||||||
|
transform 0.2s ease-in-out,
|
||||||
|
opacity 0.2s ease-in-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:after {
|
&:after {
|
||||||
|
@ -100,7 +102,9 @@
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
|
|
||||||
&:before {
|
&:before {
|
||||||
transition: transform 0.1s ease-in-out, opacity 0.1s ease-in-out;
|
transition:
|
||||||
|
transform 0.1s ease-in-out,
|
||||||
|
opacity 0.1s ease-in-out;
|
||||||
opacity: 0.1;
|
opacity: 0.1;
|
||||||
transform: scale(1);
|
transform: scale(1);
|
||||||
}
|
}
|
||||||
|
@ -453,7 +457,9 @@
|
||||||
border-radius: 100%;
|
border-radius: 100%;
|
||||||
background: var(--songProgressColor);
|
background: var(--songProgressColor);
|
||||||
cursor: default;
|
cursor: default;
|
||||||
transition: opacity 0.1s var(--appleEase), transform 0.1s var(--appleEase);
|
transition:
|
||||||
|
opacity 0.1s var(--appleEase),
|
||||||
|
transform 0.1s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
&::-moz-range-thumb {
|
&::-moz-range-thumb {
|
||||||
|
|
|
@ -107,7 +107,10 @@
|
||||||
height: calc(12px * 6);
|
height: calc(12px * 6);
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
transform: rotateX(60deg) rotateZ(-45deg);
|
transform: rotateX(60deg) rotateZ(-45deg);
|
||||||
transition: transform 0.2s linear, width 0.2s linear, height 0.2s linear;
|
transition:
|
||||||
|
transform 0.2s linear,
|
||||||
|
width 0.2s linear,
|
||||||
|
height 0.2s linear;
|
||||||
}
|
}
|
||||||
|
|
||||||
.listener {
|
.listener {
|
||||||
|
@ -116,7 +119,10 @@
|
||||||
height: 32px;
|
height: 32px;
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
transform: rotateX(60deg) rotateZ(-45deg);
|
transform: rotateX(60deg) rotateZ(-45deg);
|
||||||
transition: transform 0.2s linear, width 0.2s linear, height 0.2s linear;
|
transition:
|
||||||
|
transform 0.2s linear,
|
||||||
|
width 0.2s linear,
|
||||||
|
height 0.2s linear;
|
||||||
background: white;
|
background: white;
|
||||||
color: black;
|
color: black;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
|
@ -128,7 +134,10 @@
|
||||||
height: 32px;
|
height: 32px;
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
transform: rotateX(60deg) rotateZ(-45deg);
|
transform: rotateX(60deg) rotateZ(-45deg);
|
||||||
transition: transform 0.2s linear, width 0.2s linear, height 0.2s linear;
|
transition:
|
||||||
|
transform 0.2s linear,
|
||||||
|
width 0.2s linear,
|
||||||
|
height 0.2s linear;
|
||||||
background: yellow;
|
background: yellow;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
}
|
}
|
||||||
|
@ -321,12 +330,16 @@
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transform: scale(0.98);
|
transform: scale(0.98);
|
||||||
z-index: -1;
|
z-index: -1;
|
||||||
transition: transform 0.25s ease-out, opacity 0.25s ease-out;
|
transition:
|
||||||
|
transform 0.25s ease-out,
|
||||||
|
opacity 0.25s ease-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
&::before {
|
&::before {
|
||||||
transition: transform 0s ease-in, opacity 0s ease-in;
|
transition:
|
||||||
|
transform 0s ease-in,
|
||||||
|
opacity 0s ease-in;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
transform: scale(1);
|
transform: scale(1);
|
||||||
}
|
}
|
||||||
|
@ -334,7 +347,9 @@
|
||||||
|
|
||||||
&:active {
|
&:active {
|
||||||
&::before {
|
&::before {
|
||||||
transition: transform 0.1s ease-in-out, opacity 0.1s ease-in-out;
|
transition:
|
||||||
|
transform 0.1s ease-in-out,
|
||||||
|
opacity 0.1s ease-in-out;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
transform: scale(0.98);
|
transform: scale(0.98);
|
||||||
background: var(--selected-click);
|
background: var(--selected-click);
|
||||||
|
|
|
@ -379,7 +379,9 @@
|
||||||
border-radius: 100%;
|
border-radius: 100%;
|
||||||
background: var(--songProgressColor);
|
background: var(--songProgressColor);
|
||||||
cursor: default;
|
cursor: default;
|
||||||
transition: opacity 0.1s var(--appleEase), transform 0.1s var(--appleEase);
|
transition:
|
||||||
|
opacity 0.1s var(--appleEase),
|
||||||
|
transform 0.1s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
&::-moz-range-thumb {
|
&::-moz-range-thumb {
|
||||||
|
|
|
@ -298,7 +298,9 @@
|
||||||
background-color: rgba(0, 0, 0, 0.25);
|
background-color: rgba(0, 0, 0, 0.25);
|
||||||
border: none;
|
border: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition: opacity 0.2s ease, background-color 0.2s ease;
|
transition:
|
||||||
|
opacity 0.2s ease,
|
||||||
|
background-color 0.2s ease;
|
||||||
outline: none;
|
outline: none;
|
||||||
opacity: 0.35;
|
opacity: 0.35;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
|
@ -748,7 +748,9 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.mediaContainer {
|
.mediaContainer {
|
||||||
transition: width 0.5s ease-in-out, height 0.5s ease-in-out;
|
transition:
|
||||||
|
width 0.5s ease-in-out,
|
||||||
|
height 0.5s ease-in-out;
|
||||||
width: 260px;
|
width: 260px;
|
||||||
height: 260px;
|
height: 260px;
|
||||||
}
|
}
|
||||||
|
@ -948,7 +950,9 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.playlist-desc {
|
.playlist-desc {
|
||||||
transition: height 0.2s ease-in-out, opacity 0.2s ease-in-out;
|
transition:
|
||||||
|
height 0.2s ease-in-out,
|
||||||
|
opacity 0.2s ease-in-out;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
flex-shrink: unset;
|
flex-shrink: unset;
|
||||||
|
@ -1088,7 +1092,9 @@
|
||||||
font-size: 0.9em;
|
font-size: 0.9em;
|
||||||
margin: 6px;
|
margin: 6px;
|
||||||
opacity: 0.7;
|
opacity: 0.7;
|
||||||
transition: height 0.2s ease-in-out, opacity 0.2s ease-in-out;
|
transition:
|
||||||
|
height 0.2s ease-in-out,
|
||||||
|
opacity 0.2s ease-in-out;
|
||||||
height: 0.9em;
|
height: 0.9em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1152,19 +1158,25 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.mediaContainer {
|
.mediaContainer {
|
||||||
transition: width 0.5s ease-in-out, height 0.5s ease-in-out;
|
transition:
|
||||||
|
width 0.5s ease-in-out,
|
||||||
|
height 0.5s ease-in-out;
|
||||||
width: 128px !important;
|
width: 128px !important;
|
||||||
height: 128px !important;
|
height: 128px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.playlist-time {
|
.playlist-time {
|
||||||
transition: height 0.2s ease-in-out, opacity 0.2s ease-in-out;
|
transition:
|
||||||
|
height 0.2s ease-in-out,
|
||||||
|
opacity 0.2s ease-in-out;
|
||||||
height: 0px;
|
height: 0px;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.playlist-desc {
|
.playlist-desc {
|
||||||
transition: height 0.2s ease-in-out, opacity 0.2s ease-in-out;
|
transition:
|
||||||
|
height 0.2s ease-in-out,
|
||||||
|
opacity 0.2s ease-in-out;
|
||||||
height: 0px !important;
|
height: 0px !important;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
@ -1413,7 +1425,9 @@
|
||||||
&:active {
|
&:active {
|
||||||
filter: brightness(75%);
|
filter: brightness(75%);
|
||||||
transform: scale(0.98);
|
transform: scale(0.98);
|
||||||
transition: transform 0s var(--appleEase), box-shadow 0.2s var(--appleEase);
|
transition:
|
||||||
|
transform 0s var(--appleEase),
|
||||||
|
box-shadow 0.2s var(--appleEase);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1555,7 +1569,9 @@
|
||||||
background: rgb(0 0 0 / 20%);
|
background: rgb(0 0 0 / 20%);
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
border: 0px;
|
border: 0px;
|
||||||
transition: background 0.2s var(--appleEase), transform 0.2s var(--appleEase);
|
transition:
|
||||||
|
background 0.2s var(--appleEase),
|
||||||
|
transform 0.2s var(--appleEase);
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background: var(--selected);
|
background: var(--selected);
|
||||||
|
@ -1625,7 +1641,9 @@
|
||||||
.spfade-enter-active,
|
.spfade-enter-active,
|
||||||
.spfade-leave-active {
|
.spfade-leave-active {
|
||||||
--transitionTime: 0.2s;
|
--transitionTime: 0.2s;
|
||||||
transition: opacity var(--transitionTime) var(--appleEase), transform var(--transitionTime) var(--appleEase);
|
transition:
|
||||||
|
opacity var(--transitionTime) var(--appleEase),
|
||||||
|
transform var(--transitionTime) var(--appleEase);
|
||||||
will-change: opacity, transform;
|
will-change: opacity, transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2120,7 +2138,11 @@
|
||||||
position: relative;
|
position: relative;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
backdrop-filter: var(--glassFilterHeavy);
|
backdrop-filter: var(--glassFilterHeavy);
|
||||||
transition: width 0.25s ease-in-out, height 0.25s ease-in-out, max-width 0.25s ease-in-out, max-height 0.25s ease-in-out;
|
transition:
|
||||||
|
width 0.25s ease-in-out,
|
||||||
|
height 0.25s ease-in-out,
|
||||||
|
max-width 0.25s ease-in-out,
|
||||||
|
max-height 0.25s ease-in-out;
|
||||||
|
|
||||||
.header-text {
|
.header-text {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
|
|
@ -211,7 +211,7 @@ function simulateGamepad() {
|
||||||
notyf.success("Pairing successful!");
|
notyf.success("Pairing successful!");
|
||||||
appLoop();
|
appLoop();
|
||||||
},
|
},
|
||||||
{ once: true }
|
{ once: true },
|
||||||
);
|
);
|
||||||
|
|
||||||
document.addEventListener("keydown", (e) => {
|
document.addEventListener("keydown", (e) => {
|
||||||
|
|
|
@ -288,7 +288,7 @@ const app = new Vue({
|
||||||
let currentPath = window.location.hash.slice(1);
|
let currentPath = window.location.hash.slice(1);
|
||||||
console.debug("hashchange", currentPath);
|
console.debug("hashchange", currentPath);
|
||||||
},
|
},
|
||||||
false
|
false,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -759,7 +759,7 @@ const app = new Vue({
|
||||||
data: pitems,
|
data: pitems,
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
)
|
)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
if (app.page === "playlist_" + pid) {
|
if (app.page === "playlist_" + pid) {
|
||||||
|
@ -1030,7 +1030,7 @@ const app = new Vue({
|
||||||
app.stringTemplateParser(app.getLz("settings.option.connectivity.discordRPC.reconnectedToUser"), {
|
app.stringTemplateParser(app.getLz("settings.option.connectivity.discordRPC.reconnectedToUser"), {
|
||||||
user: `${user.username}#${user.discriminator}`,
|
user: `${user.username}#${user.discriminator}`,
|
||||||
userid: user.id,
|
userid: user.id,
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -1590,7 +1590,7 @@ const app = new Vue({
|
||||||
fetchOptions: {
|
fetchOptions: {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
if (app.cfg.home.followedArtists.includes(id)) {
|
if (app.cfg.home.followedArtists.includes(id)) {
|
||||||
|
@ -1608,7 +1608,7 @@ const app = new Vue({
|
||||||
fetchOptions: {
|
fetchOptions: {
|
||||||
method: "DELETE",
|
method: "DELETE",
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1746,7 +1746,7 @@ const app = new Vue({
|
||||||
attributes: { name: name },
|
attributes: { name: name },
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
)
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
self.refreshPlaylists(false, false);
|
self.refreshPlaylists(false, false);
|
||||||
|
@ -1765,7 +1765,7 @@ const app = new Vue({
|
||||||
attributes: { name: name },
|
attributes: { name: name },
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
)
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
self.refreshPlaylists(false, false);
|
self.refreshPlaylists(false, false);
|
||||||
|
@ -1784,7 +1784,7 @@ const app = new Vue({
|
||||||
attributes: { description: name },
|
attributes: { description: name },
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
)
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
self.refreshPlaylists(false, false);
|
self.refreshPlaylists(false, false);
|
||||||
|
@ -1820,7 +1820,7 @@ const app = new Vue({
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
)
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
res = res.data.data[0];
|
res = res.data.data[0];
|
||||||
|
@ -1853,7 +1853,7 @@ const app = new Vue({
|
||||||
fetchOptions: {
|
fetchOptions: {
|
||||||
method: "DELETE",
|
method: "DELETE",
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
)
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
// remove this playlist from playlists.listing if it exists
|
// remove this playlist from playlists.listing if it exists
|
||||||
|
@ -2011,7 +2011,7 @@ const app = new Vue({
|
||||||
"art[url]": "f",
|
"art[url]": "f",
|
||||||
l: this.mklang,
|
l: this.mklang,
|
||||||
},
|
},
|
||||||
{ includeResponseMeta: !0 }
|
{ includeResponseMeta: !0 },
|
||||||
);
|
);
|
||||||
console.debug(artistData.data.data[0]);
|
console.debug(artistData.data.data[0]);
|
||||||
this.artistPage.data = artistData.data.data[0];
|
this.artistPage.data = artistData.data.data[0];
|
||||||
|
@ -3213,7 +3213,7 @@ const app = new Vue({
|
||||||
{
|
{
|
||||||
includeResponseMeta: !0,
|
includeResponseMeta: !0,
|
||||||
reload: !0,
|
reload: !0,
|
||||||
}
|
},
|
||||||
)
|
)
|
||||||
).data;
|
).data;
|
||||||
this.listennow.timestamp = Date.now();
|
this.listennow.timestamp = Date.now();
|
||||||
|
@ -3308,7 +3308,7 @@ const app = new Vue({
|
||||||
attributes: { name: name },
|
attributes: { name: name },
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
)
|
)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
let playlist = res.data.data[0];
|
let playlist = res.data.data[0];
|
||||||
|
@ -3384,7 +3384,7 @@ const app = new Vue({
|
||||||
fetchOptions: {
|
fetchOptions: {
|
||||||
method: "DELETE",
|
method: "DELETE",
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
)
|
)
|
||||||
.then((data) => {
|
.then((data) => {
|
||||||
self.getLibrarySongsFull(true);
|
self.getLibrarySongsFull(true);
|
||||||
|
@ -4281,7 +4281,7 @@ const app = new Vue({
|
||||||
"art[url]": "f",
|
"art[url]": "f",
|
||||||
"art[social-profiles:url]": "c",
|
"art[social-profiles:url]": "c",
|
||||||
},
|
},
|
||||||
{ includeResponseMeta: !0 }
|
{ includeResponseMeta: !0 },
|
||||||
)
|
)
|
||||||
.then(function (results) {
|
.then(function (results) {
|
||||||
results.data.results["meta"] = results.data.meta;
|
results.data.results["meta"] = results.data.meta;
|
||||||
|
@ -4536,7 +4536,7 @@ const app = new Vue({
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
dislike(item) {
|
dislike(item) {
|
||||||
|
@ -4561,7 +4561,7 @@ const app = new Vue({
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
unlove(item) {
|
unlove(item) {
|
||||||
|
@ -4580,7 +4580,7 @@ const app = new Vue({
|
||||||
fetchOptions: {
|
fetchOptions: {
|
||||||
method: "DELETE",
|
method: "DELETE",
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
checkScrollDirectionIsUp(event) {
|
checkScrollDirectionIsUp(event) {
|
||||||
|
|
|
@ -166,7 +166,7 @@ const wsapi = {
|
||||||
fetchOptions: {
|
fetchOptions: {
|
||||||
method: "DELETE",
|
method: "DELETE",
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
)
|
)
|
||||||
.then(function () {
|
.then(function () {
|
||||||
ipcRenderer.send("wsapi-rate", kind, id, rating);
|
ipcRenderer.send("wsapi-rate", kind, id, rating);
|
||||||
|
@ -190,7 +190,7 @@ const wsapi = {
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
)
|
)
|
||||||
.then(function () {
|
.then(function () {
|
||||||
ipcRenderer.send("wsapi-rate", kind, id, rating);
|
ipcRenderer.send("wsapi-rate", kind, id, rating);
|
||||||
|
|
|
@ -72,7 +72,22 @@ body {
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
background-position: center;
|
background-position: center;
|
||||||
background: #0000;
|
background: #0000;
|
||||||
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;
|
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 0.1s var(--appleEase);
|
transition: opacity 0.1s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -934,7 +949,9 @@ input[type="range"].web-slider::-webkit-slider-runnable-track {
|
||||||
|
|
||||||
.app-chrome {
|
.app-chrome {
|
||||||
background-color: var(--baseColorMix);
|
background-color: var(--baseColorMix);
|
||||||
box-shadow: 0px 3px 6px rgb(20 20 20 / 12%), 0px 1px 0px 0px rgb(200 200 200 / 12%);
|
box-shadow:
|
||||||
|
0px 3px 6px rgb(20 20 20 / 12%),
|
||||||
|
0px 1px 0px 0px rgb(200 200 200 / 12%);
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: var(--chromeHeight1);
|
height: var(--chromeHeight1);
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -1461,7 +1478,9 @@ div[data-type="musicVideo"] .info-rect .title::before {
|
||||||
border-radius: 100%;
|
border-radius: 100%;
|
||||||
background: var(--songProgressColor);
|
background: var(--songProgressColor);
|
||||||
cursor: default;
|
cursor: default;
|
||||||
transition: opacity 0.1s var(--appleEase), transform 0.1s var(--appleEase);
|
transition:
|
||||||
|
opacity 0.1s var(--appleEase),
|
||||||
|
transform 0.1s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
&::-moz-range-thumb {
|
&::-moz-range-thumb {
|
||||||
|
@ -1696,7 +1715,22 @@ 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: "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;
|
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 {
|
||||||
|
@ -1756,7 +1790,9 @@ 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), opacity 0.35s var(--appleEase);
|
transition:
|
||||||
|
transform 0.2s var(--appleEase),
|
||||||
|
opacity 0.35s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
.lyric-line:not(.active) {
|
.lyric-line:not(.active) {
|
||||||
|
@ -1800,7 +1836,22 @@ 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: "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;
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1909,7 +1960,9 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
||||||
&:active {
|
&:active {
|
||||||
filter: brightness(75%);
|
filter: brightness(75%);
|
||||||
transform: scale(0.98);
|
transform: scale(0.98);
|
||||||
transition: transform 0s var(--appleEase), box-shadow 0.2s var(--appleEase);
|
transition:
|
||||||
|
transform 0s var(--appleEase),
|
||||||
|
box-shadow 0.2s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
.svg-icon {
|
.svg-icon {
|
||||||
|
@ -2258,7 +2311,9 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
||||||
|
|
||||||
.replaycard-enter-active,
|
.replaycard-enter-active,
|
||||||
.replaycard-leave-active {
|
.replaycard-leave-active {
|
||||||
transition: opacity 0.5s var(--appleEase), transform 0.5s var(--appleEase);
|
transition:
|
||||||
|
opacity 0.5s var(--appleEase),
|
||||||
|
transform 0.5s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
.replaycard-enter,
|
.replaycard-enter,
|
||||||
|
@ -2279,7 +2334,9 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
||||||
|
|
||||||
.modal-enter-active,
|
.modal-enter-active,
|
||||||
.modal-leave-active {
|
.modal-leave-active {
|
||||||
transition: opacity 0.1s var(--appleEase), transform 0.1s var(--appleEase);
|
transition:
|
||||||
|
opacity 0.1s var(--appleEase),
|
||||||
|
transform 0.1s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
.modal-enter,
|
.modal-enter,
|
||||||
|
@ -2337,7 +2394,9 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
||||||
|
|
||||||
.fabfade-enter-active,
|
.fabfade-enter-active,
|
||||||
.fabfade-leave-active {
|
.fabfade-leave-active {
|
||||||
transition: transform 0.1s var(--appleEase), opacity 0.1s var(--appleEase);
|
transition:
|
||||||
|
transform 0.1s var(--appleEase),
|
||||||
|
opacity 0.1s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
.fabfade-enter,
|
.fabfade-enter,
|
||||||
|
@ -2348,7 +2407,9 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb {
|
||||||
|
|
||||||
.fsModeSwitch-enter-active,
|
.fsModeSwitch-enter-active,
|
||||||
.fsModeSwitch-leave-active {
|
.fsModeSwitch-leave-active {
|
||||||
transition: transform 1s var(--appleEase), opacity 1s var(--appleEase);
|
transition:
|
||||||
|
transform 1s var(--appleEase),
|
||||||
|
opacity 1s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
.fsModeSwitch-enter,
|
.fsModeSwitch-enter,
|
||||||
|
|
|
@ -59,7 +59,7 @@ define(["./workbox-962786f2"], function (e) {
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
ignoreURLParametersMatching: [/^utm_/, /^fbclid$/, /^X-Amz-Algorithm/, /^X-Amz-Date/, /^X-Amz-SignedHeaders/, /^X-Amz-Expires/, /^X-Amz-Credential/, /^X-Amz-Signature/],
|
ignoreURLParametersMatching: [/^utm_/, /^fbclid$/, /^X-Amz-Algorithm/, /^X-Amz-Date/, /^X-Amz-SignedHeaders/, /^X-Amz-Expires/, /^X-Amz-Credential/, /^X-Amz-Signature/],
|
||||||
}
|
},
|
||||||
),
|
),
|
||||||
e.registerRoute(/\.(?:png|jpg|jpeg|svg|webp)$/, new e.CacheFirst({ cacheName: "imageinternet", plugins: [] }), "GET"),
|
e.registerRoute(/\.(?:png|jpg|jpeg|svg|webp)$/, new e.CacheFirst({ cacheName: "imageinternet", plugins: [] }), "GET"),
|
||||||
e.registerRoute(/https:\/\/is[0-9]-ssl\.mzstatic\.com\/image+/, new e.CacheFirst(), "GET"),
|
e.registerRoute(/https:\/\/is[0-9]-ssl\.mzstatic\.com\/image+/, new e.CacheFirst(), "GET"),
|
||||||
|
|
|
@ -13,7 +13,9 @@
|
||||||
|
|
||||||
.drawertransition-enter-active,
|
.drawertransition-enter-active,
|
||||||
.drawertransition-leave-active {
|
.drawertransition-leave-active {
|
||||||
transition: margin 0.25s var(--appleEase), opacity 0.25s var(--appleEase);
|
transition:
|
||||||
|
margin 0.25s var(--appleEase),
|
||||||
|
opacity 0.25s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
.drawertransition-enter,
|
.drawertransition-enter,
|
||||||
|
@ -29,7 +31,9 @@
|
||||||
|
|
||||||
.drawertransition-enter-active,
|
.drawertransition-enter-active,
|
||||||
.drawertransition-leave-active {
|
.drawertransition-leave-active {
|
||||||
transition: right 0.25s var(--appleEase), opacity 0.25s var(--appleEase);
|
transition:
|
||||||
|
right 0.25s var(--appleEase),
|
||||||
|
opacity 0.25s var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
.drawertransition-enter,
|
.drawertransition-enter,
|
||||||
|
|
|
@ -98,7 +98,9 @@
|
||||||
.wpfade_transform-enter-active,
|
.wpfade_transform-enter-active,
|
||||||
.wpfade_transform-leave-active {
|
.wpfade_transform-leave-active {
|
||||||
--transitionTime: 0.2s;
|
--transitionTime: 0.2s;
|
||||||
transition: opacity var(--transitionTime) var(--appleEase), transform var(--transitionTime) var(--appleEase);
|
transition:
|
||||||
|
opacity var(--transitionTime) var(--appleEase),
|
||||||
|
transform var(--transitionTime) var(--appleEase);
|
||||||
will-change: opacity, transform;
|
will-change: opacity, transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,7 +118,9 @@
|
||||||
.wpfade_transform_backwards-enter-active,
|
.wpfade_transform_backwards-enter-active,
|
||||||
.wpfade_transform_backwards-leave-active {
|
.wpfade_transform_backwards-leave-active {
|
||||||
--transitionTime: 0.2s;
|
--transitionTime: 0.2s;
|
||||||
transition: opacity var(--transitionTime) var(--appleEase), transform var(--transitionTime) var(--appleEase);
|
transition:
|
||||||
|
opacity var(--transitionTime) var(--appleEase),
|
||||||
|
transform var(--transitionTime) var(--appleEase);
|
||||||
}
|
}
|
||||||
|
|
||||||
.wpfade_transform_backwards-enter {
|
.wpfade_transform_backwards-enter {
|
||||||
|
|
|
@ -44,7 +44,7 @@ await app.mk.api.personalRecommendations(
|
||||||
{
|
{
|
||||||
includeResponseMeta: !0,
|
includeResponseMeta: !0,
|
||||||
reload: !0,
|
reload: !0,
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
// Browse page
|
// Browse page
|
||||||
|
@ -86,7 +86,7 @@ await app.mk.api.library.recentlyAdded(
|
||||||
{
|
{
|
||||||
reload: !0,
|
reload: !0,
|
||||||
includePagination: !0,
|
includePagination: !0,
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
// Songs
|
// Songs
|
||||||
|
@ -136,7 +136,7 @@ app
|
||||||
"limit[artists:top-songs]": 20,
|
"limit[artists:top-songs]": 20,
|
||||||
"art[url]": "f",
|
"art[url]": "f",
|
||||||
},
|
},
|
||||||
{ includeResponseMeta: !0 }
|
{ includeResponseMeta: !0 },
|
||||||
)
|
)
|
||||||
.then((data) => {
|
.then((data) => {
|
||||||
console.log(data);
|
console.log(data);
|
||||||
|
|
|
@ -32,7 +32,7 @@ define(["exports"], function (t) {
|
||||||
if (s && (e.origin === location.origin || 0 === s.index)) return s.slice(1);
|
if (s && (e.origin === location.origin || 0 === s.index)) return s.slice(1);
|
||||||
},
|
},
|
||||||
e,
|
e,
|
||||||
s
|
s,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,7 @@ define(["exports"], function (t) {
|
||||||
"string" == typeof e && (e = [e]);
|
"string" == typeof e && (e = [e]);
|
||||||
const s = new Request(...e);
|
const s = new Request(...e);
|
||||||
return this.handleRequest({ request: s, event: t });
|
return this.handleRequest({ request: s, event: t });
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
t.waitUntil(s), t.ports && t.ports[0] && s.then(() => t.ports[0].postMessage(!0));
|
t.waitUntil(s), t.ports && t.ports[0] && s.then(() => t.ports[0].postMessage(!0));
|
||||||
}
|
}
|
||||||
|
@ -306,7 +306,7 @@ define(["exports"], function (t) {
|
||||||
request: n,
|
request: n,
|
||||||
event: this.event,
|
event: this.event,
|
||||||
params: this.params,
|
params: this.params,
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
this.h[s] = n;
|
this.h[s] = n;
|
||||||
}
|
}
|
||||||
|
@ -601,7 +601,7 @@ define(["exports"], function (t) {
|
||||||
params: { cacheKey: s },
|
params: { cacheKey: s },
|
||||||
request: i,
|
request: i,
|
||||||
event: t,
|
event: t,
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
const { updatedURLs: s, notUpdatedURLs: n } = e;
|
const { updatedURLs: s, notUpdatedURLs: n } = e;
|
||||||
|
|
|
@ -85,7 +85,7 @@ var app = new Vue({
|
||||||
id: id,
|
id: id,
|
||||||
params: params,
|
params: params,
|
||||||
library: library,
|
library: library,
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
resetPlayerUI() {
|
resetPlayerUI() {
|
||||||
|
@ -157,7 +157,7 @@ var app = new Vue({
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
action: "set-autoplay",
|
action: "set-autoplay",
|
||||||
autoplay: value,
|
autoplay: value,
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
this.getCurrentMediaItem();
|
this.getCurrentMediaItem();
|
||||||
if (value) {
|
if (value) {
|
||||||
|
@ -176,7 +176,7 @@ var app = new Vue({
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
action: "seek",
|
action: "seek",
|
||||||
time: time,
|
time: time,
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
setVolume(volume) {
|
setVolume(volume) {
|
||||||
|
@ -184,49 +184,49 @@ var app = new Vue({
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
action: "volume",
|
action: "volume",
|
||||||
volume: volume,
|
volume: volume,
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
getVolumeMax() {
|
getVolumeMax() {
|
||||||
socket.send(
|
socket.send(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
action: "volumeMax",
|
action: "volumeMax",
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
getQueue() {
|
getQueue() {
|
||||||
socket.send(
|
socket.send(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
action: "get-queue",
|
action: "get-queue",
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
play() {
|
play() {
|
||||||
socket.send(
|
socket.send(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
action: "play",
|
action: "play",
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
pause() {
|
pause() {
|
||||||
socket.send(
|
socket.send(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
action: "pause",
|
action: "pause",
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
next() {
|
next() {
|
||||||
socket.send(
|
socket.send(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
action: "next",
|
action: "next",
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
previous() {
|
previous() {
|
||||||
socket.send(
|
socket.send(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
action: "previous",
|
action: "previous",
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
searchArtist() {
|
searchArtist() {
|
||||||
|
@ -251,7 +251,7 @@ var app = new Vue({
|
||||||
action: "play-mediaitem",
|
action: "play-mediaitem",
|
||||||
id: id,
|
id: id,
|
||||||
kind: kind,
|
kind: kind,
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
this.screen = "player";
|
this.screen = "player";
|
||||||
},
|
},
|
||||||
|
@ -261,7 +261,7 @@ var app = new Vue({
|
||||||
action: "play-next",
|
action: "play-next",
|
||||||
type: type,
|
type: type,
|
||||||
id: id,
|
id: id,
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
playLater(type, id) {
|
playLater(type, id) {
|
||||||
|
@ -270,7 +270,7 @@ var app = new Vue({
|
||||||
action: "play-later",
|
action: "play-later",
|
||||||
type: type,
|
type: type,
|
||||||
id: id,
|
id: id,
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
getLibraryStatus(type, id) {
|
getLibraryStatus(type, id) {
|
||||||
|
@ -280,7 +280,7 @@ var app = new Vue({
|
||||||
action: "library-status",
|
action: "library-status",
|
||||||
type: type,
|
type: type,
|
||||||
id: id,
|
id: id,
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
this.player.status = {};
|
this.player.status = {};
|
||||||
|
@ -301,7 +301,7 @@ var app = new Vue({
|
||||||
action: actionType,
|
action: actionType,
|
||||||
term: this.search.query,
|
term: this.search.query,
|
||||||
limit: 20,
|
limit: 20,
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
quickSearch() {
|
quickSearch() {
|
||||||
|
@ -314,7 +314,7 @@ var app = new Vue({
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
action: "quick-play",
|
action: "quick-play",
|
||||||
term: search,
|
term: search,
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
parseTime(value) {
|
parseTime(value) {
|
||||||
|
@ -464,7 +464,7 @@ var app = new Vue({
|
||||||
action: "queue-move",
|
action: "queue-move",
|
||||||
from: evt.moved.oldIndex,
|
from: evt.moved.oldIndex,
|
||||||
to: evt.moved.newIndex,
|
to: evt.moved.newIndex,
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
this.getQueue();
|
this.getQueue();
|
||||||
return true;
|
return true;
|
||||||
|
@ -473,7 +473,7 @@ var app = new Vue({
|
||||||
socket.send(
|
socket.send(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
action: "repeat",
|
action: "repeat",
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
this.getCurrentMediaItem();
|
this.getCurrentMediaItem();
|
||||||
},
|
},
|
||||||
|
@ -481,7 +481,7 @@ var app = new Vue({
|
||||||
socket.send(
|
socket.send(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
action: "shuffle",
|
action: "shuffle",
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
this.getCurrentMediaItem();
|
this.getCurrentMediaItem();
|
||||||
},
|
},
|
||||||
|
@ -490,7 +490,7 @@ var app = new Vue({
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
action: "set-shuffle",
|
action: "set-shuffle",
|
||||||
shuffle: val,
|
shuffle: val,
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
this.getCurrentMediaItem();
|
this.getCurrentMediaItem();
|
||||||
},
|
},
|
||||||
|
@ -535,7 +535,7 @@ var app = new Vue({
|
||||||
socket.send(
|
socket.send(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
action: "get-lyrics",
|
action: "get-lyrics",
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
showLyrics() {
|
showLyrics() {
|
||||||
|
@ -567,7 +567,7 @@ var app = new Vue({
|
||||||
socket.send(
|
socket.send(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
action: "get-currentmediaitem",
|
action: "get-currentmediaitem",
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
setStreamerOverlay() {
|
setStreamerOverlay() {
|
||||||
|
@ -717,7 +717,7 @@ var app = new Vue({
|
||||||
type: params.kind,
|
type: params.kind,
|
||||||
id: params.id,
|
id: params.id,
|
||||||
rating: rating,
|
rating: rating,
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -731,7 +731,7 @@ var app = new Vue({
|
||||||
type: params.kind,
|
type: params.kind,
|
||||||
id: params.id,
|
id: params.id,
|
||||||
add: shouldAdd,
|
add: shouldAdd,
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -739,7 +739,7 @@ var app = new Vue({
|
||||||
socket.send(
|
socket.send(
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
action: "quit",
|
action: "quit",
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
@ -393,12 +393,12 @@
|
||||||
return r ? Se(r, i) : i;
|
return r ? Se(r, i) : i;
|
||||||
}
|
}
|
||||||
: t
|
: t
|
||||||
? e
|
? e
|
||||||
? function () {
|
? function () {
|
||||||
return Se("function" == typeof t ? t.call(this, this) : t, "function" == typeof e ? e.call(this, this) : e);
|
return Se("function" == typeof t ? t.call(this, this) : t, "function" == typeof e ? e.call(this, this) : e);
|
||||||
}
|
}
|
||||||
: t
|
: t
|
||||||
: e;
|
: e;
|
||||||
}
|
}
|
||||||
function Ne(e, t) {
|
function Ne(e, t) {
|
||||||
var n = t ? (e ? e.concat(t) : Array.isArray(t) ? t : [t]) : e;
|
var n = t ? (e ? e.concat(t) : Array.isArray(t) ? t : [t]) : e;
|
||||||
|
@ -697,13 +697,13 @@
|
||||||
return i(e)
|
return i(e)
|
||||||
? [he(e)]
|
? [he(e)]
|
||||||
: Array.isArray(e)
|
: Array.isArray(e)
|
||||||
? (function e(o, a) {
|
? (function e(o, a) {
|
||||||
var s = [];
|
var s = [];
|
||||||
var c, u, l, f;
|
var c, u, l, f;
|
||||||
for (c = 0; c < o.length; c++) t((u = o[c])) || "boolean" == typeof u || ((l = s.length - 1), (f = s[l]), Array.isArray(u) ? u.length > 0 && (ct((u = e(u, (a || "") + "_" + c))[0]) && ct(f) && ((s[l] = he(f.text + u[0].text)), u.shift()), s.push.apply(s, u)) : i(u) ? (ct(f) ? (s[l] = he(f.text + u)) : "" !== u && s.push(he(u))) : ct(u) && ct(f) ? (s[l] = he(f.text + u.text)) : (r(o._isVList) && n(u.tag) && t(u.key) && n(a) && (u.key = "__vlist" + a + "_" + c + "__"), s.push(u)));
|
for (c = 0; c < o.length; c++) t((u = o[c])) || "boolean" == typeof u || ((l = s.length - 1), (f = s[l]), Array.isArray(u) ? u.length > 0 && (ct((u = e(u, (a || "") + "_" + c))[0]) && ct(f) && ((s[l] = he(f.text + u[0].text)), u.shift()), s.push.apply(s, u)) : i(u) ? (ct(f) ? (s[l] = he(f.text + u)) : "" !== u && s.push(he(u))) : ct(u) && ct(f) ? (s[l] = he(f.text + u.text)) : (r(o._isVList) && n(u.tag) && t(u.key) && n(a) && (u.key = "__vlist" + a + "_" + c + "__"), s.push(u)));
|
||||||
return s;
|
return s;
|
||||||
})(e)
|
})(e)
|
||||||
: void 0;
|
: void 0;
|
||||||
}
|
}
|
||||||
function ct(e) {
|
function ct(e) {
|
||||||
return n(e) && n(e.text) && !1 === e.isComment;
|
return n(e) && n(e.text) && !1 === e.isComment;
|
||||||
|
@ -1135,23 +1135,23 @@
|
||||||
return Array.isArray(u)
|
return Array.isArray(u)
|
||||||
? u
|
? u
|
||||||
: n(u)
|
: n(u)
|
||||||
? (n(l) &&
|
? (n(l) &&
|
||||||
(function e(i, o, a) {
|
(function e(i, o, a) {
|
||||||
i.ns = o;
|
i.ns = o;
|
||||||
"foreignObject" === i.tag && ((o = void 0), (a = !0));
|
"foreignObject" === i.tag && ((o = void 0), (a = !0));
|
||||||
if (n(i.children))
|
if (n(i.children))
|
||||||
for (var s = 0, c = i.children.length; s < c; s++) {
|
for (var s = 0, c = i.children.length; s < c; s++) {
|
||||||
var u = i.children[s];
|
var u = i.children[s];
|
||||||
n(u.tag) && (t(u.ns) || (r(a) && "svg" !== u.tag)) && e(u, o, a);
|
n(u.tag) && (t(u.ns) || (r(a) && "svg" !== u.tag)) && e(u, o, a);
|
||||||
}
|
}
|
||||||
})(u, l),
|
})(u, l),
|
||||||
n(a) &&
|
n(a) &&
|
||||||
(function (e) {
|
(function (e) {
|
||||||
o(e.style) && tt(e.style);
|
o(e.style) && tt(e.style);
|
||||||
o(e.class) && tt(e.class);
|
o(e.class) && tt(e.class);
|
||||||
})(a),
|
})(a),
|
||||||
u)
|
u)
|
||||||
: ve();
|
: ve();
|
||||||
})(e, a, s, c, u)
|
})(e, a, s, c, u)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1323,17 +1323,17 @@
|
||||||
this.lazy
|
this.lazy
|
||||||
? (this.dirty = !0)
|
? (this.dirty = !0)
|
||||||
: this.sync
|
: this.sync
|
||||||
? this.run()
|
? this.run()
|
||||||
: (function (e) {
|
: (function (e) {
|
||||||
var t = e.id;
|
var t = e.id;
|
||||||
if (null == nn[t]) {
|
if (null == nn[t]) {
|
||||||
if (((nn[t] = !0), on)) {
|
if (((nn[t] = !0), on)) {
|
||||||
for (var n = en.length - 1; n > an && en[n].id > e.id; ) n--;
|
for (var n = en.length - 1; n > an && en[n].id > e.id; ) n--;
|
||||||
en.splice(n + 1, 0, e);
|
en.splice(n + 1, 0, e);
|
||||||
} else en.push(e);
|
} else en.push(e);
|
||||||
rn || ((rn = !0), Qe(ln));
|
rn || ((rn = !0), Qe(ln));
|
||||||
}
|
}
|
||||||
})(this);
|
})(this);
|
||||||
}),
|
}),
|
||||||
(pn.prototype.run = function () {
|
(pn.prototype.run = function () {
|
||||||
if (this.active) {
|
if (this.active) {
|
||||||
|
@ -1408,7 +1408,7 @@
|
||||||
fe();
|
fe();
|
||||||
}
|
}
|
||||||
})(t, e)
|
})(t, e)
|
||||||
: t || {})
|
: t || {}),
|
||||||
) || (t = {});
|
) || (t = {});
|
||||||
var n = Object.keys(t),
|
var n = Object.keys(t),
|
||||||
r = e.$options.props,
|
r = e.$options.props,
|
||||||
|
@ -1883,21 +1883,21 @@
|
||||||
return r;
|
return r;
|
||||||
})(e)
|
})(e)
|
||||||
: o(e)
|
: o(e)
|
||||||
? (function (e) {
|
? (function (e) {
|
||||||
var t = "";
|
var t = "";
|
||||||
for (var n in e) e[n] && (t && (t += " "), (t += n));
|
for (var n in e) e[n] && (t && (t += " "), (t += n));
|
||||||
return t;
|
return t;
|
||||||
})(e)
|
})(e)
|
||||||
: "string" == typeof e
|
: "string" == typeof e
|
||||||
? e
|
? e
|
||||||
: "";
|
: "";
|
||||||
}
|
}
|
||||||
var Jn = {
|
var Jn = {
|
||||||
svg: "http://www.w3.org/2000/svg",
|
svg: "http://www.w3.org/2000/svg",
|
||||||
math: "http://www.w3.org/1998/Math/MathML",
|
math: "http://www.w3.org/1998/Math/MathML",
|
||||||
},
|
},
|
||||||
qn = p(
|
qn = p(
|
||||||
"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"
|
"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot",
|
||||||
),
|
),
|
||||||
Wn = p("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view", !0),
|
Wn = p("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view", !0),
|
||||||
Zn = function (e) {
|
Zn = function (e) {
|
||||||
|
@ -2201,8 +2201,8 @@
|
||||||
isDynamicArg: o,
|
isDynamicArg: o,
|
||||||
modifiers: a,
|
modifiers: a,
|
||||||
},
|
},
|
||||||
s
|
s,
|
||||||
)
|
),
|
||||||
),
|
),
|
||||||
(e.plain = !1);
|
(e.plain = !1);
|
||||||
}
|
}
|
||||||
|
@ -2564,7 +2564,7 @@
|
||||||
null,
|
null,
|
||||||
t.map(function (t, n) {
|
t.map(function (t, n) {
|
||||||
return Pi(t) + Pi(e[n]);
|
return Pi(t) + Pi(e[n]);
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
function Pi(e) {
|
function Pi(e) {
|
||||||
|
@ -2795,23 +2795,23 @@
|
||||||
t(h)
|
t(h)
|
||||||
? (h = r[++p])
|
? (h = r[++p])
|
||||||
: t(m)
|
: t(m)
|
||||||
? (m = r[--v])
|
? (m = r[--v])
|
||||||
: or(h, g)
|
: or(h, g)
|
||||||
? (x(h, g, o, i, d), (h = r[++p]), (g = i[++d]))
|
? (x(h, g, o, i, d), (h = r[++p]), (g = i[++d]))
|
||||||
: or(m, b)
|
: or(m, b)
|
||||||
? (x(m, b, o, i, y), (m = r[--v]), (b = i[--y]))
|
? (x(m, b, o, i, y), (m = r[--v]), (b = i[--y]))
|
||||||
: or(h, b)
|
: or(h, b)
|
||||||
? (x(h, b, o, i, y), w && u.insertBefore(e, h.elm, u.nextSibling(m.elm)), (h = r[++p]), (b = i[--y]))
|
? (x(h, b, o, i, y), w && u.insertBefore(e, h.elm, u.nextSibling(m.elm)), (h = r[++p]), (b = i[--y]))
|
||||||
: or(m, g)
|
: or(m, g)
|
||||||
? (x(m, g, o, i, d), w && u.insertBefore(e, m.elm, h.elm), (m = r[--v]), (g = i[++d]))
|
? (x(m, g, o, i, d), w && u.insertBefore(e, m.elm, h.elm), (m = r[--v]), (g = i[++d]))
|
||||||
: (t(s) && (s = ar(r, p, v)), t((c = n(g.key) ? s[g.key] : C(g, r, p, v))) ? f(g, o, e, h.elm, !1, i, d) : or((l = r[c]), g) ? (x(l, g, o, i, d), (r[c] = void 0), w && u.insertBefore(e, l.elm, h.elm)) : f(g, o, e, h.elm, !1, i, d), (g = i[++d]));
|
: (t(s) && (s = ar(r, p, v)), t((c = n(g.key) ? s[g.key] : C(g, r, p, v))) ? f(g, o, e, h.elm, !1, i, d) : or((l = r[c]), g) ? (x(l, g, o, i, d), (r[c] = void 0), w && u.insertBefore(e, l.elm, h.elm)) : f(g, o, e, h.elm, !1, i, d), (g = i[++d]));
|
||||||
p > v ? _(e, t(i[y + 1]) ? null : i[y + 1].elm, i, d, y, o) : d > y && $(r, p, v);
|
p > v ? _(e, t(i[y + 1]) ? null : i[y + 1].elm, i, d, y, o) : d > y && $(r, p, v);
|
||||||
})(p, h, y, o, l)
|
})(p, h, y, o, l)
|
||||||
: n(y)
|
: n(y)
|
||||||
? (n(e.text) && u.setTextContent(p, ""), _(p, null, y, 0, y.length - 1, o))
|
? (n(e.text) && u.setTextContent(p, ""), _(p, null, y, 0, y.length - 1, o))
|
||||||
: n(h)
|
: n(h)
|
||||||
? $(h, 0, h.length - 1)
|
? $(h, 0, h.length - 1)
|
||||||
: n(e.text) && u.setTextContent(p, "")
|
: n(e.text) && u.setTextContent(p, "")
|
||||||
: e.text !== i.text && u.setTextContent(p, i.text),
|
: e.text !== i.text && u.setTextContent(p, i.text),
|
||||||
n(v) && n((d = v.hook)) && n((d = d.postpatch)) && d(e, i);
|
n(v) && n((d = v.hook)) && n((d = d.postpatch)) && d(e, i);
|
||||||
}
|
}
|
||||||
|
@ -3176,7 +3176,7 @@
|
||||||
Oi,
|
Oi,
|
||||||
(n._moveCb = function e(r) {
|
(n._moveCb = function e(r) {
|
||||||
(r && r.target !== n) || (r && !/transform$/.test(r.propertyName)) || (n.removeEventListener(Oi, e), (n._moveCb = null), Di(n, t));
|
(r && r.target !== n) || (r && !/transform$/.test(r.propertyName)) || (n.removeEventListener(Oi, e), (n._moveCb = null), Di(n, t));
|
||||||
})
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
@ -3232,7 +3232,7 @@
|
||||||
e._isMounted && !e._isDestroyed && Qt(e, "beforeUpdate");
|
e._isMounted && !e._isDestroyed && Qt(e, "beforeUpdate");
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
!0
|
!0,
|
||||||
),
|
),
|
||||||
(n = !1),
|
(n = !1),
|
||||||
null == e.$vnode && ((e._isMounted = !0), Qt(e, "mounted")),
|
null == e.$vnode && ((e._isMounted = !0), Qt(e, "mounted")),
|
||||||
|
@ -3635,7 +3635,7 @@
|
||||||
n,
|
n,
|
||||||
(function (e, t) {
|
(function (e, t) {
|
||||||
return e.rawAttrsMap[":" + t] || e.rawAttrsMap["v-bind:" + t] || e.rawAttrsMap[t];
|
return e.rawAttrsMap[":" + t] || e.rawAttrsMap["v-bind:" + t] || e.rawAttrsMap[t];
|
||||||
})(e, "slot")
|
})(e, "slot"),
|
||||||
));
|
));
|
||||||
if ("template" === e.tag) {
|
if ("template" === e.tag) {
|
||||||
var r = Rr(e, oa);
|
var r = Rr(e, oa);
|
||||||
|
@ -3969,7 +3969,7 @@
|
||||||
.map(function (e) {
|
.map(function (e) {
|
||||||
return "$event." + e + "Key";
|
return "$event." + e + "Key";
|
||||||
})
|
})
|
||||||
.join("||")
|
.join("||"),
|
||||||
);
|
);
|
||||||
} else a.push(s);
|
} else a.push(s);
|
||||||
return (
|
return (
|
||||||
|
@ -4040,7 +4040,7 @@
|
||||||
value: e.value,
|
value: e.value,
|
||||||
dynamic: e.dynamic,
|
dynamic: e.dynamic,
|
||||||
};
|
};
|
||||||
})
|
}),
|
||||||
)
|
)
|
||||||
: null,
|
: null,
|
||||||
a = e.attrsMap["v-bind"];
|
a = e.attrsMap["v-bind"];
|
||||||
|
@ -4361,7 +4361,7 @@
|
||||||
delimiters: n.delimiters,
|
delimiters: n.delimiters,
|
||||||
comments: n.comments,
|
comments: n.comments,
|
||||||
},
|
},
|
||||||
this
|
this,
|
||||||
),
|
),
|
||||||
o = i.render,
|
o = i.render,
|
||||||
a = i.staticRenderFns;
|
a = i.staticRenderFns;
|
||||||
|
|
|
@ -1,22 +1,30 @@
|
||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"experimentalDecorators": true,
|
"outDir": "build",
|
||||||
"target": "es6",
|
|
||||||
"module": "commonjs",
|
|
||||||
"allowJs": true,
|
|
||||||
"noImplicitAny": true,
|
|
||||||
"strict": true,
|
|
||||||
"inlineSources": true,
|
"inlineSources": true,
|
||||||
"sourceMap": true,
|
"allowJs": true,
|
||||||
"outDir": "./build",
|
"esModuleInterop": true,
|
||||||
"baseUrl": ".",
|
"module": "NodeNext",
|
||||||
|
"moduleResolution": "NodeNext",
|
||||||
|
// Needed to address https://github.com/quasarframework/app-extension-typescript/issues/36
|
||||||
|
"noEmit": false,
|
||||||
"resolveJsonModule": true,
|
"resolveJsonModule": true,
|
||||||
"paths": {
|
// Avoid cross-os errors due to inconsistent file casing
|
||||||
"*": ["node_modules/*"]
|
"forceConsistentCasingInFileNames": true,
|
||||||
},
|
"sourceMap": true,
|
||||||
"skipLibCheck": true,
|
"strict": true,
|
||||||
|
"target": "esnext",
|
||||||
|
"isolatedModules": true,
|
||||||
|
"useDefineForClassFields": true,
|
||||||
|
// Fix Volar issue https://github.com/johnsoncodehk/volar/issues/1153
|
||||||
|
"jsx": "preserve",
|
||||||
|
"lib": ["esnext", "dom"],
|
||||||
|
"experimentalDecorators": true,
|
||||||
|
"baseUrl": "./",
|
||||||
"allowSyntheticDefaultImports": true,
|
"allowSyntheticDefaultImports": true,
|
||||||
"typeRoots": ["node_modules/musickit-typescript", "node_modules/@types"]
|
"noImplicitThis": true,
|
||||||
|
"skipLibCheck": true /* Skip type checking of declaration files. */,
|
||||||
|
"typeRoots": ["node_modules/musickit-typescript", "node_modules/@types"],
|
||||||
},
|
},
|
||||||
"include": ["src/main/**/*"]
|
"include": ["src/**/*.ts"],
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
"mirror": "https://github.com/castlabs/electron-releases/releases/download/v"
|
"mirror": "https://github.com/castlabs/electron-releases/releases/download/v"
|
||||||
},
|
},
|
||||||
"appId": "cider",
|
"appId": "cider",
|
||||||
"afterPack": "./resources/afterPack.js",
|
"afterPack": "./resources/afterPack.cjs",
|
||||||
"afterSign": "./resources/notarize.js",
|
"afterSign": "./resources/notarize.cjs",
|
||||||
"protocols": [
|
"protocols": [
|
||||||
{
|
{
|
||||||
"name": "Cider",
|
"name": "Cider",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue