Автор Тема: Наступление срока задачи и его обработка  (Прочитано 1823 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Джон Локк

  • Новичок
  • *
  • Сообщений: 28
  • Репутация +2/-0
  • пушдыба́тн
    • Просмотр профиля
Как обнаружить и отреагировать на срабатывание такого события, как наступление срока (обычный срок, очередной повтор, завершение цикла повторов, срабатывание напоминания...) у задачи/заметки?
Знаю, что соответствующей функции API категорически нет и не будет, но может кто чем полезным поделится – исходным кодом, советом?..
« Последнее редактирование: 02 Марта 2015, 23:37:51 от Джон Локк »
пушдыба́т'н

Оффлайн Дмитрий Маслов

  • Администратор
  • Маэстро
  • *****
  • Сообщений: 6146
  • Репутация +220/-19
  • Я делаю мир таким!
    • Просмотр профиля
Re: Наступление срока задачи и его обработка
« Ответ #1 : 03 Марта 2015, 13:32:02 »
Как обнаружить и отреагировать на срабатывание такого события, как наступление срока (обычный срок, очередной повтор, завершение цикла повторов, срабатывание напоминания...) у задачи/заметки?
На вызове AllDataLoaded() пройтись по всем задачам - у кого установлен срок, занести в список для слежения: либо таймеры завести, либо раз в минуту просто в плагине проверять - наступил ли срок у какой либо задачи
Дальше следить за вызовами TaskChanged и TaskDeleted и обновлять список для слежения
При вызове AllDataUnloaded() список слежения обнулить

Знаю, что соответствующей функции API категорически нет и не будет...
Что же так категорически? Что нужно конкретно - API для перехвата напоминания о задаче?

Оффлайн Джон Локк

  • Новичок
  • *
  • Сообщений: 28
  • Репутация +2/-0
  • пушдыба́тн
    • Просмотр профиля
Re: Наступление срока задачи и его обработка
« Ответ #2 : 05 Марта 2015, 00:59:49 »
А если задача повторяющаяся, и её дата начала уже в прошлом, то как определить срок очередного повторения?
Что есть что в отдаче AddinLT_Task_GetRecurrence() ещё можно догадаться, но как всё это пересчитать в очередной грядущий срок?
« Последнее редактирование: 05 Марта 2015, 01:32:29 от Джон Локк »
пушдыба́т'н

Оффлайн Дмитрий Маслов

  • Администратор
  • Маэстро
  • *****
  • Сообщений: 6146
  • Репутация +220/-19
  • Я делаю мир таким!
    • Просмотр профиля
Re: Наступление срока задачи и его обработка
« Ответ #3 : 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;
   }
}

Оффлайн Дмитрий Маслов

  • Администратор
  • Маэстро
  • *****
  • Сообщений: 6146
  • Репутация +220/-19
  • Я делаю мир таким!
    • Просмотр профиля
Re: Наступление срока задачи и его обработка
« Ответ #4 : 06 Марта 2015, 17:12:26 »
Вышла версия 9.4.0.2 - где данная функция реализована
http://forum.leadertask.ru/index.php/topic,10392.0.html