Add playlists feature (#871)
* Open multi-file torrents as playlists
* Add `repeat` and `shuffle` options to the player
* Autoplay first file in torrent
* replaces `pickFileToPlay` feature
* when reopening player, restores the most recently viewed file
* Add playlist navigation buttons to Windows thumbar
* Remove `repeat` and `shuffle` options
This reverts commit 9284122461.
* Play files in order they appear in torrent
* Clean up playlists code
This commit is contained in:
@@ -64,6 +64,11 @@ function init () {
|
||||
thumbar.enable()
|
||||
})
|
||||
|
||||
ipc.on('onPlayerUpdate', function (e, ...args) {
|
||||
menu.onPlayerUpdate(...args)
|
||||
thumbar.onPlayerUpdate(...args)
|
||||
})
|
||||
|
||||
ipc.on('onPlayerClose', function () {
|
||||
menu.setPlayerOpen(false)
|
||||
powerSaveBlocker.disable()
|
||||
|
||||
@@ -3,6 +3,7 @@ module.exports = {
|
||||
setPlayerOpen,
|
||||
setWindowFocus,
|
||||
setAllowNav,
|
||||
onPlayerUpdate,
|
||||
onToggleAlwaysOnTop,
|
||||
onToggleFullScreen
|
||||
}
|
||||
@@ -25,6 +26,8 @@ function init () {
|
||||
|
||||
function setPlayerOpen (flag) {
|
||||
getMenuItem('Play/Pause').enabled = flag
|
||||
getMenuItem('Skip Next').enabled = flag
|
||||
getMenuItem('Skip Previous').enabled = flag
|
||||
getMenuItem('Increase Volume').enabled = flag
|
||||
getMenuItem('Decrease Volume').enabled = flag
|
||||
getMenuItem('Step Forward').enabled = flag
|
||||
@@ -32,6 +35,16 @@ function setPlayerOpen (flag) {
|
||||
getMenuItem('Increase Speed').enabled = flag
|
||||
getMenuItem('Decrease Speed').enabled = flag
|
||||
getMenuItem('Add Subtitles File...').enabled = flag
|
||||
|
||||
if (flag === false) {
|
||||
getMenuItem('Skip Next').enabled = false
|
||||
getMenuItem('Skip Previous').enabled = false
|
||||
}
|
||||
}
|
||||
|
||||
function onPlayerUpdate (hasNext, hasPrevious) {
|
||||
getMenuItem('Skip Next').enabled = hasNext
|
||||
getMenuItem('Skip Previous').enabled = hasPrevious
|
||||
}
|
||||
|
||||
function setWindowFocus (flag) {
|
||||
@@ -187,6 +200,21 @@ function getMenuTemplate () {
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
label: 'Skip Next',
|
||||
accelerator: 'N',
|
||||
click: () => windows.main.dispatch('nextTrack'),
|
||||
enabled: false
|
||||
},
|
||||
{
|
||||
label: 'Skip Previous',
|
||||
accelerator: 'P',
|
||||
click: () => windows.main.dispatch('previousTrack'),
|
||||
enabled: false
|
||||
},
|
||||
{
|
||||
type: 'separator'
|
||||
},
|
||||
{
|
||||
label: 'Increase Volume',
|
||||
accelerator: 'CmdOrCtrl+Up',
|
||||
|
||||
@@ -12,9 +12,19 @@ function enable () {
|
||||
'MediaPlayPause',
|
||||
() => windows.main.dispatch('playPause')
|
||||
)
|
||||
electron.globalShortcut.register(
|
||||
'MediaNextTrack',
|
||||
() => windows.main.dispatch('nextTrack')
|
||||
)
|
||||
electron.globalShortcut.register(
|
||||
'MediaPreviousTrack',
|
||||
() => windows.main.dispatch('previousTrack')
|
||||
)
|
||||
}
|
||||
|
||||
function disable () {
|
||||
// Return the media key to the OS, so other apps can use it.
|
||||
electron.globalShortcut.unregister('MediaPlayPause')
|
||||
electron.globalShortcut.unregister('MediaNextTrack')
|
||||
electron.globalShortcut.unregister('MediaPreviousTrack')
|
||||
}
|
||||
|
||||
@@ -2,7 +2,8 @@ module.exports = {
|
||||
disable,
|
||||
enable,
|
||||
onPlayerPause,
|
||||
onPlayerPlay
|
||||
onPlayerPlay,
|
||||
onPlayerUpdate
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -16,39 +17,75 @@ var config = require('../config')
|
||||
|
||||
var windows = require('./windows')
|
||||
|
||||
const PREV_ICON = path.join(config.STATIC_PATH, 'PreviousTrackThumbnailBarButton.png')
|
||||
const PLAY_ICON = path.join(config.STATIC_PATH, 'PlayThumbnailBarButton.png')
|
||||
const PAUSE_ICON = path.join(config.STATIC_PATH, 'PauseThumbnailBarButton.png')
|
||||
const NEXT_ICON = path.join(config.STATIC_PATH, 'NextTrackThumbnailBarButton.png')
|
||||
|
||||
// Array indices for each button
|
||||
const PREV = 0
|
||||
const PLAY_PAUSE = 1
|
||||
const NEXT = 2
|
||||
|
||||
var buttons = []
|
||||
|
||||
/**
|
||||
* Show the Windows thumbnail toolbar buttons.
|
||||
*/
|
||||
function enable () {
|
||||
update(false)
|
||||
buttons = [
|
||||
{
|
||||
tooltip: 'Previous Track',
|
||||
icon: PREV_ICON,
|
||||
click: () => windows.main.dispatch('previousTrack')
|
||||
},
|
||||
{
|
||||
tooltip: 'Pause',
|
||||
icon: PAUSE_ICON,
|
||||
click: () => windows.main.dispatch('playPause')
|
||||
},
|
||||
{
|
||||
tooltip: 'Next Track',
|
||||
icon: NEXT_ICON,
|
||||
click: () => windows.main.dispatch('nextTrack')
|
||||
}
|
||||
]
|
||||
update()
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide the Windows thumbnail toolbar buttons.
|
||||
*/
|
||||
function disable () {
|
||||
windows.main.win.setThumbarButtons([])
|
||||
buttons = []
|
||||
update()
|
||||
}
|
||||
|
||||
function onPlayerPause () {
|
||||
update(true)
|
||||
if (!isEnabled()) return
|
||||
buttons[PLAY_PAUSE].tooltip = 'Play'
|
||||
buttons[PLAY_PAUSE].icon = PLAY_ICON
|
||||
update()
|
||||
}
|
||||
|
||||
function onPlayerPlay () {
|
||||
update(false)
|
||||
if (!isEnabled()) return
|
||||
buttons[PLAY_PAUSE].tooltip = 'Pause'
|
||||
buttons[PLAY_PAUSE].icon = PAUSE_ICON
|
||||
update()
|
||||
}
|
||||
|
||||
function update (isPaused) {
|
||||
var icon = isPaused
|
||||
? 'PlayThumbnailBarButton.png'
|
||||
: 'PauseThumbnailBarButton.png'
|
||||
function onPlayerUpdate (state) {
|
||||
if (!isEnabled()) return
|
||||
buttons[PREV].flags = [ state.hasPrevious ? 'enabled' : 'disabled' ]
|
||||
buttons[NEXT].flags = [ state.hasNext ? 'enabled' : 'disabled' ]
|
||||
update()
|
||||
}
|
||||
|
||||
var buttons = [
|
||||
{
|
||||
tooltip: isPaused ? 'Play' : 'Pause',
|
||||
icon: path.join(config.STATIC_PATH, icon),
|
||||
click: () => windows.main.dispatch('playPause')
|
||||
}
|
||||
]
|
||||
function isEnabled () {
|
||||
return buttons.length > 0
|
||||
}
|
||||
|
||||
function update () {
|
||||
windows.main.win.setThumbarButtons(buttons)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user