diff --git a/octoprint/gcodefiles.py b/octoprint/gcodefiles.py
index cc88bcb..f4cfb41 100644
--- a/octoprint/gcodefiles.py
+++ b/octoprint/gcodefiles.py
@@ -117,6 +117,11 @@ class GcodeManager:
if file:
absolutePath = self.getAbsolutePath(file.filename, mustExist=False)
if absolutePath is not None:
+ if file.filename in self._metadata.keys():
+ # delete existing metadata entry, since the file is going to get overwritten
+ del self._metadata[file.filename]
+ self._metadataDirty = True
+ self._saveMetadata()
file.save(absolutePath)
self._metadataAnalyzer.addFileToQueue(os.path.basename(absolutePath))
return self._getBasicFilename(absolutePath)
@@ -136,9 +141,9 @@ class GcodeManager:
"""
Returns the absolute path of the given filename in the gcode upload folder.
- Ensures that
+ Ensures that the file
- - The file has the extension ".gcode"
+ - has the extension ".gcode"
- exists and is a file (not a directory) if "mustExist" is set to True
@@ -175,6 +180,7 @@ class GcodeManager:
fileData = {
"name": filename,
"size": util.getFormattedSize(statResult.st_size),
+ "bytes": statResult.st_size,
"date": util.getFormattedDateTime(datetime.datetime.fromtimestamp(statResult.st_ctime))
}
@@ -250,6 +256,32 @@ class GcodeManager:
self.setFileMetadata(filename, metadata)
self._saveMetadata()
+ def changeLastPrintSuccess(self, filename, succeeded):
+ filename = self._getBasicFilename(filename)
+ absolutePath = self.getAbsolutePath(filename)
+ if absolutePath is None:
+ return
+
+ metadata = self.getFileMetadata(filename)
+ if metadata is None:
+ return
+
+ if "prints" in metadata.keys():
+ if "last" in metadata.keys() and metadata["prints"]["last"] is not None:
+ currentSucceeded = metadata["prints"]["last"]["success"]
+ if currentSucceeded != succeeded:
+ metadata["prints"]["last"]["success"] = succeeded
+ if currentSucceeded:
+ # last print job was counted as success but actually failed
+ metadata["prints"]["success"] -= 1
+ metadata["prints"]["failure"] += 1
+ else:
+ # last print job was counted as a failure but actually succeeded
+ metadata["prints"]["success"] += 1
+ metadata["prints"]["failure"] -= 1
+ self.setFileMetadata(filename, metadata)
+ self._saveMetadata()
+
#~~ analysis control
def pauseAnalysis(self):
diff --git a/octoprint/printer.py b/octoprint/printer.py
index de14b6d..14edf8b 100644
--- a/octoprint/printer.py
+++ b/octoprint/printer.py
@@ -262,7 +262,7 @@ class Printer():
self._stateMonitor.setProgress({"progress": self._progress, "printTime": formattedPrintTime, "printTimeLeft": formattedPrintTimeLeft})
def _addTemperatureData(self, temp, bedTemp, targetTemp, bedTargetTemp):
- currentTimeUtc = int((time.time() + time.timezone) * 1000)
+ currentTimeUtc = int(time.time() * 1000)
self._temps["actual"].append((currentTimeUtc, temp))
self._temps["actual"] = self._temps["actual"][-300:]
diff --git a/octoprint/static/gcodeviewer/lib/modernizr.custom.09684.js b/octoprint/static/js/modernizr.custom.js
similarity index 97%
rename from octoprint/static/gcodeviewer/lib/modernizr.custom.09684.js
rename to octoprint/static/js/modernizr.custom.js
index c41c11b..7c48dd8 100644
--- a/octoprint/static/gcodeviewer/lib/modernizr.custom.09684.js
+++ b/octoprint/static/js/modernizr.custom.js
@@ -1,5 +1,5 @@
/* Modernizr 2.6.2 (Custom Build) | MIT & BSD
- * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load
+ * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-gamepad-load
*/
;
@@ -812,4 +812,16 @@ window.Modernizr = (function( window, document, undefined ) {
/*yepnope1.5.4|WTFPL*/
(function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f