Changeset a9c1b87 in github


Ignore:
Timestamp:
May 8, 2012 6:06:03 AM (13 months ago)
Author:
Aleksander Machniak <alec@…>
Branches:
release-0.8
Children:
05383a9
Parents:
9e8d8e4a
git-author:
thomascube <thomas@…> (05/01/12 03:04:40)
git-committer:
Aleksander Machniak <alec@…> (05/08/12 06:06:03)
Message:

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

Location:
program
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • program/include/rcmail.php

    r9e8d8e4a ra9c1b87  
    557557 
    558558    // add some basic labels to client 
    559     $this->output->add_label('loading', 'servererror'); 
     559    $this->output->add_label('loading', 'servererror', 'requesttimedout'); 
    560560 
    561561    return $this->output; 
  • program/js/app.js

    rf4698cb ra9c1b87  
    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 
     
    955956        form.submit(); 
    956957 
    957         // clear timeout (sending could take longer) 
    958         clearTimeout(this.request_timer); 
    959958        break; 
    960959 
     
    11581157      this.lock_form(this.gui_objects.editform, a); 
    11591158 
    1160     // clear pending timer 
    1161     if (this.request_timer) 
    1162       clearTimeout(this.request_timer); 
    1163  
    1164     // set timer for requests 
    1165     if (a && this.env.request_timeout) 
    1166       this.request_timer = setTimeout(function(){ ref.request_timed_out(); }, this.env.request_timeout * 1000); 
    1167  
    11681159    return id; 
    11691160  }; 
     
    12021193 
    12031194    return url.replace(/_task=[a-z]+/, '_task='+task); 
    1204   }; 
    1205  
    1206   // called when a request timed out 
    1207   this.request_timed_out = function() 
    1208   { 
    1209     this.set_busy(false); 
    1210     this.display_message('Request timed out!', 'error'); 
    12111195  }; 
    12121196 
     
    59755959      type: 'GET', url: url, data: { _unlock:(lock?lock:0) }, dataType: 'json', 
    59765960      success: function(data){ ref.http_response(data); }, 
    5977       error: function(o, status, err) { rcmail.http_error(o, status, err, lock); } 
     5961      error: function(o, status, err) { ref.http_error(o, status, err, lock, action); } 
    59785962    }); 
    59795963  }; 
     
    60075991      type: 'POST', url: url, data: postdata, dataType: 'json', 
    60085992      success: function(data){ ref.http_response(data); }, 
    6009       error: function(o, status, err) { rcmail.http_error(o, status, err, lock); } 
     5993      error: function(o, status, err) { ref.http_error(o, status, err, lock, action); } 
    60105994    }); 
    60115995  }; 
     
    61396123 
    61406124  // handle HTTP request errors 
    6141   this.http_error = function(request, status, err, lock) 
     6125  this.http_error = function(request, status, err, lock, action) 
    61426126  { 
    61436127    var errmsg = request.statusText; 
     
    61486132    if (request.status && errmsg) 
    61496133      this.display_message(this.get_label('servererror') + ' (' + errmsg + ')', 'error'); 
     6134    else if (status == 'timeout') 
     6135      this.display_message(this.get_label('requesttimedout'), 'error'); 
     6136    else if (request.status == 0 && status != 'abort') 
     6137      this.display_message(this.get_label('servererror') + ' (No connection)', 'error'); 
     6138 
     6139    // re-send keep-alive requests after 30 seconds 
     6140    if (action == 'keep-alive') 
     6141      setTimeout(function(){ ref.keep_alive(); }, 30000); 
     6142    else if (action == 'check-recent') 
     6143      setTimeout(function(){ ref.check_for_recent(false); }, 30000); 
    61506144  }; 
    61516145 
  • program/localization/de_CH/messages.inc

    rdc365cc ra9c1b87  
    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.'; 
  • program/localization/de_DE/messages.inc

    rdc365cc ra9c1b87  
    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.'; 
  • program/localization/en_US/messages.inc

    r71e9efb ra9c1b87  
    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.