phonebookui/phonebookservices/src/cntservicehandler.cpp
changeset 24 0ba2181d7c28
child 27 de1630741fbe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/phonebookservices/src/cntservicehandler.cpp	Fri Mar 19 09:27:18 2010 +0200
@@ -0,0 +1,180 @@
+/*
+ * 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 "cntservicehandler.h"
+
+/* NOTE! THIS SERVICE WILL BE RENAMED TO com.nokia.services.phonebook.Services */
+CntServiceHandler::CntServiceHandler(QObject *parent):
+    XQServiceProvider(QLatin1String("com.nokia.services.phonebookservices.Fetch"), parent),
+    mCurrentRequestIndex(0)
+{
+    publishAll();
+}
+
+CntServiceHandler::~CntServiceHandler()
+{
+}
+
+/*
+Complete the fetch and return the list selected contacts
+*/
+void CntServiceHandler::completeFetch( const CntServicesContactList &contactList )
+{
+    QVariant retValue;
+    retValue.setValue(contactList);
+    completeRequest(mCurrentRequestIndex, retValue);
+    mCurrentRequestIndex = 0;
+}
+
+/*
+Complete edit and return if contact wasn't modified (-2), was deleted (-1), saved (1) or if saving failed (0)
+*/
+void CntServiceHandler::completeEdit(int result)
+{
+    QVariant retValue(result);
+    completeRequest(mCurrentRequestIndex, retValue);
+    mCurrentRequestIndex = 0;
+}
+
+/*
+Launch fetch service with given parameters
+*/
+void CntServiceHandler::fetch(const QString &title, const QString &action, const QString &filter)
+{
+    emit launchFetch(title, action, filter);
+
+    mCurrentRequestIndex = setCurrentRequestAsync();
+}
+
+/*
+Launch new contact editor with a given detail
+*/
+void CntServiceHandler::editCreateNew(const QString &definitionName, const QString &value)
+{
+    QContact contact;
+    
+    if (definitionName == QContactPhoneNumber::DefinitionName)
+    {
+        QContactPhoneNumber phoneNumber;
+        phoneNumber.setNumber(value);
+        phoneNumber.setSubTypes(QContactPhoneNumber::SubTypeMobile);
+        contact.saveDetail(&phoneNumber);
+    }
+    else if (definitionName == QContactEmailAddress::DefinitionName)
+    {
+        QContactEmailAddress email;
+        email.setEmailAddress(value);
+        contact.saveDetail(&email);
+    }
+    else if (definitionName == QContactOnlineAccount::DefinitionName)
+    {
+        QContactOnlineAccount account;
+        account.setAccountUri(value);
+        account.setSubTypes(QContactOnlineAccount::SubTypeSipVoip);
+        contact.saveDetail(&account);
+    }
+    
+    emit launchEditor(contact);
+
+    mCurrentRequestIndex = setCurrentRequestAsync();
+}
+
+/*
+Launch contact selection view with a given detail (selecting detail there opens the editor and adds the new detail)
+*/
+void CntServiceHandler::editUpdateExisting(const QString &definitionName, const QString &value)
+{
+    QContactDetail detail;
+    
+    if (definitionName == QContactPhoneNumber::DefinitionName)
+    {
+        QContactPhoneNumber phoneNumber;
+        phoneNumber.setNumber(value);
+        phoneNumber.setSubTypes(QContactPhoneNumber::SubTypeMobile);
+        detail = phoneNumber;
+    }
+    else if (definitionName == QContactEmailAddress::DefinitionName)
+    {
+        QContactEmailAddress email;
+        email.setEmailAddress(value);
+        detail = email;
+    }
+    else if (definitionName == QContactOnlineAccount::DefinitionName)
+    {
+        QContactOnlineAccount account;
+        account.setAccountUri(value);
+        account.setSubTypes(QContactOnlineAccount::SubTypeSipVoip);
+        detail = account;
+    }
+    
+    emit launchContactSelection(detail);
+
+    mCurrentRequestIndex = setCurrentRequestAsync();
+}
+
+/*
+Launch communication launcher view for the contact with the given ID (QContactLocalId -> int)
+*/
+void CntServiceHandler::open(int contactId)
+{
+    QContactManager manager("symbian");
+    QContact contact = manager.contact(contactId);
+
+    emit launchContactCard(contact);
+
+    mCurrentRequestIndex = setCurrentRequestAsync();
+}
+
+/*
+Launch temporary communication launcher view with the given detail
+*/
+void CntServiceHandler::open(const QString &definitionName, const QString &value)
+{
+    QContact contact;
+    QContactDetail detail;
+    
+    if (definitionName == QContactPhoneNumber::DefinitionName)
+    {
+        QContactPhoneNumber phoneNumber;
+        phoneNumber.setNumber(value);
+        phoneNumber.setSubTypes(QContactPhoneNumber::SubTypeMobile);
+        contact.saveDetail(&phoneNumber);
+        detail = phoneNumber;
+    }
+    else if (definitionName == QContactEmailAddress::DefinitionName)
+    {
+        QContactEmailAddress email;
+        email.setEmailAddress(value);
+        contact.saveDetail(&email);
+        detail = email;
+    }
+    else if (definitionName == QContactOnlineAccount::DefinitionName)
+    {
+        QContactOnlineAccount account;
+        account.setAccountUri(value);
+        account.setSubTypes(QContactOnlineAccount::SubTypeSipVoip);
+        contact.saveDetail(&account);
+        detail = account;
+    }
+    
+    emit launchAssignContactCard(contact, detail);
+
+    mCurrentRequestIndex = setCurrentRequestAsync();
+}
+
+Q_IMPLEMENT_USER_METATYPE(CntServicesContact)
+Q_IMPLEMENT_USER_METATYPE_NO_OPERATORS(CntServicesContactList)