no abort; instead skip

This commit is contained in:
Felipe Gasper
2017-10-22 16:20:01 -05:00
parent 6026bd44c3
commit 3d2687768f
5 changed files with 87 additions and 53 deletions
+4
View File
@@ -21,6 +21,10 @@ app.get('/main.js', function(req, res){
res.sendFile(__dirname + '/main.js');
});
app.get('/js/*.js', function(req, res){
res.sendFile(__dirname + req.url);
});
const SHELL_ARGS = {
bash: ['--login'],
'cmd.exe': [],
+3 -3
View File
@@ -10,7 +10,7 @@
<script src="/build/xterm.js" ></script>
<script src="/build/addons/attach/attach.js" ></script>
<script src="/build/addons/zmodem/zmodemjs/dist/zmodem.js" ></script>
<script src="/js/zmodem.devel.js" ></script>
<script src="/build/addons/zmodem/zmodem.js" ></script>
<script src="/build/addons/fit/fit.js" ></script>
@@ -57,7 +57,7 @@
<form id="zm_progress" style="display: none" action="javascript:void(0)">
<div><span id="percent_received"></span>% (<span id="bytes_received"></span> bytes) received</div>
<button type="button" onclick="abort_current_session(); this.form.style.display='none';">Abort ZMODEM</button>
<button id="zm_progress_skipper" type="button" onclick="skip_current_file();">Skip File</button>
</form>
<form id="zm_choose" style="display: none" action="javascript:void(0)">
@@ -123,7 +123,7 @@
</div>
</div>
<p><strong>Attention:</strong> The demo is a barebones implementation and is designed for xterm.js evaluation purposes only. Exposing the demo to the public as is would introduce security risks for the host.</p>
<p><sup>*</sup> ZMODEM file transfers are supported via an addon. To try it out, install <a href="https://ohse.de/uwe/software/lrzsz.html"><code>lrzsz</code></a> onto the remote peer, then type <code>rz</code> to send from your browser or <code>sz &lt;file&gt;</code> to send from the remote peer.</p>
<p><sup>*</sup> ZMODEM file transfers are supported via an addon. To try it out, install <a href="https://ohse.de/uwe/software/lrzsz.html"><code>lrzsz</code></a> onto the remote peer, then run <code>rz</code> to send from your browser or <code>sz &lt;file&gt;</code> to send from the remote peer.</p>
<script src="main.js" defer ></script>
</body>
</html>
+1
View File
@@ -0,0 +1 @@
../../node_modules/zmodem.js/dist/zmodem.devel.js
+1
View File
@@ -0,0 +1 @@
../../node_modules/zmodem.js/dist/zmodem.js
+78 -50
View File
@@ -121,23 +121,21 @@ function createTerminal() {
term.on("zmodemDetect", (detection) => {
function do_zmodem() {
try {
term.detach();
let zsession = detection.confirm();
term.detach();
let zsession = detection.confirm();
current_zsession = zsession;
var promise;
if (zsession.type === "receive") {
_handle_receive_session(zsession);
}
else {
_handle_send_session(zsession);
}
if (zsession.type === "receive") {
promise = _handle_receive_session(zsession);
}
catch(e) { throw e }
finally {
else {
promise = _handle_send_session(zsession);
}
promise.catch( console.error.bind(console) ).then( () => {
term.attach(socket);
}
} );
}
if (_auto_zmodem()) {
@@ -191,15 +189,26 @@ function _save_to_disk(xfer, buffer) {
return Zmodem.Browser.save_to_disk(buffer, xfer.get_details().name);
}
function _update_progress(xfer) {
document.getElementById("zm_progress").style.display = "";
var skipper_button = document.getElementById("zm_progress_skipper");
var skipper_button_orig_text = skipper_button.textContent;
function _show_progress() {
skipper_button.disabled = false;
skipper_button.textContent = skipper_button_orig_text;
document.getElementById("bytes_received").textContent = 0;
document.getElementById("percent_received").textContent = 0;
document.getElementById("zm_progress").style.display = "";
}
function _update_progress(xfer) {
var total_in = xfer.get_offset();
document.getElementById("bytes_received").textContent = total_in;
var percent_received = 100 * total_in / xfer.get_details().size;
document.getElementById("percent_received").textContent = percent_received;
document.getElementById("percent_received").textContent = percent_received.toFixed(2);
}
function _hide_progress() {
@@ -217,6 +226,8 @@ function _auto_zmodem() {
function _handle_receive_session(zsession) {
zsession.on("offer", function(xfer) {
current_receive_xfer = xfer;
_show_file_info(xfer);
var offer_form = document.getElementById("zm_offer");
@@ -226,7 +237,9 @@ function _handle_receive_session(zsession) {
//START
//if (offer_form.zmaccept.value) {
if (document.getElementById("zmaccept_yes").checked) {
if (_auto_zmodem() || document.getElementById("zmaccept_yes").checked) {
_show_progress();
var FILE_BUFFER = [];
xfer.on("input", (payload) => {
_update_progress(xfer);
@@ -254,54 +267,69 @@ function _handle_receive_session(zsession) {
}
} );
zsession.on("session_end", () => {
_hide_file_info();
_hide_progress();
var promise = new Promise( (res) => {
zsession.on("session_end", () => {
_hide_file_info();
_hide_progress();
res();
} );
} );
zsession.start();
return promise;
}
function _handle_send_session(zsession) {
var choose_form = document.getElementById("zm_choose");
choose_form.style.display = "";
choose_form.onsubmit = function(e) {
choose_form.style.display = "none";
var file_el = document.getElementById("zm_files");
var files_obj = file_el.files;
var promise = new Promise( (res) => {
choose_form.onsubmit = function(e) {
choose_form.style.display = "none";
Zmodem.Browser.send_files(
zsession,
files_obj,
{
on_offer_response(obj, xfer) {
//console.log("offer", xfer ? "accepted" : "skipped");
},
on_progress(obj, xfer) {
_update_progress(xfer);
},
on_file_complete(obj) {
//console.log("COMPLETE", obj);
_hide_progress();
},
}
).then(_hide_progress).then(
zsession.close.bind(zsession),
console.error.bind(console)
).then( () => {
_hide_file_info();
_hide_progress();
} );
};
var file_el = document.getElementById("zm_files");
var files_obj = file_el.files;
Zmodem.Browser.send_files(
zsession,
files_obj,
{
on_offer_response(obj, xfer) {
if (xfer) _show_progress();
//console.log("offer", xfer ? "accepted" : "skipped");
},
on_progress(obj, xfer) {
_update_progress(xfer);
},
on_file_complete(obj) {
//console.log("COMPLETE", obj);
_hide_progress();
},
}
).then(_hide_progress).then(
zsession.close.bind(zsession),
console.error.bind(console)
).then( () => {
_hide_file_info();
_hide_progress();
res();
} );
};
} );
return promise;
}
//This is here to allow canceling of an in-progress ZMODEM transfer.
var current_zsession;
var current_receive_xfer;
//Called from HTML directly.
function abort_current_session() {
current_zsession.abort();
function skip_current_file() {
current_receive_xfer.skip();
skipper_button.disabled = true;
skipper_button.textContent = "Waiting for server to acknowledge skip …";
}
function runRealTerminal() {