From 0e9b316165f8b6585d5822a8a3b8199b7ec3e671 Mon Sep 17 00:00:00 2001 From: Florrie Date: Tue, 30 Jul 2019 21:49:04 -0300 Subject: "Pause when this track ends" option --- backend.js | 14 ++++++++++++++ players.js | 4 +++- ui.js | 7 +++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/backend.js b/backend.js index 35362b3..23a9309 100644 --- a/backend.js +++ b/backend.js @@ -37,6 +37,8 @@ class Backend extends EventEmitter { this.throttleMetadata = throttlePromise(10) this.metadataDictionary = {} this.queueGrouplike = {name: 'Queue', isTheQueue: true, items: []} + this.pauseNextTrack = false + this.playedTrackToEnd = false this.rootDirectory = process.env.HOME + '/.mtui' this.metadataPath = this.rootDirectory + '/track-metadata.json' @@ -378,6 +380,10 @@ class Backend extends EventEmitter { this.player.setVolume(value) } + setPauseNextTrack(value) { + this.pauseNextTrack = !!value + } + async stopPlaying() { // We emit this so playTrack doesn't immediately start a new track. // We aren't *actually* about to play a new track. @@ -431,6 +437,13 @@ class Backend extends EventEmitter { this.emit('playing', this.playingTrack, oldTrack) await this.player.kill() + if (this.playedTrackToEnd) { + this.player.setPause(this.pauseNextTrack) + this.pauseNextTrack = false + this.playedTrackToEnd = false + } else { + this.player.setPause(false) + } await this.player.playFile(downloadFile) } @@ -438,6 +451,7 @@ class Backend extends EventEmitter { // (true), or was stopped by a different track being started (false). if (playingThisTrack) { + this.playedTrackToEnd = true if (!this.playNext(item)) { this.clearPlayingTrack() } diff --git a/players.js b/players.js index 0c296b3..a61e545 100644 --- a/players.js +++ b/players.js @@ -63,6 +63,9 @@ module.exports.MPVPlayer = class extends Player { if (this.isLooping) { opts.unshift('--loop') } + if (this.isPaused) { + opts.unshift('--pause') + } opts.unshift('--volume', this.volume) return opts } @@ -71,7 +74,6 @@ module.exports.MPVPlayer = class extends Player { // The more powerful MPV player. MPV is virtually impossible for a human // being to install; if you're having trouble with it, try the SoX player. - this.isPaused = false this.process = spawn('mpv', this.getMPVOptions(file)) let lastPercent = 0 diff --git a/ui.js b/ui.js index e73d8f5..25cc0e1 100644 --- a/ui.js +++ b/ui.js @@ -280,6 +280,7 @@ class AppElement extends FocusElement { {divider: true}, playingTrack && {element: this.playingControl}, {element: this.loopingControl}, + {element: this.pauseNextControl}, {element: this.volumeSlider}, {divider: true}, previous && {label: `Previous (${previous.name})`, action: () => this.backend.playPrevious(playingTrack)}, @@ -312,6 +313,12 @@ class AppElement extends FocusElement { getEnabled: () => this.config.canControlPlayback }) + this.pauseNextControl = new ToggleControl('Pause when this track ends?', { + setValue: val => this.backend.setPauseNextTrack(val), + getValue: () => this.backend.pauseNextTrack, + getEnabled: () => this.config.canControlPlayback + }) + this.volumeSlider = new SliderElement('Volume', { setValue: val => this.backend.setVolume(val), getValue: () => this.backend.player.volume, -- cgit 1.3.0-6-gf8a5