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 <uri16.h>
+#include <delimitedpath16.h>
+
+// 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<KPathBufferLen> 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