messagingapp/msgui/appengine/src/conversationsengine.cpp
branchRCL_3
changeset 57 ebe688cedc25
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgui/appengine/src/conversationsengine.cpp	Tue Aug 31 15:11:31 2010 +0300
@@ -0,0 +1,421 @@
+/*
+ * Copyright (c) 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 "conversationsengine.h"
+
+#include <ccsconversationentry.h>
+#include <ccsclientconversation.h>
+
+#include "conversationsenginedefines.h"
+#include "convergedmessage.h"
+#include "conversationmsgstorehandler.h"
+#include "conversationssummarymodel.h"
+#include "conversationsmodel.h"
+#include "draftsmodel.h"
+#include "conversationsengine_p.h"
+#include "debugtraces.h"
+#include <xqconversions.h>
+
+//---------------------------------------------------------------
+// ConversationsEngine::instance
+// @see header
+//---------------------------------------------------------------
+ConversationsEngine* ConversationsEngine::instance()
+{
+    static ConversationsEngine* conversationsEngine =
+        new ConversationsEngine();
+    return conversationsEngine;
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::ConversationsEngine
+// @see header
+//---------------------------------------------------------------
+ConversationsEngine::ConversationsEngine(QObject* parent):
+    QObject(parent), mDraftsModel(NULL)
+{
+    mConversationMsgStoreHandler = q_check_ptr(new ConversationMsgStoreHandler);
+    
+    mConversationsSummaryModel = new ConversationsSummaryModel(this);    
+    mConversationsModel = new ConversationsModel(mConversationMsgStoreHandler,
+        this);   
+
+    d_ptr = q_check_ptr( new ConversationsEnginePrivate(mConversationMsgStoreHandler,
+        mConversationsSummaryModel,
+        mConversationsModel));
+    
+    connect (mConversationsModel,
+            SIGNAL(conversationViewEmpty()),
+            this,
+            SIGNAL(conversationViewEmpty())); 
+   
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::~ConversationsEngine
+// @see header
+//---------------------------------------------------------------
+ConversationsEngine::~ConversationsEngine()
+{
+    if(mConversationMsgStoreHandler)
+    {
+        delete mConversationMsgStoreHandler;
+        mConversationMsgStoreHandler = NULL;
+    }
+    if(d_ptr)
+    {
+        delete d_ptr;
+        d_ptr = NULL;
+    }
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::getConversationsSummaryModel
+// @see header
+//---------------------------------------------------------------
+QStandardItemModel* ConversationsEngine::getConversationsSummaryModel()
+{
+    return mConversationsSummaryModel;
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::getConversationsModel
+// @see header
+//---------------------------------------------------------------
+QStandardItemModel* ConversationsEngine::getConversationsModel()
+{
+    return mConversationsModel;
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::getDraftsModel
+// @see header
+//---------------------------------------------------------------
+QStandardItemModel* ConversationsEngine::getDraftsModel()
+    {
+    if(!mDraftsModel)
+        {
+        mDraftsModel = new DraftsModel(this);
+        mConversationMsgStoreHandler->FetchDraftMessages(mDraftsModel);
+        }
+    return mDraftsModel;
+    }
+//---------------------------------------------------------------
+// ConversationsEngine::getConversations
+// @see header
+//---------------------------------------------------------------
+bool ConversationsEngine::getConversations(qint64 conversationId)
+{
+    int error;
+    TRAP(error,d_ptr->getConversationsL(conversationId));
+    return (error!=KErrNone) ? false : true; 
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::clearConversations
+// @see header
+//---------------------------------------------------------------
+bool ConversationsEngine::clearConversations()
+{
+    int error;
+    TRAP(error,d_ptr->clearConversationsL());
+    return (error!=KErrNone) ? false : true; 
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::deleteConversations
+// @see header
+//---------------------------------------------------------------
+bool ConversationsEngine::deleteConversations(qint64 conversationId)
+{
+    int error;
+    TRAP(error,d_ptr->deleteConversationL(conversationId));
+    return (error!=KErrNone) ? false : true; 
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::deleteMessages
+// @see header
+//---------------------------------------------------------------
+void ConversationsEngine::deleteMessages(QList<int>& msgIdList)
+{
+    RArray<TInt> idArray;
+    for(int i=0; i < msgIdList.count(); ++i)
+    {
+        idArray.Append(msgIdList[i]);
+    }
+    if(msgIdList.count()>0)
+    {
+        d_ptr->deleteMessages(idArray);
+    }
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::deleteAllDraftMessages
+// @see header
+//---------------------------------------------------------------
+void ConversationsEngine::deleteAllDraftMessages()
+{
+    int error;
+    TRAP(error, d_ptr->deleteAllDraftMessagesL());
+    qt_symbian_throwIfError(error);
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::markConversationRead
+// @see header
+//---------------------------------------------------------------
+bool ConversationsEngine::markConversationRead(qint64 conversationId)
+{
+    int error;
+    TRAP(error,d_ptr->markConversationReadL(conversationId));
+    return (error!=KErrNone) ? false : true; 
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::markMessagesRead
+// @see header
+//---------------------------------------------------------------
+bool ConversationsEngine::markMessagesRead(QList<int>& msgIdList)
+{
+    RArray<TInt> idArray;
+    int error;
+    for(int i=0; i < msgIdList.count(); ++i)
+    {
+        idArray.Append(msgIdList[i]);
+    }
+    if(msgIdList.count()>0)
+    {
+        TRAP(error,d_ptr->markMessagesReadL(idArray));
+    }
+    return (error!=KErrNone) ? false : true; 
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::getContactDetails
+// @see header
+//---------------------------------------------------------------
+void ConversationsEngine::getContactDetails(qint64 conversationId,
+    QString& displayName,
+    QString& address)
+{
+    QModelIndexList indexList = mConversationsSummaryModel->match(
+            mConversationsSummaryModel->index(0, 0), 
+            ConversationId, 
+            conversationId, 
+            1, // One match 
+            Qt::MatchExactly);
+
+    if(indexList.count() > 0)
+    {
+        displayName = indexList[0].data(DisplayName).toString();
+        address = indexList[0].data(ConversationAddress).toString();
+    }
+    else
+    {
+        int error;
+        CCsClientConversation* clientConv = NULL;
+        TRAP(error, clientConv = d_ptr->getConversationFromConversationIdL(conversationId));
+       
+        qt_symbian_throwIfError(error);
+        
+        HBufC *name = clientConv->GetDisplayName();
+        if (name && name->Length())
+        {
+            displayName = XQConversions::s60DescToQString(*name);
+        }
+
+        HBufC *addr = clientConv->GetConversationEntry()->Contact();
+        if (addr && addr->Length())
+        {
+            address = XQConversions::s60DescToQString(*addr);
+        }
+
+        delete clientConv;
+    }
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::getConversationIdFromAddress
+// @see header
+//---------------------------------------------------------------
+qint64 ConversationsEngine::getConversationIdFromAddress(QString address)
+{
+    qint64 conversationId = -1;
+
+    int error;
+    HBufC* number = XQConversions::qStringToS60Desc(address);
+    TRAP(error,conversationId = 
+        d_ptr->getConversationIdFromAddressL(*number));
+
+    delete number;
+    
+    return conversationId;
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::getCurrentConversationId
+// @see header
+//---------------------------------------------------------------
+qint64 ConversationsEngine::getCurrentConversationId()
+{
+    return d_ptr->getConversationCurrentId();   
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::getConversationIdFromContactId
+// @see header
+//---------------------------------------------------------------
+qint64 ConversationsEngine::getConversationIdFromContactId(qint32 contactId)
+{  
+    qint64 conversationId = -1;
+    int error;
+    TRAP(error,conversationId = 
+        d_ptr->getConversationIdFromContactIdL(contactId));
+    
+    return conversationId;    
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::emitConversationModelPopulated
+// @see header
+//---------------------------------------------------------------
+void ConversationsEngine::emitConversationModelPopulated()
+{
+    emit conversationModelPopulated();
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::emitConversationModelUpdated
+// @see header
+//---------------------------------------------------------------
+void ConversationsEngine::emitConversationModelUpdated()
+{
+    emit conversationModelUpdated();
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::emitConversationListModelPopulated
+// @see header
+//---------------------------------------------------------------
+void ConversationsEngine::emitConversationListModelPopulated()
+{
+    emit conversationListModelPopulated();
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::emitConversationListModelEntryDeleted
+// @see header
+//---------------------------------------------------------------
+void ConversationsEngine::emitConversationListModelEntryDeleted( int conversationId )
+{
+    emit conversationListEntryDeleted( conversationId );
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::emitOpenConversationViewIdUpdate
+// @see header
+//---------------------------------------------------------------
+void ConversationsEngine::emitOpenConversationViewIdUpdate(
+        int newConversationId)
+{
+    //also register for subscription now
+    QT_TRAP_THROWING(d_ptr->registerAgainForConversationUpdatesL(newConversationId));   
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::disableRegisterationForCVEvents
+// @see header
+//---------------------------------------------------------------
+void ConversationsEngine::disableRegisterationForCVEvents()
+{
+    d_ptr->deRegisterCVUpdatesTemporary();
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::fetchMoreConversations
+// @see header
+//---------------------------------------------------------------
+void ConversationsEngine::fetchMoreConversations()
+{
+    d_ptr->fetchMoreConversations();
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::resendMessage()
+// @see header
+//---------------------------------------------------------------
+
+bool ConversationsEngine::resendMessage(qint32 messageId)
+{
+    return d_ptr->resendMessage(messageId);
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::downloadMessage()
+// @see header
+//---------------------------------------------------------------
+
+int ConversationsEngine::downloadMessage(qint32 messageId)
+{
+    return d_ptr->downloadMessage(messageId);
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::downloadOperationSupported()
+// @see header
+//---------------------------------------------------------------
+bool ConversationsEngine::downloadOperationSupported(qint32 messageId)
+{
+    return d_ptr->downloadOperationSupported(messageId);
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::markAsReadAndGetType()
+// @see header
+//---------------------------------------------------------------
+
+void ConversationsEngine::markAsReadAndGetType(qint32 messageId,
+                                               int& msgType,
+                                               int& msgSubType)
+{
+mConversationMsgStoreHandler->markAsReadAndGetType(messageId,
+                                                    msgType,
+                                                    msgSubType);
+}
+
+//---------------------------------------------------------------
+// ConversationsEngine::getDBHandle()
+// @see header
+//---------------------------------------------------------------
+RSqlDatabase& ConversationsEngine::getDBHandle(TBool& isOpen)
+    {
+    return mConversationsModel->getDBHandle(isOpen);
+    }
+
+
+//---------------------------------------------------------------
+// ConversationsEngine::getMsgSubType()
+// @see header
+//---------------------------------------------------------------
+int ConversationsEngine::getMsgSubType(int messageId)
+{
+ return mConversationMsgStoreHandler->getMsgSubType(messageId);
+}
+
+
+//EOF
+