@@ -3,9 +3,11 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var electron = require('electron')
|
var electron = require('electron')
|
||||||
|
var get = require('simple-get')
|
||||||
|
|
||||||
var config = require('../config')
|
var config = require('../config')
|
||||||
var log = require('./log')
|
var log = require('./log')
|
||||||
|
var windows = require('./windows')
|
||||||
|
|
||||||
var autoUpdater = electron.autoUpdater
|
var autoUpdater = electron.autoUpdater
|
||||||
|
|
||||||
@@ -20,7 +22,7 @@ function init () {
|
|||||||
* We always check for updates on app startup. To keep app startup fast, we delay this
|
* We always check for updates on app startup. To keep app startup fast, we delay this
|
||||||
* first check so it happens when there is less going on.
|
* first check so it happens when there is less going on.
|
||||||
*/
|
*/
|
||||||
setTimeout(() => autoUpdater.checkForUpdates(), config.AUTO_UPDATE_CHECK_STARTUP_DELAY)
|
setTimeout(checkForUpdates, config.AUTO_UPDATE_CHECK_STARTUP_DELAY)
|
||||||
|
|
||||||
autoUpdater.on('checking-for-update', () => log('Checking for app update'))
|
autoUpdater.on('checking-for-update', () => log('Checking for app update'))
|
||||||
autoUpdater.on('update-available', () => log('App update available'))
|
autoUpdater.on('update-available', () => log('App update available'))
|
||||||
@@ -29,3 +31,22 @@ function init () {
|
|||||||
log('App update downloaded: ', releaseName, updateURL)
|
log('App update downloaded: ', releaseName, updateURL)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkForUpdates () {
|
||||||
|
// Electron's built-in auto updater only supports Mac and Windows, for now
|
||||||
|
if (process.platform !== 'linux') {
|
||||||
|
return autoUpdater.checkForUpdates()
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we're on Linux, we have to do it ourselves
|
||||||
|
get.concat(config.AUTO_UPDATE_URL, function (err, res, data) {
|
||||||
|
if (err) return log('Error checking for app update: ' + err.message)
|
||||||
|
if (![200, 204].includes(res.statusCode)) return log('Error checking for app update, got HTTP ' + res.statusCode)
|
||||||
|
if (res.statusCode !== 200) return
|
||||||
|
|
||||||
|
var obj = JSON.parse(data)
|
||||||
|
// TODO: version should be included in the response object, we shouldn'v have to parse obj.name
|
||||||
|
var version = obj.name.slice(obj.name.lastIndexOf('v') + 1)
|
||||||
|
windows.main.send('dispatch', 'updateAvailable', version)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "webtorrent-desktop",
|
"name": "webtorrent-desktop",
|
||||||
"description": "WebTorrent, the streaming torrent client. For OS X, Windows, and Linux.",
|
"description": "WebTorrent, the streaming torrent client. For OS X, Windows, and Linux.",
|
||||||
"version": "0.1.1",
|
"version": "0.1.0",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Feross Aboukhadijeh",
|
"name": "Feross Aboukhadijeh",
|
||||||
"email": "feross@feross.org",
|
"email": "feross@feross.org",
|
||||||
@@ -27,6 +27,7 @@
|
|||||||
"network-address": "^1.1.0",
|
"network-address": "^1.1.0",
|
||||||
"path-exists": "^2.1.0",
|
"path-exists": "^2.1.0",
|
||||||
"prettier-bytes": "^1.0.1",
|
"prettier-bytes": "^1.0.1",
|
||||||
|
"simple-get": "^2.0.0",
|
||||||
"upload-element": "^1.0.1",
|
"upload-element": "^1.0.1",
|
||||||
"virtual-dom": "^2.1.1",
|
"virtual-dom": "^2.1.1",
|
||||||
"webtorrent": "^0.87.1",
|
"webtorrent": "^0.87.1",
|
||||||
|
|||||||
@@ -242,6 +242,10 @@ i:not(.disabled):hover {
|
|||||||
* MODAL POPOVERS
|
* MODAL POPOVERS
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
.modal {
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
|
||||||
.modal .modal-background {
|
.modal .modal-background {
|
||||||
content: ' ';
|
content: ' ';
|
||||||
position: fixed;
|
position: fixed;
|
||||||
|
|||||||
@@ -293,6 +293,14 @@ function dispatch (action, ...args) {
|
|||||||
if (action === 'exitModal') {
|
if (action === 'exitModal') {
|
||||||
state.modal = null
|
state.modal = null
|
||||||
}
|
}
|
||||||
|
if (action === 'updateAvailable') {
|
||||||
|
updateAvailable(args[0] /* version */)
|
||||||
|
}
|
||||||
|
if (action === 'skipVersion') {
|
||||||
|
if (!state.saved.skippedVersions) state.saved.skippedVersions = []
|
||||||
|
state.saved.skippedVersions.push(args[0] /* version */)
|
||||||
|
saveState()
|
||||||
|
}
|
||||||
|
|
||||||
// Update the virtual-dom, unless it's just a mouse move event
|
// Update the virtual-dom, unless it's just a mouse move event
|
||||||
if (action !== 'mediaMouseMoved') {
|
if (action !== 'mediaMouseMoved') {
|
||||||
@@ -300,6 +308,15 @@ function dispatch (action, ...args) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Shows a modal saying that we have an update
|
||||||
|
function updateAvailable(version) {
|
||||||
|
if (state.saved.skippedVersions && state.saved.skippedVersions.includes(version)) {
|
||||||
|
console.log('new version skipped by user: v' + version)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
state.modal = { id: 'update-available-modal', version: version }
|
||||||
|
}
|
||||||
|
|
||||||
// Plays or pauses the video. If isPaused is undefined, acts as a toggle
|
// Plays or pauses the video. If isPaused is undefined, acts as a toggle
|
||||||
function playPause (isPaused) {
|
function playPause (isPaused) {
|
||||||
if (isPaused === state.playing.isPaused) {
|
if (isPaused === state.playing.isPaused) {
|
||||||
@@ -347,7 +364,7 @@ function setupIpc () {
|
|||||||
ipcRenderer.on('dispatch', (e, ...args) => dispatch(...args))
|
ipcRenderer.on('dispatch', (e, ...args) => dispatch(...args))
|
||||||
|
|
||||||
ipcRenderer.on('showOpenTorrentAddress', function (e) {
|
ipcRenderer.on('showOpenTorrentAddress', function (e) {
|
||||||
state.modal = 'open-torrent-address-modal'
|
state.modal = { id: 'open-torrent-address-modal' }
|
||||||
update()
|
update()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ module.exports = {
|
|||||||
badge: 0,
|
badge: 0,
|
||||||
progress: 0
|
progress: 0
|
||||||
},
|
},
|
||||||
|
modal: null, /* modal popover */
|
||||||
errors: [], /* user-facing errors */
|
errors: [], /* user-facing errors */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ var Header = require('./header')
|
|||||||
var Player = require('./player')
|
var Player = require('./player')
|
||||||
var TorrentList = require('./torrent-list')
|
var TorrentList = require('./torrent-list')
|
||||||
var Modals = {
|
var Modals = {
|
||||||
'open-torrent-address-modal': require('./open-torrent-address-modal')
|
'open-torrent-address-modal': require('./open-torrent-address-modal'),
|
||||||
|
'update-available-modal': require('./update-available-modal')
|
||||||
}
|
}
|
||||||
|
|
||||||
function App (state, dispatch) {
|
function App (state, dispatch) {
|
||||||
@@ -62,7 +63,7 @@ function App (state, dispatch) {
|
|||||||
|
|
||||||
function getModal () {
|
function getModal () {
|
||||||
if (state.modal) {
|
if (state.modal) {
|
||||||
var contents = Modals[state.modal](state, dispatch)
|
var contents = Modals[state.modal.id](state, dispatch)
|
||||||
return hx`
|
return hx`
|
||||||
<div class='modal'>
|
<div class='modal'>
|
||||||
<div class='modal-background'></div>
|
<div class='modal-background'></div>
|
||||||
|
|||||||
36
renderer/views/update-available-modal.js
Normal file
36
renderer/views/update-available-modal.js
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
module.exports = UpdateAvailableModal
|
||||||
|
|
||||||
|
var h = require('virtual-dom/h')
|
||||||
|
var hyperx = require('hyperx')
|
||||||
|
var hx = hyperx(h)
|
||||||
|
|
||||||
|
var electron = require('electron')
|
||||||
|
|
||||||
|
var {dispatch} = require('../lib/dispatcher')
|
||||||
|
|
||||||
|
function UpdateAvailableModal (state) {
|
||||||
|
return hx`
|
||||||
|
<div class='update-available-modal'>
|
||||||
|
<p><strong>A new version of WebTorrent is available: v${state.modal.version}</strong></p>
|
||||||
|
<p>We have an auto-updater for Windows and Mac, but not yet for Linux, so you'll have to download it manually. Sorry.</p>
|
||||||
|
<p>
|
||||||
|
<button class='primary' onclick=${handleOK}>Show Download Page</button>
|
||||||
|
<button class='cancel' onclick=${handleCancel}>Skip This Release</button>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleKeyPress (e) {
|
||||||
|
if (e.which === 13) handleOK() /* hit Enter to submit */
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleOK () {
|
||||||
|
electron.shell.openExternal('https://github.com/feross/webtorrent-desktop/releases')
|
||||||
|
dispatch('exitModal')
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleCancel () {
|
||||||
|
dispatch('skipVersion', state.modal.version)
|
||||||
|
dispatch('exitModal')
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user