[web] Lint source code

This commit is contained in:
Alain Nussbaumer 2025-05-25 10:41:58 +02:00
parent 02625ff67a
commit f62c5c06a8
31 changed files with 217 additions and 218 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -15,7 +15,6 @@ export default [
rules: { rules: {
camelcase: 'off', camelcase: 'off',
'id-length': 'off', 'id-length': 'off',
'max-lines': 'off',
'max-lines-per-function': 'off', 'max-lines-per-function': 'off',
'max-statements': 'off', 'max-statements': 'off',
'no-bitwise': 'off', 'no-bitwise': 'off',

View File

@ -19,7 +19,7 @@
"reconnectingwebsocket": "^1.0.0", "reconnectingwebsocket": "^1.0.0",
"spotify-web-api-js": "^1.5.2", "spotify-web-api-js": "^1.5.2",
"vue": "^3.5.14", "vue": "^3.5.14",
"vue-i18n": "^11.1.3", "vue-i18n": "^11.1.4",
"vue-router": "^4.5.1", "vue-router": "^4.5.1",
"vue3-click-away": "^1.2.4", "vue3-click-away": "^1.2.4",
"vue3-lazyload": "^0.3.8", "vue3-lazyload": "^0.3.8",
@ -789,13 +789,13 @@
} }
}, },
"node_modules/@intlify/core-base": { "node_modules/@intlify/core-base": {
"version": "11.1.3", "version": "11.1.4",
"resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-11.1.3.tgz", "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-11.1.4.tgz",
"integrity": "sha512-cMuHunYO7LE80azTitcvEbs1KJmtd6g7I5pxlApV3Jo547zdO3h31/0uXpqHc+Y3RKt1wo2y68RGSx77Z1klyA==", "integrity": "sha512-VNIanL84HNBNAoJjPA2V8EykT5NtgNDquO2MsDQcSheo7EcCt4uvH14IHBEDKVoL6k38NNICLuRhtKOKqW2ylA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@intlify/message-compiler": "11.1.3", "@intlify/message-compiler": "11.1.4",
"@intlify/shared": "11.1.3" "@intlify/shared": "11.1.4"
}, },
"engines": { "engines": {
"node": ">= 16" "node": ">= 16"
@ -805,12 +805,12 @@
} }
}, },
"node_modules/@intlify/message-compiler": { "node_modules/@intlify/message-compiler": {
"version": "11.1.3", "version": "11.1.4",
"resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-11.1.3.tgz", "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-11.1.4.tgz",
"integrity": "sha512-7rbqqpo2f5+tIcwZTAG/Ooy9C8NDVwfDkvSeDPWUPQW+Dyzfw2o9H103N5lKBxO7wxX9dgCDjQ8Umz73uYw3hw==", "integrity": "sha512-fQWJwTOBFNFGNr4I5k629hQxTGEKsDWhhTzr6Y4CN4OXJw/dLB/VbbQm5jlylqnv44RBZN5GSD+d1nWpNcAR5A==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@intlify/shared": "11.1.3", "@intlify/shared": "11.1.4",
"source-map-js": "^1.0.2" "source-map-js": "^1.0.2"
}, },
"engines": { "engines": {
@ -821,9 +821,9 @@
} }
}, },
"node_modules/@intlify/shared": { "node_modules/@intlify/shared": {
"version": "11.1.3", "version": "11.1.4",
"resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-11.1.3.tgz", "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-11.1.4.tgz",
"integrity": "sha512-pTFBgqa/99JRA2H1qfyqv97MKWJrYngXBA/I0elZcYxvJgcCw3mApAoPW3mJ7vx3j+Ti0FyKUFZ4hWxdjKaxvA==", "integrity": "sha512-zOW2L5+QnWRQgM/7WNSPxa6E0F3wR2/KEQV7P4s4AXzxzmg0MuzLNiixvkRJU5h0Xb3DnHic6zybKva28kabDw==",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">= 16" "node": ">= 16"
@ -1368,9 +1368,9 @@
} }
}, },
"node_modules/@rollup/rollup-android-arm-eabi": { "node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz",
"integrity": "sha512-KxN+zCjOYHGwCl4UCtSfZ6jrq/qi88JDUtiEFk8LELEHq2Egfc/FgW+jItZiOLRuQfb/3xJSgFuNPC9jzggX+A==", "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@ -1382,9 +1382,9 @@
] ]
}, },
"node_modules/@rollup/rollup-android-arm64": { "node_modules/@rollup/rollup-android-arm64": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz",
"integrity": "sha512-yDvqx3lWlcugozax3DItKJI5j05B0d4Kvnjx+5mwiUpWramVvmAByYigMplaoAQ3pvdprGCTCE03eduqE/8mPQ==", "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -1396,9 +1396,9 @@
] ]
}, },
"node_modules/@rollup/rollup-darwin-arm64": { "node_modules/@rollup/rollup-darwin-arm64": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz",
"integrity": "sha512-2KOU574vD3gzcPSjxO0eyR5iWlnxxtmW1F5CkNOHmMlueKNCQkxR6+ekgWyVnz6zaZihpUNkGxjsYrkTJKhkaw==", "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -1410,9 +1410,9 @@
] ]
}, },
"node_modules/@rollup/rollup-darwin-x64": { "node_modules/@rollup/rollup-darwin-x64": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz",
"integrity": "sha512-gE5ACNSxHcEZyP2BA9TuTakfZvULEW4YAOtxl/A/YDbIir/wPKukde0BNPlnBiP88ecaN4BJI2TtAd+HKuZPQQ==", "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -1424,9 +1424,9 @@
] ]
}, },
"node_modules/@rollup/rollup-freebsd-arm64": { "node_modules/@rollup/rollup-freebsd-arm64": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz",
"integrity": "sha512-GSxU6r5HnWij7FoSo7cZg3l5GPg4HFLkzsFFh0N/b16q5buW1NAWuCJ+HMtIdUEi6XF0qH+hN0TEd78laRp7Dg==", "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -1438,9 +1438,9 @@
] ]
}, },
"node_modules/@rollup/rollup-freebsd-x64": { "node_modules/@rollup/rollup-freebsd-x64": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz",
"integrity": "sha512-KGiGKGDg8qLRyOWmk6IeiHJzsN/OYxO6nSbT0Vj4MwjS2XQy/5emsmtoqLAabqrohbgLWJ5GV3s/ljdrIr8Qjg==", "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -1452,9 +1452,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm-gnueabihf": { "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz",
"integrity": "sha512-46OzWeqEVQyX3N2/QdiU/CMXYDH/lSHpgfBkuhl3igpZiaB3ZIfSjKuOnybFVBQzjsLwkus2mjaESy8H41SzvA==", "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@ -1466,9 +1466,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm-musleabihf": { "node_modules/@rollup/rollup-linux-arm-musleabihf": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz",
"integrity": "sha512-lfgW3KtQP4YauqdPpcUZHPcqQXmTmH4nYU0cplNeW583CMkAGjtImw4PKli09NFi2iQgChk4e9erkwlfYem6Lg==", "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==",
"cpu": [ "cpu": [
"arm" "arm"
], ],
@ -1480,9 +1480,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm64-gnu": { "node_modules/@rollup/rollup-linux-arm64-gnu": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz",
"integrity": "sha512-nn8mEyzMbdEJzT7cwxgObuwviMx6kPRxzYiOl6o/o+ChQq23gfdlZcUNnt89lPhhz3BYsZ72rp0rxNqBSfqlqw==", "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -1494,9 +1494,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-arm64-musl": { "node_modules/@rollup/rollup-linux-arm64-musl": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz",
"integrity": "sha512-l+QK99je2zUKGd31Gh+45c4pGDAqZSuWQiuRFCdHYC2CSiO47qUWsCcenrI6p22hvHZrDje9QjwSMAFL3iwXwQ==", "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -1508,9 +1508,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-loongarch64-gnu": { "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz",
"integrity": "sha512-WbnJaxPv1gPIm6S8O/Wg+wfE/OzGSXlBMbOe4ie+zMyykMOeqmgD1BhPxZQuDqwUN+0T/xOFtL2RUWBspnZj3w==", "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==",
"cpu": [ "cpu": [
"loong64" "loong64"
], ],
@ -1522,9 +1522,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": { "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz",
"integrity": "sha512-eRDWR5t67/b2g8Q/S8XPi0YdbKcCs4WQ8vklNnUYLaSWF+Cbv2axZsp4jni6/j7eKvMLYCYdcsv8dcU+a6QNFg==", "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==",
"cpu": [ "cpu": [
"ppc64" "ppc64"
], ],
@ -1536,9 +1536,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-riscv64-gnu": { "node_modules/@rollup/rollup-linux-riscv64-gnu": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz",
"integrity": "sha512-TWrZb6GF5jsEKG7T1IHwlLMDRy2f3DPqYldmIhnA2DVqvvhY2Ai184vZGgahRrg8k9UBWoSlHv+suRfTN7Ua4A==", "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==",
"cpu": [ "cpu": [
"riscv64" "riscv64"
], ],
@ -1550,9 +1550,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-riscv64-musl": { "node_modules/@rollup/rollup-linux-riscv64-musl": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz",
"integrity": "sha512-ieQljaZKuJpmWvd8gW87ZmSFwid6AxMDk5bhONJ57U8zT77zpZ/TPKkU9HpnnFrM4zsgr4kiGuzbIbZTGi7u9A==", "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==",
"cpu": [ "cpu": [
"riscv64" "riscv64"
], ],
@ -1564,9 +1564,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-s390x-gnu": { "node_modules/@rollup/rollup-linux-s390x-gnu": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz",
"integrity": "sha512-/L3pW48SxrWAlVsKCN0dGLB2bi8Nv8pr5S5ocSM+S0XCn5RCVCXqi8GVtHFsOBBCSeR+u9brV2zno5+mg3S4Aw==", "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==",
"cpu": [ "cpu": [
"s390x" "s390x"
], ],
@ -1578,9 +1578,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-x64-gnu": { "node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz",
"integrity": "sha512-XMLeKjyH8NsEDCRptf6LO8lJk23o9wvB+dJwcXMaH6ZQbbkHu2dbGIUindbMtRN6ux1xKi16iXWu6q9mu7gDhQ==", "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -1592,9 +1592,9 @@
] ]
}, },
"node_modules/@rollup/rollup-linux-x64-musl": { "node_modules/@rollup/rollup-linux-x64-musl": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz",
"integrity": "sha512-m/P7LycHZTvSQeXhFmgmdqEiTqSV80zn6xHaQ1JSqwCtD1YGtwEK515Qmy9DcB2HK4dOUVypQxvhVSy06cJPEg==", "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -1606,9 +1606,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-arm64-msvc": { "node_modules/@rollup/rollup-win32-arm64-msvc": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz",
"integrity": "sha512-4yodtcOrFHpbomJGVEqZ8fzD4kfBeCbpsUy5Pqk4RluXOdsWdjLnjhiKy2w3qzcASWd04fp52Xz7JKarVJ5BTg==", "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@ -1620,9 +1620,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-ia32-msvc": { "node_modules/@rollup/rollup-win32-ia32-msvc": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz",
"integrity": "sha512-tmazCrAsKzdkXssEc65zIE1oC6xPHwfy9d5Ta25SRCDOZS+I6RypVVShWALNuU9bxIfGA0aqrmzlzoM5wO5SPQ==", "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==",
"cpu": [ "cpu": [
"ia32" "ia32"
], ],
@ -1634,9 +1634,9 @@
] ]
}, },
"node_modules/@rollup/rollup-win32-x64-msvc": { "node_modules/@rollup/rollup-win32-x64-msvc": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.0.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz",
"integrity": "sha512-h1J+Yzjo/X+0EAvR2kIXJDuTuyT7drc+t2ALY0nIcGPbTatNOf0VWdhEA2Z4AAjv6X1NJV7SYo5oCTYRJhSlVA==", "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@ -3724,9 +3724,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/rollup": { "node_modules/rollup": {
"version": "4.41.0", "version": "4.41.1",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.0.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz",
"integrity": "sha512-HqMFpUbWlf/tvcxBFNKnJyzc7Lk+XO3FGc3pbNBLqEbOz0gPLRgcrlS3UF4MfUrVlstOaP/q0kM6GVvi+LrLRg==", "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@ -3740,26 +3740,26 @@
"npm": ">=8.0.0" "npm": ">=8.0.0"
}, },
"optionalDependencies": { "optionalDependencies": {
"@rollup/rollup-android-arm-eabi": "4.41.0", "@rollup/rollup-android-arm-eabi": "4.41.1",
"@rollup/rollup-android-arm64": "4.41.0", "@rollup/rollup-android-arm64": "4.41.1",
"@rollup/rollup-darwin-arm64": "4.41.0", "@rollup/rollup-darwin-arm64": "4.41.1",
"@rollup/rollup-darwin-x64": "4.41.0", "@rollup/rollup-darwin-x64": "4.41.1",
"@rollup/rollup-freebsd-arm64": "4.41.0", "@rollup/rollup-freebsd-arm64": "4.41.1",
"@rollup/rollup-freebsd-x64": "4.41.0", "@rollup/rollup-freebsd-x64": "4.41.1",
"@rollup/rollup-linux-arm-gnueabihf": "4.41.0", "@rollup/rollup-linux-arm-gnueabihf": "4.41.1",
"@rollup/rollup-linux-arm-musleabihf": "4.41.0", "@rollup/rollup-linux-arm-musleabihf": "4.41.1",
"@rollup/rollup-linux-arm64-gnu": "4.41.0", "@rollup/rollup-linux-arm64-gnu": "4.41.1",
"@rollup/rollup-linux-arm64-musl": "4.41.0", "@rollup/rollup-linux-arm64-musl": "4.41.1",
"@rollup/rollup-linux-loongarch64-gnu": "4.41.0", "@rollup/rollup-linux-loongarch64-gnu": "4.41.1",
"@rollup/rollup-linux-powerpc64le-gnu": "4.41.0", "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1",
"@rollup/rollup-linux-riscv64-gnu": "4.41.0", "@rollup/rollup-linux-riscv64-gnu": "4.41.1",
"@rollup/rollup-linux-riscv64-musl": "4.41.0", "@rollup/rollup-linux-riscv64-musl": "4.41.1",
"@rollup/rollup-linux-s390x-gnu": "4.41.0", "@rollup/rollup-linux-s390x-gnu": "4.41.1",
"@rollup/rollup-linux-x64-gnu": "4.41.0", "@rollup/rollup-linux-x64-gnu": "4.41.1",
"@rollup/rollup-linux-x64-musl": "4.41.0", "@rollup/rollup-linux-x64-musl": "4.41.1",
"@rollup/rollup-win32-arm64-msvc": "4.41.0", "@rollup/rollup-win32-arm64-msvc": "4.41.1",
"@rollup/rollup-win32-ia32-msvc": "4.41.0", "@rollup/rollup-win32-ia32-msvc": "4.41.1",
"@rollup/rollup-win32-x64-msvc": "4.41.0", "@rollup/rollup-win32-x64-msvc": "4.41.1",
"fsevents": "~2.3.2" "fsevents": "~2.3.2"
} }
}, },
@ -4169,13 +4169,13 @@
} }
}, },
"node_modules/vue-i18n": { "node_modules/vue-i18n": {
"version": "11.1.3", "version": "11.1.4",
"resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-11.1.3.tgz", "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-11.1.4.tgz",
"integrity": "sha512-Pcylh9z9S5+CJAqgbRZ3EKxFIBIrtY5YUppU722GIT65+Nukm0TCqiQegZnNLCZkXGthxe0cpqj0AoM51H+6Gw==", "integrity": "sha512-0B2Q4rTSzQigfIQnsgNMgWOekouT2lr3hiKG3k7q3fQykr968BRdIUDnIvHisq/f1FPKbBznHpvAyGg78eDAyg==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@intlify/core-base": "11.1.3", "@intlify/core-base": "11.1.4",
"@intlify/shared": "11.1.3", "@intlify/shared": "11.1.4",
"@vue/devtools-api": "^6.5.0" "@vue/devtools-api": "^6.5.0"
}, },
"engines": { "engines": {

View File

@ -23,7 +23,7 @@
"reconnectingwebsocket": "^1.0.0", "reconnectingwebsocket": "^1.0.0",
"spotify-web-api-js": "^1.5.2", "spotify-web-api-js": "^1.5.2",
"vue": "^3.5.14", "vue": "^3.5.14",
"vue-i18n": "^11.1.3", "vue-i18n": "^11.1.4",
"vue-router": "^4.5.1", "vue-router": "^4.5.1",
"vue3-click-away": "^1.2.4", "vue3-click-away": "^1.2.4",
"vue3-lazyload": "^0.3.8", "vue3-lazyload": "^0.3.8",

View File

@ -79,17 +79,17 @@ export default {
}, },
created() { created() {
this.handlers = { this.handlers = {
update: [this.libraryStore.initialise],
database: [this.libraryStore.initialise], database: [this.libraryStore.initialise],
player: [this.playerStore.initialise], lastfm: [this.servicesStore.initialiseLastfm],
options: [this.playerStore.initialise], options: [this.playerStore.initialise],
volume: [this.playerStore.initialise, this.outputsStore.initialise],
outputs: [this.outputsStore.initialise], outputs: [this.outputsStore.initialise],
pairing: [this.remotesStore.initialise],
player: [this.playerStore.initialise],
queue: [this.queueStore.initialise], queue: [this.queueStore.initialise],
settings: [this.settingsStore.initialise], settings: [this.settingsStore.initialise],
spotify: [this.servicesStore.initialiseSpotify], spotify: [this.servicesStore.initialiseSpotify],
lastfm: [this.servicesStore.initialiseLastfm], update: [this.libraryStore.initialise],
pairing: [this.remotesStore.initialise] volume: [this.playerStore.initialise, this.outputsStore.initialise]
} }
this.connect() this.connect()
this.$router.beforeEach((to, from, next) => { this.$router.beforeEach((to, from, next) => {
@ -129,6 +129,34 @@ export default {
}) })
}) })
}, },
createWebsocket() {
const protocol = window.location.protocol.replace('http', 'ws')
const hostname =
(import.meta.env.DEV &&
URL.parse(import.meta.env.VITE_OWNTONE_URL)?.hostname) ||
window.location.hostname
const suffix =
this.configurationStore.websocket_port || `${window.location.port}/ws`
const url = `${protocol}${hostname}:${suffix}`
return new ReconnectingWebSocket(url, 'notify', {
maxReconnectInterval: 2000,
reconnectInterval: 1000
})
},
handleEvents(events = []) {
events.forEach((event) => {
const handlers = this.handlers[event] || []
handlers.forEach((handler) => {
if (!this.scheduledHandlers.has(handler)) {
const timeoutId = setTimeout(() => {
handler.call(this)
this.scheduledHandlers.delete(handler)
}, 50)
this.scheduledHandlers.set(handler, timeoutId)
}
})
})
},
openWebsocket() { openWebsocket() {
const socket = this.createWebsocket() const socket = this.createWebsocket()
const events = [ const events = [
@ -161,34 +189,6 @@ export default {
this.handleEvents(notifiedEvents) this.handleEvents(notifiedEvents)
} }
}, },
createWebsocket() {
const protocol = window.location.protocol.replace('http', 'ws')
const hostname =
(import.meta.env.DEV &&
URL.parse(import.meta.env.VITE_OWNTONE_URL)?.hostname) ||
window.location.hostname
const suffix =
this.configurationStore.websocket_port || `${window.location.port}/ws`
const url = `${protocol}${hostname}:${suffix}`
return new ReconnectingWebSocket(url, 'notify', {
maxReconnectInterval: 2000,
reconnectInterval: 1000
})
},
handleEvents(events = []) {
events.forEach((event) => {
const handlers = this.handlers[event] || []
handlers.forEach((handler) => {
if (!this.scheduledHandlers.has(handler)) {
const timeoutId = setTimeout(() => {
handler.call(this)
this.scheduledHandlers.delete(handler)
}, 50)
this.scheduledHandlers.set(handler, timeoutId)
}
})
})
},
updateClipping() { updateClipping() {
if (this.uiStore.showBurgerMenu || this.uiStore.showPlayerMenu) { if (this.uiStore.showBurgerMenu || this.uiStore.showPlayerMenu) {
document.querySelector('html').classList.add('is-clipped') document.querySelector('html').classList.add('is-clipped')

View File

@ -3,12 +3,12 @@ import api from '@/api'
const BASE_URL = './api/outputs' const BASE_URL = './api/outputs'
export default { export default {
toggle(id) {
return api.put(`${BASE_URL}/${id}/toggle`)
},
state() { state() {
return api.get(BASE_URL) return api.get(BASE_URL)
}, },
toggle(id) {
return api.put(`${BASE_URL}/${id}/toggle`)
},
update(id, output) { update(id, output) {
return api.put(`${BASE_URL}/${id}`, output) return api.put(`${BASE_URL}/${id}`, output)
} }

View File

@ -23,12 +23,12 @@ export default {
computed: { computed: {
source() { source() {
return { return {
src: this.url || this.uri,
lifecycle: { lifecycle: {
error: (el) => { error: (el) => {
el.src = this.uri el.src = this.uri
} }
} },
src: this.url || this.uri
} }
}, },
uri() { uri() {

View File

@ -50,7 +50,7 @@ export default {
methods: { methods: {
image(item) { image(item) {
if (this.settingsStore.showCoverArtworkInAlbumLists) { if (this.settingsStore.showCoverArtworkInAlbumLists) {
return { url: item.item.artwork_url, caption: item.item.name } return { caption: item.item.name, url: item.item.artwork_url }
} }
return null return null
}, },

View File

@ -44,7 +44,7 @@ export default {
methods: { methods: {
image(item) { image(item) {
if (this.settingsStore.showCoverArtworkInAlbumLists) { if (this.settingsStore.showCoverArtworkInAlbumLists) {
return { url: item.images?.[0]?.url ?? '', caption: item.name } return { caption: item.name, url: item.images?.[0]?.url ?? '' }
} }
return null return null
}, },

View File

@ -54,9 +54,9 @@ export default {
props: { props: {
currentPosition: { required: true, type: Number }, currentPosition: { required: true, type: Number },
editing: Boolean, editing: Boolean,
hideReadItems: Boolean,
item: { required: true, type: Object }, item: { required: true, type: Object },
position: { required: true, type: Number }, position: { required: true, type: Number }
hideReadItems: Boolean
}, },
setup() { setup() {
return { playerStore: usePlayerStore() } return { playerStore: usePlayerStore() }

View File

@ -29,8 +29,8 @@ export default {
components: { ListItem, ModalDialogTrack }, components: { ListItem, ModalDialogTrack },
props: { props: {
expression: { default: '', type: String }, expression: { default: '', type: String },
items: { default: null, type: Object },
icon: { default: null, type: String }, icon: { default: null, type: String },
items: { default: null, type: Object },
load: { default: null, type: Function }, load: { default: null, type: Function },
loaded: { default: true, type: Boolean }, loaded: { default: true, type: Boolean },
showProgress: { default: false, type: Boolean }, showProgress: { default: false, type: Boolean },

View File

@ -50,12 +50,12 @@ export default {
} }
}, },
methods: { methods: {
play() { addNextToQueue() {
this.$emit('close') this.$emit('close')
if (this.item.expression) { if (this.item.expression) {
queue.playExpression(this.item.expression, false) queue.addExpression(this.item.expression, true)
} else { } else {
queue.playUri(this.item.uris || this.item.uri, false) queue.addUri(this.item.uris || this.item.uri, true)
} }
}, },
addToQueue() { addToQueue() {
@ -66,12 +66,12 @@ export default {
queue.addUri(this.item.uris || this.item.uri) queue.addUri(this.item.uris || this.item.uri)
} }
}, },
addNextToQueue() { play() {
this.$emit('close') this.$emit('close')
if (this.item.expression) { if (this.item.expression) {
queue.addExpression(this.item.expression, true) queue.playExpression(this.item.expression, false)
} else { } else {
queue.addUri(this.item.uris || this.item.uri, true) queue.playUri(this.item.uris || this.item.uri, false)
} }
} }
} }

View File

@ -30,8 +30,8 @@ export default {
const MIDDLE_POSITION = Math.floor(VISIBLE_VERSES / 2) const MIDDLE_POSITION = Math.floor(VISIBLE_VERSES / 2)
return { return {
MIDDLE_POSITION, MIDDLE_POSITION,
playerStore: usePlayerStore(), VISIBLE_VERSES,
VISIBLE_VERSES playerStore: usePlayerStore()
} }
}, },
data() { data() {
@ -139,7 +139,7 @@ export default {
const start = currentTime const start = currentTime
const end = start + totalDuration * (text.length / totalLength) const end = start + totalDuration * (text.length / totalLength)
currentTime = end currentTime = end
return { text, start, end } return { end, start, text }
}) })
}) })
return lyrics return lyrics

View File

@ -69,14 +69,14 @@ export default {
computed: { computed: {
heading() { heading() {
return { return {
count: this.$t('data.tracks', { count: this.album.tracks.total }),
handler: this.openArtist,
subtitle: this.album.artists[0].name,
title: this.album.name,
actions: [ actions: [
{ handler: this.play, icon: 'shuffle', key: 'actions.shuffle' }, { handler: this.play, icon: 'shuffle', key: 'actions.shuffle' },
{ handler: this.openDetails, icon: 'dots-horizontal' } { handler: this.openDetails, icon: 'dots-horizontal' }
] ],
count: this.$t('data.tracks', { count: this.album.tracks.total }),
handler: this.openArtist,
subtitle: this.album.artists[0].name,
title: this.album.name
} }
}, },
tracks() { tracks() {

View File

@ -62,8 +62,8 @@ export default {
ContentWithHeading, ContentWithHeading,
ControlDropdown, ControlDropdown,
ControlSwitch, ControlSwitch,
ListIndexButtons,
ListAlbums, ListAlbums,
ListIndexButtons,
ListOptions, ListOptions,
PaneTitle, PaneTitle,
TabsMusic TabsMusic

View File

@ -62,8 +62,8 @@ export default {
ContentWithHeading, ContentWithHeading,
ControlDropdown, ControlDropdown,
ControlSwitch, ControlSwitch,
ListIndexButtons,
ListArtists, ListArtists,
ListIndexButtons,
ListOptions, ListOptions,
PaneTitle, PaneTitle,
TabsMusic TabsMusic

View File

@ -26,8 +26,8 @@ export default {
name: 'PageAudiobookAlbums', name: 'PageAudiobookAlbums',
components: { components: {
ContentWithHeading, ContentWithHeading,
ListIndexButtons,
ListAlbums, ListAlbums,
ListIndexButtons,
PaneTitle, PaneTitle,
TabsAudiobooks TabsAudiobooks
}, },

View File

@ -26,8 +26,8 @@ export default {
name: 'PageAudiobookArtists', name: 'PageAudiobookArtists',
components: { components: {
ContentWithHeading, ContentWithHeading,
ListIndexButtons,
ListArtists, ListArtists,
ListIndexButtons,
PaneTitle, PaneTitle,
TabsAudiobooks TabsAudiobooks
}, },

View File

@ -26,8 +26,8 @@ export default {
name: 'PageAudiobooksGenres', name: 'PageAudiobooksGenres',
components: { components: {
ContentWithHeading, ContentWithHeading,
ListIndexButtons,
ListGenres, ListGenres,
ListIndexButtons,
PaneTitle, PaneTitle,
TabsAudiobooks TabsAudiobooks
}, },

View File

@ -26,8 +26,8 @@ export default {
name: 'PageComposers', name: 'PageComposers',
components: { components: {
ContentWithHeading, ContentWithHeading,
ListIndexButtons,
ListComposers, ListComposers,
ListIndexButtons,
PaneTitle, PaneTitle,
TabsMusic TabsMusic
}, },

View File

@ -42,8 +42,8 @@ export default {
components: { components: {
ContentWithHeading, ContentWithHeading,
ControlButton, ControlButton,
ListIndexButtons,
ListAlbums, ListAlbums,
ListIndexButtons,
ModalDialogGenre, ModalDialogGenre,
PaneTitle PaneTitle
}, },

View File

@ -127,6 +127,9 @@ export default {
} }
}, },
methods: { methods: {
openDetails() {
this.showDetailsModal = true
},
openGenre() { openGenre() {
this.showDetailsModal = false this.showDetailsModal = false
this.$router.push({ this.$router.push({
@ -137,9 +140,6 @@ export default {
}, },
play() { play() {
queue.playExpression(this.expression, true) queue.playExpression(this.expression, true)
},
openDetails() {
this.showDetailsModal = true
} }
} }
} }

View File

@ -26,8 +26,8 @@ export default {
name: 'PageGenres', name: 'PageGenres',
components: { components: {
ContentWithHeading, ContentWithHeading,
ListIndexButtons,
ListGenres, ListGenres,
ListIndexButtons,
PaneTitle, PaneTitle,
TabsMusic TabsMusic
}, },

View File

@ -69,8 +69,8 @@ export default {
components: { components: {
ControlImage, ControlImage,
ControlSlider, ControlSlider,
PaneLyrics, ModalDialogQueueItem,
ModalDialogQueueItem PaneLyrics
}, },
setup() { setup() {
return { return {

View File

@ -80,19 +80,19 @@ export default {
} }
}, },
methods: { methods: {
openDetails() {
this.showDetailsModal = true
},
play() { play() {
queue.playUri(this.album.uri, false) queue.playUri(this.album.uri, false)
}, },
podcastDeleted() {
this.$router.push({ name: 'podcasts' })
},
reloadTracks() { reloadTracks() {
library.podcastEpisodes(this.album.id).then((tracks) => { library.podcastEpisodes(this.album.id).then((tracks) => {
this.tracks = new GroupedList(tracks) this.tracks = new GroupedList(tracks)
}) })
},
openDetails() {
this.showDetailsModal = true
},
podcastDeleted() {
this.$router.push({ name: 'podcasts' })
} }
} }
} }

View File

@ -131,9 +131,9 @@ export default {
return { return {
editing: false, editing: false,
selectedItem: {}, selectedItem: {},
showAddStreamDialog: false,
showDetailsModal: false, showDetailsModal: false,
showSaveModal: false, showSaveModal: false
showAddStreamDialog: false
} }
}, },
computed: { computed: {

View File

@ -72,8 +72,8 @@ export default {
}, },
data() { data() {
return { return {
results: new Map(),
limit: {}, limit: {},
results: new Map(),
types: SEARCH_TYPES types: SEARCH_TYPES
} }
}, },

View File

@ -103,18 +103,18 @@ export default {
} }
}, },
methods: { methods: {
pairRemote() { onOutputPinChange(pin) {
remotes.pair(this.remotePin) this.outputPin = pin
},
pairOutput(identifier) {
outputs.update(identifier, { pin: this.outputPin })
}, },
onRemotePinChange(pin, disabled) { onRemotePinChange(pin, disabled) {
this.remotePin = pin this.remotePin = pin
this.remotePairingDisabled = disabled this.remotePairingDisabled = disabled
}, },
onOutputPinChange(pin) { pairOutput(identifier) {
this.outputPin = pin outputs.update(identifier, { pin: this.outputPin })
},
pairRemote() {
remotes.pair(this.remotePin)
}, },
toggleOutput(identifier) { toggleOutput(identifier) {
outputs.toggle(identifier) outputs.toggle(identifier)

View File

@ -23,6 +23,8 @@ export const useServicesStore = defineStore('ServicesStore', {
} }
}, },
getters: { getters: {
grantedSpotifyScopes: (state) =>
state.spotify.webapi_granted_scope?.split(' ') ?? [],
hasMissingSpotifyScopes: (state) => state.missingSpotifyScopes.length > 0, hasMissingSpotifyScopes: (state) => state.missingSpotifyScopes.length > 0,
isAuthorizationRequired: (state) => isAuthorizationRequired: (state) =>
!state.isSpotifyActive || state.hasMissingSpotifyScopes, !state.isSpotifyActive || state.hasMissingSpotifyScopes,
@ -30,8 +32,6 @@ export const useServicesStore = defineStore('ServicesStore', {
isLastfmEnabled: (state) => state.lastfm.enabled, isLastfmEnabled: (state) => state.lastfm.enabled,
isSpotifyActive: (state) => state.spotify.webapi_token_valid, isSpotifyActive: (state) => state.spotify.webapi_token_valid,
isSpotifyEnabled: (state) => state.spotify.spotify_installed, isSpotifyEnabled: (state) => state.spotify.spotify_installed,
grantedSpotifyScopes: (state) =>
state.spotify.webapi_granted_scope?.split(' ') ?? [],
missingSpotifyScopes(state) { missingSpotifyScopes(state) {
const scopes = new Set(state.grantedSpotifyScopes) const scopes = new Set(state.grantedSpotifyScopes)
return ( return (

View File

@ -10,12 +10,12 @@ export const useUIStore = defineStore('UIStore', {
this.showPlayerMenu = false this.showPlayerMenu = false
this.showBurgerMenu = !this.showBurgerMenu this.showBurgerMenu = !this.showBurgerMenu
}, },
toggleHideReadItems() {
this.hideReadItems = !this.hideReadItems
},
togglePlayerMenu() { togglePlayerMenu() {
this.showBurgerMenu = false this.showBurgerMenu = false
this.showPlayerMenu = !this.showPlayerMenu this.showPlayerMenu = !this.showPlayerMenu
},
toggleHideReadItems() {
this.hideReadItems = !this.hideReadItems
} }
}, },
state: () => ({ state: () => ({