« get me outta code hell

combining log messages (currently only seek!) - mtui - Music Text User Interface - user-friendly command line music player
about summary refs log tree commit diff
path: root/ui.js
diff options
context:
space:
mode:
author(quasar) nebula <towerofnix@gmail.com>2021-03-15 21:57:54 -0300
committer(quasar) nebula <qznebula@protonmail.com>2024-05-16 19:15:01 -0300
commitee6960dac5c11641cb1568643782158d85f15f59 (patch)
tree2ddabce31e5cce310647be18262ebcde8fc82f4a /ui.js
parent7ce9093c6a4623f5b87dd01989ebaa0f58a84649 (diff)
combining log messages (currently only seek!)
Diffstat (limited to 'ui.js')
-rw-r--r--ui.js32
1 files changed, 27 insertions, 5 deletions
diff --git a/ui.js b/ui.js
index 7ed9b57..65ca2d1 100644
--- a/ui.js
+++ b/ui.js
@@ -576,8 +576,8 @@ export default class AppElement extends FocusElement {
     this.updateQueueLengthLabel()
   }
 
-  handleLogMessage(text, isVerbose) {
-    this.log.newLogMessage(text, isVerbose)
+  handleLogMessage(messageInfo) {
+    this.log.newLogMessage(messageInfo)
   }
 
   async handlePlayingDetails(track, oldTrack, startTime, queuePlayer) {
@@ -5535,12 +5535,27 @@ class Log extends ListScrollForm {
     super('vertical')
   }
 
-  newLogMessage(text, isVerbose = false) {
+  newLogMessage(messageInfo) {
     if (this.inputs.length === 10) {
       this.removeInput(this.inputs[0])
     }
 
-    const logMessage = new LogMessage(text, isVerbose)
+    if (messageInfo.mayCombine) {
+      // If a message is specified to "combine", it'll replace an immediately
+      // previous message of the same code and sender.
+      const previous = this.inputs[this.inputs.length - 1]
+      if (
+        previous &&
+        previous.info.code === messageInfo.code &&
+        previous.info.sender === messageInfo.sender
+      ) {
+        // If the code and sender match, just remove the previous message.
+        // It'll be replaced by the one we're about to add!
+        this.removeInput(previous)
+      }
+    }
+
+    const logMessage = new LogMessage(messageInfo)
     this.addInput(logMessage)
     this.fixLayout()
     this.scrollToEnd()
@@ -5550,9 +5565,16 @@ class Log extends ListScrollForm {
 }
 
 class LogMessage extends FocusElement {
-  constructor(text, isVerbose = false) {
+  constructor(info) {
     super()
 
+    this.info = info
+
+    const {
+      text,
+      isVerbose = false
+    } = info
+
     this.label = new LogMessageLabel(text, isVerbose)
     this.addChild(this.label)
   }