feat(drop): support drop torrent file from web version #99
This commit is contained in:
@ -173,11 +173,21 @@ class App extends Component {
|
|||||||
changeLanguage(lang, () => this.forceUpdate())
|
changeLanguage(lang, () => this.forceUpdate())
|
||||||
})
|
})
|
||||||
|
|
||||||
const processTorrents = (files) => {
|
const processTorrents = async (files) => {
|
||||||
if(!files || files.length == 0)
|
if(!files || files.length == 0)
|
||||||
return
|
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) => {
|
document.addEventListener('dragover', (event) => {
|
||||||
|
@ -791,12 +791,11 @@ module.exports = function (send, recive, dataDirectory, version, env)
|
|||||||
|
|
||||||
recive('dropTorrents', (pathTorrents) => {
|
recive('dropTorrents', (pathTorrents) => {
|
||||||
logT('drop', 'drop torrents and replicate from original torrent files')
|
logT('drop', 'drop torrents and replicate from original torrent files')
|
||||||
const torrents = _.flatten(pathTorrents.map(path => directoryFilesRecursive(path)))
|
const addTorrents = (torrents) => {
|
||||||
.filter(path => mime.getType(path) == 'application/x-bittorrent')
|
torrents.map(({data, path}) => {
|
||||||
.map(path => {
|
|
||||||
try {
|
try {
|
||||||
return ({
|
return ({
|
||||||
torrent: parseTorrent(fs.readFileSync(path)),
|
torrent: parseTorrent(data),
|
||||||
path
|
path
|
||||||
})
|
})
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
@ -804,11 +803,21 @@ module.exports = function (send, recive, dataDirectory, version, env)
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
.filter(torrent => torrent)
|
.filter(torrent => torrent)
|
||||||
torrents.forEach(({torrent, path}) => {
|
.forEach(({torrent, path}) => {
|
||||||
insertMetadata(torrent, torrent.infoHashBuffer, {address: '127.0.0.1', port: 666})
|
insertMetadata(torrent, torrent.infoHashBuffer, {address: '127.0.0.1', port: 666})
|
||||||
logT('drop', 'copied torrent to db:', path)
|
logT('drop', 'copied torrent to db:', path)
|
||||||
})
|
})
|
||||||
logT('drop', 'torrent finish adding to db')
|
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) => {
|
checkInternet((connected) => {
|
||||||
|
Reference in New Issue
Block a user