audiobookshelf/server/managers/DLNAManager.js

83 lines
2.3 KiB
JavaScript

const { clientEmitter } = require('../SocketAuthority')
const DLNADevice = require('../objects/DLNADevice')
const DLNASession = require('../objects/DLNASession')
const SSDPclient = require('node-ssdp').Client
const Auth = require('../Auth')
class DLNAManager {
constructor(auth) {
this.playback_sessions = []
this.devices = []
this.ssdpclient = new SSDPclient()
this.ssdpclient.on('response', this.add_device.bind(this))
setInterval(this.update_sessions.bind(this), 500)
this.ssdpclient.search('urn:schemas-upnp-org:service:AVTransport:1')
this.auth = auth
}
add_device(header) {
if (
!this.devices ||
!this.devices.find((dev) => {
return dev.url == header.LOCATION
})
) {
this.devices.push(new DLNADevice(header.LOCATION))
}
}
start_playback(id, player, audiobook, start_time, serverAddress) {
this.playback_sessions = this.playback_sessions.filter((item) => !(item.socket_id == id))
this.playback_sessions.push(
new DLNASession(
id,
this.devices.find((pl) => {
return pl.UDN == player
}),
audiobook,
start_time,
serverAddress
)
)
}
exit_session(id) {
//Stop playback when player is closed
for (let item of this.playback_sessions) {
if (item.socket_id == id) {
item.player.pause()
}
}
this.playback_sessions = this.playback_sessions.filter((item) => !(item.socket_id == id))
console.log('sessions:', this.playback_sessions)
}
update_sessions() {
for (let pb_session of this.playback_sessions) {
pb_session.update()
}
}
pause_session(id) {
var session = this.playback_sessions.find((item) => item.socket_id == id)
if (session) {
session.player.pause()
}
}
continue_session(id) {
var session = this.playback_sessions.find((item) => item.socket_id == id)
if (session) {
session.player.play()
}
}
seek(id, time) {
var session = this.playback_sessions.find((item) => item.socket_id == id)
if (session) {
session.load(time)
}
}
setVolume(id, volume) {
console.log('SetVolume', volume)
var session = this.playback_sessions.find((item) => item.socket_id == id)
if (!session) {
return
}
session.player.setVolume(volume * 100)
}
}
module.exports = DLNAManager