Thomas Bruederli
2013-01-28 b4a30ac84f9f6267f91f7d2d93462133cd772305
Catch connection timeouts on message sending form submissions
2 files modified
20 ■■■■■ changed files
program/include/rcmail_output_html.php 2 ●●● patch | view | raw | blame | history
program/js/app.js 18 ●●●●● patch | view | raw | blame | history
program/include/rcmail_output_html.php
@@ -380,7 +380,7 @@
        // unlock interface after iframe load
        $unlock = preg_replace('/[^a-z0-9]/i', '', $_REQUEST['_unlock']);
        if ($this->framed) {
            array_unshift($this->js_commands, array('set_busy', false, null, $unlock));
            array_unshift($this->js_commands, array('iframe_loaded', $unlock));
        }
        else if ($unlock) {
            array_unshift($this->js_commands, array('hide_message', $unlock));
program/js/app.js
@@ -3113,6 +3113,13 @@
    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 @@
    // 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 @@
      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)
  {