mstask: Implement ITask::GetNextRunTime() for DAILY trigger type.
Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
ac322334fa
commit
5443f0ee2b
|
@ -445,6 +445,27 @@ static void get_end_time(const TASK_TRIGGER *trigger, FILETIME *ft)
|
|||
SystemTimeToFileTime(&st, ft);
|
||||
}
|
||||
|
||||
static void filetime_add_ms(FILETIME *ft, ULONGLONG ms)
|
||||
{
|
||||
union u_ftll
|
||||
{
|
||||
FILETIME ft;
|
||||
ULONGLONG ll;
|
||||
} *ftll = (union u_ftll *)ft;
|
||||
|
||||
ftll->ll += ms * (ULONGLONG)10000;
|
||||
}
|
||||
|
||||
static void filetime_add_hours(FILETIME *ft, ULONG hours)
|
||||
{
|
||||
filetime_add_ms(ft, (ULONGLONG)hours * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
static void filetime_add_days(FILETIME *ft, ULONG days)
|
||||
{
|
||||
filetime_add_hours(ft, (ULONGLONG)days * 24);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI MSTASK_ITask_GetNextRunTime(ITask *iface, SYSTEMTIME *rt)
|
||||
{
|
||||
TaskImpl *This = impl_from_ITask(iface);
|
||||
|
@ -483,6 +504,29 @@ static HRESULT WINAPI MSTASK_ITask_GetNextRunTime(ITask *iface, SYSTEMTIME *rt)
|
|||
}
|
||||
break;
|
||||
|
||||
case TASK_TIME_TRIGGER_DAILY:
|
||||
st = current_st;
|
||||
st.wHour = This->trigger[i].wStartHour;
|
||||
st.wMinute = This->trigger[i].wStartMinute;
|
||||
st.wSecond = 0;
|
||||
st.wMilliseconds = 0;
|
||||
SystemTimeToFileTime(&st, ¤t_ft);
|
||||
while (CompareFileTime(¤t_ft, &end_ft) < 0)
|
||||
{
|
||||
if (CompareFileTime(¤t_ft, &begin_ft) >= 0)
|
||||
{
|
||||
if (!have_best_time || CompareFileTime(¤t_ft, &best_ft) < 0)
|
||||
{
|
||||
best_ft = current_ft;
|
||||
have_best_time = TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
filetime_add_days(¤t_ft, This->trigger[i].Type.Daily.DaysInterval);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
FIXME("trigger type %u is not handled\n", This->trigger[i].TriggerType);
|
||||
break;
|
||||
|
|
|
@ -522,7 +522,23 @@ static void test_GetNextRunTime(void)
|
|||
st.wDay, st.wMonth, st.wYear, st.wDayOfWeek,
|
||||
st.wHour, st.wMinute, st.wSecond);
|
||||
|
||||
/* FIXME: TASK_TIME_TRIGGER_DAILY */
|
||||
/* TASK_TIME_TRIGGER_DAILY */
|
||||
|
||||
hr = ITaskTrigger_GetTrigger(trigger, &data);
|
||||
ok(hr == S_OK, "got %#x\n", hr);
|
||||
data.rgFlags &= ~TASK_TRIGGER_FLAG_DISABLED;
|
||||
data.TriggerType = TASK_TIME_TRIGGER_DAILY;
|
||||
data.Type.Daily.DaysInterval = 1;
|
||||
hr = ITaskTrigger_SetTrigger(trigger, &data);
|
||||
ok(hr == S_OK, "got %#x\n", hr);
|
||||
|
||||
memset(&st, 0xff, sizeof(st));
|
||||
hr = ITask_GetNextRunTime(task, &st);
|
||||
ok(hr == S_OK, "got %#x\n", hr);
|
||||
ok(!memcmp(&st, &cmp, sizeof(st)), "got %u/%u/%u wday %u %u:%02u:%02u\n",
|
||||
st.wDay, st.wMonth, st.wYear, st.wDayOfWeek,
|
||||
st.wHour, st.wMinute, st.wSecond);
|
||||
|
||||
/* FIXME: TASK_TIME_TRIGGER_WEEKLY */
|
||||
/* FIXME: TASK_TIME_TRIGGER_MONTHLYDATE */
|
||||
/* FIXME: TASK_TIME_TRIGGER_MONTHLYDOW */
|
||||
|
|
Loading…
Reference in New Issue