Skip to content

Enable re-reading and sending changed files without input dialog #51

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 48 additions & 13 deletions webrepl.html
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
<strong>Send a file</strong>
<input type="file" id="put-file-select" />
<div id="put-file-list"></div>
<input type="button" value="Send to device" id="put-file-button" onclick="put_file(); return false;" />
<input type="button" value="Send to device" id="put-file-button" onclick="reread_and_put_file(); return false;" />
</div>

<div class="file-box">
Expand All @@ -84,7 +84,8 @@
var ws;
var connected = false;
var binary_state = 0;
var put_file_name = null;
var put_file_file = null;
var put_file_lastMod = null;
var put_file_data = null;
var get_file_name = null;
var get_file_data = null;
Expand Down Expand Up @@ -190,9 +191,10 @@
case 12:
// final response for put
if (decode_resp(data) == 0) {
update_file_status('Sent ' + put_file_name + ', ' + put_file_data.length + ' bytes');
update_file_status('Sent ' + put_file_file.name + ', ' +
put_file_data.length + ' bytes');
} else {
update_file_status('Failed sending ' + put_file_name);
update_file_status('Failed sending ' + put_file_file.name);
}
binary_state = 0;
break;
Expand Down Expand Up @@ -272,7 +274,7 @@
}

function put_file() {
var dest_fname = put_file_name;
var dest_fname = put_file_file.name;
var dest_fsize = put_file_data.length;

// WEBREPL_FILE = "<2sBBQLH64s"
Expand All @@ -294,7 +296,7 @@

// initiate put
binary_state = 11;
update_file_status('Sending ' + put_file_name + '...');
update_file_status('Sending ' + put_file_file.name + '...');
ws.send(rec);
}

Expand Down Expand Up @@ -339,23 +341,56 @@
ws.send(rec);
}

function reread_and_put_file() {
if(put_file) read_put_file(put_file_file,function(){put_file()});
}

function handle_put_file_select(evt) {
// The event holds a FileList object which is a list of File objects,
// but we only support single file selection at the moment.
var files = evt.target.files;

put_file_file = files[0];

// Get the file info and load its data.
var f = files[0];
put_file_name = f.name;
put_file_lastMod = -1; // reset
document.getElementById('put-file-button').disabled = false;
put_file_message('');
}

function put_file_changed(file) {
if (file && put_file_lastMod && file.lastModified !== put_file_lastMod) {
var initial = put_file_lastMod===-1; // Initial load?
put_file_lastMod = file.lastModified;
return initial ? 1 : true;
}
return false;
}

function put_file_message(msg, suffix) {
if (suffix) msg=escape(put_file.name) + ' - ' + put_file_data.length + ' bytes ' +msg;
document.getElementById('put-file-list').innerHTML = msg;
}

function read_put_file(file,callback) {
var changed = put_file_changed(file);
if (!changed) {
update_file_status("Unchanged: Re-choose file to resend",true);
return;
}
var reader = new FileReader();
reader.onload = function(e) {
put_file_data = new Uint8Array(e.target.result);
document.getElementById('put-file-list').innerHTML = '' + escape(put_file_name) + ' - ' + put_file_data.length + ' bytes';
document.getElementById('put-file-button').disabled = false;
put_file_message(changed === true ? "[Changed]" : "",true);
if(changed && callback) callback();
};
reader.readAsArrayBuffer(f);
reader.onerror= function(e) {
update_file_status("File Changed: Must Re-choose")
console.log("Error Reading File " + escape(put_file.name) + ': ',e.target.error);
}
reader.readAsArrayBuffer(file);
}



document.getElementById('put-file-select').addEventListener('click', function(){
this.value = null;
}, false);
Expand Down