Initial commit
This commit is contained in:
46
plugins/player0.ts
Normal file
46
plugins/player0.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import { useAudioStore } from '~/stores/audio'
|
||||
import { useUserStore } from '~/stores/user'
|
||||
import { getSoundscapeByTitle } from '~/tracks.config'
|
||||
|
||||
const { waitForCanPlay } = useAudioReplacer()
|
||||
|
||||
/** Dieses Plugin deckt die Applikationslogik für den Player ab, dadurch soll verhindert werden, dass Logik in Componenten verbaut ist,
|
||||
* die durch die mount und unmount Mechanismen durcheinander kommen, würden. Das Plugin arbeitet eng mit dem audio-Store zusammen.
|
||||
*
|
||||
* Die benötigten Funktionen für die Navigationbar sowie das PlayerControls-Composable sind changeTrack zum Wechseln des Soundscapes
|
||||
* inklusive der Interaktion mit dem Backend.
|
||||
*
|
||||
**/
|
||||
|
||||
export default defineNuxtPlugin(() => {
|
||||
const audioStore = useAudioStore()
|
||||
const { $axios } = useNuxtApp() as any
|
||||
|
||||
// Initialize audio context on first user interaction
|
||||
const initAudioOnInteraction = () => {
|
||||
audioStore.initializeAudioContext()
|
||||
document.removeEventListener('click', initAudioOnInteraction)
|
||||
}
|
||||
|
||||
// Method to handle track changes
|
||||
/**
|
||||
* Change to the given track name. This function should be called when audio is stopped already.
|
||||
* @param title
|
||||
*/
|
||||
const changeTrack = async (title:string) => {
|
||||
const src = getSoundscapeByTitle(title)
|
||||
const currentAudio = document.getElementById(title) as HTMLAudioElement
|
||||
if(currentAudio) {
|
||||
await waitForCanPlay(currentAudio)
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
// Expose methods to components
|
||||
return {
|
||||
provide: {
|
||||
changeTrack
|
||||
}
|
||||
}
|
||||
})
|
Reference in New Issue
Block a user