From efaab54dc697d297cf3231920ff60aaacbafe4b1 Mon Sep 17 00:00:00 2001 From: Lorefnon Date: Mon, 17 Dec 2012 19:10:56 +0530 Subject: [PATCH] Implement more graceful conflict handling --- components/filemanager/init.js | 37 ++++++++++++++++++++++++++-------- js/jsend.js | 4 +++- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/components/filemanager/init.js b/components/filemanager/init.js index 1eb977a..a450165 100755 --- a/components/filemanager/init.js +++ b/components/filemanager/init.js @@ -314,15 +314,36 @@ } } $.post(this.controller + '?action=modify&path='+path, data, function(resp){ - var saveResponse = codiad.jsend.parse(resp); - if (saveResponse != 'error') { - codiad.message.success('File Saved'); - } - if (typeof callbacks.success === 'function') { - var context = callbacks.context || _this; - callbacks.success.call(context, saveResponse.mtime); + //var saveResponse = codiad.jsend.parse(resp); + resp = $.parseJSON(resp); + if (resp.status == 'success') { + codiad.message.success('File saved'); + if (typeof callbacks.success === 'function'){ + var context = callbacks.context || _this; + callbacks.success.call(context, resp.data.mtime); + } } else { - notifySaveErr(); + if (resp.message == 'Client is out of sync'){ + var reload = confirm( + "Server has a more updated copy of the file. Would "+ + "you like to refresh the contents ? Pressing no will "+ + "cause your changes to override the server's copy upon "+ + "next save." + ); + if (reload) { + codiad.active.close(path); + codiad.active.removeDraft(path); + _this.openFile(path); + } else { + var session = codiad.editor.getActive().getSession(); + session.serverMTime = null; + session.untainted = null; + } + } else codiad.message.error('File could not be saved'); + if (typeof callbacks.error === 'function') { + var context = callbacks.context || _this; + callbacks.error.apply(context, [resp.data]); + } } }).error(notifySaveErr); }, diff --git a/js/jsend.js b/js/jsend.js index 19e8743..6ac46f0 100755 --- a/js/jsend.js +++ b/js/jsend.js @@ -12,7 +12,9 @@ var obj = $.parseJSON(d); if (obj.status == 'error') { codiad.message.error(obj.message); - return 'error'; + var errMsg = 'error'; + errMsg.message = obj.message; + return errMsg; } else { return obj.data; }