diff --git a/public/index.css b/public/index.css
index 49a1ec7..59b7660 100644
--- a/public/index.css
+++ b/public/index.css
@@ -181,11 +181,24 @@ tr:nth-child(even) {
display: flex;
flex-direction: row;
min-height: fit-content;
+ position: relative;
}
.inline-flex input {
flex-grow: 1;
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 {
padding: 10px;
background-color: #007d32;
diff --git a/public/index.html b/public/index.html
index 5648b73..a65c8aa 100644
--- a/public/index.html
+++ b/public/index.html
@@ -17,6 +17,7 @@
+ x
diff --git a/public/index.js b/public/index.js
index dc13a19..a119a57 100644
--- a/public/index.js
+++ b/public/index.js
@@ -1,6 +1,7 @@
(function () {
var table = document.getElementById('ttable')
var input = document.getElementById('search')
+ var clear = document.getElementById('search-clear')
var audio = document.getElementById('player')
var playing = document.getElementById('playing')
@@ -307,6 +308,7 @@
searching = false
pagePrev = 0
pages = pagesPrev
+ clear.style.display = 'none'
}
if (page > pages) return
@@ -330,6 +332,7 @@
pagePrev = pageNum
pagesPrev = pages
searching = true
+ clear.style.display = 'block'
}
httpGet('/api/tracks/search?q=' + query + '&page=' + page).then(function (data) {
@@ -401,6 +404,11 @@
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-prev').addEventListener('click', function (e) {
diff --git a/src/server.js b/src/server.js
index 911e632..8b64d4f 100644
--- a/src/server.js
+++ b/src/server.js
@@ -2,7 +2,6 @@ import path from 'path'
import sqlite from 'sqlite'
import Promise from 'bluebird'
import express from 'express'
-import sockets from './server/sockets'
require('express-async-errors')
@@ -18,9 +17,6 @@ const port = process.env.PORT || 3000
const router = express.Router()
-const http = require('http').Server(app)
-const io = require('socket.io')(http)
-
router.get('/tracks', async (req, res) => {
let page = parseInt(req.query.page) || 1
if (isNaN(page)) {
@@ -156,7 +152,8 @@ app.use('/api', router)
app.use('/file/track', express.static(path.resolve(values.directory)))
app.use('/', express.static(path.join(process.cwd(), 'public')))
-http.listen(port, '127.0.0.1', function () {
- sockets.start(io)
+const host = process.env.NODE_ENV === 'development' ? '0.0.0.0' : '127.0.0.1'
+
+app.listen(port, host, function () {
console.log(`app running on port ${port}`)
})
diff --git a/src/server/sockets.js b/src/server/sockets.js
deleted file mode 100644
index 2ca1ec1..0000000
--- a/src/server/sockets.js
+++ /dev/null
@@ -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 }