[FIX] WebClient.do_reload's deferred chain, split session reloading and session init
authorXavier Morel <xmo@openerp.com>
Wed, 11 Jan 2012 14:31:44 +0000 (15:31 +0100)
committerXavier Morel <xmo@openerp.com>
Wed, 11 Jan 2012 14:31:44 +0000 (15:31 +0100)
that way we don't try to reload all addons every time, not sure it's the best idea though, we'll see

bzr revid: xmo@openerp.com-20120111143144-akq23gtyuxfdq6z9

addons/web/static/src/js/chrome.js
addons/web/static/src/js/core.js

index edc703c..2d7455c 100644 (file)
@@ -1123,7 +1123,8 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie
         this.$element.children().remove();
     },
     do_reload: function() {
-        return this.session.session_init().pipe(_.bind(function() {this.menu.do_reload();}, this));
+        return this.session.session_reload().pipe(
+            $.proxy(this.menu, 'do_reload'));
     },
     do_notify: function() {
         var n = this.notification;
@@ -1174,7 +1175,7 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie
                 self.menu.on_menu_click(null, action.menu_id);
             });
         }
-    },
+    }
 });
 
 openerp.web.EmbeddedClient = openerp.web.Widget.extend({
index 8193852..a194c34 100644 (file)
@@ -547,7 +547,24 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
         var self = this;
         // TODO: session store in cookie should be optional
         this.session_id = this.get_cookie('session_id');
-        return this.rpc("/web/session/get_session_info", {}).pipe(function(result) {
+        return this.session_reload().pipe(function(result) {
+            var modules = openerp._modules.join(',');
+            var deferred = self.rpc('/web/webclient/qweblist', {mods: modules}).pipe(self.do_load_qweb);
+            if(self.session_is_valid()) {
+                return deferred.pipe(function() { return self.load_modules(); });
+            }
+            return deferred;
+        });
+    },
+    /**
+     * (re)loads the content of a session: db name, username, user id, session
+     * context and status of the support contract
+     *
+     * @returns {$.Deferred} deferred indicating the session is done reloading
+     */
+    session_reload: function () {
+        var self = this;
+        return this.rpc("/web/session/get_session_info", {}).then(function(result) {
             // If immediately follows a login (triggered by trying to restore
             // an invalid session or no session at all), refresh session data
             // (should not change, but just in case...)
@@ -558,12 +575,6 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
                 user_context: result.context,
                 openerp_entreprise: result.openerp_entreprise
             });
-            var modules = openerp._modules.join(',');
-            var deferred = self.rpc('/web/webclient/qweblist', {mods: modules}).pipe(self.do_load_qweb);
-            if(self.session_is_valid()) {
-                return deferred.pipe(function() { self.load_modules(); });
-            }
-            return deferred;
         });
     },
     session_is_valid: function() {