diff options
author | Thomas Bruederli <thomas@roundcube.net> | 2013-01-28 20:24:59 +0100 |
---|---|---|
committer | Thomas Bruederli <thomas@roundcube.net> | 2013-01-28 20:24:59 +0100 |
commit | b4a30ac84f9f6267f91f7d2d93462133cd772305 (patch) | |
tree | 9ab4a44d50595b6c30b56f17417f8ab2a988f727 /program/js | |
parent | 2a6472b2c232f1eea09d0f337ecfc7c17f1ae86d (diff) |
Catch connection timeouts on message sending form submissions
Diffstat (limited to 'program/js')
-rw-r--r-- | program/js/app.js | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/program/js/app.js b/program/js/app.js index b9fe9f60f..13f1378f4 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -3113,6 +3113,13 @@ function rcube_webmail() form._draft.value = draft ? '1' : ''; form.action = this.add_url(form.action, '_unlock', msgid); form.action = this.add_url(form.action, '_lang', lang); + + // register timer to notify about connection timeout + this.submit_timer = setTimeout(function(){ + ref.set_busy(false, null, msgid); + ref.display_message(ref.get_label('requesttimedout'), 'error'); + }, this.env.request_timeout * 1000); + form.submit(); }; @@ -6339,7 +6346,7 @@ function rcube_webmail() // redirect to url specified in location header if not empty var location_url = request.getResponseHeader("Location"); - if (location_url) + if (location_url && this.env.action != 'compose') // don't redirect on compose screen, contents might get lost (#1488926) this.redirect(location_url); // re-send keep-alive requests after 30 seconds @@ -6347,6 +6354,15 @@ function rcube_webmail() setTimeout(function(){ ref.keep_alive(); ref.start_keepalive(); }, 30000); }; + // callback when an iframe finished loading + this.iframe_loaded = function(unlock) + { + this.set_busy(false, null, unlock); + + if (this.submit_timer) + clearTimeout(this.submit_timer); + }; + // post the given form to a hidden iframe this.async_upload_form = function(form, action, onload) { |