@@ -12,6 +12,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"airplay-js": "guerrerocarlos/node-airplay-js",
|
"airplay-js": "guerrerocarlos/node-airplay-js",
|
||||||
|
"application-config": "^0.2.0",
|
||||||
"chromecasts": "^1.8.0",
|
"chromecasts": "^1.8.0",
|
||||||
"create-torrent": "^3.22.1",
|
"create-torrent": "^3.22.1",
|
||||||
"debug": "^2.2.0",
|
"debug": "^2.2.0",
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ var state = require('./state')
|
|||||||
var throttle = require('throttleit')
|
var throttle = require('throttleit')
|
||||||
var torrentPoster = require('./lib/torrent-poster')
|
var torrentPoster = require('./lib/torrent-poster')
|
||||||
var WebTorrent = require('webtorrent')
|
var WebTorrent = require('webtorrent')
|
||||||
|
var cfg = require('application-config')('WebTorrent')
|
||||||
|
|
||||||
var createElement = require('virtual-dom/create-element')
|
var createElement = require('virtual-dom/create-element')
|
||||||
var diff = require('virtual-dom/diff')
|
var diff = require('virtual-dom/diff')
|
||||||
@@ -35,10 +36,7 @@ function init () {
|
|||||||
state.client = new WebTorrent()
|
state.client = new WebTorrent()
|
||||||
state.client.on('warning', onWarning)
|
state.client.on('warning', onWarning)
|
||||||
state.client.on('error', onError)
|
state.client.on('error', onError)
|
||||||
|
state.client.on('torrent', saveTorrents)
|
||||||
state.saved.torrents.forEach(function (torrent) {
|
|
||||||
state.client.add(torrent.torrentFile)
|
|
||||||
})
|
|
||||||
|
|
||||||
// For easy debugging in Developer Tools
|
// For easy debugging in Developer Tools
|
||||||
global.state = state
|
global.state = state
|
||||||
@@ -54,6 +52,8 @@ function init () {
|
|||||||
|
|
||||||
dragDrop('body', onFiles)
|
dragDrop('body', onFiles)
|
||||||
|
|
||||||
|
restoreSession()
|
||||||
|
|
||||||
chromecasts.on('update', function (player) {
|
chromecasts.on('update', function (player) {
|
||||||
state.devices.chromecast = player
|
state.devices.chromecast = player
|
||||||
update()
|
update()
|
||||||
@@ -251,6 +251,35 @@ function addTorrentEvents (torrent) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function restoreSession () {
|
||||||
|
cfg.read(function (err, data) {
|
||||||
|
if (err) console.error(err)
|
||||||
|
state.saved = data
|
||||||
|
if (!state.saved.torrents) state.saved.torrents = []
|
||||||
|
state.saved.torrents.forEach(function (torrent) {
|
||||||
|
dispatch('addTorrent', torrent.magnetURI)
|
||||||
|
})
|
||||||
|
update()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveTorrents () {
|
||||||
|
state.saved.torrents = state.client.torrents.map(function (torrent) {
|
||||||
|
return {
|
||||||
|
name: torrent.name,
|
||||||
|
magnetURI: torrent.magnetURI,
|
||||||
|
path: torrent.path
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
cfg.write({
|
||||||
|
torrents: state.saved.torrents
|
||||||
|
}, function (err) {
|
||||||
|
if (err) console.error(err)
|
||||||
|
update()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
function startServer (torrent, cb) {
|
function startServer (torrent, cb) {
|
||||||
if (state.server) return cb()
|
if (state.server) return cb()
|
||||||
|
|
||||||
@@ -286,7 +315,9 @@ function openPlayer (torrent) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function deleteTorrent (torrent) {
|
function deleteTorrent (torrent) {
|
||||||
torrent.destroy(update)
|
torrent.destroy(function () {
|
||||||
|
saveTorrents() // updates after writing to config
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function openChromecast (torrent) {
|
function openChromecast (torrent) {
|
||||||
|
|||||||
@@ -27,27 +27,20 @@ module.exports = {
|
|||||||
mouseStationarySince: 0 /* Unix time in ms */
|
mouseStationarySince: 0 /* Unix time in ms */
|
||||||
},
|
},
|
||||||
|
|
||||||
/* Saved state is read from and written to ~/.webtorrent/state.json
|
/* Saved state is read from and written to application config.
|
||||||
* It should be simple and minimal and must be JSONifiable
|
* It should be simple and minimal and must be JSON stringifiable.
|
||||||
|
*
|
||||||
|
* Config path:
|
||||||
|
*
|
||||||
|
* OS XDG ~/Library/Application Support/WebTorrent/config.json
|
||||||
|
* Linux (XDG) $XDG_CONFIG_HOME/WebTorrent/config.json
|
||||||
|
* Linux (Legacy) ~/.config/WebTorrent/config.json
|
||||||
|
* Windows (> Vista) %LOCALAPPDATA%/WebTorrent/config.json
|
||||||
|
* Windows (XP, 2000) %USERPROFILE%/Local Settings/Application Data/WebTorrent/config.json
|
||||||
|
*
|
||||||
|
* Also accessible via `require('application-config')('WebTorrent').filePath`
|
||||||
*/
|
*/
|
||||||
saved: {
|
saved: {
|
||||||
torrents: [
|
torrents: []
|
||||||
{
|
|
||||||
name: 'Sintel',
|
|
||||||
torrentFile: 'resources/sintel.torrent'
|
|
||||||
}
|
|
||||||
// {
|
|
||||||
// name: 'Elephants Dream',
|
|
||||||
// torrentFile: 'resources/ElephantsDream_archive.torrent'
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// name: 'Big Buck Bunny',
|
|
||||||
// torrentFile: 'resources/BigBuckBunny_archive.torrent'
|
|
||||||
// },
|
|
||||||
// {
|
|
||||||
// name: 'Tears of Steel',
|
|
||||||
// torrentFile: 'resources/TearsOfSteel_archive.torrent'
|
|
||||||
// }
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user