Refresh gcode visualization if the selected file is modified

This passes the file modification time to the javascript side and if
they don't match then the file is re-downloaded and parsed. The mtime
is also used in the AJAX request as it prevents the browser from serving
the new request from cache.
master
Bryan Mayland 2013-07-21 06:48:06 -04:00
parent 566933a765
commit e7f5384427
2 changed files with 14 additions and 4 deletions

View File

@ -303,10 +303,16 @@ class Printer():
formattedFilename = None
formattedFilesize = None
estimatedPrintTime = None
fileMTime = None
filament = None
if filename:
formattedFilename = os.path.basename(filename)
# Use a string for mtime because it could be float and the
# javascript needs to exact match
if not sd:
fileMTime = str(os.stat(filename).st_mtime)
if filesize:
formattedFilesize = util.getFormattedSize(filesize)
@ -317,7 +323,7 @@ class Printer():
if "filament" in fileData["gcodeAnalysis"].keys():
filament = fileData["gcodeAnalysis"]["filament"]
self._stateMonitor.setJobData({"filename": formattedFilename, "filesize": formattedFilesize, "estimatedPrintTime": estimatedPrintTime, "filament": filament, "sd": sd})
self._stateMonitor.setJobData({"filename": formattedFilename, "filesize": formattedFilesize, "estimatedPrintTime": estimatedPrintTime, "filament": filament, "sd": sd, "mtime": fileMTime})
def _sendInitialStateUpdate(self, callback):
try:

View File

@ -1098,6 +1098,7 @@ function GcodeViewModel(loginStateViewModel) {
self.loginState = loginStateViewModel;
self.loadedFilename = undefined;
self.loadedFileMTime = undefined;
self.status = 'idle';
self.enabled = false;
@ -1108,16 +1109,18 @@ function GcodeViewModel(loginStateViewModel) {
GCODE.ui.initHandlers();
}
self.loadFile = function(filename){
self.loadFile = function(filename, mtime){
if (self.status == 'idle' && self.errorCount < 3) {
self.status = 'request';
$.ajax({
url: AJAX_BASEURL + "gcodefiles/" + filename,
data: { "mtime": mtime },
type: "GET",
success: function(response, rstatus) {
if(rstatus === 'success'){
self.showGCodeViewer(response, rstatus);
self.loadedFilename=filename;
self.loadedFileMTime=mtime;
self.status = 'idle';
}
},
@ -1148,7 +1151,8 @@ function GcodeViewModel(loginStateViewModel) {
if (!self.enabled) return;
if (!data.job.filename) return;
if(self.loadedFilename && self.loadedFilename == data.job.filename) {
if(self.loadedFilename && self.loadedFilename == data.job.filename &&
self.loadedFileMTime == data.job.mtime) {
if (data.state.flags && (data.state.flags.printing || data.state.flags.paused)) {
var cmdIndex = GCODE.gCodeReader.getCmdIndexForPercentage(data.progress.progress * 100);
if(cmdIndex){
@ -1158,7 +1162,7 @@ function GcodeViewModel(loginStateViewModel) {
}
self.errorCount = 0
} else if (data.job.filename) {
self.loadFile(data.job.filename);
self.loadFile(data.job.filename, data.job.mtime);
}
}