forked from Kispi/Core
feat(webapp): inital mopidy testing
This commit is contained in:
parent
cc043acad5
commit
8dbf99050b
4 changed files with 94 additions and 1 deletions
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
|
@ -9,6 +9,8 @@
|
||||||
"Gitea",
|
"Gitea",
|
||||||
"heroicons",
|
"heroicons",
|
||||||
"kispi",
|
"kispi",
|
||||||
|
"mopidy",
|
||||||
|
"Mopidy",
|
||||||
"pnpm",
|
"pnpm",
|
||||||
"tailwindcss",
|
"tailwindcss",
|
||||||
"vite",
|
"vite",
|
||||||
|
|
|
@ -12,6 +12,8 @@
|
||||||
"@heroicons/vue": "^1.0.6",
|
"@heroicons/vue": "^1.0.6",
|
||||||
"@vueuse/core": "^8.9.2",
|
"@vueuse/core": "^8.9.2",
|
||||||
"daisyui": "^2.19.0",
|
"daisyui": "^2.19.0",
|
||||||
|
"events": "^3.3.0",
|
||||||
|
"mopidy": "^1.3.0",
|
||||||
"vue": "^3.2.37",
|
"vue": "^3.2.37",
|
||||||
"vue-router": "4"
|
"vue-router": "4"
|
||||||
},
|
},
|
||||||
|
|
|
@ -12,6 +12,8 @@ specifiers:
|
||||||
eslint: ^8.19.0
|
eslint: ^8.19.0
|
||||||
eslint-plugin-vue: ^9.2.0
|
eslint-plugin-vue: ^9.2.0
|
||||||
eslint-plugin-vue-scoped-css: ^2.2.0
|
eslint-plugin-vue-scoped-css: ^2.2.0
|
||||||
|
events: ^3.3.0
|
||||||
|
mopidy: ^1.3.0
|
||||||
postcss: ^8.4.14
|
postcss: ^8.4.14
|
||||||
sass: ^1.53.0
|
sass: ^1.53.0
|
||||||
tailwindcss: ^3.1.6
|
tailwindcss: ^3.1.6
|
||||||
|
@ -26,6 +28,8 @@ dependencies:
|
||||||
'@heroicons/vue': 1.0.6_vue@3.2.37
|
'@heroicons/vue': 1.0.6_vue@3.2.37
|
||||||
'@vueuse/core': 8.9.2_vue@3.2.37
|
'@vueuse/core': 8.9.2_vue@3.2.37
|
||||||
daisyui: 2.19.0_ugi4xkrfysqkt4c4y6hkyfj344
|
daisyui: 2.19.0_ugi4xkrfysqkt4c4y6hkyfj344
|
||||||
|
events: 3.3.0
|
||||||
|
mopidy: 1.3.0
|
||||||
vue: 3.2.37
|
vue: 3.2.37
|
||||||
vue-router: 4.1.2_vue@3.2.37
|
vue-router: 4.1.2_vue@3.2.37
|
||||||
|
|
||||||
|
@ -1103,6 +1107,11 @@ packages:
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/events/3.3.0:
|
||||||
|
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
|
||||||
|
engines: {node: '>=0.8.x'}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/fast-deep-equal/3.1.3:
|
/fast-deep-equal/3.1.3:
|
||||||
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
|
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
|
||||||
dev: true
|
dev: true
|
||||||
|
@ -1303,6 +1312,14 @@ packages:
|
||||||
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
|
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/isomorphic-ws/4.0.1_ws@7.5.8:
|
||||||
|
resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==}
|
||||||
|
peerDependencies:
|
||||||
|
ws: '*'
|
||||||
|
dependencies:
|
||||||
|
ws: 7.5.8
|
||||||
|
dev: false
|
||||||
|
|
||||||
/js-yaml/4.1.0:
|
/js-yaml/4.1.0:
|
||||||
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
|
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
@ -1388,6 +1405,17 @@ packages:
|
||||||
hasBin: true
|
hasBin: true
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/mopidy/1.3.0:
|
||||||
|
resolution: {integrity: sha512-wBk5XKXpZY5tMedeWtiS8mZlwOu5RZYibNe5TW85dQMovN4ZW0gl6SPNAwfqiwQ9YiCDOQwwEQ6CnPNPab6QYA==}
|
||||||
|
engines: {node: '>= 10'}
|
||||||
|
dependencies:
|
||||||
|
isomorphic-ws: 4.0.1_ws@7.5.8
|
||||||
|
ws: 7.5.8
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- bufferutil
|
||||||
|
- utf-8-validate
|
||||||
|
dev: false
|
||||||
|
|
||||||
/ms/2.0.0:
|
/ms/2.0.0:
|
||||||
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
|
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
|
||||||
dev: true
|
dev: true
|
||||||
|
@ -1963,6 +1991,19 @@ packages:
|
||||||
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/ws/7.5.8:
|
||||||
|
resolution: {integrity: sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==}
|
||||||
|
engines: {node: '>=8.3.0'}
|
||||||
|
peerDependencies:
|
||||||
|
bufferutil: ^4.0.1
|
||||||
|
utf-8-validate: ^5.0.2
|
||||||
|
peerDependenciesMeta:
|
||||||
|
bufferutil:
|
||||||
|
optional: true
|
||||||
|
utf-8-validate:
|
||||||
|
optional: true
|
||||||
|
dev: false
|
||||||
|
|
||||||
/xml-name-validator/4.0.0:
|
/xml-name-validator/4.0.0:
|
||||||
resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
|
resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
|
|
@ -1,8 +1,56 @@
|
||||||
<template>
|
<template>
|
||||||
#Radio
|
<button @click="getTrack()">GetTrack</button>
|
||||||
|
<button @click="setPlayPause()">Play/Pause</button>
|
||||||
|
<div>Currently Playing: {{ `${artist} - ${track}` }}</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
import Mopidy from 'mopidy';
|
||||||
|
import { onBeforeUnmount, ref } from 'vue';
|
||||||
|
|
||||||
|
const artist = ref('');
|
||||||
|
const track = ref('');
|
||||||
|
|
||||||
|
const mopidy = new Mopidy({
|
||||||
|
webSocketUrl: 'ws://localhost:6680/mopidy/ws/',
|
||||||
|
});
|
||||||
|
|
||||||
|
mopidy.on('state', console.log);
|
||||||
|
mopidy.on('event', console.log);
|
||||||
|
|
||||||
|
mopidy.on('state:online', () => {
|
||||||
|
getTrack();
|
||||||
|
});
|
||||||
|
|
||||||
|
mopidy.on('event:trackPlaybackStarted', (event) => {
|
||||||
|
track.value = event.tl_track.track.name;
|
||||||
|
artist.value = event.tl_track.track.artists.map((artist) => artist.name).join(', ');
|
||||||
|
});
|
||||||
|
|
||||||
|
async function getTrack() {
|
||||||
|
if(mopidy.playback) {
|
||||||
|
const currentTrack = await mopidy.playback.getCurrentTrack();
|
||||||
|
console.log(await mopidy.playback.getTimePosition());
|
||||||
|
if(currentTrack) {
|
||||||
|
track.value = currentTrack.name;
|
||||||
|
artist.value = currentTrack.artists.map((artist) => artist.name).join(', ');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function setPlayPause() {
|
||||||
|
const currentState = await mopidy.playback?.getState();
|
||||||
|
if(currentState === 'playing') {
|
||||||
|
await mopidy.playback?.pause();
|
||||||
|
} else {
|
||||||
|
await mopidy.playback?.resume();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onBeforeUnmount(() => {
|
||||||
|
mopidy.close();
|
||||||
|
mopidy.off();
|
||||||
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue