[FIX] error handling in db backup operation
authorXavier Morel <xmo@openerp.com>
Tue, 2 Aug 2011 09:28:45 +0000 (11:28 +0200)
committerXavier Morel <xmo@openerp.com>
Tue, 2 Aug 2011 09:28:45 +0000 (11:28 +0200)
bzr revid: xmo@openerp.com-20110802092845-anf3pndd7nfidsos

addons/base/controllers/main.py
addons/base/static/src/js/chrome.js

index b4ef7e8..6f37989 100644 (file)
@@ -207,8 +207,8 @@ class Database(openerpweb.Controller):
             return db_dump
         except xmlrpclib.Fault, e:
             if e.faultCode and e.faultCode.split(':')[0] == 'AccessDenied':
-                return {'error': e.faultCode, 'title': 'Backup Database'}
-        return {'error': 'Could not drop database !', 'title': 'Backup Database'}
+                return 'Backup Database|' + e.faultCode
+        return 'Backup Database|Could not generate database backup'
             
     @openerpweb.httprequest
     def restore(self, req, db_file, restore_pwd, new_db):
index 216dc7a..2019776 100644 (file)
@@ -841,9 +841,10 @@ openerp.base.Database = openerp.base.Controller.extend({
     },
 
     wait_for_file: function (token, cleanup) {
-        var cookie_name = 'fileToken',
+        var self = this,
+            cookie_name = 'fileToken',
             cookie_length = cookie_name.length;
-        var timer = setInterval(function () {
+        this.backup_timer = setInterval(function () {
             var cookies = document.cookie.split(';');
             for(var i=0; i<cookies.length; ++i) {
                 var cookie = cookies[i].replace(/^\s*/, '');
@@ -852,7 +853,7 @@ openerp.base.Database = openerp.base.Controller.extend({
                 if(parseInt(cookie_val, 10) !== token) { continue; }
 
                 // clear waiter
-                clearInterval(timer);
+                clearInterval(self.backup_timer);
                 // clear cookie
                 document.cookie = _.sprintf("%s=;expires=%s;path=/",
                     cookie_name, new Date().toGMTString());
@@ -877,7 +878,18 @@ openerp.base.Database = openerp.base.Controller.extend({
                       token = new Date().getTime();
                 if (!$target.length) {
                     $target = $('<iframe id="backup-target" style="display: none;">')
-                        .appendTo(document.body);
+                        .appendTo(document.body)
+                        .load(function () {
+                            $.unblockUI();
+                            clearInterval(self.backup_timer);
+                            var error = this.contentDocument.body
+                                    .firstChild.data
+                                    .split('|');
+                            self.display_error({
+                                title: error[0],
+                                error: error[1]
+                            });
+                        });
                 }
                 $(form).find('input[name=token]').val(token);
                 form.submit();