search clear, revert socketio bs

This commit is contained in:
Evert Prants 2019-01-15 16:21:33 +02:00
parent 79a7177714
commit 69b65fb8ec
Signed by: evert
GPG Key ID: 1688DA83D222D0B5
5 changed files with 25 additions and 147 deletions

View File

@ -181,11 +181,24 @@ tr:nth-child(even) {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
min-height: fit-content; min-height: fit-content;
position: relative;
} }
.inline-flex input { .inline-flex input {
flex-grow: 1; flex-grow: 1;
min-width: 0; min-width: 0;
} }
#search-clear {
display: none;
}
.btn-clear {
cursor: pointer;
position: absolute;
right: 10px;
top: 12px;
font-size: 2em;
opacity: 0.5;
padding: 0 10px;
}
.queue-tag { .queue-tag {
padding: 10px; padding: 10px;
background-color: #007d32; background-color: #007d32;

View File

@ -17,6 +17,7 @@
</div> </div>
</div> </div>
<input type="text" id="search" placeholder="Search" class="flex-row"> <input type="text" id="search" placeholder="Search" class="flex-row">
<span class="btn-clear" id="search-clear">x</span>
</div> </div>
<div class="table-container flex-row"> <div class="table-container flex-row">
<table width="100%"> <table width="100%">

View File

@ -1,6 +1,7 @@
(function () { (function () {
var table = document.getElementById('ttable') var table = document.getElementById('ttable')
var input = document.getElementById('search') var input = document.getElementById('search')
var clear = document.getElementById('search-clear')
var audio = document.getElementById('player') var audio = document.getElementById('player')
var playing = document.getElementById('playing') var playing = document.getElementById('playing')
@ -307,6 +308,7 @@
searching = false searching = false
pagePrev = 0 pagePrev = 0
pages = pagesPrev pages = pagesPrev
clear.style.display = 'none'
} }
if (page > pages) return if (page > pages) return
@ -330,6 +332,7 @@
pagePrev = pageNum pagePrev = pageNum
pagesPrev = pages pagesPrev = pages
searching = true searching = true
clear.style.display = 'block'
} }
httpGet('/api/tracks/search?q=' + query + '&page=' + page).then(function (data) { httpGet('/api/tracks/search?q=' + query + '&page=' + page).then(function (data) {
@ -401,6 +404,11 @@
audio.addEventListener('ended', playNext, false) audio.addEventListener('ended', playNext, false)
clear.addEventListener('click', function () {
input.value = ''
showTracks(pagePrev !== 0 ? pagePrev : 1)
})
document.getElementById('player-next').addEventListener('click', playNext, false) document.getElementById('player-next').addEventListener('click', playNext, false)
document.getElementById('player-prev').addEventListener('click', function (e) { document.getElementById('player-prev').addEventListener('click', function (e) {

View File

@ -2,7 +2,6 @@ import path from 'path'
import sqlite from 'sqlite' import sqlite from 'sqlite'
import Promise from 'bluebird' import Promise from 'bluebird'
import express from 'express' import express from 'express'
import sockets from './server/sockets'
require('express-async-errors') require('express-async-errors')
@ -18,9 +17,6 @@ const port = process.env.PORT || 3000
const router = express.Router() const router = express.Router()
const http = require('http').Server(app)
const io = require('socket.io')(http)
router.get('/tracks', async (req, res) => { router.get('/tracks', async (req, res) => {
let page = parseInt(req.query.page) || 1 let page = parseInt(req.query.page) || 1
if (isNaN(page)) { if (isNaN(page)) {
@ -156,7 +152,8 @@ app.use('/api', router)
app.use('/file/track', express.static(path.resolve(values.directory))) app.use('/file/track', express.static(path.resolve(values.directory)))
app.use('/', express.static(path.join(process.cwd(), 'public'))) app.use('/', express.static(path.join(process.cwd(), 'public')))
http.listen(port, '127.0.0.1', function () { const host = process.env.NODE_ENV === 'development' ? '0.0.0.0' : '127.0.0.1'
sockets.start(io)
app.listen(port, host, function () {
console.log(`app running on port ${port}`) console.log(`app running on port ${port}`)
}) })

View File

@ -1,141 +0,0 @@
let data = {
clients: {},
// Key: Controller
// Value: Controlee
// Music is played on Value's device.
control: {}
}
function getSocketByDevice (devid) {
for (let id in data.clients) {
let sock = data.clients[i]
if (sock.device && sock.device === devid) {
return sock
}
}
return null
}
function getControlling (sockid) {
for (let id in data.control) {
let cl = data.control[id]
if (cl === sockid) return id
}
return null
}
function start (io) {
io.on('connection', function (socket) {
let sockid = socket.id
socket.on('auth', function (device) {
if (getSocketByDevice(device) != null) {
return socket.emit('cerr', {error: 'devexists', code: 0})
}
socket.device = device
data.clients[sockid] = socket
})
socket.on('req:devs', function () {
let devices = []
for (let i in data.clients) {
let cl = data.clients[i]
if (cl.device === socket.device) continue
devices.push(devices)
}
socket.emit('res:devs', devices)
})
// Controller wants to take control of Controlee
socket.on('ctrl:connect', function (ctrlee) {
let dev = getSocketByDevice(ctrlee)
if (!dev) return socket.emit('cerr', {error: 'devnull', code: 1})
// Device is already controlling/being controlled
if (data.control[sockid] || getControlling(dev.id)) return socket.emit('cerr', {error: 'devctrl', code: 2})
dev.emit('ctrl:connect', { device: socket.device })
socket.emit('targ:success', { device: ctrlee })
})
// Disconnect
socket.on('ctrl:disconnect', function (ctrlee) {
let id, ctrl
if (getControlling(sockid)) {
// If this is a controlee, disconnect from controller
id = getControlling(sockid)
ctrl = data.clients[id]
delete data.control[id]
} else if (data.control[sockid]) {
// If this is a controller, disconnect from controlee
id = data.control[sockid]
ctrl = data.clients[id]
delete data.control[sockid]
}
if (!ctrl) return
ctrl.emit('targ:disconnect', {})
})
let directpass = ['track', 'pause', 'seek', 'volume', 'mute', 'queue', 'req:queue', 'res:queue']
for (let i in directpass) {
let syn = 'sync:' + directpass[i]
// Set pause/play state
// Sent from controlee to controller
socket.on(syn, function (data) {
let ctrl
if (getControlling(sockid)) {
// If this is a controlee, send to controller
ctrl = data.clients[getControlling(sockid)]
} else if (data.control[sockid]) {
// If this is a controller, send to controlee
ctrl = data.clients[data.control[sockid]]
}
ctrl && ctrl.emit('set:' + directpass[i], data)
})
}
// Synchronize timestamp
socket.on('sync:time', function (data) {
if (!getControlling(sockid)) return
let ctrl = data.clients[getControlling(sockid)]
ctrl && ctrl.emit('sync:time', data)
})
socket.on('disconnect', function () {
if (data.clients[sockid]) {
let dev = data.clients[sockid]
// Controller loses connection
// Emit to controlee
if (data.control[sockid]) {
let clt = data.clients[sockid]
clt && clt.emit('ctrl:disconnect', {})
// Controlee loses connection
// Emit to controller
} else if (getControlling(sockid)) {
let clt = data.clients[getControlling(sockid)]
clt && clt.emit('targ:disconnect', {})
}
delete data.clients[sockid]
}
})
})
}
module.exports = { start }