« get me outta code hell

basic command relay across socket clients - mtui - Music Text User Interface - user-friendly command line music player
about summary refs log tree commit diff
path: root/backend.js
diff options
context:
space:
mode:
authorFlorrie <towerofnix@gmail.com>2020-07-10 20:52:13 -0300
committerFlorrie <towerofnix@gmail.com>2020-07-10 20:52:13 -0300
commitd00b26b23d9b3fc1e54a4d117366f0f22e664135 (patch)
tree7bc214a0ca10eec5ea6ae5d641481409aa00cc6d /backend.js
parent503a37ba4d7550f9c2ed1602e589a0142a20d10d (diff)
basic command relay across socket clients
Diffstat (limited to 'backend.js')
-rw-r--r--backend.js47
1 files changed, 45 insertions, 2 deletions
diff --git a/backend.js b/backend.js
index d2d0138..f3d8cfd 100644
--- a/backend.js
+++ b/backend.js
@@ -8,6 +8,7 @@ const { getMetadataReaderFor } = require('./metadata-readers')
 const { getPlayer } = require('./players')
 const RecordStore = require('./record-store')
 const os = require('os')
+const shortid = require('shortid')
 
 const {
   getTimeStringsFromSec,
@@ -62,6 +63,8 @@ class QueuePlayer extends EventEmitter {
   }) {
     super()
 
+    this.id = shortid.generate()
+
     this.player = null
     this.playingTrack = null
     this.queueGrouplike = {name: 'Queue', isTheQueue: true, items: []}
@@ -69,6 +72,7 @@ class QueuePlayer extends EventEmitter {
 
     this.playedTrackToEnd = false
     this.timeData = null
+    this.time = null
 
     this.getPlayer = getPlayer
     this.getRecordFor = getRecordFor
@@ -86,6 +90,7 @@ class QueuePlayer extends EventEmitter {
     this.player.on('printStatusLine', data => {
       if (this.playingTrack) {
         this.timeData = data
+        this.time = data.curSecTotal
         this.emit('received time data', data, this)
       }
     })
@@ -414,6 +419,7 @@ class QueuePlayer extends EventEmitter {
       }
 
       this.timeData = null
+      this.time = null
       this.playingTrack = item
       this.emit('playing', this.playingTrack, oldTrack, this)
 
@@ -504,6 +510,7 @@ class QueuePlayer extends EventEmitter {
       const oldTrack = this.playingTrack
       this.playingTrack = null
       this.timeData = null
+      this.time = null
       this.emit('playing', null, oldTrack, this)
     }
   }
@@ -513,51 +520,69 @@ class QueuePlayer extends EventEmitter {
   }
 
   seekAhead(seconds) {
+    this.time += seconds
     this.player.seekAhead(seconds)
+    this.emit('seek-ahead', +seconds)
   }
 
   seekBack(seconds) {
+    this.time -= seconds
     this.player.seekBack(seconds)
+    this.emit('seek-back', +seconds)
+  }
+
+  seekTo(timeInSecs) {
+    this.time = timeInSecs
+    this.player.seekTo(timeInSecs)
+    this.emit('seek-to', +timeInSecs)
   }
 
   togglePause() {
     this.player.togglePause()
+    this.emit('toggle-pause')
   }
 
   setPause(value) {
     this.player.setPause(value)
+    this.emit('set-pause', !!value)
   }
 
   toggleLoop() {
     this.player.toggleLoop()
+    this.emit('toggle-loop')
   }
 
   setLoop(value) {
     this.player.setLoop(value)
+    this.emit('set-loop', !!value)
   }
 
   volUp(amount = 10) {
     this.player.volUp(amount)
+    this.emit('vol-up', +amount)
   }
 
   volDown(amount = 10) {
     this.player.volDown(amount)
+    this.emit('vol-down', +amount)
   }
 
   setVolume(value) {
     this.player.setVolume(value)
+    this.emit('set-volume', +value)
   }
 
   setVolumeMultiplier(value) {
-    this.player.setVolumeMultiplier(value);
+    this.player.setVolumeMultiplier(value)
   }
 
   fadeIn() {
-    return this.player.fadeIn();
+    return this.player.fadeIn()
   }
 
   setPauseNextTrack(value) {
     this.pauseNextTrack = !!value
+    this.emit('set-pause-next-track', !!value)
   }
 
   get remainingTracks() {
@@ -632,6 +657,24 @@ class Backend extends EventEmitter {
     this.queuePlayers.push(queuePlayer)
     this.emit('added queue player', queuePlayer)
 
+    for (const event of [
+      'playing',
+      'seek-ahead',
+      'seek-back',
+      'toggle-pause',
+      'set-pause',
+      'toggle-loop',
+      'set-loop',
+      'vol-up',
+      'vol-down',
+      'set-volume',
+      'set-pause-next-track'
+    ]) {
+      queuePlayer.on(event, (...data) => {
+        this.emit(event, queuePlayer, ...data)
+      })
+    }
+
     return queuePlayer
   }