Load either all complete or incomplete tasks from the server. Fo further filtering on the client

This commit is contained in:
Thomas Bruederli 2012-07-11 17:28:25 +02:00
parent a9436f3b9e
commit 1809ed09f1
2 changed files with 46 additions and 20 deletions

View file

@ -48,6 +48,7 @@ function rcube_tasklist(settings)
/* private vars */ /* private vars */
var selector = 'all'; var selector = 'all';
var filtermask = FILTER_MASK_ALL; var filtermask = FILTER_MASK_ALL;
var loadstate = { filter:-1, lists:'' };
var idcount = 0; var idcount = 0;
var saving_lock; var saving_lock;
var ui_loading; var ui_loading;
@ -274,48 +275,74 @@ function rcube_tasklist(settings)
} }
/** /**
* fetch tasks from server * List tasks matching the given selector
*/ */
function list_tasks(sel) function list_tasks(sel)
{ {
if (rcmail.busy)
return;
if (sel && filter_masks[sel] !== undefined) { if (sel && filter_masks[sel] !== undefined) {
filtermask = filter_masks[sel]; filtermask = filter_masks[sel];
selector = sel; selector = sel;
} }
var active = active_lists(); var active = active_lists(),
if (active.length) { basefilter = filtermask == FILTER_MASK_COMPLETE ? FILTER_MASK_COMPLETE : FILTER_MASK_ALL,
reload = active.join(',') != loadstate.lists || basefilter != loadstate.filter;
if (active.length && reload) {
ui_loading = rcmail.set_busy(true, 'loading'); ui_loading = rcmail.set_busy(true, 'loading');
rcmail.http_request('fetch', { filter:filtermask, lists:active.join(','), q:search_query }, true); rcmail.http_request('fetch', { filter:basefilter, lists:active.join(','), q:search_query }, true);
} }
else else if (reload)
data_ready([]); data_ready([]);
else
render_tasklist();
$('#taskselector li.selected').removeClass('selected'); $('#taskselector li.selected').removeClass('selected');
$('#taskselector li.'+selector).addClass('selected'); $('#taskselector li.'+selector).addClass('selected');
} }
/** /**
* callback if task data from server is ready * Callback if task data from server is ready
*/ */
function data_ready(data) function data_ready(response)
{ {
// clear display
var msgbox = $('#listmessagebox').hide(),
list = $(rcmail.gui_objects.resultlist).html('');
listdata = {}; listdata = {};
loadstate.lists = response.lists;
for (var i=0; i < data.length; i++) { loadstate.filter = response.filter;
listdata[data[i].id] = data[i]; for (var i=0; i < response.data.length; i++) {
render_task(data[i]); listdata[response.data[i].id] = response.data[i];
} }
if (!data.length) render_tasklist();
msgbox.html(rcmail.gettext('notasksfound','tasklist')).show();
rcmail.set_busy(false, 'loading', ui_loading); rcmail.set_busy(false, 'loading', ui_loading);
} }
/**
*
*/
function render_tasklist()
{
// clear display
var rec,
count = 0,
msgbox = $('#listmessagebox').hide(),
list = $(rcmail.gui_objects.resultlist).html('');
for (var id in listdata) {
rec = listdata[id];
if (match_filter(rec)) {
render_task(rec);
count++;
}
}
if (!count)
msgbox.html(rcmail.gettext('notasksfound','tasklist')).show();
}
/** /**
* *
*/ */
@ -714,8 +741,7 @@ function rcube_tasklist(settings)
*/ */
function match_filter(rec) function match_filter(rec)
{ {
// TBD. return !filtermask || (filtermask & rec.mask) > 0;
return true;
} }
/** /**

View file

@ -387,7 +387,7 @@ class tasklist extends rcube_plugin
// sort tasks according to their hierarchy level and due date // sort tasks according to their hierarchy level and due date
usort($data, array($this, 'task_sort_cmp')); usort($data, array($this, 'task_sort_cmp'));
$this->rc->output->command('plugin.data_ready', $data); $this->rc->output->command('plugin.data_ready', array('filter' => $f, 'lists' => $lists, 'data' => $data));
} }
/** /**