inc/msgcontacthandler.h
author hgs
Fri, 25 Jun 2010 15:47:40 +0530
changeset 37 518b245aa84c
child 56 f42d9a78f435
permissions -rw-r--r--
201025
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
37
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
 * All rights reserved.
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
 *
hgs
parents:
diff changeset
     9
 * Initial Contributors:
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
 *
hgs
parents:
diff changeset
    12
 * Contributors:
hgs
parents:
diff changeset
    13
 *
hgs
parents:
diff changeset
    14
 * Description: This header handles the phonebook manager resolve number static
hgs
parents:
diff changeset
    15
 *              functions.
hgs
parents:
diff changeset
    16
 *
hgs
parents:
diff changeset
    17
 */
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#ifndef MSGCONTACTHANDLER_H_
hgs
parents:
diff changeset
    20
#define MSGCONTACTHANDLER_H_
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include <qmobilityglobal.h>
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
#include <qtcontacts.h>
hgs
parents:
diff changeset
    25
#include <qcontactfilter.h>
hgs
parents:
diff changeset
    26
#include <qcontactdetailfilter.h>
hgs
parents:
diff changeset
    27
#include <QFile>
hgs
parents:
diff changeset
    28
#include <qversitcontactimporter.h>
hgs
parents:
diff changeset
    29
#include <qversitdocument.h>
hgs
parents:
diff changeset
    30
#include <qversitreader.h>
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
QTM_BEGIN_NAMESPACE
hgs
parents:
diff changeset
    33
class QContactManager;
hgs
parents:
diff changeset
    34
