Commit 9b79fd6e authored by Cédric Le Ninivin's avatar Cédric Le Ninivin

Add Application Page: Can create from WebTorrent Zip

parent c7209288
......@@ -41,6 +41,9 @@
<div class="form-group">
<label>Zip File:
<input name="load-zip-file" class="load-zip-file form-control" type="file" size="30"></label>
<label>Or WebTorrent Magnet:
<input name="load-zip-magnet" class="load-zip-magnet form-control" type="text" size="60"
value=""></label>
<label>Or Zip Url:
<input name="load-zip-url" class="load-zip-url form-control" type="text" size="60"
value="apps/hello-world-template.zip"></label>
......
......@@ -145,6 +145,10 @@
.querySelector("form.crib-load-from-zip .load-zip-file").files.length !== 0) {
logAddApp(gadget, "Will load Zip from File");
promise_list.push(loadCribJSFromZipFile(gadget, event, logAddApp));
} else if (gadget.props.element
.querySelector("form.crib-load-from-zip .load-zip-magnet").value) {
logAddApp(gadget, "Will load Zip from Magnet");
promise_list.push(loadCribJSFromMagnet(gadget, event, logAddApp));
} else if (gadget.props.element
.querySelector("form.crib-load-from-zip .load-zip-url").value) {
logAddApp(gadget, "Will load Zip from Url");
......@@ -213,6 +217,28 @@
});
}
function loadCribJSFromMagnet(gadget, event, logFunction) {
return RSVP.Queue()
.push(function () {
return gadget.getDeclaredGadget("jio_cribjs");
})
.push(function (jio_cribjs_gadget) {
return jio_cribjs_gadget.loadFromMagnet({
path: document.location.href,
zip_magnet: gadget.props.element
.querySelector("form.crib-load-from-zip .load-zip-magnet").value,
from_path: gadget.props.element
.querySelector("form.crib-load-from-zip .load-from-zip-path").value,
to_path: gadget.props
.element.querySelector("form.crib-load-from-zip .load-zip-to-path").value,
application_id: "cribjs"
},
function (str) {
logFunction(gadget, str);
});
});
}
function loadCribJSFromZipUrl(gadget, event, logFunction) {
return RSVP.Queue()
.push(function () {
......@@ -309,6 +335,11 @@
.querySelector("form.crib-load-from-zip .load-zip-url")
.value = options.zip_app_url;
}
if (options.hasOwnProperty("magnet_link")) {
gadget.props.element
.querySelector("form.crib-load-from-zip .load-zip-magnet")
.value = options.magnet_link;
}
if (options.hasOwnProperty("redirect_url")) {
gadget.props.element
.querySelector("form.crib-load-from-zip .redirect-url")
......
......@@ -10,6 +10,7 @@
<script src="../lib/renderjs.js"></script>
<script src="../lib/jszip.js" type="text/javascript"></script>
<script src="../lib/mimetype.js" type="text/javascript"></script>
<script src="../lib/webtorrent.min.js" type="text/javascript"></script>
<script src="./gadget_landing_cribjs.js"></script>
</head>
<body>
......
/*jslint browser: true, indent: 2, maxlen: 80*/
/*globals RSVP, rJS,
location, console, fetch, Promise*/
(function (window, document, RSVP, rJS, location, console, JSZip, mimeType) {
(function (window, document, RSVP, rJS, location, console, JSZip, mimeType,
WebTorrent) {
"use strict";
function loadZipIntoCrib(gadget, zip, from_path, path_to_load, logFunction) {
......@@ -61,6 +62,44 @@
return RSVP.all(promise_list);
}
function downloadTorrent(gadget, torrentId, logFunction) {
logFunction("Preparing");
return RSVP.Promise(function (resolve, reject) {
var client = new WebTorrent();
client.on('error', function (err) {
reject(err.message);
});
client.add(torrentId, function (torrent) {
logFunction('Got torrent metadata!');
logFunction(
'Torrent info hash: ' + torrent.infoHash + ' ' +
'<a href="' + torrent.magnetURI +
'" target="_blank">[Magnet URI]</a> ' +
'<a href="' + torrent.torrentFileBlobURL +
'" target="_blank" download="' + torrent.name +
'.torrent">[Download .torrent]</a>'
);
// Torrents can contain many files.
// Here we suppose there is only one zip
var interval = setInterval(function () {
logFunction('Progress: ' + (torrent.progress * 100).toFixed(1) + '%');
}, 5000);
torrent.files[0].getBlob(function (error, result) {
if (error) {
reject(error);
}
resolve(result);
});
torrent.on('done', function () {
logFunction("Torrent Loaded 100%");
clearInterval(interval);
});
});
});
}
function loadContentFromZIPFile(gadget, options, logFunction) {
if (logFunction === undefined) {
logFunction = console.log;
......@@ -123,6 +162,30 @@
});
}
function loadContentFromMagnet(gadget, options, logFunction) {
if (logFunction === undefined) {
logFunction = console.log;
}
var path_to_load = options.to_path, file_list,
from_path = options.from_path, magnet_uri = options.zip_magnet,
jio_gadget, url_list = [], url_number = 0;
return new RSVP.Queue()
.push(function () {
logFunction("Fetching Torrent");
return downloadTorrent(gadget, magnet_uri, logFunction);
})
.push(JSZip.loadAsync)
.push(function (zip) {
return loadZipIntoCrib(gadget, zip, from_path, path_to_load, logFunction);
})
.push(function () {
logFunction("Imported Zip Successfully");
}, function (e) {
logFunction(e);
throw e;
});
}
rJS(window)
.ready(function (g) {
g.props = {};
......@@ -133,10 +196,14 @@
.declareMethod('loadFromZipFile', function (options, logFunction) {
return loadContentFromZIPFile(this, options, logFunction);
})
.declareMethod('loadFromMagnet', function (options, logFunction) {
return loadContentFromMagnet(this, options, logFunction);
})
.declareAcquiredMethod("crib_sw_put", "crib_sw_put")
.declareAcquiredMethod("getSetting", "getSetting")
.allowPublicAcquisition("getSetting", function (argument_list) {
return this.getSetting(argument_list[0], argument_list[1]);
});
}(window, document, RSVP, rJS, location, console, JSZip, mimeType));
\ No newline at end of file
}(window, document, RSVP, rJS, location, console, JSZip, mimeType,
WebTorrent));
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment