--- a/creator/engine/src/creator_calendar.cpp Tue Aug 31 15:15:20 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1340 +0,0 @@
-/*
-* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-*
-*/
-
-
-#include "engine.h"
-#include "enginewrapper.h"
-
-#include "creator_calendar.h"
-#include "creator_traces.h"
-#include "creator_scriptentry.h"
-#include <e32base.h>
-#include <e32math.h>
-#include <calrrule.h>
-#include <calalarm.h>
-
-static const TInt KCalendarFieldLength = 128;
-
-
-CCreatorCalenderAttendee::CCreatorCalenderAttendee()
- {}
-
-CCreatorCalenderAttendee::~CCreatorCalenderAttendee()
- {
- delete iCommonName;
- delete iEmailAddress;
- }
-
-CCreatorCalenderAttendee* CCreatorCalenderAttendee::NewL()
- {
- CCreatorCalenderAttendee* self = new (ELeave) CCreatorCalenderAttendee;
- return self;
- }
-
-void CCreatorCalenderAttendee::SetCommonNameL(const TDesC& aName)
- {
- delete iCommonName;
- iCommonName = 0;
- iCommonName = HBufC::NewL(aName.Length());
- iCommonName->Des().Copy(aName);
- }
-
-void CCreatorCalenderAttendee::SetEmailAddressL(const TDesC& aEmail)
- {
- delete iEmailAddress;
- iEmailAddress = 0;
- iEmailAddress = HBufC::NewL(aEmail.Length());
- iEmailAddress->Des().Copy(aEmail);
- }
-
-void CCreatorCalenderAttendee::SetRole(CCalAttendee::TCalRole aRole)
- {
- iRole = aRole;
- }
-
-void CCreatorCalenderAttendee::SetStatus(CCalAttendee::TCalStatus aStatus)
- {
- iStatus = aStatus;
- }
-
-const TDesC& CCreatorCalenderAttendee::CommonName() const
- {
- if( iCommonName == 0 )
- return iDummy;
- return *iCommonName;
- }
-
-const TDesC& CCreatorCalenderAttendee::EmailAddress() const
- {
- if( iEmailAddress == 0 )
- return iDummy;
-
- return *iEmailAddress;
- }
-
-CCalAttendee::TCalRole CCreatorCalenderAttendee::Role() const
- {
- return iRole;
- }
-
-CCalAttendee::TCalStatus CCreatorCalenderAttendee::Status() const
- {
- return iStatus;
- }
-
-TBool CCalenderInterimParameters::IsAllowedEntryStatus(CCalEntry::TType aType, CCalEntry::TStatus aStatus)
- {
- if( aType == CCalEntry::ETodo )
- {
- return aStatus == CCalEntry::ECancelled ||
- aStatus == CCalEntry::ETodoNeedsAction ||
- aStatus == CCalEntry::ETodoCompleted ||
- aStatus == CCalEntry::ETodoInProcess;
- }
-
- return aStatus == CCalEntry::ETentative ||
- aStatus == CCalEntry::EConfirmed ||
- aStatus == CCalEntry::ECancelled;
- }
-
-//----------------------------------------------------------------------------
-
-CCalenderInterimParameters::CCalenderInterimParameters ( )
- {
- LOGSTRING("Creator: CCalenderInterimParameters::CCalenderInterimParameters");
-
- iAppointmentLocation = HBufC::New (KCalendarFieldLength );
- iAppointmentReason = HBufC::New (KCalendarFieldLength );
- iEventReason = HBufC::New (KCalendarFieldLength );
- iAnniversaryReason = HBufC::New (KCalendarFieldLength );
- iTodoTask = HBufC::New (KCalendarFieldLength );
- iReminderReason = HBufC::New (KCalendarFieldLength );
- iDescription = HBufC::New (KCalendarFieldLength );
- iSummary = HBufC::New (KCalendarFieldLength );
- iLocation = HBufC::New (KCalendarFieldLength );
- iOrganizerName = HBufC::New (KCalendarFieldLength );
- iOrganizerEmail = HBufC::New (KCalendarFieldLength );
-
- // set defaults, start date today and end date = today + 1 month
- iRandomModeStartTime.HomeTime ( );
- iRandomModeEndTime = iRandomModeStartTime;
- iRandomModeEndTime += TTimeIntervalMonths (1 );
- iAlarmTime = Time::NullTTime();
- iUseRandomAlarmTime = EFalse;
- iStatus = CCalEntry::ENullStatus;
- }
-
-CCalenderInterimParameters::~CCalenderInterimParameters ( )
- {
- LOGSTRING("Creator: CCalenderInterimParameters::~CCalenderInterimParameters");
-
- delete iTodoTask;
- delete iAnniversaryReason;
- delete iEventReason;
- delete iAppointmentReason;
- delete iAppointmentLocation;
- delete iReminderReason;
- delete iDescription;
- delete iSummary;
- delete iLocation;
- delete iOrganizerName;
- delete iOrganizerEmail;
- iAttendees.ResetAndDestroy();
- iAttendees.Close();
- iAttendeeLinkIds.Reset();
- iAttendeeLinkIds.Close();
- }
-
-void CCalenderInterimParameters::ParseL (CCommandParser* parser,
- TParseParams aCase )
- {
- LOGSTRING("Creator: CCalenderInterimParameters::ParseL");
-
- HBufC* tempBuf= NULL;
-
- switch (aCase )
- {
-
- case MCreatorModuleBaseParameters::ECalendarTodo:
- {
-
- parser->StrParserL (tempBuf, '|' );
-
- CleanupStack::PushL (tempBuf );
-
- this->iTodoDueTime = TTime (tempBuf->Des ( ) );
-
- parser->StrParserL (this->iTodoTask, '|' );
-
- parser->StrParserL (tempBuf, ';' );
- this->iTodoPriority = 2;
- if (tempBuf->Compare (_L("LOW") ) == 0 )
- this->iTodoPriority = 3;
- else
- if (tempBuf->Compare (_L("HIGH") ) == 0 )
- this->iTodoPriority = 1;
-
- CleanupStack::PopAndDestroy (tempBuf );
-
- }
-
- case MCreatorModuleBaseParameters::ECalendarMemo:
- {
-
- parser->StrParserL (tempBuf, '|' );
-
- this->iStartTime = TTime (tempBuf->Des ( ) );
-
- parser->StrParserL (tempBuf, '|' );
- this->iEndTime = TTime (tempBuf->Des ( ) );
-
- parser->StrParserL (this->iDescription, ';' );
-
- CleanupStack::PopAndDestroy (tempBuf );
- }
-
- case MCreatorModuleBaseParameters::ECalendarMeeting:
- {
-
- parser->StrParserL (tempBuf, '|' );
-
- CleanupStack::PushL (tempBuf );
-
- this->iStartTime = TTime (tempBuf->Des ( ) );
-
- parser->StrParserL (tempBuf, '|' );
- this->iEndTime = TTime (tempBuf->Des ( ) );
-
- parser->StrParserL (this->iLocation, '|' );
- parser->StrParserL (this->iDescription, ';' );
-
- CleanupStack::PopAndDestroy (tempBuf );
- }
-
- case MCreatorModuleBaseParameters::ECalendarAnniv:
- {
-
- parser->StrParserL (tempBuf, '|' );
-
- CleanupStack::PushL (tempBuf );
-
- this->iStartTime = TTime (tempBuf->Des ( ) );
-
- parser->StrParserL (this->iDescription, ';' );
-
- CleanupStack::PopAndDestroy (tempBuf );
-
- }
- default:
- {
- //implement
- }
- }
- }
-//----------------------------------------------------------------------------
-
-CCreatorInterimCalendar* CCreatorInterimCalendar::NewL (CCreatorEngine* aEngine )
- {
- CCreatorInterimCalendar* self = CCreatorInterimCalendar::NewLC (aEngine );
- CleanupStack::Pop (self );
- return self;
- }
-
-CCreatorInterimCalendar* CCreatorInterimCalendar::NewLC (CCreatorEngine* aEngine )
- {
- CCreatorInterimCalendar* self = new (ELeave) CCreatorInterimCalendar;
- CleanupStack::PushL (self );
- self->ConstructL (aEngine );
- return self;
- }
-
-CCreatorInterimCalendar::CCreatorInterimCalendar ( )
- {
- }
-
-void CCreatorInterimCalendar::ConstructL (CCreatorEngine* aEngine )
- {
- LOGSTRING("Creator: CCreatorInterimCalendar::ConstructL");
-
- iEngine = aEngine;
-
- // set defaults, start date today and end date = today + 1 month
- iRandomModeStartTime.HomeTime ( );
- iRandomModeEndTime = iRandomModeStartTime;
- iRandomModeEndTime += TTimeIntervalMonths (1 );
-
- iCalSession = CCalSession::NewL ( );
- // Create and open a calendar file
- const TDesC& fileName = iCalSession->DefaultFileNameL ( );//default filename is: "C:Calendar"
- TRAPD(err, iCalSession->CreateCalFileL(fileName))
- ;
- // ignore KErrAlreadyExists leave code
- if (err != KErrAlreadyExists )
- {
- User::LeaveIfError (err );
- }
- // Open the calendar file
- iCalSession->OpenL (fileName );
- iCalEntryView = CCalEntryView::NewL (*iCalSession, *this );
- iNumberRepeatingEntries = 0;
- iNumberOfAttendees = 0; //iEngine->RandomNumber(2, 15);
- iSetAlarm = EFalse;
- iWaiter = CAsyncWaiter::NewL();
- }
-
-CCreatorInterimCalendar::~CCreatorInterimCalendar ( )
- {
- LOGSTRING("Creator: CCreatorInterimCalendar::~CCreatorInterimCalendar");
-
- if ( iEngine && iEntryIds.Count() )
- {
- TRAP_IGNORE( iEngine->WriteEntryIdsToStoreL( iEntryIds, KUidDictionaryUidCalendar ) );
- }
-
- iEntryIds.Reset();
- iEntryIds.Close();
-
- if (iParameters )
- {
- delete iParameters;
- }
-
- if (iCalEntryView )
- {
- delete iCalEntryView;
- }
-
- if (iCalSession )
- {
- delete iCalSession;
- }
- delete iSoundFileArray;
- delete iWaiter;
- delete iTmpCN;
- delete iTmpEmail;
- }
-
-//----------------------------------------------------------------------------
-
-void CCreatorInterimCalendar::QueryDialogClosedL(TBool aPositiveAction, TInt aUserData)
- {
- LOGSTRING("Creator: CCreatorInterimCalendar::QueryDialogClosedL");
-
- if( aPositiveAction == EFalse && aUserData != ECreatorCalendarAddDefaultAlarm )
- {
- iEngine->ShutDownEnginesL();
- return;
- }
-
- const TDesC* showText = &KSavingText;
- TBool finished(EFalse);
- TBool retval(ETrue);
- switch(aUserData)
- {
- case ECreatorCalendarDelete:
- iEntriesToBeCreated = 1;
- showText = &KDeletingText;
- finished = ETrue;
- break;
- case ECreatorCalendarStart:
- if( iCommand == ECmdCreateCalendarEntryEvents || iCommand == ECmdCreateCalendarEntryAppointments )
- {
- _LIT(KRepeatingNum, "How many repeating (weekly) entries");
- retval = iEngine->GetEngineWrapper()->EntriesQueryDialog(&iNumberRepeatingEntries, KRepeatingNum, ETrue, this, ECreatorCalendarGetWeeklyEntries);
- }
- else
- {
- _LIT(KStartPeriodDate, "Start date of creation period");// \n dd/mm/yyyy
- retval = iEngine->GetEngineWrapper()->TimeQueryDialog(&iRandomModeStartTime, KStartPeriodDate, this, ECreatorCalendarGetStartDate); // ask start date
- }
- break;
- case ECreatorCalendarGetWeeklyEntries:
- _LIT(KAttendeesNum, "How many attendees to create");
- retval = iEngine->GetEngineWrapper()->EntriesQueryDialog(&iNumberOfAttendees, KAttendeesNum, ETrue, this, ECreatorCalendarGetAttendies);
- break;
- case ECreatorCalendarGetAttendies:
- {
- // ask start date
- _LIT(KStartPeriodDate, "Start date of creation period");
- retval = iEngine->GetEngineWrapper()->TimeQueryDialog(&iRandomModeStartTime, KStartPeriodDate, this, ECreatorCalendarGetStartDate );
- }
- break;
- case ECreatorCalendarGetStartDate:
- {
- _LIT(KEndPeriodDate, "End date of creation period\n dd/mm/yyyy");
- iEngine->GetEngineWrapper()->TimeQueryDialog (&iRandomModeEndTime, KEndPeriodDate, this, ECreatorCalendarGetEndDate ); // ask end date
- }
- break;
- case ECreatorCalendarGetEndDate:
- if (iRandomModeStartTime > iRandomModeEndTime ) // check end date is ok
- {
- iEngine->GetEngineWrapper()->ShowNote(_L("End date must be after start date") );
- retval = EFalse;
- }
- else
- {
- retval = iEngine->GetEngineWrapper()->YesNoQueryDialog(_L("Add default alarm?"), this, ECreatorCalendarAddDefaultAlarm);
- }
- break;
- case ECreatorCalendarAddDefaultAlarm:
- iSetAlarm = aPositiveAction;
- finished = ETrue;
- break;
- default:
- //some error
- retval = EFalse;
- break;
- }
- if( retval == EFalse )
- {
- iEngine->ShutDownEnginesL();
- }
- else if( finished )
- {
- // add this command to command array
- iEngine->AppendToCommandArrayL(iCommand, NULL, iEntriesToBeCreated);
- // started exucuting commands
- iEngine->ExecuteFirstCommandL( *showText );
- }
- }
-
-//----------------------------------------------------------------------------
-
-TBool CCreatorInterimCalendar::AskDataFromUserL( TInt aCommand )
- {
- LOGSTRING("Creator: CCreatorInterimCalendar::AskDataFromUserL");
-
- CCreatorModuleBase::AskDataFromUserL( aCommand );//ignore retval
-
- if( aCommand == ECmdDeleteCalendarEntries )
- {
- return iEngine->GetEngineWrapper()->YesNoQueryDialog(_L("Delete all calendar entries?"), this, ECreatorCalendarDelete );
- }
- if( aCommand == ECmdDeleteCreatorCalendarEntries )
- {
- return iEngine->GetEngineWrapper()->YesNoQueryDialog(_L("Delete all calendar entries created with Creator?"), this, ECreatorCalendarDelete );
- }
-
- // display queries
- return iEngine->GetEngineWrapper()->EntriesQueryDialog(&iEntriesToBeCreated, _L("How many entries to create?"), EFalse, this, ECreatorCalendarStart ); // ask number of entries to create
- }
-
-//----------------------------------------------------------------------------
-
-TInt CCreatorInterimCalendar::CreateAppointmentEntryL (
- CCreatorModuleBaseParameters *aParameters )
- {
- LOGSTRING("Creator: CCreatorInterimCalendar::CreateAppointmentEntryL");
-
- delete iParameters;
- iParameters = 0;
-
- CCalenderInterimParameters* parameters = (CCalenderInterimParameters*)aParameters;
-
- if( !parameters )
- {
- iParameters = new(ELeave) CCalenderInterimParameters;
- parameters = iParameters;
- parameters->iRandomModeStartTime = iRandomModeStartTime;
- parameters->iRandomModeEndTime = iRandomModeEndTime;
-
- // difference between start and end times
- TTimeIntervalMinutes differenceInMinutes;
- parameters->iRandomModeEndTime.MinutesFrom (
- parameters->iRandomModeStartTime, differenceInMinutes );
-
- // start time (= something between the period start and end date)
- parameters->iStartTime = parameters->iRandomModeStartTime;
- parameters->iStartTime
- += TTimeIntervalMinutes (iEngine->RandomNumber (differenceInMinutes.Int ( ) ) );
- // set end time (= start time + some random time)
- parameters->iEndTime = parameters->iStartTime;
- parameters->iEndTime
- += TTimeIntervalMinutes (iEngine->RandomNumber (5, 500 ) );
-
-
- // strings
- parameters->iLocation->Des ( )
- = iEngine->RandomString (CCreatorEngine::EMeetingPlace );
- parameters->iDescription->Des ( )
- = iEngine->RandomString (CCreatorEngine::EMeetingReason );
-
- parameters->iSummary->Des()
- = parameters->iDescription->Des();
-
- parameters->iNumberRepeatingEntries = iNumberRepeatingEntries;
- parameters->iNumberOfAttendees = iNumberOfAttendees;
- }
-
- TInt err = KErrNone;
- HBufC8* guid = HBufC8::NewLC (255 );
- TPtr8 uidP=guid->Des ( );
- GenerateRandomId (uidP );
- CCalEntry* entry = CCalEntry::NewL (CCalEntry::EAppt, guid,
- CCalEntry::EMethodAdd, 0 );
- CleanupStack::PushL (entry );
-
- //Using same text as description and summary
- entry->SetDescriptionL (parameters->iDescription->Des ( ) );
- entry->SetSummaryL (parameters->iSummary->Des ( ) );
- entry->SetLocationL (parameters->iLocation->Des ( ) );
-
- TCalTime startTime;
- TCalTime endTime;
- // Set the start and end times using time values local to the current system time zone
- TInt month = (TInt) parameters->iStartTime.DateTime().Month();
- TInt date = parameters->iStartTime.DateTime().Day();
- startTime.SetTimeLocalL (parameters->iStartTime );
- endTime.SetTimeLocalL (parameters->iEndTime );
- entry->SetStartAndEndTimeL (startTime, endTime );
-
- if( parameters->IsAllowedEntryStatus(CCalEntry::EAppt, parameters->iStatus))
- {
- LOGSTRING2("Creator: CCreatorInterimCalendar::CreateAppointmentEntryL setting entry status: %d", parameters->iStatus);
- entry->SetStatusL(parameters->iStatus);
- }
-
- // Repeating times:
- AddRepeatingRuleL(startTime, *entry, parameters);
- SetOrganizerL(*entry, parameters);
-
- // Alarm:
- if( iSetAlarm || parameters->iUseRandomAlarmTime )
- {
- SetRandomAlarmL(*entry);
- }
- else
- {
- SetAlarmL(*entry, parameters);
- }
-
- // Add attendees:
- AddAttendeesL(*entry, parameters);
-
- RPointerArray<CCalEntry> array;
- CleanupClosePushL (array );
- array.AppendL (entry );
-
- TInt success(0);
- //If StoreL() leaves, 'success' contains the number of entries that were stored before it failed
- iCalEntryView->StoreL (array, success );
-
- // id has been generated, store it for being able to delete
- // entries created only with Creator
- iEntryIds.Append( entry->LocalUidL() );
-
- //One item should be added at time
- if (success != 1 )
- {
- err = 1;
- }
-
- CleanupStack::PopAndDestroy (&array );
- CleanupStack::PopAndDestroy (entry );
- CleanupStack::Pop (guid );//guid has been destroyed by entry, which has ownership to guid
-
- return err;
- }
-
-void CCreatorInterimCalendar::SetOrganizerL(CCalEntry& aCalEntry, CCalenderInterimParameters* parameters )
- {
- HBufC* orgName = 0;
- HBufC* orgEmail = 0;
- _LIT(KSpace, " ");
-
- //
- // Common name
- //
- if( parameters == 0 ||
- parameters->iOrganizerName == 0 ||
- parameters->iOrganizerName->Length() == 0 )
- {
- // Random:
- TPtrC firstname = iEngine->RandomString(CCreatorEngine::EFirstName);
- TPtrC lastname = iEngine->RandomString(CCreatorEngine::ESurname);
- orgName = HBufC::NewL(firstname.Length() + lastname.Length() + 1 );
- CleanupStack::PushL(orgName);
- orgName->Des().Copy(firstname);
- orgName->Des().Append(KSpace);
- orgName->Des().Append(lastname);
- }
- else
- {
- orgName = HBufC::NewL(parameters->iOrganizerName->Length());
- CleanupStack::PushL(orgName);
- orgName->Des().Copy(parameters->iOrganizerName->Des());
- }
-
- //
- // Email
- //
- if( parameters == 0 ||
- parameters->iOrganizerEmail == 0 ||
- parameters->iOrganizerEmail->Length() == 0 )
- {
- // Random:
- TDesC* tmp = iEngine->CreateEmailAddressLC();
- orgEmail = HBufC::NewL(tmp->Length());
- orgEmail->Des().Copy(*tmp);
- CleanupStack::PopAndDestroy(); // tmp
- CleanupStack::PushL(orgEmail);
- }
- else
- {
- orgEmail = HBufC::NewL(parameters->iOrganizerEmail->Length());
- CleanupStack::PushL(orgEmail);
- orgEmail->Des().Copy(parameters->iOrganizerEmail->Des());
- }
-
- SetOrganizerL(aCalEntry, orgName->Des(), orgEmail->Des(), orgEmail->Des());
- CleanupStack::PopAndDestroy(); // orgName
- CleanupStack::PopAndDestroy(); // orgEmail
- }
-
-void CCreatorInterimCalendar::AddRepeatingRuleL(const TCalTime& aStartTime, CCalEntry& aCalEntry, CCalenderInterimParameters* parameters )
- {
- RArray<TDay> days;
- CleanupClosePushL(days);
-
- // Recurrence rule. Weekly event.
- if( parameters->iNumberRepeatingEntries > 0 )
- {
- TCalRRule calRepeat(TCalRRule::EWeekly);
- calRepeat.SetDtStart(aStartTime);
- calRepeat.SetCount(parameters->iNumberRepeatingEntries);
- calRepeat.SetInterval(1);
- //days.AppendL((TDay) iEngine->RandomNumber((TInt)EMonday, (TInt) ESunday));
- TDay tempDay(aStartTime.TimeLocalL().DayNoInWeek());
- days.AppendL(tempDay);
- calRepeat.SetByDay(days);
- aCalEntry.SetRRuleL(calRepeat);
- }
- else if(parameters->iRecurrentFrequency > TCalRRule::EInvalid)
- {
- TCalTime calTime;
- // Recurrent frequency
- TCalRRule calRepeat(parameters->iRecurrentFrequency);
- // Recurrent start
- calRepeat.SetDtStart(aStartTime);
- if( parameters->iRecurrentFrequency == TCalRRule::EWeekly )
- {
- TDay tempDay(aStartTime.TimeLocalL().DayNoInWeek());
- days.AppendL(tempDay);
- calRepeat.SetByDay(days);
- }
- else if( parameters->iRecurrentFrequency == TCalRRule::EMonthly )
- {
- RArray< TInt > daysInMonth;
- CleanupClosePushL(daysInMonth);
- daysInMonth.AppendL(aStartTime.TimeLocalL().DayNoInMonth());
- calRepeat.SetByMonthDay(daysInMonth);
- CleanupStack::PopAndDestroy(&daysInMonth);
- }
- else if( parameters->iRecurrentFrequency == TCalRRule::EYearly)
- {
- RArray< TMonth > monthsInYear;
- CleanupClosePushL(monthsInYear);
- monthsInYear.AppendL(aStartTime.TimeLocalL().DateTime().Month());
- calRepeat.SetByMonth(monthsInYear);
- CleanupStack::PopAndDestroy(&monthsInYear);
- }
-
- // Recurrent interval
- if( parameters->iRecurrentInterval > 0 )
- calRepeat.SetInterval(parameters->iRecurrentInterval);
-
- // Recurrent end. End can be given as a number of repeating entries or as an end date.
- // End date must be later than the start date, otherwise CCalEntry::SetRRuleL() panics.
- if( parameters->iRepeatingCount > 0 )
- {
- calRepeat.SetCount(parameters->iRepeatingCount);
- aCalEntry.SetRRuleL(calRepeat);
- }
- else
- {
- TCalTime endTime;
- endTime.SetTimeLocalL(parameters->iRecurrentEndTime);
- if( endTime.TimeLocalL() > aStartTime.TimeLocalL())
- {
- calRepeat.SetUntil(endTime);
- aCalEntry.SetRRuleL(calRepeat);
- }
- }
- }
- CleanupStack::PopAndDestroy(&days);
- }
-
-void CCreatorInterimCalendar::SetAlarmL(CCalEntry& aCalEntry, CCalenderInterimParameters* params)
- {
- if( params->iAlarmTime != Time::NullTTime() )
- {
- CCalAlarm* alarm = CCalAlarm::NewL();
- CleanupStack::PushL(alarm);
- //if( params->iAlarmTime <= params->iStartTime )
- // {
- TTimeIntervalMinutes diff;
- TInt err = params->iStartTime.MinutesFrom(params->iAlarmTime, diff);
- if( err == KErrNone)
- {
- alarm->SetTimeOffset(diff);
- TRAP(err, aCalEntry.SetAlarmL(alarm));
- if( err != KErrNone && err != KErrNotSupported )
- {
- User::Leave(err);
- }
- }
- // }
- CleanupStack::PopAndDestroy(alarm);
- }
- }
-
-void CCreatorInterimCalendar::SetRandomAlarmL(CCalEntry& aCalEntry)
- {
- CCalAlarm* alarm = CCalAlarm::NewL();
- CleanupStack::PushL(alarm);
- alarm->SetTimeOffset(TTimeIntervalMinutes(iEngine->RandomNumber(0, 60)));
-
- TRAPD(err, aCalEntry.SetAlarmL(alarm));
- if( err != KErrNone && err != KErrNotSupported )
- {
- User::Leave(err);
- }
- CleanupStack::PopAndDestroy(alarm);
- }
-
-void CCreatorInterimCalendar::SetPhoneOwnerL(CCalEntry& aCalEntry, const TDesC& aCN, const TDesC& aEmail, const TDesC& aSentBy )
- {
- CCalUser* phOwner = CCalUser::NewL(aEmail, aSentBy);
- CleanupStack::PushL(phOwner);
- TRAPD(err, aCalEntry.SetPhoneOwnerL(phOwner));
- CleanupStack::Pop(phOwner);
- if( err == KErrNone )
- {
- phOwner->SetCommonNameL(aCN);
- }
- else
- {
- delete phOwner;
- }
- }
-
-void CCreatorInterimCalendar::SetOrganizerL(CCalEntry& aCalEntry, const TDesC& aCN, const TDesC& aEmail, const TDesC& aSentBy)
- {
- CCalUser* organizer = CCalUser::NewL(aEmail, aSentBy);
- CleanupStack::PushL(organizer);
- TRAPD(err, aCalEntry.SetOrganizerL(organizer));
- CleanupStack::Pop(organizer);
- if( err == KErrNone )
- {
- organizer->SetCommonNameL(aCN);
- }
- else
- {
- delete organizer;
- }
- }
-
-void CCreatorInterimCalendar::AddAttendeesL(CCalEntry& aCalEntry, CCalenderInterimParameters* parameters )
- {
- if( !parameters )
- return;
-
- // Random attendees:
- TInt numOfAttendees = parameters->iNumberOfAttendees;
- for( TInt i = 0; i < numOfAttendees; ++i )
- {
- TPtrC firstname = iEngine->RandomString(CCreatorEngine::EFirstName);
- TPtrC lastname = iEngine->RandomString(CCreatorEngine::ESurname);
- TPtrC company = iEngine->RandomString(CCreatorEngine::ECompany);
- _LIT(KCountry, "com");
- TDesC* emailAddr = iEngine->CreateEmailAddressLC(firstname, lastname, company, KCountry);
- CCalAttendee* attendee = CCalAttendee::NewL(*emailAddr);
- CleanupStack::PushL(attendee);
- aCalEntry.AddAttendeeL(attendee);
- CleanupStack::Pop(attendee);
- attendee->SetCommonNameL(firstname);
-
- // Set phone owner:
- if( i == 1 )
- {
- SetPhoneOwnerL(aCalEntry, firstname, *emailAddr, *emailAddr);
- attendee->SetRoleL(CCalAttendee::EReqParticipant);
- }
- // Set organizer:
- else if ( i == 0 )
- {
- // Organizer is the chairman of the meeting:
- SetOrganizerL(aCalEntry, firstname, *emailAddr, *emailAddr);
- attendee->SetRoleL(CCalAttendee::EChair);
- }
- else if( i % 3 == 0 )
- {
- // every third attendee is optional:
- attendee->SetRoleL(CCalAttendee::EOptParticipant);
- }
- else
- {
- // Others are required attendees:
- attendee->SetRoleL(CCalAttendee::EReqParticipant);
- }
-
- TInt attStatus = iEngine->RandomNumber(0,5);
- attendee->SetStatusL((CCalAttendee::TCalStatus) attStatus);
-
- CleanupStack::PopAndDestroy(emailAddr);
- }
-
- // Explicit attendees:
- for( TInt i = 0; i < parameters->iAttendees.Count(); ++i )
- {
- CCreatorCalenderAttendee* attendeeInfo = parameters->iAttendees[i];
- if( attendeeInfo && attendeeInfo->EmailAddress().Length() > 0)
- {
- CCalAttendee* attendee = CCalAttendee::NewL(attendeeInfo->EmailAddress());
- CleanupStack::PushL(attendee);
- if( attendeeInfo->CommonName().Length() > 0 )
- attendee->SetCommonNameL(attendeeInfo->CommonName());
- attendee->SetRoleL(attendeeInfo->Role());
- attendee->SetStatusL(attendeeInfo->Status());
- attendee->SetResponseRequested(ETrue);
- aCalEntry.AddAttendeeL(attendee);
- CleanupStack::Pop(); // attendee
- }
- }
- }
-//----------------------------------------------------------------------------
-
-TInt CCreatorInterimCalendar::CreateEventEntryL (
- CCreatorModuleBaseParameters *aParameters )
- {
- LOGSTRING("Creator: CCreatorInterimCalendar::CreateEventEntryL");
-
- delete iParameters;
- iParameters = 0;
-
- CCalenderInterimParameters* parameters = (CCalenderInterimParameters*)aParameters;
-
- // random data needed if no predefined data available
- if (!parameters )
- {
- iParameters = new(ELeave) CCalenderInterimParameters;
-
- iParameters->iRandomModeStartTime = iRandomModeStartTime;
- iParameters->iRandomModeEndTime = iRandomModeEndTime;
- iParameters->iNumberRepeatingEntries = iNumberRepeatingEntries;
- iParameters->iNumberOfAttendees = iNumberOfAttendees;
-
- // difference between start and end times
- TTimeIntervalMinutes differenceInMinutes;
- iParameters->iRandomModeEndTime.MinutesFrom (
- iParameters->iRandomModeStartTime, differenceInMinutes );
-
- // start time (= something between the period start and end date)
- iParameters->iStartTime = iParameters->iRandomModeStartTime;
- iParameters->iStartTime
- += TTimeIntervalMinutes (iEngine->RandomNumber (differenceInMinutes.Int ( ) ) );
-
- // set end time (= start time + some random time)
- iParameters->iEndTime = iParameters->iStartTime;
- iParameters->iEndTime
- += TTimeIntervalMinutes (iEngine->RandomNumber (5, 500 ) );
-
- // strings
- iParameters->iDescription->Des()
- = iEngine->RandomString (CCreatorEngine::EMemoText );
-
- iParameters->iSummary->Des() = iParameters->iDescription->Des();
-
- // Random event status:
- iParameters->iStatus =
- (CCalEntry::TStatus) iEngine->RandomNumber(0, (TInt) CCalEntry::ECancelled);
-
- parameters = iParameters;
- }
-
- TInt err = KErrNone;
- HBufC8* guid = HBufC8::NewLC (255 );
- TPtr8 uidP=guid->Des ( );
- GenerateRandomId (uidP );
- CCalEntry* entry = CCalEntry::NewL (CCalEntry::EEvent, guid,
- CCalEntry::EMethodAdd, 0 );
- CleanupStack::PushL (entry );
- // iEntryUids->AppendL( *guid->Alloc() );
-
- entry->SetDescriptionL (parameters->iDescription->Des ( ) );
- entry->SetSummaryL (parameters->iSummary->Des ( ) );
-
- TCalTime startTime;
- TCalTime endTime;
- // Set the start and end times using time values local to the current system time zone
- startTime.SetTimeLocalL (parameters->iStartTime );
- endTime.SetTimeLocalL (parameters->iEndTime );
- entry->SetStartAndEndTimeL (startTime, endTime );
-
- // Repeating times:
- AddRepeatingRuleL(startTime, *entry, parameters);
-
- if( iSetAlarm || parameters->iUseRandomAlarmTime )
- {
- SetRandomAlarmL(*entry);
- }
- else
- {
- SetAlarmL(*entry, parameters);
- }
-
- // Add attendees:
- AddAttendeesL(*entry, parameters);
-
- if( parameters->IsAllowedEntryStatus(CCalEntry::EEvent, parameters->iStatus))
- {
- LOGSTRING2("Creator: CCreatorInterimCalendar::CreateEventEntryL setting entry status: %d", parameters->iStatus);
- entry->SetStatusL(parameters->iStatus);
- }
-
- RPointerArray<CCalEntry> array;
- CleanupClosePushL (array );
- array.AppendL (entry );
-
- TInt success(0);
- //If StoreL() leaves, 'success' contains the number of entries that were stored before it failed
- iCalEntryView->StoreL (array, success );
-
- // id has been generated, store it for being able to delete
- // entries created only with Creator
- iEntryIds.Append( entry->LocalUidL() );
-
- //One item should be added at time
- if (success != 1 )
- {
- err = 1;
- }
-
- CleanupStack::PopAndDestroy (&array );
- CleanupStack::PopAndDestroy (entry );
- CleanupStack::Pop (guid );//guid has been destroyed by entry, which has ownership to guid
- return err;
-
- }
-
-//----------------------------------------------------------------------------
-
-
-TInt CCreatorInterimCalendar::CreateReminderEntryL (
- CCreatorModuleBaseParameters *aParameters )
- {
- LOGSTRING("Creator: CCreatorInterimCalendar::CreateReminderEntryL");
-
- delete iParameters;
- iParameters = NULL;
-
- CCalenderInterimParameters* parameters = (CCalenderInterimParameters*)aParameters;
-
- // random data needed if no predefined data available
- if (!parameters )
- {
- iParameters = new(ELeave) CCalenderInterimParameters;
-
- iParameters->iRandomModeStartTime = iRandomModeStartTime;
- iParameters->iRandomModeEndTime = iRandomModeEndTime;
-
- // difference between start and end times
- TTimeIntervalDays
- differenceInDays = iParameters->iRandomModeEndTime.DaysFrom (iParameters->iRandomModeStartTime );
-
- // due time (= something between the period start and end date)
- iParameters->iStartTime = iParameters->iRandomModeStartTime;
- iParameters->iStartTime
- += TTimeIntervalDays (iEngine->RandomNumber (differenceInDays.Int ( ) ) );
-
- // strings
- iParameters->iDescription->Des()
- = iEngine->RandomString (CCreatorEngine::EReminderText );
-
- iParameters->iSummary->Des() = iParameters->iDescription->Des();
-
- parameters = iParameters;
- }
-
- TInt err = KErrNone;
-
- HBufC8* guid = HBufC8::NewLC (255 );
- TPtr8 uidP=guid->Des ( );
- GenerateRandomId (uidP );
-
- CCalEntry* entry = CCalEntry::NewL (CCalEntry::EReminder, guid,
- CCalEntry::EMethodAdd, 0 );
- CleanupStack::PushL (entry );
-
- //Using same text as description and summary
- entry->SetDescriptionL (parameters->iDescription->Des ( ) );
- entry->SetSummaryL (parameters->iSummary->Des ( ) );
-
- TCalTime startTime;
- TCalTime endTime;
- // Set the start and end times using time values local to the current system time zone
- startTime.SetTimeLocalL (parameters->iStartTime );
- TTime nullTime = Time::NullTTime ( );
- endTime.SetTimeLocalL (nullTime );
- entry->SetStartAndEndTimeL (startTime, endTime );
-
- if( parameters->IsAllowedEntryStatus(CCalEntry::EReminder, parameters->iStatus))
- {
- LOGSTRING2("Creator: CCreatorInterimCalendar::CreateReminderEntryL setting entry status: %d", parameters->iStatus);
- entry->SetStatusL(parameters->iStatus);
- }
-
- if( iSetAlarm || parameters->iUseRandomAlarmTime )
- {
- SetRandomAlarmL(*entry);
- }
- else
- {
- SetAlarmL(*entry, parameters);
- }
-
- RPointerArray<CCalEntry> array;
- CleanupClosePushL (array );
- array.AppendL (entry );
-
- TInt success(0);
- //If StoreL() leaves, 'success' contains the number of entries that were stored before it failed
- iCalEntryView->StoreL (array, success );
-
- // id has been generated, store it for being able to delete
- // entries created only with Creator
- iEntryIds.Append( entry->LocalUidL() );
-
- //One item should be added at time
- if (success != 1 )
- {
- err = 1;
- }
-
- CleanupStack::PopAndDestroy (&array );
- CleanupStack::PopAndDestroy (entry );
- CleanupStack::Pop (guid );//guid has been destroyed by entry, which has ownership to guid
-
- return err;
- }
-
-//----------------------------------------------------------------------------
-
-TInt CCreatorInterimCalendar::CreateAnniversaryEntryL (
- CCreatorModuleBaseParameters *aParameters )
- {
- LOGSTRING("Creator: CCreatorInterimCalendar::CreateAnniversaryEntryL");
-
- delete iParameters;
- iParameters = NULL;
-
- CCalenderInterimParameters* parameters = (CCalenderInterimParameters*)aParameters;
-
- // random data needed if no predefined data available
- if (!parameters )
- {
- iParameters = new(ELeave) CCalenderInterimParameters;
-
- iParameters->iRandomModeStartTime = iRandomModeStartTime;
- iParameters->iRandomModeEndTime = iRandomModeEndTime;
-
- // difference between start and end times
- TTimeIntervalDays differenceInDays = iParameters->iRandomModeEndTime.DaysFrom(iParameters->iRandomModeStartTime);
-
- // start time (= something between the period start and end date)
- iParameters->iStartTime = iParameters->iRandomModeStartTime;
- iParameters->iStartTime += TTimeIntervalDays( iEngine->RandomNumber(differenceInDays.Int()) );
-
- // strings
- iParameters->iDescription->Des().Copy (iEngine->RandomString (CCreatorEngine::EFirstName ) );
- iParameters->iDescription->Des().Append ( _L("'s ") );
- iParameters->iDescription->Des().Append (iEngine->RandomString (CCreatorEngine::EAnniversaryReason ) );
- iParameters->iSummary->Des() = iParameters->iDescription->Des();
- parameters = iParameters;
- }
-
- TInt err = KErrNone;
-
- HBufC8* guid = HBufC8::NewLC (255 );
- TPtr8 uidP=guid->Des ( );
- GenerateRandomId (uidP );
-
- CCalEntry* entry = CCalEntry::NewL (CCalEntry::EAnniv, guid,
- CCalEntry::EMethodNone, 0 );
- CleanupStack::PushL (entry );
-
- //Using same text as description and summary
- entry->SetDescriptionL (parameters->iDescription->Des ( ) );
- entry->SetSummaryL (parameters->iSummary->Des ( ) );
-
- TCalTime startTime;
- TCalTime endTime;
- TTime nullTime = Time::NullTTime ( );
- endTime.SetTimeLocalL (nullTime );
-
- // Set the start time using time value local to the current system time zone
- startTime.SetTimeLocalL (parameters->iStartTime );
-
- entry->SetStartAndEndTimeL (startTime, endTime );
-
- if( iSetAlarm || parameters->iUseRandomAlarmTime )
- {
- SetRandomAlarmL(*entry);
- }
- else
- {
- SetAlarmL(*entry, parameters);
- }
-
- //set repeating rule
- TCalRRule yearlyRptRule(TCalRRule::EYearly);
- yearlyRptRule.SetDtStart (startTime );
- //Set repeating until forever, not setting it to stop
- //yearlyRptRule.SetUntil(endTime);
- entry->SetRRuleL (yearlyRptRule );
-
- RPointerArray<CCalEntry> array;
- CleanupClosePushL (array );
- array.AppendL (entry );
-
- TInt success(0);
- //If StoreL() leaves, 'success' contains the number of entries that were stored before it failed
- iCalEntryView->StoreL (array, success );
-
- // id has been generated, store it for being able to delete
- // entries created only with Creator
- iEntryIds.Append( entry->LocalUidL() );
-
- //One item should be added at time
- if (success != 1 )
- {
- err = 1;
- }
-
- CleanupStack::PopAndDestroy (&array );
- CleanupStack::PopAndDestroy (entry );
- CleanupStack::Pop (guid );//guid has been destroyed by entry, which has ownership to guid
-
- return err;
- }
-
-//----------------------------------------------------------------------------
-
-TInt CCreatorInterimCalendar::CreateTodoEntryL (
- CCreatorModuleBaseParameters *aParameters )
- {
- LOGSTRING("Creator: CCreatorInterimCalendar::CreateTodoEntryL");
-
- delete iParameters;
- iParameters = NULL;
-
- CCalenderInterimParameters* parameters = (CCalenderInterimParameters*)aParameters;
-
- // random data needed if no predefined data available
- if (!parameters )
- {
- iParameters = new(ELeave) CCalenderInterimParameters;
-
- iParameters->iRandomModeStartTime = iRandomModeStartTime;
- iParameters->iRandomModeEndTime = iRandomModeEndTime;
-
- // difference between start and end times
- TTimeIntervalDays
- differenceInDays = iParameters->iRandomModeEndTime.DaysFrom (iParameters->iRandomModeStartTime );
-
- // due time (= something between the period start and end date)
- iParameters->iTodoDueTime = iParameters->iRandomModeStartTime;
- iParameters->iTodoDueTime
- += TTimeIntervalDays (iEngine->RandomNumber (differenceInDays.Int ( ) ) );
-
- // strings
- iParameters->iDescription->Des ( )
- = iEngine->RandomString (CCreatorEngine::EToDoText );
-
- iParameters->iSummary->Des() = iParameters->iDescription->Des();
-
- //priority
- iParameters->iTodoPriority = iEngine->RandomNumber (1, 3 );
- iParameters->iStatus = (CCalEntry::TStatus) iEngine->RandomNumber((TInt) CCalEntry::ETodoNeedsAction, (TInt) CCalEntry::ETodoInProcess);
- parameters = iParameters;
-
- }
-
- TInt err = KErrNone;
-
- HBufC8* guid = HBufC8::NewLC (255 );
- TPtr8 uidP=guid->Des ( );
- GenerateRandomId (uidP );
-
- CCalEntry* entry = CCalEntry::NewL (CCalEntry::ETodo, guid,
- CCalEntry::EMethodAdd, 0 );
- CleanupStack::PushL (entry );
-
- //Using same text as description and summary
- entry->SetDescriptionL (parameters->iDescription->Des ( ) );
- entry->SetSummaryL (parameters->iSummary->Des ( ) );
-
- entry->SetPriorityL (parameters->iTodoPriority );
-
- if( parameters->IsAllowedEntryStatus(CCalEntry::ETodo, parameters->iStatus))
- {
- LOGSTRING2("Creator: CCreatorInterimCalendar::CreateTodoEntryL setting entry status: %d", parameters->iStatus);
- entry->SetStatusL(parameters->iStatus);
- }
-
- TCalTime startTime;
- TCalTime endTime;
- // Set the start and end times using time values local to the current system time zone
- startTime.SetTimeLocalL (parameters->iTodoDueTime );
- endTime.SetTimeLocalL (parameters->iTodoDueTime );
- entry->SetStartAndEndTimeL (startTime, endTime );
-
- if( iSetAlarm || parameters->iUseRandomAlarmTime )
- {
- SetRandomAlarmL(*entry);
- }
- else
- {
- SetAlarmL(*entry, parameters);
- }
-
- RPointerArray<CCalEntry> array;
- CleanupClosePushL (array );
- array.AppendL (entry );
-
- TInt success(0);
- //If StoreL() leaves, 'success' contains the number of entries that were stored before it failed
- iCalEntryView->StoreL (array, success );
-
- // id has been generated, store it for being able to delete
- // entries created only with Creator
- iEntryIds.Append( entry->LocalUidL() );
-
- //One item should be added at time
- if (success != 1 )
- {
- err = 1;
- }
-
- CleanupStack::PopAndDestroy (&array );
- CleanupStack::PopAndDestroy (entry );
- CleanupStack::Pop (guid );//guid has been destroyed by entry, which has ownership to guid
-
- return err;
- }
-
-//----------------------------------------------------------------------------
-
-void CCreatorInterimCalendar::Progress (TInt /*aPercentageCompleted*/)
- {
- //Not really needed but observer need to be implement
- }
-
-void CCreatorInterimCalendar::Completed (TInt aError )
- {
- //Not really needed but observer need to be implement
- LOGSTRING2("Creator: CCreatorInterimCalendar::Completed err=%d", aError);
- }
-
-TBool CCreatorInterimCalendar::NotifyProgress ( )
- {
- //Not really needed but observer need to be implement
- return NULL;
- }
-
-//----------------------------------------------------------------------------
-
-
-void CCreatorInterimCalendar::GenerateRandomId (TDes8& aText )
- {
- LOGSTRING("Creator: CCreatorInterimCalendar::GenerateRandomId");
-
- aText.Zero ( );
-
- TTime now;
- now.UniversalTime ( );
- TInt64 time = now.Int64 ( );
-
- // The number of characters in the guid should be
- // more than 8 (to ensure the guids are not too small)
- // less than 255 (this is the maximum length of a guid)
- // less than MaxLength of the descriptor passed in
- TInt numChar(0);
- do
- {
- numChar = Math::Rand (time ) % (aText.MaxLength ( ) - 1);
- }
- while (numChar > 255|| numChar < 8 );
-
- for (TInt i(0); i < numChar ; ++i )
- {
- TInt character = Math::Rand (time )%6;
- character = Math::Rand (time ) % 26+ ((character == 2) ? 'A' : 'a');
- aText.Append (character );
- }
-
- }
-
-//----------------------------------------------------------------------------
-void CCreatorInterimCalendar::DeleteAllL()
- {
- LOGSTRING("Creator: CCreatorInterimCalendar::DeleteAllL");
- TCalTime zeroTime;
- zeroTime.SetTimeUtcL( TCalTime::MinTime() );
- RArray<TUint32> allIds;
- CleanupClosePushL( allIds );
- iCalEntryView->GetIdsModifiedSinceDateL( zeroTime, allIds );
- if ( allIds.Count() )
- {
- TInt successCount( KErrNotFound );
- iCalEntryView->DeleteL( allIds, successCount );
- if ( successCount != allIds.Count() )
- {
- User::Leave( KErrGeneral );
- }
- }
- CleanupStack::PopAndDestroy( &allIds );
-
- // reset must be done here, because iEntryIds is stored in destructor
- iEntryIds.Reset();
-
- // all entries deleted, remove the Calendar related registry
- iEngine->RemoveStoreL( KUidDictionaryUidCalendar );
- }
-
-//----------------------------------------------------------------------------
-void CCreatorInterimCalendar::DeleteAllCreatedByCreatorL()
- {
- LOGSTRING("Creator: CCreatorInterimCalendar::DeleteAllCreatedByCreatorL");
- iEntryIds.Reset();
-
- // fetch ids of entries created by Creator
- iEngine->ReadEntryIdsFromStoreL( iEntryIds, KUidDictionaryUidCalendar );
-
- // delete entries
- TInt successCount(0); // ignore
- TRAP_IGNORE( iCalEntryView->DeleteL( iEntryIds, successCount ) );
-
- // reset must be done here, because iEntryIds is stored in destructor
- iEntryIds.Reset();
-
- // all entries deleted, remove the Calendar related registry
- iEngine->RemoveStoreL( KUidDictionaryUidCalendar );
- }
-
-//----------------------------------------------------------------------------
-