diff --git a/main/menu.js b/main/menu.js index f0da91c2..61f17417 100644 --- a/main/menu.js +++ b/main/menu.js @@ -17,32 +17,12 @@ var dialog = require('./dialog') var shell = require('./shell') var windows = require('./windows') var thumbnail = require('./thumbnail') -var State = require('../renderer/lib/state') -var menu, state +var menu function init () { menu = electron.Menu.buildFromTemplate(getMenuTemplate()) electron.Menu.setApplicationMenu(menu) - - State.load(onState) -} - -function onState (err, _state) { - if (err) return onError(err) - state = _state - - // Refresh menu - menu = electron.Menu.buildFromTemplate(getMenuTemplate()) - electron.Menu.setApplicationMenu(menu) -} - -function onError (err) { - console.error(err.stack || err) - state.errors.push({ - time: new Date().getTime(), - message: err.message || err - }) } function onPlayerClose () { @@ -278,13 +258,6 @@ function getMenuTemplate () { label: 'Add Subtitles File...', click: () => windows.main.dispatch('openSubtitles'), enabled: false - }, - { - label: 'Open in VLC', - type: 'checkbox', - click: () => windows.main.dispatch('toggleOpenInVlc', getMenuItem('Open in VLC')), - enabled: true, - checked: state && state.saved.openInVlc } ] }, diff --git a/renderer/main.css b/renderer/main.css index 9f64c957..7e613dfe 100644 --- a/renderer/main.css +++ b/renderer/main.css @@ -1078,6 +1078,14 @@ video::-webkit-media-text-track-container { vertical-align: text-bottom; } +.preferences .checkbox { + width: auto; +} + +.checkbox-label { + vertical-align: middle; +} + /* * MEDIA OVERLAY / AUDIO DETAILS diff --git a/renderer/main.js b/renderer/main.js index 8e7704ec..4cefb33b 100644 --- a/renderer/main.js +++ b/renderer/main.js @@ -151,14 +151,8 @@ function updateElectron () { } } -function toggleOpenInVlc (menuItem) { - var flag = menuItem.checked - console.log(`toggleOpenInVlc ${flag}`) - state.saved.openInVlc = flag -} - function getOpenInVlc () { - return state.saved.openInVlc + return state.saved.prefs.playInVlc } // Events from the UI never modify state directly. Instead they call dispatch() @@ -167,9 +161,6 @@ function dispatch (action, ...args) { if (!['mediaMouseMoved', 'mediaTimeUpdate'].includes(action)) { console.log('dispatch: %s %o', action, args) } - if (action === 'toggleOpenInVlc') { - toggleOpenInVlc(args[0]) - } if (action === 'onOpen') { onOpen(args[0] /* files */) } @@ -1073,9 +1064,8 @@ function openPlayerFromActiveTorrent (torrentSummary, index, timeout, cb) { return update() } - // play in VLC if set as default player (Menu: Playback / Open in VLC) + // play in VLC if set as default player (Preferences / Playback / Play in VLC) if (getOpenInVlc()) { - console.log('-- OPEN IN VLC', torrentSummary) dispatch('vlcPlay') update() cb() diff --git a/renderer/views/preferences.js b/renderer/views/preferences.js index 4e4773ed..19de64f8 100644 --- a/renderer/views/preferences.js +++ b/renderer/views/preferences.js @@ -10,6 +10,7 @@ function Preferences (state) { return hx`
${renderGeneralSection(state)} + ${renderPlaybackSection(state)}
` } @@ -24,6 +25,29 @@ function renderGeneralSection (state) { ]) } +function renderPlaybackSection (state) { + return renderSection({ + title: 'Playback', + description: '', + icon: 'settings' + }, [ + renderPlayInVlcSelector(state) + ]) +} + +function renderPlayInVlcSelector (state) { + return renderCheckbox({ + label: 'Play in VLC', + description: 'Media will play in VLC', + property: 'playInVlc', + value: state.saved.prefs.playInVlc + }, + state.unsaved.prefs.playInVlc, + function (value) { + setStateValue('playInVlc', value) + }) +} + function renderDownloadDirSelector (state) { return renderFileSelector({ label: 'Download Path', @@ -64,6 +88,34 @@ function renderSection (definition, controls) { ` } +function renderCheckbox(definition, value, callback) { + var checked = '' + if (value) checked = 'checked' + + return hx` +
+
+ +
+ +
+
+
+ ` + function handleClick () { + callback(this.checked) + } +} + // Creates a file chooser // - defition should be {label, description, options} // options are passed to dialog.showOpenDialog