Как получить задачи из календарей Thunderbird/Lightning?

Я не могу найти, как получить все задачи календаря в Lightning. Я думал, что функции getItem() и getItems() из интерфейса calICalendar (здесь) были решением, но я не мог заставить его работать должным образом.


person T_Dnzt    schedule 11.07.2011    source источник


Ответы (2)


Вы идете в правильном направлении. Вам просто нужно передать флаг, который вы хотите только todos. Пример можно найти здесь.

Чтобы подробнее рассказать о вашем примере ниже, есть несколько синтаксических ошибок, и вам могут понадобиться другие флаги. Я не уверен, зачем нужно предупреждение, мне кажется, что цикл событий не вращается. В каком контексте вы называете эти биты?

Попробуй это:

var arrayItems = new Array();

var todoListener = {
    onOperationComplete: function(aCalendar, aStatus, aOperationType, aId, aDetail) {},
    onGetResult: function(aCalendar, aStatus, aItemType, aDetail, aCount, aItems) {  
        arrayItems = arrayItems.concat(aItems);
    }
};

var filter = aCalendar.ITEM_FILTER_TYPE_TODO | aCalendar.ITEM_FILTER_COMPLETED_ALL;
aCalendar.getItems(filter, 0, null, null, todoListener);
person Philipp Kewisch    schedule 11.07.2011

Благодаря вашему примеру я понял, как реализовать слушателя, который был моей основной проблемой.

Итак, вот что я кодирую:

var arrayItem = new Array; ;

    var todoListener = 
    {
        onOperationComplete: function(aCalendar, aStatus, aOperationType, aId, aDetail) {},
        onGetResult: function(aCalendar, aStatus, aItemType, aDetail, aCount, aItems) 
        {    
            for (let i=0; i < aCount; i++) 
            {
                arrayItem.push(aItems[i]);
            }           
        }
    };

    var filter = aCalendar.ITEM_FILTER_ALL_ITEMS;
    filter |= aCalendar.ITEM_FILTER_TYPE_TODO;
    aCalendar.getItems(filter, 0, null, null, todoListener);

Тем не менее, у меня есть действительно странная проблема здесь. На самом деле, я не получаю задачи с этим кодом. Мне нужно добавить alert("something"); после метода getItems(), чтобы заполнить мой элемент массива. В противном случае он пуст.

person T_Dnzt    schedule 13.07.2011
comment
Слушатель является асинхронным, вам нужно прокрутить цикл событий после вашего вызова getItems или, что еще лучше, изменить свой шаблон, чтобы продолжить обработку в слушателе или вложенной функции. - person Philipp Kewisch; 17.04.2013