diff -r a3a1ae9acec6 -r da5135c61bad meetingrequest/mrcmailremoteattachmentplugin/src/tmrcmailremoteattachmentpluginurlparser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meetingrequest/mrcmailremoteattachmentplugin/src/tmrcmailremoteattachmentpluginurlparser.cpp Wed Mar 31 21:08:33 2010 +0300 @@ -0,0 +1,175 @@ +/* + * Copyright (c) 2007-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 "tmrcmailremoteattachmentpluginurlparser.h" +#include "cfsmailcommon.h" +#include "emailtrace.h" + +#include +#include + +// Unnamed namespace for local definitions +namespace { // namespace::codescanner + +// Length for path buffer +const TInt KPathBufferLen( 64 ); + +// Mail ID separator +_LIT( KMailIDSepararor, "." ); + +} // namespace + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// TMRCMailRemoteAttachmentPluginURLParser::TMRCMailRemoteAttachmentPluginURLParser +// --------------------------------------------------------------------------- +// +TMRCMailRemoteAttachmentPluginURLParser::TMRCMailRemoteAttachmentPluginURLParser() + { + FUNC_LOG; + } + +// --------------------------------------------------------------------------- +// TMRCMailRemoteAttachmentPluginURLParser::~TMRCMailRemoteAttachmentPluginURLParser +// --------------------------------------------------------------------------- +// +TMRCMailRemoteAttachmentPluginURLParser::~TMRCMailRemoteAttachmentPluginURLParser() + { + FUNC_LOG; + } + +// --------------------------------------------------------------------------- +// TMRCMailRemoteAttachmentPluginURLParser::Parse +// --------------------------------------------------------------------------- +// +TInt TMRCMailRemoteAttachmentPluginURLParser::Parse( + const TDesC& aUri ) + { + FUNC_LOG; + + TInt err( KErrNone ); + + iMailboxUid.SetNullId(); + iFolderUid.SetNullId(); + iMessageUid.SetNullId(); + iMessagepartUid.SetNullId(); + + // Parse URI cmail://mailboxuid/folder/message/messagepart/ + // mailboxuid will be the host and rest is the folder structure + // + TUriParser16 uriparser; + TInt error = uriparser.Parse( aUri ); + + // First we will get mailbox UID + TPtrC mailboxuid( uriparser.Extract( EUriHost ) ); + ParseMailId( mailboxuid ); + + TDelimitedPathParser16 pathParser; + TPtrC uripath( uriparser.Extract( EUriPath ) ); + pathParser.Parse( uripath ); + + TBuf pathBuffer; + TPtrC pathBufferPtr( pathBuffer ); + err = pathParser.Peek( pathBufferPtr ); + while ( pathBufferPtr.Length() && err == KErrNone ) + { + err = ParseMailId( pathBufferPtr ); + pathParser.Inc(); + err = pathParser.Peek( pathBufferPtr ); + } + + if ( iMailboxUid.IsNullId() || + iFolderUid.IsNullId() || + iMessageUid.IsNullId() || + iMessagepartUid.IsNullId() ) + { + // Not all UIDs were found + err = KErrNotFound; + } + + return err; + } + +// --------------------------------------------------------------------------- +// TMRCMailRemoteAttachmentPluginURLParser::Parse +// --------------------------------------------------------------------------- +// +void TMRCMailRemoteAttachmentPluginURLParser::SetMailId( + TFSMailMsgId& aMailId ) + { + FUNC_LOG; + + if ( iMailboxUid.IsNullId() ) + { + iMailboxUid = aMailId; + } + else if ( iFolderUid.IsNullId() ) + { + iFolderUid = aMailId; + } + else if ( iMessageUid.IsNullId() ) + { + iMessageUid = aMailId; + } + else if ( iMessagepartUid.IsNullId() ) + { + iMessagepartUid = aMailId; + } + } + +// --------------------------------------------------------------------------- +// TMRCMailRemoteAttachmentPluginURLParser::ParseMailId +// --------------------------------------------------------------------------- +// +TInt TMRCMailRemoteAttachmentPluginURLParser::ParseMailId( + TPtrC& aMailId ) + { + FUNC_LOG; + + TInt err( KErrNone ); + TInt pos( KErrNotFound ); + + // Now we have pathpart in buffer. Each pathpart contains + // TFSMailMsgId if following format: pluginuid.pluginid + // We need to parse that further to plugin UID and plugin ID + pos = aMailId.Find( KMailIDSepararor ); + if ( pos != KErrNotFound ) + { + TPtrC mailUidStr( aMailId.Left( pos ) ); + TPtrC mailIdStr( aMailId.Mid( pos + 1 ) ); + + TUint pluginUid(0); + TLex numberParser( mailUidStr ); + err = numberParser.Val(pluginUid); + + if ( KErrNone == err ) + { + // Then parse plugin ID + TUint pluginId(0); + numberParser = mailIdStr; + err = numberParser.Val(pluginId); + + TFSMailMsgId mailId( pluginUid, pluginId ); + SetMailId( mailId ); + } + } + + return err; + } + +// EOF