kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
61 wiersze
1.6 KiB
TypeScript
61 wiersze
1.6 KiB
TypeScript
import type { ListenWS } from '~/composables/useWebSocketHandler'
|
|
import type { CurrentRadio } from '~/store/radios'
|
|
import type { Track } from '~/types'
|
|
|
|
import { useQueue } from '~/composables/audio/queue'
|
|
|
|
import axios from 'axios'
|
|
|
|
import useLogger from '~/composables/useLogger'
|
|
|
|
const logger = useLogger()
|
|
|
|
export const CLIENT_RADIOS = {
|
|
// some radios are client side only, so we have to implement the populateQueue
|
|
// method by hand
|
|
account: {
|
|
offset: 1,
|
|
async fetchNextTrack (current: CurrentRadio) {
|
|
const params = {
|
|
scope: `actor:${current.objectId?.fullUsername}`,
|
|
ordering: '-creation_date',
|
|
page_size: 1,
|
|
page: this.offset
|
|
}
|
|
|
|
// NOTE: This is unhandled as we want to pass the exception further down
|
|
const response = await axios.get('history/listenings', { params })
|
|
|
|
const latest = response.data.results[0]
|
|
if (!latest) {
|
|
logger.error('No more tracks')
|
|
return undefined
|
|
}
|
|
|
|
this.offset += 1
|
|
return latest.track as Track
|
|
},
|
|
|
|
stop () {
|
|
this.offset = 1
|
|
},
|
|
|
|
async handleListen (current: CurrentRadio, event: ListenWS) {
|
|
// TODO: handle actors from other pods
|
|
if (event.actor.local_id === current.objectId?.username) {
|
|
try {
|
|
const response = await axios.get(`tracks/${event.object.local_id}`)
|
|
|
|
if (response.data.uploads.length > 0) {
|
|
const { enqueue } = useQueue()
|
|
await enqueue(response.data as Track)
|
|
this.offset += 1
|
|
}
|
|
} catch (error) {
|
|
logger.error('Cannot retrieve track info', error)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|