Сообщество LeaderTask

Ресурсы => Плагины => Разработка плагинов / Обсуждение API => Тема начата: Джон Локк от 02 Марта 2015, 23:32:34

Название: Наступление срока задачи и его обработка
Отправлено: Джон Локк от 02 Марта 2015, 23:32:34
Как обнаружить и отреагировать на срабатывание такого события, как наступление срока (обычный срок, очередной повтор, завершение цикла повторов, срабатывание напоминания...) у задачи/заметки?
Знаю, что соответствующей функции API категорически нет и не будет, но может кто чем полезным поделится – исходным кодом, советом?..
Название: Re: Наступление срока задачи и его обработка
Отправлено: Дмитрий Маслов от 03 Марта 2015, 13:32:02
Как обнаружить и отреагировать на срабатывание такого события, как наступление срока (обычный срок, очередной повтор, завершение цикла повторов, срабатывание напоминания...) у задачи/заметки?
На вызове AllDataLoaded() пройтись по всем задачам - у кого установлен срок, занести в список для слежения: либо таймеры завести, либо раз в минуту просто в плагине проверять - наступил ли срок у какой либо задачи
Дальше следить за вызовами TaskChanged и TaskDeleted и обновлять список для слежения
При вызове AllDataUnloaded() список слежения обнулить

Знаю, что соответствующей функции API категорически нет и не будет...
Что же так категорически? Что нужно конкретно - API для перехвата напоминания о задаче?
Название: Re: Наступление срока задачи и его обработка
Отправлено: Джон Локк от 05 Марта 2015, 00:59:49
А если задача повторяющаяся, и её дата начала уже в прошлом, то как определить срок очередного повторения?
Что есть что в отдаче AddinLT_Task_GetRecurrence() ещё можно догадаться, но как всё это пересчитать в очередной грядущий срок?
Название: Re: Наступление срока задачи и его обработка
Отправлено: Дмитрий Маслов от 05 Марта 2015, 13:09:25
В следующей версии будет добавлена функция
BOOL AddinLT_Task_GetNextRecurrenceDate( LPCWSTR szUID, UINT* pDaysCount, DATE* pDateBegin, DATE* pDateEnd );
Которая рассчитывает дату следующего повтора
pDaysCount - количество дней до следующего повтора от входящих pDateBegin и pDateEnd
pDateBegin - срок (начальная дата), на выходе следующее значение
pDateEnd - срок (конечная дата), на выходе следующее значение
Если pDaysCount равно 0, то значит не повторяется

Соотвественно расчитать если у повторяющейся просроченной задаче сегодня напоминание так:
while ( AddinLT_Task_GetNextRecurrenceDate( &DaysCount, &dtBeginItem, &dtEndItem ) && DaysCount != 0 )
{
   if ( CompareDates( dtBeginItem, dtCurrentDate ) >= 0 )
   {
      if ( IsEqualDate( dtBeginItem, dtCurrentDate ) )
      {
         // устанавливаем напоминание на dtBeginItem
      }
      break;
   }
}
Название: Re: Наступление срока задачи и его обработка
Отправлено: Дмитрий Маслов от 06 Марта 2015, 17:12:26
Вышла версия 9.4.0.2 - где данная функция реализована
http://forum.leadertask.ru/index.php/topic,10392.0.html