diff options
author | Florrie <towerofnix@gmail.com> | 2019-10-15 17:55:58 -0300 |
---|---|---|
committer | Florrie <towerofnix@gmail.com> | 2019-10-15 17:55:58 -0300 |
commit | c0d6ea0363473cbb43e4f1f50c92803ed14742cb (patch) | |
tree | 883b8602584f66e9ddeb53cfe32b2d96dbfd909f /ui.js | |
parent | b2b424c977099d5fc9d49a9bbba6d911e2bc7901 (diff) |
(o) to open through system; show non-music files
Diffstat (limited to 'ui.js')
-rw-r--r-- | ui.js | 75 |
1 files changed, 61 insertions, 14 deletions
diff --git a/ui.js b/ui.js index 674541d..f334a70 100644 --- a/ui.js +++ b/ui.js @@ -47,6 +47,11 @@ const { } } = require('./tui-lib') +const open = require('open') + +const isPlayable = item => isGroup(item) || isTrack(item) +const isOpenable = item => !!(item && item.url) + const input = {} const keyBindings = [ @@ -79,6 +84,7 @@ const keyBindings = [ ['isDownload', 'd'], ['isRemove', 'x'], ['isQueueAfterSelectedTrack', 'q'], + ['isOpenThroughSystem', 'o'], ['isShuffleQueue', 's'], ['isClearQueue', 'c'], ['isFocusMenubar', ';'], @@ -217,6 +223,7 @@ class AppElement extends FocusElement { this.queueTimeLabel = new Label('') this.paneRight.addChild(this.queueTimeLabel) + this.queueListingElement.on('open', item => this.openThroughSystem(item)) this.queueListingElement.on('queue', item => this.play(item)) this.queueListingElement.on('remove', item => this.unqueue(item)) this.queueListingElement.on('shuffle', () => this.shuffleQueue()) @@ -572,8 +579,9 @@ class AppElement extends FocusElement { this.tabber.addTab(grouplikeListing) this.tabber.selectTab(grouplikeListing) - grouplikeListing.on('download', item => this.SQP.download(item)) grouplikeListing.on('browse', item => grouplikeListing.loadGrouplike(item)) + grouplikeListing.on('download', item => this.SQP.download(item)) + grouplikeListing.on('open', item => this.openThroughSystem(item)) grouplikeListing.on('queue', (item, opts) => this.handleQueueOptions(item, opts)) const updateListingsFor = item => { @@ -789,6 +797,14 @@ class AppElement extends FocusElement { } } + openThroughSystem(item) { + if (!isOpenable(item)) { + return + } + + open(item.url) + } + set actOnAllPlayers(val) { if (val) { this.queuePlayersToActOn = this.backend.queuePlayers.slice() @@ -888,15 +904,19 @@ class AppElement extends FocusElement { {divider: true}, */ - canControlQueue && {element: this.whereControl}, + canControlQueue && isPlayable(item) && {element: this.whereControl}, canControlQueue && isGroup(item) && {element: this.orderControl}, - canControlQueue && {label: 'Play!', action: emitControls(true)}, - canControlQueue && {label: 'Queue!', action: emitControls(false)}, + canControlQueue && isPlayable(item) && {label: 'Play!', action: emitControls(true)}, + canControlQueue && isPlayable(item) && {label: 'Queue!', action: emitControls(false)}, + {divider: true}, + + canProcessMetadata && isGroup(item) && {label: 'Process metadata (new entries)', action: () => this.processMetadata(item, false)}, + canProcessMetadata && isGroup(item) && {label: 'Process metadata (reprocess)', action: () => this.processMetadata(item, true)}, + canProcessMetadata && isTrack(item) && {label: 'Process metadata', action: () => this.processMetadata(item, true)}, + canControlQueue && isPlayable(item) && {label: 'Remove from queue', action: () => this.unqueue(item)}, {divider: true}, - canProcessMetadata && {label: 'Process metadata (new entries)', action: () => this.processMetadata(item, false)}, - canProcessMetadata && {label: 'Process metadata (reprocess)', action: () => this.processMetadata(item, true)}, - canControlQueue && {label: 'Remove from queue', action: () => this.unqueue(item)}, + isOpenable(item) && {label: 'Open (System)', action: () => this.openThroughSystem(item)}, {divider: true}, item === this.markGrouplike && {label: 'Deselect', action: () => this.deselectAll()} @@ -1610,7 +1630,17 @@ class GrouplikeListingElement extends Form { } addEventListeners(itemElement) { - for (const evtName of ['download', 'remove', 'mark', 'paste', 'browse', 'queue', 'unqueue', 'menu']) { + for (const evtName of [ + 'browse', + 'download', + 'paste', + 'mark', + 'menu', + 'open', + 'queue', + 'remove', + 'unqueue' + ]) { itemElement.on(evtName, (...data) => this.emit(evtName, itemElement.item, ...data)) } @@ -2512,11 +2542,15 @@ class InteractiveGrouplikeItemElement extends BasicGrouplikeItemElement { this.emit('download') } else if (input.isQueueAfterSelectedTrack(keyBuf)) { this.emit('queue', {where: 'next-selected'}) + } else if (input.isOpenThroughSystem(keyBuf)) { + this.emit('open') } else if (telc.isEnter(keyBuf)) { if (isGroup(this.item)) { this.emit('browse') - } else { + } else if (isTrack(this.item)) { this.emit('queue', {where: 'next', play: true}) + } else if (!this.isPlayable) { + this.emit('open') } } else if (input.isRemove(keyBuf)) { this.emit('remove') @@ -2559,11 +2593,12 @@ class InteractiveGrouplikeItemElement extends BasicGrouplikeItemElement { } if (this.isGroup) { this.emit('browse') - return false - } else { + } else if (this.isTrack) { this.emit('queue', {where: 'next', play: true}) - return false + } else if (!this.isPlayable) { + this.emit('open') } + return false } else { this.parent.selectInput(this) } @@ -2584,10 +2619,16 @@ class InteractiveGrouplikeItemElement extends BasicGrouplikeItemElement { } else { writable.write(ansi.setAttributes([ansi.C_BLUE, ansi.A_BRIGHT])) } - } else { + } else if (this.isTrack) { if (this.isMarked) { writable.write(ansi.setAttributes([ansi.C_WHITE + 10, ansi.C_BLACK, ansi.A_BRIGHT])) } + } else if (!this.isPlayable) { + if (this.isMarked) { + writable.write(ansi.setAttributes([ansi.C_WHITE + 10, ansi.C_BLACK, ansi.A_BRIGHT])) + } else { + writable.write(ansi.setAttributes([ansi.A_DIM])) + } } this.drawX += 3 @@ -2605,6 +2646,8 @@ class InteractiveGrouplikeItemElement extends BasicGrouplikeItemElement { if (this.isGroup) { writable.write('G') + } else if (!this.isPlayable) { + writable.write('F') } else if (record.downloading) { writable.write(braille[Math.floor(Date.now() / 250) % 6]) } else if (this.app.SQP.playingTrack === this.item) { @@ -2627,6 +2670,10 @@ class InteractiveGrouplikeItemElement extends BasicGrouplikeItemElement { get isTrack() { return isTrack(this.item) } + + get isPlayable() { + return isPlayable(this.item) + } } class ListingJumpElement extends Form { @@ -2682,7 +2729,7 @@ class PathElement extends ListScrollForm { this.removeInput(this.inputs[0]) } - if (!isTrack(item) && !isGroup(item)) { + if (!item) { return } |