« get me outta code hell

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:
Diffstat (limited to 'backend.js')
-rw-r--r--backend.js30
1 files changed, 28 insertions, 2 deletions
diff --git a/backend.js b/backend.js
index 048a6c5..418c2eb 100644
--- a/backend.js
+++ b/backend.js
@@ -7,6 +7,8 @@ import {readFile, writeFile} from 'node:fs/promises'
 import EventEmitter from 'node:events'
 import os from 'node:os'
 
+import shortid from 'shortid'
+
 import {getDownloaderFor} from './downloaders.js'
 import {getMetadataReaderFor} from './metadata-readers.js'
 import {getPlayer} from './players.js'
@@ -58,6 +60,8 @@ class QueuePlayer extends EventEmitter {
   }) {
     super()
 
+    this.id = shortid.generate()
+
     this.player = null
     this.playingTrack = null
     this.queueGrouplike = {name: 'Queue', isTheQueue: true, items: []}
@@ -66,6 +70,7 @@ class QueuePlayer extends EventEmitter {
 
     this.playedTrackToEnd = false
     this.timeData = null
+    this.time = null
 
     this.getPlayer = getPlayer
     this.getRecordFor = getRecordFor
@@ -84,6 +89,7 @@ class QueuePlayer extends EventEmitter {
       if (this.playingTrack) {
         const oldTimeData = this.timeData
         this.timeData = data
+        this.time = data.curSecTotal
         this.emit('received time data', data, oldTimeData, this)
       }
     })
@@ -400,6 +406,7 @@ class QueuePlayer extends EventEmitter {
       }
 
       this.timeData = null
+      this.time = null
       this.playingTrack = item
       this.emit('playing', this.playingTrack, oldTrack, startTime, this)
 
@@ -540,6 +547,7 @@ class QueuePlayer extends EventEmitter {
       const oldTrack = this.playingTrack
       this.playingTrack = null
       this.timeData = null
+      this.time = null
       this.emit('playing', null, oldTrack, 0, this)
     }
   }
@@ -549,11 +557,21 @@ 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)
   }
 
   seekTo(seconds) {
@@ -566,42 +584,50 @@ class QueuePlayer extends EventEmitter {
 
   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)
   }
 
   setLoopQueueAtEnd(value) {