Mornella/Mornella_Mobile/PoomTaskReader.cpp
#include "PoomTaskReader.h"
#include "PoomTask.h"
CPoomTaskReader::CPoomTaskReader(IFolder* pIFolder)
: IPoomFolderReader(pIFolder)
{
_items = IPoomFolderReader::getItemCollection();
}
CPoomTaskReader::~CPoomTaskReader(void)
{
if (_items)
_items->Release();
}
int CPoomTaskReader::Count()
{
INT uCount = 0;
_items->get_Count(&uCount);
return uCount;
}
HRESULT CPoomTaskReader::Get(int i, CPoomSerializer *pPoomSerializer, LPBYTE *pBuf, UINT *puBufLen)
{
HRESULT hr = E_FAIL;
if (_items == NULL || pBuf == NULL || puBufLen == NULL)
return hr;
CPoomTask *task = new(std::nothrow) CPoomTask();
if (task == NULL)
return hr;
ITask *pElementTask = NULL;
hr = _items->Item(i, (IDispatch **) &pElementTask);
if (hr != S_OK)
return hr;
HeaderStruct *header = task->Header();
hr = pElementTask->get_Oid(&header->lOid);
if (hr == S_OK) {
Parse(pElementTask, task);
*pBuf = pPoomSerializer->Serialize(task, (LPDWORD) puBufLen);
}
if (task)
delete task;
if (pElementTask)
pElementTask->Release();
return hr;
}
HRESULT CPoomTaskReader::GetOne(IPOutlookApp* pIPoomApp, LONG lOid, CPoomSerializer *pPoomSerializer, LPBYTE *pBuf, UINT* puBufLen)
{
HRESULT hr = E_FAIL;
if (pIPoomApp == NULL || pBuf == NULL || puBufLen == 0)
return hr;
ITask *pElementTask = NULL;
if (FAILED(pIPoomApp->GetItemFromOid(lOid, (IDispatch **) &pElementTask)))
return hr;
CPoomTask *task = new(std::nothrow) CPoomTask();
if (task == NULL) {
pElementTask->Release();
return hr;
}
HeaderStruct *header = task->Header();
header->lOid = lOid;
Parse(pElementTask, task);
*pBuf = pPoomSerializer->Serialize(task, (LPDWORD) puBufLen);
if (task)
delete task;
if (pElementTask)
pElementTask->Release();
return S_OK;
}
void CPoomTaskReader::Parse(ITask* iTask, CPoomTask *task)
{
DATE dateTemp;
LONG longTemp;
VARIANT_BOOL variantBoolTemp;
UINT uintTemp;
SYSTEMTIME st;
FILETIME ft1;
FILETIME ft2;
// VARIANT_BOOL
if (SUCCEEDED(iTask->get_ReminderSet(&variantBoolTemp))) {
if (variantBoolTemp == VARIANT_TRUE)
task->SetFlags( task->Flags() | FLAG_REMINDER );
}
if (SUCCEEDED(iTask->get_Complete(&variantBoolTemp))) {
if (variantBoolTemp == VARIANT_TRUE)
task->SetFlags( task->Flags() | FLAG_COMPLETE );
}
// BSTR
GETBSTR(iTask->get_Body, task->SetBody);
GETBSTR(iTask->get_Categories, task->SetCategories);
GETBSTR(iTask->get_Subject, task->SetSubject);
// LONG
if (SUCCEEDED(iTask->get_Sensitivity(&longTemp)))
task->SetSensitivity(&longTemp);
if(SUCCEEDED(iTask->get_Importance(&longTemp)))
task->SetImportance(&longTemp);
// DATE
GETDATE(iTask->get_DueDate, task->SetDueDate);
GETDATE(iTask->get_DateCompleted, task->SetDateCompleted);
GETDATE(iTask->get_StartDate, task->SetStartDate);
// RECURRENCE
if (SUCCEEDED(iTask->get_IsRecurring(&variantBoolTemp))) {
if (variantBoolTemp == VARIANT_TRUE) {
task->SetFlags(task->Flags() | FLAG_RECUR);
RecurStruct* rStruct = task->GetRecurStruct();
ZeroMemory(rStruct, sizeof(RecurStruct));
IRecurrencePattern *pRecurrence;
if (SUCCEEDED(iTask->GetRecurrencePattern(&pRecurrence))) {
// LONG
if (SUCCEEDED(pRecurrence->get_RecurrenceType(&longTemp)))
task->SetRecurrenceType(longTemp);
if (SUCCEEDED(pRecurrence->get_Interval(&longTemp)))
task->SetInterval(longTemp);
if (SUCCEEDED(pRecurrence->get_MonthOfYear(&longTemp)))
task->SetMonthOfYear(longTemp);
if (SUCCEEDED(pRecurrence->get_DayOfMonth(&longTemp)))
task->SetDayOfMonth(longTemp);
if (SUCCEEDED(pRecurrence->get_DayOfWeekMask(&longTemp)))
task->SetDayOfWeekMask(longTemp);
if (SUCCEEDED(pRecurrence->get_Instance(&longTemp)))
task->SetInstance(longTemp);
// DATE
GETDATE(pRecurrence->get_PatternStartDate, task->SetPatternStartDate);
// VARIANT BOOL
if (SUCCEEDED(pRecurrence->get_NoEndDate(&variantBoolTemp))) {
if (variantBoolTemp == VARIANT_TRUE) {
task->SetFlags( task->Flags() | FLAG_RECUR_NoEndDate);
GETDATE(pRecurrence->get_PatternEndDate, task->SetPatternEndDate);
}
if (SUCCEEDED(pRecurrence->get_Occurrences(&longTemp)))
task->SetOccurrences(longTemp);
}
}
if (pRecurrence)
pRecurrence->Release();
}
}
}