Changeset 6135 in subversion


Ignore:
Timestamp:
May 1, 2012 3:04:40 AM (13 months ago)
Author:
thomasb
Message:

Better handling of HTTP request errors; re-send keep-alive requests on failure (#1488449)

Location:
trunk/roundcubemail/program
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/roundcubemail/program/include/rcmail.php

    r6101 r6135  
    326326 
    327327    // add some basic labels to client 
    328     $this->output->add_label('loading', 'servererror'); 
     328    $this->output->add_label('loading', 'servererror', 'requesttimedout'); 
    329329 
    330330    return $this->output; 
  • trunk/roundcubemail/program/js/app.js

    r6129 r6135  
    5555  // set jQuery ajax options 
    5656  $.ajaxSetup({ 
    57     cache:false, 
    58     error:function(request, status, err){ ref.http_error(request, status, err); }, 
    59     beforeSend:function(xmlhttp){ xmlhttp.setRequestHeader('X-Roundcube-Request', ref.env.request_token); } 
     57    cache: false, 
     58    timeout: this.env.request_timeout * 1000, 
     59    error: function(request, status, err){ ref.http_error(request, status, err); }, 
     60    beforeSend: function(xmlhttp){ xmlhttp.setRequestHeader('X-Roundcube-Request', ref.env.request_token); } 
    6061  }); 
    6162 
     
    956957        form.submit(); 
    957958 
    958         // clear timeout (sending could take longer) 
    959         clearTimeout(this.request_timer); 
    960959        break; 
    961960 
     
    11591158      this.lock_form(this.gui_objects.editform, a); 
    11601159 
    1161     // clear pending timer 
    1162     if (this.request_timer) 
    1163       clearTimeout(this.request_timer); 
    1164  
    1165     // set timer for requests 
    1166     if (a && this.env.request_timeout) 
    1167       this.request_timer = setTimeout(function(){ ref.request_timed_out(); }, this.env.request_timeout * 1000); 
    1168  
    11691160    return id; 
    11701161  }; 
     
    12031194 
    12041195    return url.replace(/_task=[a-z]+/, '_task='+task); 
    1205   }; 
    1206  
    1207   // called when a request timed out 
    1208   this.request_timed_out = function() 
    1209   { 
    1210     this.set_busy(false); 
    1211     this.display_message('Request timed out!', 'error'); 
    12121196  }; 
    12131197 
     
    59985982      type: 'GET', url: url, data: { _unlock:(lock?lock:0) }, dataType: 'json', 
    59995983      success: function(data){ ref.http_response(data); }, 
    6000       error: function(o, status, err) { rcmail.http_error(o, status, err, lock); } 
     5984      error: function(o, status, err) { ref.http_error(o, status, err, lock, action); } 
    60015985    }); 
    60025986  }; 
     
    60306014      type: 'POST', url: url, data: postdata, dataType: 'json', 
    60316015      success: function(data){ ref.http_response(data); }, 
    6032       error: function(o, status, err) { rcmail.http_error(o, status, err, lock); } 
     6016      error: function(o, status, err) { ref.http_error(o, status, err, lock, action); } 
    60336017    }); 
    60346018  }; 
     
    61626146 
    61636147  // handle HTTP request errors 
    6164   this.http_error = function(request, status, err, lock) 
     6148  this.http_error = function(request, status, err, lock, action) 
    61656149  { 
    61666150    var errmsg = request.statusText; 
     
    61716155    if (request.status && errmsg) 
    61726156      this.display_message(this.get_label('servererror') + ' (' + errmsg + ')', 'error'); 
     6157    else if (status == 'timeout') 
     6158      this.display_message(this.get_label('requesttimedout'), 'error'); 
     6159    else if (request.status == 0 && status != 'abort') 
     6160      this.display_message(this.get_label('servererror') + ' (No connection)', 'error'); 
     6161 
     6162    // re-send keep-alive requests after 30 seconds 
     6163    if (action == 'keep-alive') 
     6164      setTimeout(function(){ ref.keep_alive(); }, 30000); 
     6165    else if (action == 'check-recent') 
     6166      setTimeout(function(){ ref.check_for_recent(false); }, 30000); 
    61736167  }; 
    61746168 
  • trunk/roundcubemail/program/localization/de_CH/messages.inc

    r5950 r6135  
    2424$messages['servererrormsg'] = 'Serverfehler: $msg'; 
    2525$messages['dberror'] = 'Datenbankfehler!'; 
     26$messages['requesttimedout'] = 'Zeitlimit ÃŒberschritten'; 
    2627$messages['errorreadonly'] = 'Die Aktion kann nicht ausgefÃŒhrt werden. Der Ordner ist schreibgeschÃŒtzt.'; 
    2728$messages['errornoperm'] = 'Die Aktion kann nicht ausgefÃŒhrt werden. Zugriff verweigert.'; 
  • trunk/roundcubemail/program/localization/de_DE/messages.inc

    r5950 r6135  
    2424$messages['servererrormsg'] = 'Serverfehler: $msg'; 
    2525$messages['dberror'] = 'Datenbankfehler!'; 
     26$messages['requesttimedout'] = 'Zeitlimit ÃŒberschritten'; 
    2627$messages['errorreadonly'] = 'Die Aktion kann nicht ausgefÃŒhrt werden. Der Ordner ist schreibgeschÃŒtzt.'; 
    2728$messages['errornoperm'] = 'Die Aktion kann nicht ausgefÃŒhrt werden. Zugriff verweigert.'; 
  • trunk/roundcubemail/program/localization/en_US/messages.inc

    r5906 r6135  
    3030$messages['servererrormsg'] = 'Server Error: $msg'; 
    3131$messages['dberror'] = 'Database Error!'; 
     32$messages['requesttimedout'] = 'Request timed out'; 
    3233$messages['errorreadonly'] = 'Unable to perform operation. Folder is read-only.'; 
    3334$messages['errornoperm'] = 'Unable to perform operation. Permission denied.'; 
Note: See TracChangeset for help on using the changeset viewer.