JSObserver will show ETA, and the 'renderComplete' message will persist
Closes #784 Closes #786
This commit is contained in:
@@ -183,8 +183,12 @@ class JSObserver(Observer):
|
|||||||
self.minrefresh = 1000*minrefresh
|
self.minrefresh = 1000*minrefresh
|
||||||
self.json = dict()
|
self.json = dict()
|
||||||
|
|
||||||
|
# function to print formatted eta
|
||||||
|
self.format = lambda seconds: '%02ih %02im %02is' % \
|
||||||
|
(seconds // 3600, (seconds % 3600) // 60, seconds % 60)
|
||||||
|
|
||||||
if (messages == False):
|
if (messages == False):
|
||||||
self.messages=dict(totalTiles="Rendering %d tiles", renderCompleted="Render completed in %02d:%02d:%02d", renderProgress="Rendered %d of %d tiles (%d%%)")
|
self.messages=dict(totalTiles="Rendering %d tiles", renderCompleted="Render completed in %02d:%02d:%02d", renderProgress="Rendered %d of %d tiles (%d%% ETA:%s)")
|
||||||
elif (isinstance(messages, dict)):
|
elif (isinstance(messages, dict)):
|
||||||
if ('totalTiles' in messages and 'renderCompleted' in messages and 'renderProgress' in messages):
|
if ('totalTiles' in messages and 'renderCompleted' in messages and 'renderProgress' in messages):
|
||||||
self.messages = messages
|
self.messages = messages
|
||||||
@@ -196,7 +200,7 @@ class JSObserver(Observer):
|
|||||||
raise Exception("JSObserver: Output directory specified (%s) doesn't appear to exist. This should be the same as the Overviewer output directory")
|
raise Exception("JSObserver: Output directory specified (%s) doesn't appear to exist. This should be the same as the Overviewer output directory")
|
||||||
|
|
||||||
self.logfile = open(os.path.join(outputdir, "progress.json"), "w+", 0)
|
self.logfile = open(os.path.join(outputdir, "progress.json"), "w+", 0)
|
||||||
self.json["message"]=""
|
self.json["message"]="Render starting..."
|
||||||
self.json["update"]=self.minrefresh
|
self.json["update"]=self.minrefresh
|
||||||
self.json["messageTime"]=time.time()
|
self.json["messageTime"]=time.time()
|
||||||
json.dump(self.json, self.logfile)
|
json.dump(self.json, self.logfile)
|
||||||
@@ -229,7 +233,7 @@ class JSObserver(Observer):
|
|||||||
minutes = duration // 60
|
minutes = duration // 60
|
||||||
seconds = duration % 60
|
seconds = duration % 60
|
||||||
self.json["message"] = self.messages["renderCompleted"] % (hours, minutes, seconds)
|
self.json["message"] = self.messages["renderCompleted"] % (hours, minutes, seconds)
|
||||||
self.json["update"] = -1 # Initially this was set to False, but that runs into some JS strangeness. -1 is less nice, but works
|
self.json["update"] = 60000 # The 'renderCompleted' message will always be visible (until the next render)
|
||||||
self.json["messageTime"] = time.time()
|
self.json["messageTime"] = time.time()
|
||||||
json.dump(self.json, self.logfile)
|
json.dump(self.json, self.logfile)
|
||||||
self.logfile.close()
|
self.logfile.close()
|
||||||
@@ -256,7 +260,12 @@ class JSObserver(Observer):
|
|||||||
refresh = max(1500*(time.time() - self.last_update_time), self.minrefresh) // 1
|
refresh = max(1500*(time.time() - self.last_update_time), self.minrefresh) // 1
|
||||||
self.logfile.seek(0)
|
self.logfile.seek(0)
|
||||||
self.logfile.truncate()
|
self.logfile.truncate()
|
||||||
self.json["message"] = self.messages["renderProgress"] % (self.get_current_value(), self.get_max_value(), self.get_percentage())
|
if self.get_current_value():
|
||||||
|
duration = time.time() - self.start_time
|
||||||
|
eta = self.format(duration * self.get_max_value() / self.get_current_value() - duration)
|
||||||
|
else:
|
||||||
|
eta = "?"
|
||||||
|
self.json["message"] = self.messages["renderProgress"] % (self.get_current_value(), self.get_max_value(), self.get_percentage(), str(eta))
|
||||||
self.json["update"] = refresh
|
self.json["update"] = refresh
|
||||||
self.json["messageTime"] = time.time()
|
self.json["messageTime"] = time.time()
|
||||||
json.dump(self.json, self.logfile)
|
json.dump(self.json, self.logfile)
|
||||||
|
|||||||
Reference in New Issue
Block a user