emailservices/nmclientapi/src/nmapimessagemanager_p.cpp
changeset 47 f83bd4ae1fe3
child 48 10eaf342f539
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/nmclientapi/src/nmapimessagemanager_p.cpp	Thu Jun 24 14:32:18 2010 +0300
@@ -0,0 +1,170 @@
+/*
+ * 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:
+ *     Email message related operations
+ */
+
+#include <nmapimessagemanager.h>
+#include <nmapidatapluginfactory.h>
+#include <nmdataplugininterface.h>
+#include <nmapifolder.h>
+#include <nmcommon.h>
+#include "nmapimessagemanager_p.h"
+#include "emailtrace.h"
+
+namespace EmailClientApi
+{
+
+NmApiMessageManagerPrivate::NmApiMessageManagerPrivate(quint64 mailboxId,QObject *parent)
+: QObject(parent),
+  mState(NmApiMessageManagerPrivate::EIdle), mMailboxId(mailboxId)
+{
+    NM_FUNCTION;	
+	
+    mFactory = NmApiDataPluginFactory::instance();
+    mPlugin = mFactory->plugin();    
+    if(mPlugin) {
+        connect(mPlugin,
+                SIGNAL(messageEvent(NmMessageEvent,
+                                    const NmId&,
+                                    const QList<NmId>&,
+                                    const NmId&)),
+                this,
+                SLOT(messageEventHandler(NmMessageEvent,
+                                    const NmId&,
+                                    const QList<NmId>&,
+                                    const NmId&)));
+    }				
+    NmDataPluginInterface *interface = mFactory->interfaceInstance();
+    interface->subscribeMailboxEvents(mailboxId);
+	
+}
+
+NmApiMessageManagerPrivate::~NmApiMessageManagerPrivate()
+{
+    NM_FUNCTION;
+    NmDataPluginInterface *interface = mFactory->interfaceInstance();
+    interface->unsubscribeMailboxEvents(mMailboxId);
+    NmApiDataPluginFactory::releaseInstance(mFactory);
+}
+    
+/*!
+ \fn moveMessages 
+ \param messageIds Id list of source messages.
+ \param sourceFolderId Id of the source folder.
+ \param targetFolderId Id of the target folder.
+ \return true if operation was successfully started.
+ 
+ Starts async move operation for given messages.  
+ Completion signalled with messagesMoved(int result).
+ */
+bool NmApiMessageManagerPrivate::moveMessages(const QList<quint64> messageIds,
+											quint64 sourceFolder,
+											quint64 targetFolder)
+{
+    NM_FUNCTION;
+    Q_UNUSED(messageIds);
+    Q_UNUSED(sourceFolder);
+    Q_UNUSED(targetFolder);
+    return false;
+}
+    
+/*!
+ \fn copyMessages 
+ \param messageIds Id list of source messages.
+ \param sourceFolder Id of the source folder.
+ \param targetFolder Id of the target folder.
+ \return true if operation was successfully started.
+ 
+ Starts async copy operation for given messages.  
+ Completion signalled with messagesCopied(int result).
+ */
+bool NmApiMessageManagerPrivate::copyMessages(const QList<quint64> messageIds,
+                                            const quint64 sourceFolder,
+											const quint64 targetFolder)
+{
+    NM_FUNCTION;
+    bool ret = false;
+    NmId targetFolderNmId(targetFolder);
+	NmId sourceFolderNmId(sourceFolder);
+	mTarget = targetFolderNmId;
+	mMessages = messageIds;
+	
+	NmDataPluginInterface *interface = mFactory->interfaceInstance();
+	
+    if (interface) {
+        mState = NmApiMessageManagerPrivate::ECopyPending;
+        if (interface->copyMessages(mMailboxId,
+                                  messageIds,
+                                  sourceFolderNmId,
+                                  targetFolderNmId)==0) {			
+            ret = true;
+        }        
+    }
+	mState = NmApiMessageManagerPrivate::EIdle;
+	return ret;
+}
+  
+/*!
+ \fn messageEventHandler 
+ \param event Event type.
+ \param folder Folder id.
+ \param messages Id list of messages involved.
+ \param mailBox Id of mailbox.
+  
+ Handler for plugin originated messageEvent.
+ */
+void NmApiMessageManagerPrivate::messageEventHandler(NmMessageEvent event,
+												const NmId &folder,
+												const QList<NmId> &messages,
+												const NmId &mailBox)
+{	
+	if(mMailboxId == mailBox &&
+	   mTarget == folder) {	
+        switch(event)
+        {
+            case NmMessageCreated: {
+                if (mState==NmApiMessageManagerPrivate::ECopyPending) {
+                    if(messages.count()==mMessages.count()) {
+                        emit messagesCopied(0);
+                    }
+                    else {
+                        emit messagesCopied(-1);
+                    }
+                }
+                break;			
+            }
+            
+            case NmMessageChanged: {
+                break;		
+            }
+            
+            case NmMessageDeleted: {            
+                break;
+            }
+                
+            case NmMessageFound: {
+                break;
+            }
+            
+            default: {
+                break;
+            }
+        }
+        mState = NmApiMessageManagerPrivate::EIdle;
+	}
+}
+} //namespace
+
+