diff --git a/package.json b/package.json index f1830dbc..492e1a2b 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "hat": "0.0.3", "iso-639-1": "^1.2.1", "languagedetect": "^1.1.1", + "location-history": "^1.0.0", "musicmetadata": "^2.0.2", "network-address": "^1.1.0", "parse-torrent": "^5.7.3", diff --git a/src/renderer/controllers/playback-controller.js b/src/renderer/controllers/playback-controller.js index 188483ce..c80489af 100644 --- a/src/renderer/controllers/playback-controller.js +++ b/src/renderer/controllers/playback-controller.js @@ -28,11 +28,11 @@ module.exports = class PlaybackController { playFile (infoHash, index /* optional */) { this.state.location.go({ url: 'player', - onbeforeload: (cb) => { + setup: (cb) => { this.play() this.openPlayer(infoHash, index, cb) }, - onbeforeunload: (cb) => this.closePlayer(cb) + destroy: () => this.closePlayer() }, (err) => { if (err) dispatch('error', err) }) @@ -251,7 +251,7 @@ module.exports = class PlaybackController { }) } - closePlayer (cb) { + closePlayer () { console.log('closePlayer') // Quit any external players, like Chromecast/Airplay/etc or VLC @@ -274,7 +274,6 @@ module.exports = class PlaybackController { else console.error('Unknown state.playing.result', state.playing.result) // Reset the window contents back to the home screen - dispatch('resetTitle') state.playing = State.getDefaultPlayState() state.server = null @@ -290,7 +289,6 @@ module.exports = class PlaybackController { ipcRenderer.send('onPlayerClose') this.update() - cb() } } diff --git a/src/renderer/controllers/prefs-controller.js b/src/renderer/controllers/prefs-controller.js index cdd0c297..9ba400bf 100644 --- a/src/renderer/controllers/prefs-controller.js +++ b/src/renderer/controllers/prefs-controller.js @@ -13,24 +13,19 @@ module.exports = class PrefsController { var state = this.state state.location.go({ url: 'preferences', - onbeforeload: function (cb) { + setup: function (cb) { // initialize preferences dispatch('setTitle', 'Preferences') state.unsaved = Object.assign(state.unsaved || {}, {prefs: state.saved.prefs || {}}) cb() }, - onbeforeunload: (cb) => { - // save state after preferences - this.save() - dispatch('resetTitle') - cb() - } + destroy: () => this.save() }) } // Updates a single property in the UNSAVED prefs // For example: updatePreferences('foo.bar', 'baz') - // Call savePreferences to save to config.json + // Call save() to save to config.json update (property, value) { var path = property.split('.') var key = this.state.unsaved.prefs diff --git a/src/renderer/lib/location-history.js b/src/renderer/lib/location-history.js deleted file mode 100644 index 483370dd..00000000 --- a/src/renderer/lib/location-history.js +++ /dev/null @@ -1,125 +0,0 @@ -module.exports = LocationHistory - -function LocationHistory () { - this._history = [] - this._forward = [] - this._pending = false -} - -LocationHistory.prototype.url = function () { - return this.current() && this.current().url -} - -LocationHistory.prototype.current = function () { - return this._history[this._history.length - 1] -} - -LocationHistory.prototype.go = function (page, cb) { - if (!cb) cb = noop - if (this._pending) return cb(null) - - console.log('go', page) - - this.clearForward() - this._go(page, cb) -} - -LocationHistory.prototype.back = function (cb) { - var self = this - if (!cb) cb = noop - if (self._history.length <= 1 || self._pending) return cb(null) - - var page = self._history.pop() - self._unload(page, done) - - function done (err) { - if (err) return cb(err) - self._forward.push(page) - self._load(self.current(), cb) - } -} - -LocationHistory.prototype.hasBack = function () { - return this._history.length > 1 -} - -LocationHistory.prototype.forward = function (cb) { - if (!cb) cb = noop - if (this._forward.length === 0 || this._pending) return cb(null) - - var page = this._forward.pop() - this._go(page, cb) -} - -LocationHistory.prototype.hasForward = function () { - return this._forward.length > 0 -} - -LocationHistory.prototype.clearForward = function (url) { - if (url == null) { - this._forward = [] - } else { - console.log(this._forward) - console.log(url) - this._forward = this._forward.filter(function (page) { - return page.url !== url - }) - } -} - -LocationHistory.prototype.backToFirst = function (cb) { - var self = this - if (!cb) cb = noop - if (self._history.length <= 1) return cb(null) - - self.back(function (err) { - if (err) return cb(err) - self.backToFirst(cb) - }) -} - -LocationHistory.prototype._go = function (page, cb) { - var self = this - if (!cb) cb = noop - - self._unload(self.current(), done1) - - function done1 (err) { - if (err) return cb(err) - self._load(page, done2) - } - - function done2 (err) { - if (err) return cb(err) - self._history.push(page) - cb(null) - } -} - -LocationHistory.prototype._load = function (page, cb) { - var self = this - self._pending = true - - if (page && page.onbeforeload) page.onbeforeload(done) - else done(null) - - function done (err) { - self._pending = false - cb(err) - } -} - -LocationHistory.prototype._unload = function (page, cb) { - var self = this - self._pending = true - - if (page && page.onbeforeunload) page.onbeforeunload(done) - else done(null) - - function done (err) { - self._pending = false - cb(err) - } -} - -function noop () {} diff --git a/src/renderer/lib/state.js b/src/renderer/lib/state.js index 7aed6792..3205e1df 100644 --- a/src/renderer/lib/state.js +++ b/src/renderer/lib/state.js @@ -15,7 +15,7 @@ var State = module.exports = Object.assign(new EventEmitter(), { appConfig.filePath = path.join(config.CONFIG_PATH, 'config.json') function getDefaultState () { - var LocationHistory = require('./location-history') + var LocationHistory = require('location-history') return { /* diff --git a/src/renderer/main.js b/src/renderer/main.js index 011b0240..37d91a43 100644 --- a/src/renderer/main.js +++ b/src/renderer/main.js @@ -66,7 +66,13 @@ function onState (err, _state) { } // Add first page to location history - state.location.go({ url: 'home' }) + state.location.go({ + url: 'home', + setup: (cb) => { + dispatch('resetTitle') + cb(null) + } + }) // Restart everything we were torrenting last time the app ran resumeTorrents()