summaryrefslogtreecommitdiff
path: root/program/js/app.js
diff options
context:
space:
mode:
Diffstat (limited to 'program/js/app.js')
-rw-r--r--program/js/app.js101
1 files changed, 66 insertions, 35 deletions
diff --git a/program/js/app.js b/program/js/app.js
index 1891977a7..88e4606a7 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -44,7 +44,6 @@ function rcube_webmail()
this.identifier_expr = new RegExp('[^0-9a-z\-_]', 'gi');
// default environment vars
- this.env.keep_alive = 60; // seconds
this.env.request_timeout = 180; // seconds
this.env.draft_autosave = 0; // seconds
this.env.comm_path = './';
@@ -482,7 +481,8 @@ function rcube_webmail()
this.onloads[i]();
}
- // start keep-alive interval
+ // start keep-alive and refresh intervals
+ this.start_refresh();
this.start_keepalive();
};
@@ -885,10 +885,6 @@ function rcube_webmail()
this.show_message(this.env.first_uid);
break;
- case 'checkmail':
- this.check_for_recent(true);
- break;
-
case 'compose':
url = {};
@@ -957,9 +953,6 @@ function rcube_webmail()
break;
}
- // re-set keep-alive timeout
- this.start_keepalive();
-
this.submit_messageform(true);
break;
@@ -2069,6 +2062,15 @@ function rcube_webmail()
}
};
+ // sends request to check for recent messages
+ this.checkmail = function()
+ {
+ var lock = this.set_busy(true, 'checkingmail'),
+ params = this.check_recent_params();
+
+ this.http_request('check-recent', params, lock);
+ };
+
// list messages of a specific mailbox using filter
this.filter_mailbox = function(filter)
{
@@ -6086,6 +6088,9 @@ function rcube_webmail()
$('<a>').attr('href', url).appendTo(document.body).get(0).click();
else
target.location.href = url;
+
+ // reset keep-alive interval
+ this.start_keepalive();
};
// send a http request to the server
@@ -6114,6 +6119,9 @@ function rcube_webmail()
success: function(data){ ref.http_response(data); },
error: function(o, status, err) { ref.http_error(o, status, err, lock, action); }
});
+
+ // reset keep-alive interval
+ this.start_keepalive();
};
// send a http POST request to the server
@@ -6131,7 +6139,7 @@ function rcube_webmail()
// trigger plugin hook
var result = this.triggerEvent('request'+action, postdata);
if (result !== undefined) {
- // abort if one the handlers returned false
+ // abort if one of the handlers returned false
if (result === false)
return false;
else
@@ -6146,6 +6154,9 @@ function rcube_webmail()
success: function(data){ ref.http_response(data); },
error: function(o, status, err) { ref.http_error(o, status, err, lock, action); }
});
+
+ // reset keep-alive interval
+ this.start_keepalive();
};
// aborts ajax request
@@ -6240,6 +6251,7 @@ function rcube_webmail()
}
break;
+ case 'refresh':
case 'check-recent':
case 'getunread':
case 'search':
@@ -6273,6 +6285,9 @@ function rcube_webmail()
this.triggerEvent('responseafter', {response: response});
this.triggerEvent('responseafter'+response.action, {response: response});
+
+ // reset keep-alive interval
+ this.start_keepalive();
};
// handle HTTP request errors
@@ -6297,8 +6312,6 @@ function rcube_webmail()
// re-send keep-alive requests after 30 seconds
if (action == 'keep-alive')
setTimeout(function(){ ref.keep_alive(); ref.start_keepalive(); }, 30000);
- else if (action == 'check-recent')
- setTimeout(function(){ ref.check_for_recent(false); ref.start_keepalive(); }, 30000);
};
// post the given form to a hidden iframe
@@ -6468,20 +6481,28 @@ function rcube_webmail()
}
};
-
- // starts interval for keep-alive/check-recent signal
+ // starts interval for keep-alive signal
this.start_keepalive = function()
{
- if (!this.env.keep_alive || this.env.framed)
+ if (!this.env.session_lifetime || this.env.framed || this.env.extwin || this.task == 'login' || this.env.action == 'print')
return;
- if (this._int)
- clearInterval(this._int);
+ if (this._keepalive)
+ clearInterval(this._keepalive);
- if (this.task == 'mail' && this.gui_objects.mailboxlist)
- this._int = setInterval(function(){ ref.check_for_recent(false); }, this.env.keep_alive * 1000);
- else if (this.task != 'login' && this.env.action != 'print')
- this._int = setInterval(function(){ ref.keep_alive(); }, this.env.keep_alive * 1000);
+ this._keepalive = setInterval(function(){ ref.keep_alive(); }, this.env.session_lifetime * 0.5 * 1000);
+ };
+
+ // starts interval for refresh signal
+ this.start_refresh = function()
+ {
+ if (!this.env.refresh_interval || this.env.framed || this.env.extwin || this.task == 'login' || this.env.action == 'print')
+ return;
+
+ if (this._refresh)
+ clearInterval(this._refresh);
+
+ this._refresh = setInterval(function(){ ref.refresh(); }, this.env.refresh_interval * 1000);
};
// sends keep-alive signal
@@ -6491,29 +6512,39 @@ function rcube_webmail()
this.http_request('keep-alive');
};
- // sends request to check for recent messages
- this.check_for_recent = function(refresh)
+ // sends refresh signal
+ this.refresh = function()
{
- if (this.busy)
+ if (this.busy) {
+ // try again after 10 seconds
+ setTimeout(function(){ ref.refresh(); ref.start_refresh(); }, 10000);
return;
+ }
- var lock, url = {_mbox: this.env.mailbox};
+ var params = {}, lock = this.set_busy(true, 'refreshing');
- if (refresh) {
- lock = this.set_busy(true, 'checkingmail');
- url._refresh = 1;
- // reset check-recent interval
- this.start_keepalive();
- }
+ if (this.task == 'mail' && this.gui_objects.mailboxlist)
+ params = this.check_recent_params();
+ // plugins should bind to 'requestrefresh' event to add own params
+ this.http_request('refresh', params, lock);
+ };
+
+ // returns check-recent request parameters
+ this.check_recent_params = function()
+ {
+ var params = {_mbox: this.env.mailbox};
+
+ if (this.gui_objects.mailboxlist)
+ params._folderlist = 1;
if (this.gui_objects.messagelist)
- url._list = 1;
+ params._list = 1;
if (this.gui_objects.quotadisplay)
- url._quota = 1;
+ params._quota = 1;
if (this.env.search_request)
- url._search = this.env.search_request;
+ params._search = this.env.search_request;
- this.http_request('check-recent', url, lock);
+ return params;
};