[IMP] CrashManager use event dispatcher and cleanups

bzr revid: al@openerp.com-20121011003729-jjbh5se1cpsachvm
This commit is contained in:
Antony Lesuisse 2012-10-11 02:37:29 +02:00
parent 462eccb10d
commit f44ea704fe
3 changed files with 17 additions and 22 deletions

View File

@ -181,7 +181,7 @@ instance.web.Dialog = instance.web.Widget.extend({
}); });
instance.web.CrashManager = instance.web.CallbackEnabled.extend({ instance.web.CrashManager = instance.web.CallbackEnabled.extend({
on_rpc_error: function(error) { rpc_error: function(error) {
if (error.data.fault_code) { if (error.data.fault_code) {
var split = ("" + error.data.fault_code).split('\n')[0].split(' -- '); var split = ("" + error.data.fault_code).split('\n')[0].split(' -- ');
if (split.length > 1) { if (split.length > 1) {
@ -190,12 +190,12 @@ instance.web.CrashManager = instance.web.CallbackEnabled.extend({
} }
} }
if (error.code === 200 && error.type) { if (error.code === 200 && error.type) {
this.on_managed_error(error); this.show_warning(error);
} else { } else {
this.on_traceback(error); this.show_error(error);
} }
}, },
on_managed_error: function(error) { show_warning: function(error) {
instance.web.dialog($('<div>' + QWeb.render('CrashManager.warning', {error: error}) + '</div>'), { instance.web.dialog($('<div>' + QWeb.render('CrashManager.warning', {error: error}) + '</div>'), {
title: "OpenERP " + _.str.capitalize(error.type), title: "OpenERP " + _.str.capitalize(error.type),
buttons: [ buttons: [
@ -203,7 +203,7 @@ instance.web.CrashManager = instance.web.CallbackEnabled.extend({
] ]
}); });
}, },
on_traceback: function(error) { show_error: function(error) {
var self = this; var self = this;
var buttons = {}; var buttons = {};
buttons[_t("Ok")] = function() { buttons[_t("Ok")] = function() {
@ -219,8 +219,8 @@ instance.web.CrashManager = instance.web.CallbackEnabled.extend({
}).open(); }).open();
dialog.$el.html(QWeb.render('CrashManager.error', {session: instance.session, error: error})); dialog.$el.html(QWeb.render('CrashManager.error', {session: instance.session, error: error}));
}, },
on_javascript_exception: function(exception) { show_message: function(exception) {
this.on_traceback({ this.show_error({
type: _t("Client Error"), type: _t("Client Error"),
message: exception, message: exception,
data: {debug: ""} data: {debug: ""}
@ -236,7 +236,7 @@ instance.web.Loading = instance.web.Widget.extend({
this.blocked_ui = false; this.blocked_ui = false;
this.session.on("request", this, this.request_call); this.session.on("request", this, this.request_call);
this.session.on("response", this, this.response_call); this.session.on("response", this, this.response_call);
this.session.on("error", this, this.response_call); this.session.on("response_failed", this, this.response_call);
}, },
destroy: function() { destroy: function() {
this.on_rpc_event(-this.count); this.on_rpc_event(-this.count);
@ -957,7 +957,7 @@ instance.web.Client = instance.web.Widget.extend({
show_common: function() { show_common: function() {
var self = this; var self = this;
this.crashmanager = new instance.web.CrashManager(); this.crashmanager = new instance.web.CrashManager();
instance.session.on_rpc_error.add(this.crashmanager.on_rpc_error); instance.session.on('error', this.crashmanager, this.crashmanager.rpc_error);
self.notification = new instance.web.Notification(this); self.notification = new instance.web.Notification(this);
self.notification.appendTo(self.$el); self.notification.appendTo(self.$el);
self.loading = new instance.web.Loading(self); self.loading = new instance.web.Loading(self);
@ -1007,7 +1007,7 @@ instance.web.WebClient = instance.web.Client.extend({
var self = this; var self = this;
this._super(); this._super();
window.onerror = function (message, file, line) { window.onerror = function (message, file, line) {
self.crashmanager.on_traceback({ self.crashmanager.show_error({
type: _t("Client Error"), type: _t("Client Error"),
message: message, message: message,
data: {debug: file + ':' + line} data: {debug: file + ':' + line}

View File

@ -980,7 +980,8 @@ instance.web.JsonRPC = instance.web.CallbackEnabled.extend({
triggers: { triggers: {
'request': 'Request sent', 'request': 'Request sent',
'response': 'Response received', 'response': 'Response received',
'error': 'HTTP Error response or timeout received', 'response_failed': 'HTTP Error response or timeout received',
'error': 'The received response is an JSON-RPC error',
}, },
/** /**
* @constructs instance.web.JsonRPC * @constructs instance.web.JsonRPC
@ -1336,7 +1337,7 @@ instance.web.JsonRPC = instance.web.CallbackEnabled.extend({
} }
}, },
function(jqXHR, textStatus, errorThrown) { function(jqXHR, textStatus, errorThrown) {
self.trigger('error'); self.trigger('response_failed', jqXHR);
var error = { var error = {
code: -32098, code: -32098,
message: "XmlHttpRequestError " + errorThrown, message: "XmlHttpRequestError " + errorThrown,
@ -1348,7 +1349,7 @@ instance.web.JsonRPC = instance.web.CallbackEnabled.extend({
deferred.fail(function() { deferred.fail(function() {
deferred.fail(function(error, event) { deferred.fail(function(error, event) {
if (!event.isDefaultPrevented()) { if (!event.isDefaultPrevented()) {
self.on_rpc_error(error, event); self.trigger('error', error, event);
} }
}); });
}); });
@ -1434,8 +1435,6 @@ instance.web.JsonRPC = instance.web.CallbackEnabled.extend({
return deferred; return deferred;
} }
}, },
on_rpc_error: function(error) {
},
get_url: function (file) { get_url: function (file) {
return this.prefix + file; return this.prefix + file;
}, },

View File

@ -615,7 +615,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
return self.on_processed_onchange(response, processed); return self.on_processed_onchange(response, processed);
} catch(e) { } catch(e) {
console.error(e); console.error(e);
instance.webclient.crashmanager.on_javascript_exception(e); instance.webclient.crashmanager.show_message(e);
return $.Deferred().reject(); return $.Deferred().reject();
} }
}); });
@ -650,7 +650,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
return $.Deferred().resolve(); return $.Deferred().resolve();
} catch(e) { } catch(e) {
console.error(e); console.error(e);
instance.webclient.crashmanager.on_javascript_exception(e); instance.webclient.crashmanager.show_message(e);
return $.Deferred().reject(); return $.Deferred().reject();
} }
}, },
@ -3316,11 +3316,7 @@ instance.web.form.FieldOne2Many = instance.web.form.AbstractField.extend({
var views = []; var views = [];
_.each(modes, function(mode) { _.each(modes, function(mode) {
if (! _.include(["list", "tree", "graph", "kanban"], mode)) { if (! _.include(["list", "tree", "graph", "kanban"], mode)) {
try {
throw new Error(_.str.sprintf("View type '%s' is not supported in One2Many.", mode)); throw new Error(_.str.sprintf("View type '%s' is not supported in One2Many.", mode));
} catch(e) {
instance.webclient.crashmanager.on_javascript_exception(e)
}
} }
var view = { var view = {
view_id: false, view_id: false,