diff -r 000000000000 -r f979ecb2b13e meetingui/meetingrequestutils/src/MREntryConsultant.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meetingui/meetingrequestutils/src/MREntryConsultant.cpp Tue Feb 02 10:12:19 2010 +0200 @@ -0,0 +1,265 @@ +/* +* Copyright (c) 2002-2004 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: Static helper methods for analyzing entries +* +*/ + + + + +// INCLUDE FILES +#include "MREntryConsultant.h" +#include "MRHelpers.h" +#include +#include +#include +#include +#include +#include "CMRUtilsInternal.h" +#include +#include + +// CONSTANTS + +/// Unnamed namespace for local definitions +namespace { + +} // namespace + +// ============================ MEMBER FUNCTIONS =============================== + + +TMsvId MREntryConsultant::SendingMailBoxL( + const MAgnEntryUi::TAgnEntryUiInParams& aInParams, + CMRMailboxUtils& aUtils ) + { + if ( aInParams.iCallingApp.iUid == KUidMsgMailViewer ) + { + return aInParams.iMailBoxId; + } + else + { + CMRMailboxUtils::TMailboxInfo info; + // returns KMsvNullIndexEntryId if default box cannot be resolved: + aUtils.GetDefaultMRMailBoxL( info ); + return info.iEntryId; + } + } + +TBool MREntryConsultant::IsRepeatingMeetingL( const CCalEntry& aEntry ) + { + TBool retVal( EFalse ); + + if ( IsModifyingEntryL( aEntry ) ) + { + retVal = ETrue; + } + else + { + TCalRRule dummyRule; + if ( aEntry.GetRRuleL( dummyRule ) ) + { + retVal = ETrue; + } + else + { + RArray dummyRDateList; + CleanupClosePushL( dummyRDateList ); + aEntry.GetRDatesL( dummyRDateList ); + if ( dummyRDateList.Count() > 0 ) + { + retVal = ETrue; + } + CleanupStack::PopAndDestroy(); // dummyRDateList + } + } + return retVal; + } + +TBool MREntryConsultant::IsModifyingEntryL( const CCalEntry& aEntry ) + { + return ( aEntry.RecurrenceIdL().TimeUtcL() != + Time::NullTTime() ) ? ETrue : EFalse; + } + + +TBool MREntryConsultant::IsEditedL( + const CCalEntry& aEntry, + CMRUtilsInternal& aUtils ) + { + TBool retVal( EFalse ); + CCalEntry* dbEntry = aUtils.FetchEntryL( aEntry.UidL(), + aEntry.RecurrenceIdL() ); + CleanupStack::PushL( dbEntry ); + if ( dbEntry ) + { // edited if differs from the db entry + retVal = !( aEntry.CompareL( *dbEntry ) ); + } + else + { // no db entry exists -> edited + retVal = ETrue; + } + CleanupStack::PopAndDestroy( dbEntry ); + return retVal; + } + +TBool MREntryConsultant::IsSentL( const CCalEntry& aEntry ) + { + TBool retVal( EFalse ); + if ( aEntry.StatusL() != CCalEntry::ENullStatus ) + { // When we send a request for the first time we set it's status to + // some other value than ENullStatus + retVal = ETrue; + } + return retVal; + } + +TBool MREntryConsultant::IsLatestSavedSentL( + const CCalEntry& aEntry ) + { + TBool retVal( EFalse ); + if ( aEntry.DTStampL().TimeUtcL() == Time::NullTTime() ) + { + // If entries are synchronized to phone we must always assume that + // they have been sent already. In case of our own requests we keep the + // DTSTAMP as null until sending. + + retVal = ETrue; + } + return retVal; + } + +TBool MREntryConsultant::IsCancelledL( + const CCalEntry& aEntry, + CMRMailboxUtils& aUtils ) + { + TBool retVal( EFalse ); + // Check if either entire meeting is cancelled, or this attendee + // has been removed from the participant list. According to RFC2446 + // in that case entry doesn't have status field set. + if ( aEntry.StatusL() == CCalEntry::ECancelled || + ( aEntry.MethodL() == CCalEntry::EMethodCancel && + !aUtils.ThisAttendeeL( aEntry ) ) ) + { + retVal = ETrue; + } + return retVal; + } + +TBool MREntryConsultant::ExistsInDbL( + const CCalEntry& aEntry, + CMRUtilsInternal& aUtils, + TBool aStrictMode ) + { + TInt retVal( EFalse ); + CCalEntry* dbEntry = aUtils.FetchEntryL( aEntry.UidL(), + aEntry.RecurrenceIdL() ); + if ( dbEntry ) + { + CleanupStack::PushL( dbEntry ); + if ( aStrictMode ) + { + TInt seq( aEntry.SequenceNumberL() ); + TInt dbSeq( dbEntry->SequenceNumberL() ); + TTime stamp = aEntry.DTStampL().TimeUtcL(); + TTime dbStamp = dbEntry->DTStampL().TimeUtcL(); + if ( ( seq == dbSeq ) && ( stamp == dbStamp ) ) + { + retVal = ETrue; + } + } + else + { + retVal = ETrue; + } + CleanupStack::PopAndDestroy( dbEntry ); + } + return retVal; + } + +TBool MREntryConsultant::IsEntryOutOfDateL( const CCalEntry& aEntry ) + { + TBool retVal( EFalse ); + TTime universalTime; + universalTime.UniversalTime(); + TTime meetingUniversalTime = aEntry.StartTimeL().TimeUtcL(); + if ( universalTime > meetingUniversalTime ) + { + retVal = ETrue; + } + return retVal; + } + +const TDesC& MREntryConsultant::PhoneOwnerAddrL( + const CCalEntry& aEntry, + CMRMailboxUtils& aUtils ) + { + if ( aUtils.IsOrganizerL( aEntry ) ) + { + return aEntry.OrganizerL()->Address(); + } + else + { + CCalAttendee* thisAttendee = aUtils.ThisAttendeeL( aEntry ); + if ( thisAttendee ) + { + return thisAttendee->Address(); + } + else + { + return KNullDesC; + } + } + } + +CCalAttendee* MREntryConsultant::EqualAttendeeL( + const CCalAttendee& aAttendee, + const CCalEntry& aEntry ) + { + TPtrC addr = MRHelpers::AddressWithoutMailtoPrefix( aAttendee.Address() ); + RPointerArray& attendees = aEntry.AttendeesL(); + TInt count( attendees.Count() ); + for ( TInt i ( 0 ); i < count; ++i ) + { + TPtrC testAddr = + MRHelpers::AddressWithoutMailtoPrefix( attendees[i]->Address() ); + if ( addr.CompareF( testAddr ) == 0 ) + { + return attendees[i]; + } + } + return NULL; + } + +TBool MREntryConsultant::SpansManyDaysL( + const TCalTime& aStartTime, + const TCalTime& aEndTime ) + { + TBool retVal( EFalse ); + + // mustn't use UTC time here, local time specifies if the midnight + // is crossed + TTime localStartTime = aStartTime.TimeLocalL(); + TTime localEndTime = aEndTime.TimeLocalL(); + + TTimeIntervalDays days = localEndTime.DaysFrom( localStartTime ); + + if ( days.Int() > 0 ) + { + retVal = ETrue; + } + return retVal; + } + +// End of File