diff --git a/app.js b/app.js
index 6efb719..e4ef502 100644
--- a/app.js
+++ b/app.js
@@ -449,7 +449,7 @@ app.get('/api/channel/:name', async (req, res) => {
let db = await dbPromise
let data = await db.get('SELECT user_uuid,name,live_at,last_stream FROM channels WHERE name=?', name)
if (!data) return res.jsonp({ error: 'No such channel!' })
- let links = await db.all('SELECT * FROM link WHERE uuid = ?', data.user_uuid)
+ let links = await db.all('SELECT name,url FROM link WHERE uuid = ?', data.user_uuid)
delete data.user_uuid
data.live = data.live_at != null
@@ -457,11 +457,7 @@ app.get('/api/channel/:name', async (req, res) => {
data.last_stream = new Date(parseInt(data.last_stream))
data.links = links || []
data.viewers = Object.keys(cache.viewers[name] || {}).length
-
- for (let i in data.links) {
- delete data.links[i].id
- delete data.links[i].uuid
- }
+ data.source = streamServer + name + '.m3u8'
res.jsonp(data)
})
@@ -476,36 +472,42 @@ app.use((error, req, res, next) => {
wss.on('connection', (ws, request, client) => {
const userId = request.session.login || request.session.id
const username = request.session.username
+ let myChannels = []
- dev && console.log(username || userId,'connected')
+ dev && console.log(userId, 'connected')
ws.on('message', (msg) => {
- dev && console.log(userId,'said',msg)
- if (msg.indexOf('watch ') === 0) {
- let chan = msg.substring(6)
- dev && console.log('adding a watcher to channel',chan)
- if (cache.live.indexOf(chan) !== -1) {
- if (!cache.viewers[chan]) cache.viewers[chan] = {}
- cache.viewers[chan][userId] = username || 'A Friendly Guest'
- }
- } else if (msg.indexOf('stop ') === 0) {
- let chan = msg.substring(5)
- dev && console.log('removing a watcher from channel',chan)
- if (cache.live.indexOf(chan) !== -1) {
- if (cache.viewers[chan] && cache.viewers[chan][userId]) delete cache.viewers[chan][userId]
- }
- } else if (msg.indexOf('viewers ') === 0) {
- let chan = msg.substring(8)
- if (cache.viewers[chan] != null) ws.send('viewlist ' + Object.values(cache.viewers[chan]).join(','))
+ dev && console.log(userId, 'said', msg)
+ let is = msg.toString().trim().split(' ')
+ let chan = is[1]
+ if (!chan) return
+ switch (is[0]) {
+ case 'watch':
+ dev && console.log('adding watcher', userId, 'to channel', chan)
+ if (cache.live.indexOf(chan) !== -1) {
+ if (!cache.viewers[chan]) cache.viewers[chan] = {}
+ cache.viewers[chan][userId] = username || 'A Friendly Guest'
+ if (myChannels.indexOf(chan) === -1) myChannels.push(chan)
+ }
+ break
+ case 'stop':
+ dev && console.log('removing watcher', userId, 'from channel', chan)
+ if (cache.live.indexOf(chan) !== -1) {
+ if (cache.viewers[chan] && cache.viewers[chan][userId]) delete cache.viewers[chan][userId]
+ if (myChannels.indexOf(chan) !== -1) myChannels.splice(myChannels.indexOf(chan), 1)
+ }
+ break
+ case 'viewers':
+ if (cache.viewers[chan] != null) ws.send('viewlist ' + Object.values(cache.viewers[chan]).join(','))
+ break
}
})
ws.on('close', () => {
- dev && console.log(userId,'disconnected')
- for (let chan in cache.viewers) {
+ dev && console.log(userId, 'disconnected')
+ for (let i in myChannels) {
+ let chan = myChannels[i]
let viewers = cache.viewers[chan]
- if (viewers[userId]) {
- delete cache.viewers[chan][userId]
- }
+ if (viewers && viewers[userId]) delete cache.viewers[chan][userId]
}
})
diff --git a/src/player.js b/src/player.js
index 146a48b..34cdc48 100644
--- a/src/player.js
+++ b/src/player.js
@@ -129,18 +129,13 @@ function liveStatus (status) {
lstat.className = 'badge live'
clearTimeout(retryTimeout)
- if (vid.paused) {
- showBigBtn(true)
- }
-
- handleWebSocket(true)
+ if (vid.paused) showBigBtn(true)
} else {
lstat.innerHTML = 'offline'
lstat.className = 'badge live offline'
viewers.style.display = 'none'
-
- handleWebSocket(false)
}
+ handleWebSocket()
}
function hide () {
@@ -174,17 +169,11 @@ function toggleStream () {
if (!vid) return
if (!vidReady) return
if (vid.paused) {
- if (ws) ws.send('watch ' + STREAM_NAME)
hls.startLoad(-1)
vid.play()
- btn.innerHTML = ''
- showBigBtn(false)
} else {
- if (ws) ws.send('stop ' + STREAM_NAME)
hls.stopLoad()
vid.pause()
- btn.innerHTML = ''
- showBigBtn(true)
}
}
@@ -238,6 +227,18 @@ function toggleFullscreen () {
}
}
+function handlePlay () {
+ if (ws) ws.send('watch ' + STREAM_NAME)
+ btn.innerHTML = ''
+ showBigBtn(false)
+}
+
+function handlePause () {
+ if (ws) ws.send('stop ' + STREAM_NAME)
+ btn.innerHTML = ''
+ showBigBtn(true)
+}
+
window.addEventListener('onblur', () => {
shouldHide = true
}, false)
@@ -446,5 +447,7 @@ window.addEventListener('resize', function () {
})
vid.addEventListener('timeupdate', updateTime, false)
+vid.addEventListener('play', handlePlay, false)
+vid.addEventListener('pause', handlePause, false)
getStreamStatus()