inc/msgcontacthandler.h
author hgs
Tue, 31 Aug 2010 18:53:38 +0530
changeset 56 f42d9a78f435
parent 37 518b245aa84c
permissions -rw-r--r--
201033_02
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>
56
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
    31
#include <qcontactid.h>
37
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
QTM_BEGIN_NAMESPACE
hgs
parents:
diff changeset
    34
class QContactManager;
hgs
parents:
diff changeset
    35
QTM_END_NAMESPACE
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
QTM_USE_NAMESPACE
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
class MsgContactHandler
hgs
parents:
diff changeset
    40
{
56
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
    41
37
hgs
parents:
diff changeset
    42
public:
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
    /**
hgs
parents:
diff changeset
    45
     * This shall resolve contact number with display name
hgs
parents:
diff changeset
    46
     * @param contactNumber number to resolve
hgs
parents:
diff changeset
    47
     * @param displayName resolved name
56
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
    48
     * @param countPhoneNumber specifies number of contacts inside
37
hgs
parents:
diff changeset
    49
     * the resolved contact ex mobile, home, office etc
hgs
parents:
diff changeset
    50
     * @return contacts unique localId
hgs
parents:
diff changeset
    51
     */
hgs
parents:
diff changeset
    52
    static int resolveContactDisplayName(const QString& contactNumber,
hgs
parents:
diff changeset
    53
                                         QString& displayName,
hgs
parents:
diff changeset
    54
                                         int& countPhoneNumber)
hgs
parents:
diff changeset
    55
    {
hgs
parents:
diff changeset
    56
        QContactManager phonebookManager;
hgs
parents:
diff changeset
    57
        QVariant address(contactNumber);
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
        // apply filter on phone number field
hgs
parents:
diff changeset
    60
        QContactDetailFilter phoneFilter;
hgs
parents:
diff changeset
    61
        phoneFilter.setDetailDefinitionName(
hgs
parents:
diff changeset
    62
                QContactPhoneNumber::DefinitionName,
hgs
parents:
diff changeset
    63
                QContactPhoneNumber::FieldNumber);
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
        phoneFilter.setValue(address);
hgs
parents:
diff changeset
    66
        phoneFilter.setMatchFlags(QContactFilter::MatchEndsWith);
hgs
parents:
diff changeset
    67
        QList<QContact> matchingContacts =
hgs
parents:
diff changeset
    68
                phonebookManager.contacts(phoneFilter);
hgs
parents:
diff changeset
    69
        if (matchingContacts.count() > 0)
hgs
parents:
diff changeset
    70
        {
hgs
parents:
diff changeset
    71
            // Fill the contact details
hgs
parents:
diff changeset
    72
            QContact match = matchingContacts.at(0);
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
            displayName = match.displayLabel();
hgs
parents:
diff changeset
    75
            QList<QContactPhoneNumber> numbers =
hgs
parents:
diff changeset
    76
                    match.details<QContactPhoneNumber> ();
hgs
parents:
diff changeset
    77
            countPhoneNumber = numbers.count();
hgs
parents:
diff changeset
    78
            return match.localId();
hgs
parents:
diff changeset
    79
        }
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
        // apply filter on email address field
hgs
parents:
diff changeset
    82
        QContactDetailFilter emailFilter;
hgs
parents:
diff changeset
    83
        emailFilter.setDetailDefinitionName(
hgs
parents:
diff changeset
    84
                QContactEmailAddress::DefinitionName,
hgs
parents:
diff changeset
    85
                QContactEmailAddress::FieldEmailAddress);
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
        emailFilter.setValue(address);
hgs
parents:
diff changeset
    88
        emailFilter.setMatchFlags(QContactFilter::MatchExactly);
hgs
parents:
diff changeset
    89
        matchingContacts = phonebookManager.contacts(emailFilter);
hgs
parents:
diff changeset
    90
        if ( matchingContacts.count() > 0 )
hgs
parents:
diff changeset
    91
        {
hgs
parents:
diff changeset
    92
            // Fill the contact details
hgs
parents:
diff changeset
    93
            QContact match = matchingContacts.at(0);
hgs
parents:
diff changeset
    94
hgs
parents:
diff changeset
    95
            displayName = match.displayLabel();
hgs
parents:
diff changeset
    96
            QList<QContactEmailAddress> numbers =
hgs
parents:
diff changeset
    97
                    match.details<QContactEmailAddress> ();
hgs
parents:
diff changeset
    98
            countPhoneNumber = numbers.count();
hgs
parents:
diff changeset
    99
            return match.localId();
hgs
parents:
diff changeset
   100
        }
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
        // no matching contact
hgs
parents:
diff changeset
   103
        displayName = contactNumber;
hgs
parents:
diff changeset
   104
        return -1;
hgs
parents:
diff changeset
   105
    }
hgs
parents:
diff changeset
   106
hgs
parents:
diff changeset
   107
    /**
hgs
parents:
diff changeset
   108
     * This shall resolve contact number with display name
hgs
parents:
diff changeset
   109
     * @param contactNumber number to resolve
hgs
parents:
diff changeset
   110
     * @param fieldName specifies filter name
hgs
parents:
diff changeset
   111
     * @param fieldType specifies filter type
hgs
parents:
diff changeset
   112
     * @return contact unique local id
hgs
parents:
diff changeset
   113
     */
hgs
parents:
diff changeset
   114
    static int resolveContactDisplayName(const QString& contactNumber,
hgs
parents:
diff changeset
   115
                                         const QString& fieldName,
hgs
parents:
diff changeset
   116
                                         const QString& fieldType)
hgs
parents:
diff changeset
   117
    {
hgs
parents:
diff changeset
   118
        int contactId = -1;
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
        QContactManager phonebookManager("symbian");
hgs
parents:
diff changeset
   121
hgs
parents:
diff changeset
   122
        QContactDetailFilter phoneFilter;
hgs
parents:
diff changeset
   123
        phoneFilter.setDetailDefinitionName(fieldName, fieldType);
hgs
parents:
diff changeset
   124
        phoneFilter.setValue(contactNumber);
hgs
parents:
diff changeset
   125
        phoneFilter.setMatchFlags(QContactFilter::MatchEndsWith);
hgs
parents:
diff changeset
   126
hgs
parents:
diff changeset
   127
        QList<QContact>
hgs
parents:
diff changeset
   128
                matchingContacts = phonebookManager.contacts(phoneFilter);
hgs
parents:
diff changeset
   129
hgs
parents:
diff changeset
   130
        if (matchingContacts.count() > 0)
hgs
parents:
diff changeset
   131
        {
hgs
parents:
diff changeset
   132
            contactId = matchingContacts.at(0).localId();
hgs
parents:
diff changeset
   133
        }
hgs
parents:
diff changeset
   134
        return contactId;
hgs
parents:
diff changeset
   135
    }
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
    //---------------------------------------------------------------
hgs
parents:
diff changeset
   138
    // findContactList
hgs
parents:
diff changeset
   139
    // Finds the contact matching the phone number.
hgs
parents:
diff changeset
   140
    // @param phoneNumber Phone number to be matchned.
hgs
parents:
diff changeset
   141
    // @return List of matching contacts.
hgs
parents:
diff changeset
   142
    //---------------------------------------------------------------
hgs
parents:
diff changeset
   143
    static QList<QContact> findContactList(const QString &phoneNumber)
hgs
parents:
diff changeset
   144
    {
hgs
parents:
diff changeset
   145
        QContactManager phonebookManager("symbian");
hgs
parents:
diff changeset
   146
hgs
parents:
diff changeset
   147
        QContactDetailFilter phoneFilter;
hgs
parents:
diff changeset
   148
        phoneFilter.setDetailDefinitionName(QContactPhoneNumber::DefinitionName,
hgs
parents:
diff changeset
   149
            QContactPhoneNumber::FieldNumber);
hgs
parents:
diff changeset
   150
        phoneFilter.setValue(phoneNumber);
hgs
parents:
diff changeset
   151
        phoneFilter.setMatchFlags(QContactFilter::MatchEndsWith);
56
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   152
37
hgs
parents:
diff changeset
   153
        QList<QContact> matchingContacts = phonebookManager.contacts(phoneFilter);
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
        return matchingContacts;
hgs
parents:
diff changeset
   156
    }
56
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   157
37
hgs
parents:
diff changeset
   158
    /**
hgs
parents:
diff changeset
   159
     * Get display-name of a contact from VCard.
hgs
parents:
diff changeset
   160
     * @param filePath, VCard file-path
hgs
parents:
diff changeset
   161
     * @return display-name
hgs
parents:
diff changeset
   162
     */
hgs
parents:
diff changeset
   163
hgs
parents:
diff changeset
   164
    static QString getVCardDisplayName(QString& filePath)
hgs
parents:
diff changeset
   165
    {
hgs
parents:
diff changeset
   166
        QString displayName = QString("");
hgs
parents:
diff changeset
   167
        //open file for parsing
hgs
parents:
diff changeset
   168
        QFile file(filePath);
hgs
parents:
diff changeset
   169
        if (!file.open(QIODevice::ReadOnly))
hgs
parents:
diff changeset
   170
        {
hgs
parents:
diff changeset
   171
            return displayName;
hgs
parents:
diff changeset
   172
        }
hgs
parents:
diff changeset
   173
        // parse contents
hgs
parents:
diff changeset
   174
        QVersitReader reader;
hgs
parents:
diff changeset
   175
        reader.setDevice(&file);
hgs
parents:
diff changeset
   176
        if (reader.startReading())
hgs
parents:
diff changeset
   177
        {
hgs
parents:
diff changeset
   178
            if (reader.waitForFinished())
hgs
parents:
diff changeset
   179
            {
hgs
parents:
diff changeset
   180
                QList<QVersitDocument> versitDocuments = reader.results();
hgs
parents:
diff changeset
   181
                // Use the resulting document
hgs
parents:
diff changeset
   182
                if (versitDocuments.count() > 0)
hgs
parents:
diff changeset
   183
                {
hgs
parents:
diff changeset
   184
                    QVersitContactImporter importer;
hgs
parents:
diff changeset
   185
                    bool import_docs = importer.importDocuments(versitDocuments);
hgs
parents:
diff changeset
   186
                    if(import_docs)
hgs
parents:
diff changeset
   187
                    {
hgs
parents:
diff changeset
   188
                       QList<QContact> contacts = importer.contacts();
hgs
parents:
diff changeset
   189
                       // get display-name
hgs
parents:
diff changeset
   190
                       if (contacts.count() > 0)
hgs
parents:
diff changeset
   191
                       {
hgs
parents:
diff changeset
   192
                          //resolveSynthesizedDisplayLabel
hgs
parents:
diff changeset
   193
                          QContactManager* contactManager =
hgs
parents:
diff changeset
   194
                                new QContactManager("symbian");
hgs
parents:
diff changeset
   195
                          displayName
hgs
parents:
diff changeset
   196
                                = contactManager->synthesizedDisplayLabel(contacts[0]);
hgs
parents:
diff changeset
   197
                          delete contactManager;
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
        }
hgs
parents:
diff changeset
   203
        file.close();
hgs
parents:
diff changeset
   204
        return displayName;
hgs
parents:
diff changeset
   205
    }
56
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   206
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   207
    /**
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   208
     * Get list of self-addresses
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   209
     * @return QStringList, list of self-addresses
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   210
     */
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   211
    static QStringList selfAddresses()
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   212
    {
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   213
        QStringList selfAddrs;
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   214
        QContactManager* contactManager =
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   215
                                        new QContactManager("symbian");
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   216
        QContactLocalId selfId = contactManager->selfContactId();
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   217
        if( (selfId == 0) ||
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   218
            (contactManager->error() == QContactManager::DoesNotExistError) )
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   219
        {
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   220
            // if no self-address exists
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   221
            return selfAddrs;
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   222
        }
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   223
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   224
        QContact selfContact = contactManager->contact(selfId);
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   225
        
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   226
        // append numbers to the list of self-addresses
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   227
        QList<QContactPhoneNumber> selfPhoneNumbers = 
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   228
                        selfContact.details<QContactPhoneNumber>();
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   229
        int selfNumCount = selfPhoneNumbers.count();
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   230
        for(int i=0; i< selfNumCount; i++)
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   231
        {
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   232
            selfAddrs << selfPhoneNumbers.at(i).number();
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   233
        }
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   234
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   235
        // append email-addresses to the list
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   236
        QList<QContactEmailAddress> selfEmailAddrs = 
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   237
                        selfContact.details<QContactEmailAddress>();
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   238
        int selfEmailAddrCount = selfEmailAddrs.count();
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   239
        for(int i=0; i< selfEmailAddrCount; i++)
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   240
        {
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   241
            selfAddrs << selfEmailAddrs.at(i).emailAddress();
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   242
        }
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   243
        return selfAddrs;
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   244
    }
f42d9a78f435 201033_02
hgs
parents: 37
diff changeset
   245
37
hgs
parents:
diff changeset
   246
};
hgs
parents:
diff changeset
   247
hgs
parents:
diff changeset
   248
#endif /* MSGCONTACTHANDLER_H_ */