diff --git a/src/app/app.js b/src/app/app.js index f40587f..bec494d 100644 --- a/src/app/app.js +++ b/src/app/app.js @@ -173,11 +173,21 @@ class App extends Component { changeLanguage(lang, () => this.forceUpdate()) }) - const processTorrents = (files) => { + const processTorrents = async (files) => { if(!files || files.length == 0) return - torrentSocket.emit('dropTorrents', Array.from(files).filter(file => (file.type == 'application/x-bittorrent' || file.type == '')).map(file => file.path)) + files = await Promise.all(Array.from(files).filter(file => (file.type == 'application/x-bittorrent' || file.type == '')).map(file => { + if(file.path) + return {path: file.path}; + + return new Promise(resolve => { + const reader = new FileReader(); + reader.onload = () => resolve({data: reader.result}); + reader.readAsArrayBuffer(file); + }) + })); + torrentSocket.emit('dropTorrents', files); } document.addEventListener('dragover', (event) => { diff --git a/src/background/spider.js b/src/background/spider.js index de364ec..724b44a 100644 --- a/src/background/spider.js +++ b/src/background/spider.js @@ -791,12 +791,11 @@ module.exports = function (send, recive, dataDirectory, version, env) recive('dropTorrents', (pathTorrents) => { logT('drop', 'drop torrents and replicate from original torrent files') - const torrents = _.flatten(pathTorrents.map(path => directoryFilesRecursive(path))) - .filter(path => mime.getType(path) == 'application/x-bittorrent') - .map(path => { + const addTorrents = (torrents) => { + torrents.map(({data, path}) => { try { return ({ - torrent: parseTorrent(fs.readFileSync(path)), + torrent: parseTorrent(data), path }) } catch(err) { @@ -804,11 +803,21 @@ module.exports = function (send, recive, dataDirectory, version, env) } }) .filter(torrent => torrent) - torrents.forEach(({torrent, path}) => { - insertMetadata(torrent, torrent.infoHashBuffer, {address: '127.0.0.1', port: 666}) - logT('drop', 'copied torrent to db:', path) - }) - logT('drop', 'torrent finish adding to db') + .forEach(({torrent, path}) => { + insertMetadata(torrent, torrent.infoHashBuffer, {address: '127.0.0.1', port: 666}) + logT('drop', 'copied torrent to db:', path) + }) + logT('drop', 'torrent finish adding to db') + } + + if(pathTorrents[0].data) { + addTorrents(pathTorrents.map(({data}) => ({data, path: '.'}))); + } else { + const torrents = _.flatten(pathTorrents.map(({path}) => directoryFilesRecursive(path))) + .filter(path => mime.getType(path) == 'application/x-bittorrent') + .map(path => ({data: fs.readFileSync(path), path})); + addTorrents(torrents); + } }) checkInternet((connected) => {