dizquetv/src/api.js

190 lines
6.4 KiB
JavaScript

const express = require('express')
const fs = require('fs')
module.exports = { router: api }
function api(db, xmltvInterval) {
let router = express.Router()
// Plex Servers
router.get('/api/plex-servers', (req, res) => {
let servers = db['plex-servers'].find()
res.send(servers)
})
router.delete('/api/plex-servers', (req, res) => {
db['plex-servers'].remove(req.body, false)
let servers = db['plex-servers'].find()
res.send(servers)
})
router.post('/api/plex-servers', (req, res) => {
db['plex-servers'].save(req.body)
let servers = db['plex-servers'].find()
res.send(servers)
})
// Channels
router.get('/api/channels', (req, res) => {
let channels = db['channels'].find()
channels.sort((a, b) => { return a.number < b.number ? -1 : 1 })
res.send(channels)
})
router.post('/api/channels', (req, res) => {
db['channels'].save(req.body)
let channels = db['channels'].find()
channels.sort((a, b) => { return a.number < b.number ? -1 : 1 })
res.send(channels)
updateXmltv()
})
router.put('/api/channels', (req, res) => {
db['channels'].update({ _id: req.body._id }, req.body)
let channels = db['channels'].find()
channels.sort((a, b) => { return a.number < b.number ? -1 : 1 })
res.send(channels)
updateXmltv()
})
router.delete('/api/channels', (req, res) => {
db['channels'].remove({ _id: req.body._id }, false)
let channels = db['channels'].find()
channels.sort((a, b) => { return a.number < b.number ? -1 : 1 })
res.send(channels)
updateXmltv()
})
// FFMPEG SETTINGS
router.get('/api/ffmpeg-settings', (req, res) => {
let ffmpeg = db['ffmpeg-settings'].find()[0]
res.send(ffmpeg)
})
router.put('/api/ffmpeg-settings', (req, res) => {
db['ffmpeg-settings'].update({ _id: req.body._id }, req.body)
let ffmpeg = db['ffmpeg-settings'].find()[0]
res.send(ffmpeg)
})
router.post('/api/ffmpeg-settings', (req, res) => { // RESET
db['ffmpeg-settings'].update({ _id: req.body._id }, {
ffmpegPath: req.body.ffmpegPath,
enableChannelOverlay: false,
threads: 4,
videoEncoder: 'mpeg2video',
videoResolutionHeight: 'unchanged',
videoBitrate: 10000,
videoBufSize: 2000,
concatMuxDelay: '0',
logFfmpeg: true
})
let ffmpeg = db['ffmpeg-settings'].find()[0]
res.send(ffmpeg)
})
// PLEX SETTINGS
router.get('/api/plex-settings', (req, res) => {
let plex = db['plex-settings'].find()[0]
res.send(plex)
})
router.put('/api/plex-settings', (req, res) => {
db['plex-settings'].update({ _id: req.body._id }, req.body)
let plex = db['plex-settings'].find()[0]
res.send(plex)
})
router.post('/api/plex-settings', (req, res) => { // RESET
db['plex-settings'].update({ _id: req.body._id }, {
directStreamBitrate: '40000',
transcodeBitrate: '3000',
mediaBufferSize: 1000,
transcodeMediaBufferSize: 20000,
maxPlayableResolution: "1920x1080",
maxTranscodeResolution: "1920x1080",
videoCodecs: 'h264,hevc,mpeg2video',
audioCodecs: 'ac3,aac,mp3',
maxAudioChannels: '6',
audioBoost: '100',
enableSubtitles: false,
subtitleSize: '100',
updatePlayStatus: false,
streamProtocol: 'http'
})
let plex = db['plex-settings'].find()[0]
res.send(plex)
})
router.get('/api/xmltv-last-refresh', (req, res) => {
res.send(JSON.stringify({ value: xmltvInterval.lastUpdated.valueOf() }))
})
// XMLTV SETTINGS
router.get('/api/xmltv-settings', (req, res) => {
let xmltv = db['xmltv-settings'].find()[0]
res.send(xmltv)
})
router.put('/api/xmltv-settings', (req, res) => {
db['xmltv-settings'].update({ _id: req.body._id }, req.body)
let xmltv = db['xmltv-settings'].find()[0]
res.send(xmltv)
updateXmltv()
})
router.post('/api/xmltv-settings', (req, res) => {
db['xmltv-settings'].update({ _id: req.body._id }, {
_id: req.body._id,
cache: 12,
refresh: 4,
file: process.env.DATABASE + '/xmltv.xml'
})
var xmltv = db['xmltv-settings'].find()[0]
res.send(xmltv)
updateXmltv()
})
//HDHR SETTINGS
router.get('/api/hdhr-settings', (req, res) => {
let hdhr = db['hdhr-settings'].find()[0]
res.send(hdhr)
})
router.put('/api/hdhr-settings', (req, res) => {
db['hdhr-settings'].update({ _id: req.body._id }, req.body)
let hdhr = db['hdhr-settings'].find()[0]
res.send(hdhr)
})
router.post('/api/hdhr-settings', (req, res) => {
db['hdhr-settings'].update({ _id: req.body._id }, {
_id: req.body._id,
tunerCount: 1,
autoDiscovery: true,
})
var hdhr = db['hdhr-settings'].find()[0]
res.send(hdhr)
})
// XMLTV.XML Download
router.get('/api/xmltv.xml', (req, res) => {
res.type('text')
let xmltvSettings = db['xmltv-settings'].find()[0]
res.send(fs.readFileSync(xmltvSettings.file))
})
// CHANNELS.M3U Download
router.get('/api/channels.m3u', (req, res) => {
res.type('text')
let channels = db['channels'].find()
var data = "#EXTM3U\n"
for (var i = 0; i < channels.length; i++) {
data += `#EXTINF:0 tvg-id="${channels[i].number}" tvg-name="${channels[i].name}" tvg-logo="${channels[i].icon}" group-title="PseudoTV",${channels[i].name}\n`
data += `${req.protocol}://${req.get('host')}/video?channel=${channels[i].number}\n`
}
if (channels.length === 0) {
data += `#EXTINF:0 tvg-id="1" tvg-name="PseudoTV" tvg-logo="https://raw.githubusercontent.com/DEFENDORe/pseudotv/master/resources/pseudotv.png" group-title="PseudoTV",PseudoTV\n`
data += `${req.protocol}://${req.get('host')}/setup\n`
}
res.send(data)
})
function updateXmltv() {
xmltvInterval.updateXML()
xmltvInterval.restartInterval()
}
return router
}