Skip to content

Commit 929b832

Browse files
committed
Enable re-reading and sending changed files without input dialog
1 parent 03492fe commit 929b832

File tree

1 file changed

+48
-8
lines changed

1 file changed

+48
-8
lines changed

webrepl.html

Lines changed: 48 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
<strong>Send a file</strong>
6060
<input type="file" id="put-file-select" />
6161
<div id="put-file-list"></div>
62-
<input type="button" value="Send to device" id="put-file-button" onclick="put_file(); return false;" />
62+
<input type="button" value="Send to device" id="put-file-button" onclick="reread_and_put_file(); return false;" />
6363
</div>
6464

6565
<div class="file-box">
@@ -85,7 +85,9 @@
8585
var connected = false;
8686
var binary_state = 0;
8787
var put_file_name = null;
88+
var put_file_lastMod = null;
8889
var put_file_data = null;
90+
var put_file_reader = null;
8991
var get_file_name = null;
9092
var get_file_data = null;
9193

@@ -339,23 +341,61 @@
339341
ws.send(rec);
340342
}
341343

344+
function reread_and_put_file() {
345+
if(put_file_reader) put_file_reader(()=>{put_file()});
346+
}
347+
342348
function handle_put_file_select(evt) {
343349
// The event holds a FileList object which is a list of File objects,
344350
// but we only support single file selection at the moment.
345351
var files = evt.target.files;
346-
352+
var file = files[0];
353+
347354
// Get the file info and load its data.
348-
var f = files[0];
349-
put_file_name = f.name;
355+
put_file_name = file.name;
356+
put_file_lastMod = -1; // reset
357+
put_file_reader = (callback) => {
358+
read_put_file(file,callback);
359+
}
360+
document.getElementById('put-file-button').disabled = false;
361+
put_file_message('');
362+
}
363+
364+
function put_file_changed(file) {
365+
if (file && put_file_lastMod && file.lastModified !== put_file_lastMod) {
366+
var initial = put_file_lastMod===-1; // Initial load?
367+
put_file_lastMod = file.lastModified;
368+
console.log("Updating lastMod to ",put_file_lastMod);
369+
return initial ? 1 : true;
370+
}
371+
return false;
372+
}
373+
374+
function put_file_message(msg, suffix) {
375+
if (suffix) msg=escape(put_file_name) + ' - ' + put_file_data.length + ' bytes ' +msg;
376+
document.getElementById('put-file-list').innerHTML = msg;
377+
}
378+
379+
function read_put_file(file,callback) {
380+
var changed = put_file_changed(file);
381+
if (!changed) {
382+
update_file_status("[Unchanged]",true);
383+
return;
384+
}
350385
var reader = new FileReader();
351386
reader.onload = function(e) {
352387
put_file_data = new Uint8Array(e.target.result);
353-
document.getElementById('put-file-list').innerHTML = '' + escape(put_file_name) + ' - ' + put_file_data.length + ' bytes';
354-
document.getElementById('put-file-button').disabled = false;
388+
put_file_message(changed === true ? "[Changed]" : "",true);
389+
if(changed && callback) callback();
355390
};
356-
reader.readAsArrayBuffer(f);
391+
reader.onerror= function(e) {
392+
update_file_status("[Error: Must Choose File Again]")
393+
console.log("Error Reading File " + escape(put_file_name) + ': ',e.target.error);
394+
}
395+
reader.readAsArrayBuffer(file);
357396
}
358-
397+
398+
359399
document.getElementById('put-file-select').addEventListener('click', function(){
360400
this.value = null;
361401
}, false);

0 commit comments

Comments
 (0)