diff -r 000000000000 -r 72b543305e3a email/imap4mtm/imapsession/src/tmessageflaginfo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/imap4mtm/imapsession/src/tmessageflaginfo.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,166 @@ +// Copyright (c) 2006-2009 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 "tmessageflaginfo.h" + +#include "cimapcommand.h" +#include "cimapsessionconsts.h" + +/** +Default constructor - initialises its data members to zero. +Note this is not a CBase class, so this does not happen automatically. +*/ +TMessageFlagInfo::TMessageFlagInfo() + : iMessageUid(0), iFlags(0) + {} + +/** +Set the flag identified by aFlagId to the value of aValue. +@param aFlagId Identifies which flag to set. +@param aValue The value to apply to the flag. +*/ +void TMessageFlagInfo::SetFlag(TImapMessageFlags aFlagId, TBool aValue) + { + if (aValue) + { + iFlags |= aFlagId; + } + else + { + iFlags &= ~aFlagId; + } + } + +/** +Retrieve the value of the flag identified by aFlagId. +@param aFlagId Identifies which flag to query. +@return The value of the querried flag. +*/ +EXPORT_C TBool TMessageFlagInfo::QueryFlag(TImapMessageFlags aFlagId) + { + return iFlags & aFlagId; + } + +/** +Parse the flags data and update to iFlags. +@param aFlagsData contains list of flags to be parsed. +@return The remaining portion of the aFlagsData parameter that was not parsed. +*/ +TPtrC8 TMessageFlagInfo::ParseFlagsL(const TDesC8& aFlagsData) + { + // formal definition of the FLAGS data item of a FETCH FLAGS is + // + // msg-att-dynamic = "FLAGS" SP "(" [flag-fetch *(SP flag-fetch)] ")" + // + // flag-fetch = flag / "\Recent" + // flag = "\Answered" / "\Flagged" / "\Deleted" / "\Seen" / "\Draft" / flag-keyword / flag-extension + // flag-extension = "\" atom + // flag-keyword = atom + // + // + + TPtrC8 parseData(aFlagsData); + + TInt start = aFlagsData.Locate('('); + TInt end = aFlagsData.Locate(')'); + + // Reset the flags, prior to setting them. + iFlags = 0; + + // Now set them. + if ((start >= 0) && (end > start)) + { + RDesParts flags; + CleanupClosePushL(flags); + + // lose the brackets + parseData.Set(aFlagsData.Mid(start+1, end-start-1)); + + CImapCommand::GetDelimitedPartsL(' ', parseData, flags); + TInt flagsCount = flags.Count(); + for (TInt i = 0; i < flagsCount; ++i) + { + TPtrC8 flag = flags[i]; + + if(flag.CompareF(KImapTxtFlagDeleted) == 0) + { + SetFlag(TMessageFlagInfo::EDeleted, ETrue); + } + else if (flag.CompareF(KImapTxtFlagSeen) == 0) + { + SetFlag(TMessageFlagInfo::ESeen, ETrue); + } + else if(flag.CompareF(KImapTxtFlagFlagged) == 0) + { + SetFlag(TMessageFlagInfo::EFlagged, ETrue); + } + else if(flag.CompareF(KImapTxtFlagAnswered) == 0) + { + SetFlag(TMessageFlagInfo::EAnswered, ETrue); + } + else if(flag.CompareF(KImapTxtFlagDraft) == 0) + { + SetFlag(TMessageFlagInfo::EDraft, ETrue); + } + else if(flag.CompareF(KImapTxtFlagRecent) == 0) + { + SetFlag(TMessageFlagInfo::ERecent, ETrue); + } + } + + // return the remainder. + // if there is a space after the closing bracket, + // then remainder should start after the space. + if (aFlagsData.Length() > end + 1) + { + if (aFlagsData[end+1] == ' ') + { + ++end; + } + } + + if (aFlagsData.Length() > end) + { + parseData.Set(aFlagsData.Mid(end + 1)); + } + else + { + parseData.Set(aFlagsData.Right(0)); + } + + CleanupStack::PopAndDestroy(&flags); + } + + return parseData; + } + +/** +Sets the Message UID by converting the given string value into an integer. +@param aMessageUid string containing the UID value. +@return KErrNone if the coversion was successful. Otherwise a system-wide error code will be given. +*/ +TInt TMessageFlagInfo::SetMessageUid(const TDesC8& aMessageUid) + { + TLex8 lex(aMessageUid); + return lex.Val(iMessageUid); + } + +/** +@return The UID for this message +*/ +EXPORT_C TUint TMessageFlagInfo::MessageUid() const + { + return iMessageUid; + }