mirror of
https://github.com/leoherzog/TorrentParts.git
synced 2026-01-24 04:08:04 -08:00
Add Button to Fetch Files List from Peers
This commit is contained in:
@@ -48,8 +48,8 @@
|
|||||||
<label for="announce">Tracker URLs</label>
|
<label for="announce">Tracker URLs</label>
|
||||||
<button id="addTrackers">
|
<button id="addTrackers">
|
||||||
<span class="fa-stack fa-2x">
|
<span class="fa-stack fa-2x">
|
||||||
<i class="fas fa-cloud fa-stack-2x"></i>
|
<span class="fas fa-cloud fa-stack-2x"></span>
|
||||||
<i class="fas fa-plus fa-stack-1x fa-inverse" data-fa-transform="down-2"></i>
|
<span class="fas fa-plus fa-stack-1x fa-inverse" data-fa-transform="down-2"></span>
|
||||||
</span>
|
</span>
|
||||||
</button>
|
</button>
|
||||||
<button id="addTracker" data-type="announce">
|
<button id="addTracker" data-type="announce">
|
||||||
@@ -74,6 +74,9 @@
|
|||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="files">Files</label>
|
<label for="files">Files</label>
|
||||||
|
<button id="getFiles">
|
||||||
|
<span class="fad fa-chart-network"></span>
|
||||||
|
</button>
|
||||||
<table id="files">
|
<table id="files">
|
||||||
<tbody id="filesBody"></tbody>
|
<tbody id="filesBody"></tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|||||||
@@ -10,7 +10,8 @@
|
|||||||
"clipboard": "latest",
|
"clipboard": "latest",
|
||||||
"dropzone": "latest",
|
"dropzone": "latest",
|
||||||
"mime-types": "latest",
|
"mime-types": "latest",
|
||||||
"parse-torrent": "latest"
|
"parse-torrent": "latest",
|
||||||
|
"webtorrent": "latest"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"watchify": "latest"
|
"watchify": "latest"
|
||||||
|
|||||||
57
parse.js
57
parse.js
@@ -3,6 +3,7 @@ const parser = require('parse-torrent');
|
|||||||
const Buffer = require('Buffer');
|
const Buffer = require('Buffer');
|
||||||
const bytes = require('bytes');
|
const bytes = require('bytes');
|
||||||
const mime = require('mime-types');
|
const mime = require('mime-types');
|
||||||
|
const WebTorrent = require('webtorrent');
|
||||||
|
|
||||||
var properties = document.getElementById('properties');
|
var properties = document.getElementById('properties');
|
||||||
var originalSourceIcon = document.getElementById('originalSourceIcon');
|
var originalSourceIcon = document.getElementById('originalSourceIcon');
|
||||||
@@ -20,10 +21,12 @@ var urlList = document.getElementById('urlList');
|
|||||||
var addWebseed = document.getElementById('addWebseed');
|
var addWebseed = document.getElementById('addWebseed');
|
||||||
var removeWebseeds = document.getElementById('removeWebseeds');
|
var removeWebseeds = document.getElementById('removeWebseeds');
|
||||||
var files = document.getElementById('filesBody');
|
var files = document.getElementById('filesBody');
|
||||||
|
var getFiles = document.getElementById('getFiles');
|
||||||
var copyURL = document.getElementById('copyURL');
|
var copyURL = document.getElementById('copyURL');
|
||||||
var copyMagnet = document.getElementById('copyMagnet');
|
var copyMagnet = document.getElementById('copyMagnet');
|
||||||
var downloadTorrent = document.getElementById('downloadTorrent');
|
var downloadTorrent = document.getElementById('downloadTorrent');
|
||||||
var parsed;
|
var parsed;
|
||||||
|
var client = new WebTorrent();
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', start);
|
document.addEventListener('DOMContentLoaded', start);
|
||||||
|
|
||||||
@@ -40,11 +43,16 @@ function start() {
|
|||||||
|
|
||||||
document.getElementById('torrent').addEventListener('change', function(event) {
|
document.getElementById('torrent').addEventListener('change', function(event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
event.target.files[0].arrayBuffer().then(function(arrayBuffer) {
|
try {
|
||||||
originalSourceIcon.innerHTML = '<span class="fad fa-file fa-fw"></span>';
|
event.target.files[0].arrayBuffer().then(function(arrayBuffer) {
|
||||||
originalSourceIcon.title = 'Originally sourced from Torrent file';
|
originalSourceIcon.innerHTML = '<span class="fad fa-file fa-fw"></span>';
|
||||||
parse(Buffer.from(arrayBuffer));
|
originalSourceIcon.title = 'Originally sourced from Torrent file';
|
||||||
});
|
parse(Buffer.from(arrayBuffer));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
catch(e) {
|
||||||
|
console.error(e); // TODO: Alert user to error
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let copyurl = new clipboard('#copyURL');
|
let copyurl = new clipboard('#copyURL');
|
||||||
@@ -77,6 +85,7 @@ function start() {
|
|||||||
removeTrackers.addEventListener('click', () => removeAllRows('announce'));
|
removeTrackers.addEventListener('click', () => removeAllRows('announce'));
|
||||||
addWebseed.addEventListener('click', addRow);
|
addWebseed.addEventListener('click', addRow);
|
||||||
removeWebseeds.addEventListener('click', () => removeAllRows('urlList'));
|
removeWebseeds.addEventListener('click', () => removeAllRows('urlList'));
|
||||||
|
getFiles.addEventListener('click', getFilesFromPeers);
|
||||||
|
|
||||||
if (window.location.hash) {
|
if (window.location.hash) {
|
||||||
originalSourceIcon.innerHTML = '<span class="fad fa-link fa-fw"></span>';
|
originalSourceIcon.innerHTML = '<span class="fad fa-link fa-fw"></span>';
|
||||||
@@ -92,7 +101,7 @@ function parse(toLoad) {
|
|||||||
parsed = parser(toLoad);
|
parsed = parser(toLoad);
|
||||||
display();
|
display();
|
||||||
if (parsed.xs) {
|
if (parsed.xs) {
|
||||||
console.log("Magnet includes xs, attempting remote parse");
|
console.info("Magnet includes xs, attempting remote parse");
|
||||||
parseRemote(parsed.xs);
|
parseRemote(parsed.xs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -177,17 +186,19 @@ function display() {
|
|||||||
|
|
||||||
files.innerHTML = "";
|
files.innerHTML = "";
|
||||||
if (parsed.files && parsed.files.length) {
|
if (parsed.files && parsed.files.length) {
|
||||||
downloadTorrent.addEventListener('click', saveTorrent);
|
getFiles.disabled = true;
|
||||||
downloadTorrent.disabled = false;
|
|
||||||
for (let file of parsed.files) {
|
for (let file of parsed.files) {
|
||||||
let icon = getFontAwesomeIconForMimetype(mime.lookup(file.name));
|
let icon = getFontAwesomeIconForMimetype(mime.lookup(file.name));
|
||||||
files.appendChild(createFileRow(icon, file.name, file.length));
|
files.appendChild(createFileRow(icon, file.name, file.length));
|
||||||
}
|
}
|
||||||
files.appendChild(createFileRow('folder-tree', '', parsed.length));
|
files.appendChild(createFileRow('folder-tree', '', parsed.length));
|
||||||
|
downloadTorrent.addEventListener('click', saveTorrent);
|
||||||
|
downloadTorrent.disabled = false;
|
||||||
} else {
|
} else {
|
||||||
|
getFiles.disabled = false;
|
||||||
|
files.innerHTML = "<em>Files information isn't included in the URL/File provided</em>";
|
||||||
downloadTorrent.removeEventListener('click', saveTorrent);
|
downloadTorrent.removeEventListener('click', saveTorrent);
|
||||||
downloadTorrent.disabled = true;
|
downloadTorrent.disabled = true;
|
||||||
files.innerHTML = "<em>Files information isn't included in the URL/File provided</em>";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
copyURL.setAttribute('data-clipboard-text', window.location.origin + "#" + parser.toMagnetURI(parsed));
|
copyURL.setAttribute('data-clipboard-text', window.location.origin + "#" + parser.toMagnetURI(parsed));
|
||||||
@@ -268,6 +279,9 @@ function resetProperties() {
|
|||||||
hash.value = "";
|
hash.value = "";
|
||||||
announce.innerHTML = "";
|
announce.innerHTML = "";
|
||||||
urlList.innerHTML = "";
|
urlList.innerHTML = "";
|
||||||
|
client.torrents.forEach(torrent => torrent.destroy());
|
||||||
|
getFiles.disabled = false;
|
||||||
|
getFiles.innerHTML = '<span class="fad fa-chart-network"></span>';
|
||||||
files.innerHTML = "";
|
files.innerHTML = "";
|
||||||
window.location.hash = "";
|
window.location.hash = "";
|
||||||
copyURL.setAttribute('data-clipboard-text', "");
|
copyURL.setAttribute('data-clipboard-text', "");
|
||||||
@@ -277,7 +291,7 @@ function resetProperties() {
|
|||||||
|
|
||||||
async function addCurrentTrackers() {
|
async function addCurrentTrackers() {
|
||||||
addTrackers.disabled = true;
|
addTrackers.disabled = true;
|
||||||
addTrackers.classList.add('fa-blink');
|
addTrackers.innerHTML = '<span class="fa-blink fa-stack fa-2x"><span class="fas fa-cloud fa-stack-2x"></span><span class="fas fa-plus fa-stack-1x fa-inverse" data-fa-transform="down-2"></span></span>'
|
||||||
try {
|
try {
|
||||||
let response = await fetch("https://newtrackon.com/api/100"); // get trackers with 100% uptime
|
let response = await fetch("https://newtrackon.com/api/100"); // get trackers with 100% uptime
|
||||||
let trackers = await response.text();
|
let trackers = await response.text();
|
||||||
@@ -288,7 +302,7 @@ async function addCurrentTrackers() {
|
|||||||
catch(e) {
|
catch(e) {
|
||||||
console.error(e); // TODO: Alert user to error
|
console.error(e); // TODO: Alert user to error
|
||||||
}
|
}
|
||||||
addTrackers.classList.remove('fa-blink');
|
addTrackers.innerHTML = '<span class="fa-stack fa-2x"><span class="fas fa-cloud fa-stack-2x"></span><span class="fas fa-plus fa-stack-1x fa-inverse" data-fa-transform="down-2"></span></span>'
|
||||||
addTrackers.disabled = false;
|
addTrackers.disabled = false;
|
||||||
display();
|
display();
|
||||||
}
|
}
|
||||||
@@ -300,7 +314,6 @@ function removeAllRows(type) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function addRow() {
|
function addRow() {
|
||||||
console.log(this.dataset.type);
|
|
||||||
parsed[this.dataset.type].push("");
|
parsed[this.dataset.type].push("");
|
||||||
display();
|
display();
|
||||||
}
|
}
|
||||||
@@ -315,6 +328,26 @@ function updateModified() {
|
|||||||
parsed.createdBy = "Torrent Parts <https://torrent.parts/>";
|
parsed.createdBy = "Torrent Parts <https://torrent.parts/>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getFilesFromPeers() {
|
||||||
|
console.info("Attempting fetching files from Webtorrent");
|
||||||
|
parsed.announce.push("wss://tracker.webtorrent.io");
|
||||||
|
parsed.announce.push("wss://tracker.openwebtorrent.com");
|
||||||
|
parsed.announce.push("wss://tracker.btorrent.xyz");
|
||||||
|
parsed.announce.push("wss://tracker.fastcast.nz");
|
||||||
|
parsed.announce = parsed.announce.filter((v,i) => v && parsed.announce.indexOf(v) === i); // remove duplicates and empties
|
||||||
|
display();
|
||||||
|
getFiles.disabled = true;
|
||||||
|
getFiles.innerHTML = '<span class="fa-blink fad fa-chart-network"></span>';
|
||||||
|
client.add(parser.toMagnetURI(parsed), (torrent) => {
|
||||||
|
parsed.files = torrent.files;
|
||||||
|
parsed.infoBuffer = torrent.infoBuffer;
|
||||||
|
parsed.length = torrent.length;
|
||||||
|
getFiles.innerHTML = '<span class="fad fa-chart-network"></span>';
|
||||||
|
display();
|
||||||
|
torrent.destroy();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// https://stackoverflow.com/a/36899900/2700296
|
// https://stackoverflow.com/a/36899900/2700296
|
||||||
function saveTorrent() {
|
function saveTorrent() {
|
||||||
let data = parser.toTorrentFile(parsed);
|
let data = parser.toTorrentFile(parsed);
|
||||||
|
|||||||
Reference in New Issue
Block a user