QTM_END_NAMESPACE
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
QTM_USE_NAMESPACE
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
class MsgContactHandler
hgs
parents:
diff changeset
    39
{
hgs
parents:
diff changeset
    40
    
hgs
parents:
diff changeset
    41
public:
hgs
parents:
diff changeset
    42
hgs
parents:
diff changeset
    43
    /**
hgs
parents:
diff changeset
    44
     * This shall resolve contact number with display name
hgs
parents:
diff changeset
    45
     * @param contactNumber number to resolve
hgs
parents:
diff changeset
    46
     * @param displayName resolved name
hgs
parents:
diff changeset
    47
     * @param countPhoneNumber specifies number of contacts inside 
hgs
parents:
diff changeset
    48
     * the resolved contact ex mobile, home, office etc
hgs
parents:
diff changeset
    49
     * @return contacts unique localId
hgs
parents:
diff changeset
    50
     */
hgs
parents:
diff changeset
    51
    static int resolveContactDisplayName(const QString& contactNumber,
hgs
parents:
diff changeset
    52
                                         QString& displayName,
hgs
parents:
diff changeset
    53
                                         int& countPhoneNumber)
hgs
parents:
diff changeset
    54
    {
hgs
parents:
diff changeset
    55
        QContactManager phonebookManager;
hgs
parents:
diff changeset
    56
        QVariant address(contactNumber);
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
        // apply filter on phone number field
hgs
parents:
diff changeset
    59
        QContactDetailFilter phoneFilter;
hgs
parents:
diff changeset
    60
        phoneFilter.setDetailDefinitionName(
hgs
parents:
diff changeset
    61
                QContactPhoneNumber::DefinitionName,
hgs
parents:
diff changeset
    62
                QContactPhoneNumber::FieldNumber);
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
        phoneFilter.setValue(address);
hgs
parents:
diff changeset
    65
        phoneFilter.setMatchFlags(QContactFilter::MatchEndsWith);
hgs
parents:
diff changeset
    66
        QList<QContact> matchingContacts =
hgs
parents:
diff changeset
    67
                phonebookManager.contacts(phoneFilter);
hgs
parents:
diff changeset
    68
        if (matchingContacts.count() > 0)
hgs
parents:
diff changeset
    69
        {
hgs
parents:
diff changeset
    70
            // Fill the contact details
hgs
parents:
diff changeset
    71
            QContact match = matchingContacts.at(0);
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
            displayName = match.displayLabel();
hgs
parents:
diff changeset
    74
            QList<QContactPhoneNumber> numbers =
hgs
parents:
diff changeset
    75
                    match.details<QContactPhoneNumber> ();
hgs
parents:
diff changeset
    76
            countPhoneNumber = numbers.count();
hgs
parents:
diff changeset
    77
            return match.localId();
hgs
parents:
diff changeset
    78
        }
hgs
parents:
diff changeset
    79
hgs
parents:
diff changeset
    80
        // apply filter on email address field
hgs
parents:
diff changeset
    81
        QContactDetailFilter emailFilter;
hgs
parents:
diff changeset
    82
        emailFilter.setDetailDefinitionName(
hgs
parents:
diff changeset
    83
                QContactEmailAddress::DefinitionName,
hgs
parents:
diff changeset
    84
                QContactEmailAddress::FieldEmailAddress);
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
        emailFilter.setValue(address);
hgs
parents:
diff changeset
    87
        emailFilter.setMatchFlags(QContactFilter::MatchExactly);
hgs
parents:
diff changeset
    88
        matchingContacts = phonebookManager.contacts(emailFilter);
hgs
parents:
diff changeset
    89
        if ( matchingContacts.count() > 0 )
hgs
parents:
diff changeset
    90
        {
hgs
parents:
diff changeset
    91
            // Fill the contact details
hgs
parents:
diff changeset
    92
            QContact match = matchingContacts.at(0);
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
            displayName = match.displayLabel();
hgs
parents:
diff changeset
    95
            QList<QContactEmailAddress> numbers =
hgs
parents:
diff changeset
    96
                    match.details<QContactEmailAddress> ();
hgs
parents:
diff changeset
    97
            countPhoneNumber = numbers.count();
hgs
parents:
diff changeset
    98
            return match.localId();
hgs
parents:
diff changeset
    99
        }
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
        // no matching contact
hgs
parents:
diff changeset
   102
        displayName = contactNumber;
hgs
parents:
diff changeset
   103
        return -1;
hgs
parents:
diff changeset
   104
    }
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
    /**
hgs
parents:
diff changeset
   107
     * This shall resolve contact number with display name
hgs
parents:
diff changeset
   108
     * @param contactNumber number to resolve
hgs
parents:
diff changeset
   109
     * @param fieldName specifies filter name
hgs
parents:
diff changeset
   110
     * @param fieldType specifies filter type
hgs
parents:
diff changeset
   111
     * @return contact unique local id
hgs
parents:
diff changeset
   112
     */
hgs
parents:
diff changeset
   113
    static int resolveContactDisplayName(const QString& contactNumber,
hgs
parents:
diff changeset
   114
                                         const QString& fieldName,
hgs
parents:
diff changeset
   115
                                         const QString& fieldType)
hgs
parents:
diff changeset
   116
    {
hgs
parents:
diff changeset
   117
        int contactId = -1;
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
        QContactManager phonebookManager("symbian");
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
        QContactDetailFilter phoneFilter;
hgs
parents:
diff changeset
   122
        phoneFilter.setDetailDefinitionName(fieldName, fieldType);
hgs
parents:
diff changeset
   123
        phoneFilter.setValue(contactNumber);
hgs
parents:
diff changeset
   124
        phoneFilter.setMatchFlags(QContactFilter::MatchEndsWith);
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
        QList<QContact>
hgs
parents:
diff changeset
   127
                matchingContacts = phonebookManager.contacts(phoneFilter);
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
        if (matchingContacts.count() > 0)
hgs
parents:
diff changeset
   130
        {
hgs
parents:
diff changeset
   131
            contactId = matchingContacts.at(0).localId();
hgs
parents:
diff changeset
   132
        }
hgs
parents:
diff changeset
   133
        return contactId;
hgs
parents:
diff changeset
   134
    }
hgs
parents:
diff changeset
   135
hgs
parents:
diff changeset
   136
    //---------------------------------------------------------------
hgs
parents:
diff changeset
   137
    // findContactList
hgs
parents:
diff changeset
   138
    // Finds the contact matching the phone number.
hgs
parents:
diff changeset
   139
    // @param phoneNumber Phone number to be matchned.
hgs
parents:
diff changeset
   140
    // @return List of matching contacts.
hgs
parents:
diff changeset
   141
    //---------------------------------------------------------------
hgs
parents:
diff changeset
   142
    static QList<QContact> findContactList(const QString &phoneNumber)
hgs
parents:
diff changeset
   143
    {
hgs
parents:
diff changeset
   144
        QContactManager phonebookManager("symbian");
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
        QContactDetailFilter phoneFilter;
hgs
parents:
diff changeset
   147
        phoneFilter.setDetailDefinitionName(QContactPhoneNumber::DefinitionName,
hgs
parents:
diff changeset
   148
            QContactPhoneNumber::FieldNumber);
hgs
parents:
diff changeset
   149
        phoneFilter.setValue(phoneNumber);
hgs
parents:
diff changeset
   150
        phoneFilter.setMatchFlags(QContactFilter::MatchEndsWith);
hgs
parents:
diff changeset
   151
        
hgs
parents:
diff changeset
   152
        QList<QContact> matchingContacts = phonebookManager.contacts(phoneFilter);
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
        return matchingContacts;
hgs
parents:
diff changeset
   155
    }
hgs
parents:
diff changeset
   156
    
hgs
parents:
diff changeset
   157
    /**
hgs
parents:
diff changeset
   158
     * Get display-name of a contact from VCard.
hgs
parents:
diff changeset
   159
     * @param filePath, VCard file-path
hgs
parents:
diff changeset
   160
     * @return display-name
hgs
parents:
diff changeset
   161
     */
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
    static QString getVCardDisplayName(QString& filePath)
hgs
parents:
diff changeset
   164
    {
hgs
parents:
diff changeset
   165
        QString displayName = QString("");
hgs
parents:
diff changeset
   166
        //open file for parsing
hgs
parents:
diff changeset
   167
        QFile file(filePath);
hgs
parents:
diff changeset
   168
        if (!file.open(QIODevice::ReadOnly))
hgs
parents:
diff changeset
   169
        {
hgs
parents:
diff changeset
   170
            return displayName;
hgs
parents:
diff changeset
   171
        }
hgs
parents:
diff changeset
   172
        // parse contents
hgs
parents:
diff changeset
   173
        QVersitReader reader;
hgs
parents:
diff changeset
   174
        reader.setDevice(&file);
hgs
parents:
diff changeset
   175
        if (reader.startReading())
hgs
parents:
diff changeset
   176
        {
hgs
parents:
diff changeset
   177
            if (reader.waitForFinished())
hgs
parents:
diff changeset
   178
            {
hgs
parents:
diff changeset
   179
                QList<QVersitDocument> versitDocuments = reader.results();
hgs
parents:
diff changeset
   180
                // Use the resulting document
hgs
parents:
diff changeset
   181
                if (versitDocuments.count() > 0)
hgs
parents:
diff changeset
   182
                {
hgs
parents:
diff changeset
   183
                    QVersitContactImporter importer;
hgs
parents:
diff changeset
   184
                    bool import_docs = importer.importDocuments(versitDocuments);
hgs
parents:
diff changeset
   185
                    if(import_docs)
hgs
parents:
diff changeset
   186
                    {
hgs
parents:
diff changeset
   187
                       QList<QContact> contacts = importer.contacts();
hgs
parents:
diff changeset
   188
                       // get display-name
hgs
parents:
diff changeset
   189
                       if (contacts.count() > 0)
hgs
parents:
diff changeset
   190
                       {
hgs
parents:
diff changeset
   191
                          //resolveSynthesizedDisplayLabel
hgs
parents:
diff changeset
   192
                          QContactManager* contactManager =
hgs
parents:
diff changeset
   193
                                new QContactManager("symbian");
hgs
parents:
diff changeset
   194
                          displayName
hgs
parents:
diff changeset
   195
                                = contactManager->synthesizedDisplayLabel(contacts[0]);
hgs
parents:
diff changeset
   196
                          delete contactManager;
hgs
parents:
diff changeset
   197
                       }
hgs
parents:
diff changeset
   198
                    }
hgs
parents:
diff changeset
   199
                }
hgs
parents:
diff changeset
   200
            }
hgs
parents:
diff changeset
   201
        }
hgs
parents:
diff changeset
   202
        file.close();
hgs
parents:
diff changeset
   203
        return displayName;
hgs
parents:
diff changeset
   204
    }
hgs
parents:
diff changeset
   205
};
hgs
parents:
diff changeset
   206
hgs
parents:
diff changeset
   207
#endif /* MSGCONTACTHANDLER_H_ */