From df190dda02138f2a4473bd2d0802985046e74eaf Mon Sep 17 00:00:00 2001 From: j Date: Sun, 6 Dec 2020 13:42:13 +0100 Subject: [PATCH] store sequence on server --- server.py | 31 +++++++++++++++++++++++++++---- static/js/cccc.js | 33 +++++++++++++++++++++++++-------- 2 files changed, 52 insertions(+), 12 deletions(-) diff --git a/server.py b/server.py index be84e8d..aba5e83 100755 --- a/server.py +++ b/server.py @@ -33,7 +33,8 @@ with open('camera.json') as fd: state = { 'time': {}, - 'status': 'Idle' + 'status': 'Idle', + 'sequence': [], } def run_async(func): @@ -90,7 +91,6 @@ class ControlQueue: self.q.put(None) self._worker.join() - class API(object): def __call__(self, method, kwargs): @@ -98,7 +98,8 @@ class API(object): def getPresets(self, **data): result = {} - result['presets'] = ctl.camera.get_presets(True) + #result['presets'] = ctl.camera.get_presets(True) + result['presets'] = [] return result def setPreset(self, **data): @@ -163,6 +164,17 @@ class API(object): result['position'] = ctl.camera.last_position return result + def updateSequence(self, **data): + print('updateSequence') + state['sequence'] = data['sequence'] + with open('sequence.json', 'w') as fd: + json.dump(state['sequence'], fd, indent=4, ensure_ascii=False) + + def getSequence(self, **data): + result = {} + result['sequence'] = state['sequence'] + return result + #@run_async def api_task(request, callback): api = API() @@ -216,9 +228,20 @@ class MainHandler(tornado.web.RequestHandler): self.set_header('Expires', '0') self.write(content) +def load_sequence(): + if os.path.exists('sequence.json'): + try: + with open('sequence.json') as fd: + data = json.load(fd) + except: + data = [] + state['sequence'] = data + def main(): global ctl ctl = ControlQueue() + load_sequence() + handlers = [ (r'/api/', RPCHandler), (r'/static/(.*)', StaticFileHandler, {'path': STATIC_PATH}), @@ -230,7 +253,7 @@ def main(): 'gzip': True, } app = Application(handlers, **options) - print('listening on http://%s:%s/' % (ADDRESS, PORT)) + print('listening on http://%s:%s/' % (ADDRESS, PORT)) app.listen(PORT, ADDRESS) main = IOLoop.instance() diff --git a/static/js/cccc.js b/static/js/cccc.js index 5998dc0..317f29f 100644 --- a/static/js/cccc.js +++ b/static/js/cccc.js @@ -51,6 +51,7 @@ if (value == null || value == undefined || !value.length || !isInt(value)) { } } +var currentSequence; var presets = []; var system_presets = [ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, @@ -320,10 +321,13 @@ function totalDuration() { function updateStatus() { api('status', {}, function(response) { if (response.result) { + var gotSelection = grid.getSelectedRows().length > 0 + var disabled = !gotSelection || response.result.status == 'Active' + $('#status').html(response.result.status) $('button.run').attr({disabled: response.result.status == 'Active'}) - $('button.run_from').attr({disabled: response.result.status == 'Active'}) - $('button.continue_from').attr({disabled: response.result.status == 'Active'}) + $('button.run_from').attr({disabled: disabled}) + $('button.continue_from').attr({disabled: disabled}) $('button.stop').attr({disabled: response.result.status != 'Active'}) if (response.result.duration && response.result.status == 'Active') { $('#duration').html(formatDuration(response.result.duration)) @@ -373,7 +377,17 @@ function updateStatus() { seq.seqid = uuidv4() } }) - localStorage.sequence = JSON.stringify(data) + var sequence = JSON.stringify(data.map(step => { + step = Object.assign({}, step) + delete step.duration + delete step.status + return step + })) + if (sequence != currentSequence) { + console.log('updateSequence') + currentSequence = sequence + api('updateSequence', {sequence: data}, function() {}) + } var gotSelection = grid.getSelectedRows().length > 0 $('button.goto').attr({disabled: !gotSelection}) @@ -608,8 +622,9 @@ $('button.all_presets').on({click: function() { $('input.import_sequence').on({change: function() { var reader = new FileReader() reader.onload = function(event) { - localStorage.sequence = reader.result - loadData(JSON.parse(reader.result)) + var sequence = JSON.parse(reader.result) + api('updateSequence', {sequence: sequence}, function() {}) + loadData(sequence) } reader.readAsText(this.files[0]); }}) @@ -654,9 +669,11 @@ function shiftPresets(offset, callback) { function init() { api('getPresets', {}, function(response) { presets = response.result.presets - loadData(JSON.parse(localStorage.sequence || '[]')) - updateStatus() - setInterval(updateStatus, 1000) + api('getSequence', {}, function(response) { + loadData(response.result.sequence) + updateStatus() + setInterval(updateStatus, 1000) + }) }) }