phonebookui/phonebookservices/src/cntservices.cpp
author hgs
Wed, 21 Jul 2010 11:21:49 +0300
changeset 50 77bc263e1626
child 53 e6aff7b69165
permissions -rw-r--r--
201027
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50
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:
hgs
parents:
diff changeset
    15
 *
hgs
parents:
diff changeset
    16
 */
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include "cntservices.h"
hgs
parents:
diff changeset
    19
#include "cntglobal.h"
hgs
parents:
diff changeset
    20
#include "cntdebug.h"
hgs
parents:
diff changeset
    21
#include <cntabstractviewmanager.h>
hgs
parents:
diff changeset
    22
#include "cntimageutility.h"
hgs
parents:
diff changeset
    23
#include "cntserviceviewparams.h"
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
#include <hbview.h>
hgs
parents:
diff changeset
    26
#include <hblistview.h>
hgs
parents:
diff changeset
    27
#include <qversitreader.h>
hgs
parents:
diff changeset
    28
#include <qversitcontactimporter.h>
hgs
parents:
diff changeset
    29
#include <qversitdocument.h>
hgs
parents:
diff changeset
    30
#include <xqserviceprovider.h>
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
#include <QApplication>
hgs
parents:
diff changeset
    33
#include <QPixmap>
hgs
parents:
diff changeset
    34
#include <QFile>
hgs
parents:
diff changeset
    35
#include <QUrl>
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
CntServices::CntServices() :
hgs
parents:
diff changeset
    38
mViewManager(NULL),
hgs
parents:
diff changeset
    39
mCurrentProvider(NULL),
hgs
parents:
diff changeset
    40
mIsQuitable(true)
hgs
parents:
diff changeset
    41
{
hgs
parents:
diff changeset
    42
    CNT_ENTRY
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
    // Definition names supported in symbian back-end
hgs
parents:
diff changeset
    45
    m_definitionNames << QContactName::DefinitionName;
hgs
parents:
diff changeset
    46
    m_definitionNames << QContactNickname::DefinitionName;
hgs
parents:
diff changeset
    47
    m_definitionNames << QContactPhoneNumber::DefinitionName;
hgs
parents:
diff changeset
    48
    m_definitionNames << QContactEmailAddress::DefinitionName;
hgs
parents:
diff changeset
    49
    m_definitionNames << QContactAddress::DefinitionName;
hgs
parents:
diff changeset
    50
    m_definitionNames << QContactUrl::DefinitionName;
hgs
parents:
diff changeset
    51
    m_definitionNames << QContactBirthday::DefinitionName;
hgs
parents:
diff changeset
    52
    m_definitionNames << QContactOrganization::DefinitionName;
hgs
parents:
diff changeset
    53
    m_definitionNames << QContactSyncTarget::DefinitionName;
hgs
parents:
diff changeset
    54
    m_definitionNames << QContactNote::DefinitionName;
hgs
parents:
diff changeset
    55
    m_definitionNames << QContactFamily::DefinitionName;
hgs
parents:
diff changeset
    56
    m_definitionNames << QContactAvatar::DefinitionName;
hgs
parents:
diff changeset
    57
    m_definitionNames << QContactAnniversary::DefinitionName;
hgs
parents:
diff changeset
    58
    m_definitionNames << QContactGeoLocation::DefinitionName;
hgs
parents:
diff changeset
    59
    m_definitionNames << QContactGender::DefinitionName;
hgs
parents:
diff changeset
    60
    m_definitionNames << QContactOnlineAccount::DefinitionName;
hgs
parents:
diff changeset
    61
    
hgs
parents:
diff changeset
    62
    CNT_EXIT
hgs
parents:
diff changeset
    63
}
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
hgs
parents:
diff changeset
    66
CntServices::~CntServices()
hgs
parents:
diff changeset
    67
{
hgs
parents:
diff changeset
    68
    CNT_LOG
hgs
parents:
diff changeset
    69
}
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
void CntServices::setViewManager( CntAbstractViewManager& aViewManager )
hgs
parents:
diff changeset
    73
{
hgs
parents:
diff changeset
    74
    CNT_LOG
hgs
parents:
diff changeset
    75
    mViewManager = &aViewManager;
hgs
parents:
diff changeset
    76
}
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
void CntServices::singleFetch(
hgs
parents:
diff changeset
    80
    const QString &title, const QString &action,
hgs
parents:
diff changeset
    81
    CntAbstractServiceProvider& aServiceProvider )
hgs
parents:
diff changeset
    82
{
hgs
parents:
diff changeset
    83
    CNT_ENTRY
hgs
parents:
diff changeset
    84
    mCurrentProvider = &aServiceProvider;
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
    CntViewParameters params;
hgs
parents:
diff changeset
    87
    params.insert(EViewId, serviceContactFetchView);
hgs
parents:
diff changeset
    88
    params.insert(ESelectedAction, action);
hgs
parents:
diff changeset
    89
    params.insert(KCntServiceViewParamTitle, title);
hgs
parents:
diff changeset
    90
    // SINGLE fetch
hgs
parents:
diff changeset
    91
    params.insert(ESelectionMode, HbAbstractItemView::SingleSelection);
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
    mViewManager->changeView(params);
hgs
parents:
diff changeset
    94
    CNT_EXIT
hgs
parents:
diff changeset
    95
}
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
hgs
parents:
diff changeset
    98
void CntServices::multiFetch(
hgs
parents:
diff changeset
    99
    const QString &title, const QString &action,
hgs
parents:
diff changeset
   100
    CntAbstractServiceProvider& aServiceProvider )
hgs
parents:
diff changeset
   101
{
hgs
parents:
diff changeset
   102
    CNT_ENTRY
hgs
parents:
diff changeset
   103
    mCurrentProvider = &aServiceProvider;
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
    CntViewParameters params;
hgs
parents:
diff changeset
   106
    params.insert(EViewId, serviceContactFetchView);
hgs
parents:
diff changeset
   107
    params.insert(ESelectedAction, action);
hgs
parents:
diff changeset
   108
    params.insert(KCntServiceViewParamTitle, title);
hgs
parents:
diff changeset
   109
    // MULTI fetch
hgs
parents:
diff changeset
   110
    params.insert(ESelectionMode, HbAbstractItemView::MultiSelection);
hgs
parents:
diff changeset
   111
    mViewManager->changeView(params);
hgs
parents:
diff changeset
   112
    CNT_EXIT
hgs
parents:
diff changeset
   113
}
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
void CntServices::editCreateNew(const QString &definitionName, const QString &value,
hgs
parents:
diff changeset
   117
    CntAbstractServiceProvider& aServiceProvider)
hgs
parents:
diff changeset
   118
{
hgs
parents:
diff changeset
   119
    CNT_ENTRY
hgs
parents:
diff changeset
   120
    mCurrentProvider = &aServiceProvider;
hgs
parents:
diff changeset
   121
hgs
parents:
diff changeset
   122
    QContact contact;
hgs
parents:
diff changeset
   123
    
hgs
parents:
diff changeset
   124
    if (definitionName == QContactPhoneNumber::DefinitionName)
hgs
parents:
diff changeset
   125
        {
hgs
parents:
diff changeset
   126
        QContactPhoneNumber phoneNumber;
hgs
parents:
diff changeset
   127
        phoneNumber.setNumber(value);
hgs
parents:
diff changeset
   128
        phoneNumber.setSubTypes(QContactPhoneNumber::SubTypeMobile);
hgs
parents:
diff changeset
   129
        contact.saveDetail(&phoneNumber);
hgs
parents:
diff changeset
   130
        }
hgs
parents:
diff changeset
   131
    else if (definitionName == QContactEmailAddress::DefinitionName)
hgs
parents:
diff changeset
   132
        {
hgs
parents:
diff changeset
   133
        QContactEmailAddress email;
hgs
parents:
diff changeset
   134
        email.setEmailAddress(value);
hgs
parents:
diff changeset
   135
        contact.saveDetail(&email);
hgs
parents:
diff changeset
   136
        }
hgs
parents:
diff changeset
   137
    else if (definitionName == QContactOnlineAccount::DefinitionName)
hgs
parents:
diff changeset
   138
        {
hgs
parents:
diff changeset
   139
        QContactOnlineAccount account;
hgs
parents:
diff changeset
   140
        account.setAccountUri(value);
hgs
parents:
diff changeset
   141
        account.setSubTypes(QContactOnlineAccount::SubTypeSipVoip);
hgs
parents:
diff changeset
   142
        contact.saveDetail(&account);
hgs
parents:
diff changeset
   143
        }    
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
    // Launch editor now
hgs
parents:
diff changeset
   146
    CntViewParameters params;
hgs
parents:
diff changeset
   147
    params.insert(EViewId, serviceEditView);
hgs
parents:
diff changeset
   148
    QVariant var;
hgs
parents:
diff changeset
   149
    var.setValue(contact);
hgs
parents:
diff changeset
   150
    params.insert(ESelectedContact, var);
hgs
parents:
diff changeset
   151
    mViewManager->changeView(params);
hgs
parents:
diff changeset
   152
    CNT_EXIT
hgs
parents:
diff changeset
   153
}
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
void CntServices::editCreateNewFromVCard(const QString &vCardFile,
hgs
parents:
diff changeset
   157
    CntAbstractServiceProvider& aServiceProvider )
hgs
parents:
diff changeset
   158
{
hgs
parents:
diff changeset
   159
    CNT_ENTRY
hgs
parents:
diff changeset
   160
    mCurrentProvider = &aServiceProvider;
hgs
parents:
diff changeset
   161
hgs
parents:
diff changeset
   162
    CntImageUtility imageUtility;
hgs
parents:
diff changeset
   163
    QContact contact;
hgs
parents:
diff changeset
   164
    QVersitReader reader;
hgs
parents:
diff changeset
   165
    QFile file(vCardFile);
hgs
parents:
diff changeset
   166
    if (!file.open(QIODevice::ReadOnly))
hgs
parents:
diff changeset
   167
        return;
hgs
parents:
diff changeset
   168
    reader.setDevice(&file);
hgs
parents:
diff changeset
   169
    
hgs
parents:
diff changeset
   170
    reader.startReading();
hgs
parents:
diff changeset
   171
    reader.waitForFinished();
hgs
parents:
diff changeset
   172
    // Use the resulting document(s)...
hgs
parents:
diff changeset
   173
    QVersitContactImporter importer;
hgs
parents:
diff changeset
   174
    QList<QVersitDocument> versitDocuments = reader.results();
hgs
parents:
diff changeset
   175
    if(versitDocuments.count() > 0 
hgs
parents:
diff changeset
   176
       && importer.importDocuments(versitDocuments))
hgs
parents:
diff changeset
   177
        {
hgs
parents:
diff changeset
   178
        QList<QContact> contacts = importer.contacts();
hgs
parents:
diff changeset
   179
        if(contacts.count() > 0)
hgs
parents:
diff changeset
   180
            contact = contacts.first();
hgs
parents:
diff changeset
   181
        }
hgs
parents:
diff changeset
   182
    file.close();
hgs
parents:
diff changeset
   183
    
hgs
parents:
diff changeset
   184
    // Save thumbnail images
hgs
parents:
diff changeset
   185
    QList<QContactThumbnail> details = contact.details<QContactThumbnail>();
hgs
parents:
diff changeset
   186
    for (int i = 0;i < details.count();i++)
hgs
parents:
diff changeset
   187
        {
hgs
parents:
diff changeset
   188
        if (!details.at(i).thumbnail().isNull())
hgs
parents:
diff changeset
   189
            {
hgs
parents:
diff changeset
   190
            QString imagepath;
hgs
parents:
diff changeset
   191
            QPixmap pixmap = QPixmap::fromImage(details.at(i).thumbnail());
hgs
parents:
diff changeset
   192
            if(imageUtility.createImage(pixmap,imagepath))
hgs
parents:
diff changeset
   193
                {
hgs
parents:
diff changeset
   194
                // Update contact detail
hgs
parents:
diff changeset
   195
                QContactAvatar detail=details.at(i);
hgs
parents:
diff changeset
   196
                detail.setImageUrl(imagepath);
hgs
parents:
diff changeset
   197
                contact.saveDetail(&detail);
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
    removeNotSupportedDetails(contact);
hgs
parents:
diff changeset
   203
    removeNotSupportedFields(contact);
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
    // Launch editor now
hgs
parents:
diff changeset
   206
    CntViewParameters params;
hgs
parents:
diff changeset
   207
    params.insert(EViewId, serviceEditView);
hgs
parents:
diff changeset
   208
    QVariant var;
hgs
parents:
diff changeset
   209
    var.setValue(contact);
hgs
parents:
diff changeset
   210
    params.insert(ESelectedContact, var);
hgs
parents:
diff changeset
   211
    mViewManager->changeView(params);
hgs
parents:
diff changeset
   212
    CNT_EXIT
hgs
parents:
diff changeset
   213
}
hgs
parents:
diff changeset
   214
hgs
parents:
diff changeset
   215
hgs
parents:
diff changeset
   216
void CntServices::editUpdateExisting(const QString &definitionName, const QString &value,
hgs
parents:
diff changeset
   217
    CntAbstractServiceProvider& aServiceProvider )
hgs
parents:
diff changeset
   218
{
hgs
parents:
diff changeset
   219
    CNT_ENTRY
hgs
parents:
diff changeset
   220
    mCurrentProvider = &aServiceProvider;
hgs
parents:
diff changeset
   221
hgs
parents:
diff changeset
   222
    QContactDetail detail;
hgs
parents:
diff changeset
   223
    
hgs
parents:
diff changeset
   224
    if (definitionName == QContactPhoneNumber::DefinitionName)
hgs
parents:
diff changeset
   225
    {
hgs
parents:
diff changeset
   226
        QContactPhoneNumber phoneNumber;
hgs
parents:
diff changeset
   227
        phoneNumber.setNumber(value);
hgs
parents:
diff changeset
   228
        phoneNumber.setSubTypes(QContactPhoneNumber::SubTypeMobile);
hgs
parents:
diff changeset
   229
        detail = phoneNumber;
hgs
parents:
diff changeset
   230
    }
hgs
parents:
diff changeset
   231
    else if (definitionName == QContactEmailAddress::DefinitionName)
hgs
parents:
diff changeset
   232
    {
hgs
parents:
diff changeset
   233
        QContactEmailAddress email;
hgs
parents:
diff changeset
   234
        email.setEmailAddress(value);
hgs
parents:
diff changeset
   235
        detail = email;
hgs
parents:
diff changeset
   236
    }
hgs
parents:
diff changeset
   237
    else if (definitionName == QContactOnlineAccount::DefinitionName)
hgs
parents:
diff changeset
   238
    {
hgs
parents:
diff changeset
   239
        QContactOnlineAccount account;
hgs
parents:
diff changeset
   240
        account.setAccountUri(value);
hgs
parents:
diff changeset
   241
        account.setSubTypes(QContactOnlineAccount::SubTypeSipVoip);
hgs
parents:
diff changeset
   242
        detail = account;
hgs
parents:
diff changeset
   243
    }
hgs
parents:
diff changeset
   244
hgs
parents:
diff changeset
   245
    CntViewParameters params;
hgs
parents:
diff changeset
   246
    params.insert(EViewId, serviceContactSelectionView);
hgs
parents:
diff changeset
   247
    QVariant var;
hgs
parents:
diff changeset
   248
    var.setValue(detail);
hgs
parents:
diff changeset
   249
    params.insert(ESelectedDetail, var);
hgs
parents:
diff changeset
   250
    mViewManager->changeView(params);
hgs
parents:
diff changeset
   251
    CNT_EXIT
hgs
parents:
diff changeset
   252
}
hgs
parents:
diff changeset
   253
hgs
parents:
diff changeset
   254
void CntServices::editExisting(int contactId,
hgs
parents:
diff changeset
   255
CntAbstractServiceProvider& aServiceProvider)
hgs
parents:
diff changeset
   256
{
hgs
parents:
diff changeset
   257
    CNT_ENTRY
hgs
parents:
diff changeset
   258
    mCurrentProvider = &aServiceProvider;
hgs
parents:
diff changeset
   259
hgs
parents:
diff changeset
   260
    // Give parameters for launching editor.
hgs
parents:
diff changeset
   261
    CntViewParameters params;
hgs
parents:
diff changeset
   262
    params.insert(EViewId, serviceEditView);
hgs
parents:
diff changeset
   263
hgs
parents:
diff changeset
   264
    QContact contact = mViewManager->contactManager(SYMBIAN_BACKEND)->contact(contactId);
hgs
parents:
diff changeset
   265
    QVariant varContact;
hgs
parents:
diff changeset
   266
    varContact.setValue(contact);
hgs
parents:
diff changeset
   267
    params.insert(ESelectedContact, varContact);
hgs
parents:
diff changeset
   268
    mViewManager->changeView(params);
hgs
parents:
diff changeset
   269
    CNT_EXIT
hgs
parents:
diff changeset
   270
}
hgs
parents:
diff changeset
   271
hgs
parents:
diff changeset
   272
hgs
parents:
diff changeset
   273
void CntServices::launchContactCard(int aContactId,
hgs
parents:
diff changeset
   274
    CntAbstractServiceProvider& aServiceProvider )
hgs
parents:
diff changeset
   275
{
hgs
parents:
diff changeset
   276
    CNT_ENTRY
hgs
parents:
diff changeset
   277
    mCurrentProvider = &aServiceProvider;
hgs
parents:
diff changeset
   278
hgs
parents:
diff changeset
   279
    QContactManager manager("symbian");
hgs
parents:
diff changeset
   280
    QContact contact = manager.contact(aContactId);
hgs
parents:
diff changeset
   281
hgs
parents:
diff changeset
   282
    // Launch Contact Card view
hgs
parents:
diff changeset
   283
    CntViewParameters params;
hgs
parents:
diff changeset
   284
    params.insert(EViewId, serviceContactCardView);
hgs
parents:
diff changeset
   285
    QVariant var;
hgs
parents:
diff changeset
   286
    var.setValue(contact);
hgs
parents:
diff changeset
   287
    params.insert(ESelectedContact, var);
hgs
parents:
diff changeset
   288
    mViewManager->changeView( params );
hgs
parents:
diff changeset
   289
    CNT_EXIT
hgs
parents:
diff changeset
   290
}
hgs
parents:
diff changeset
   291
hgs
parents:
diff changeset
   292
hgs
parents:
diff changeset
   293
void CntServices::launchTemporaryContactCard(const QString &definitionName, const QString &value,
hgs
parents:
diff changeset
   294
    CntAbstractServiceProvider& aServiceProvider )
hgs
parents:
diff changeset
   295
{
hgs
parents:
diff changeset
   296
    CNT_ENTRY
hgs
parents:
diff changeset
   297
    mCurrentProvider = &aServiceProvider;
hgs
parents:
diff changeset
   298
hgs
parents:
diff changeset
   299
    QContact contact;
hgs
parents:
diff changeset
   300
    QContactDetail detail;
hgs
parents:
diff changeset
   301
    
hgs
parents:
diff changeset
   302
    if (definitionName == QContactPhoneNumber::DefinitionName)
hgs
parents:
diff changeset
   303
    {
hgs
parents:
diff changeset
   304
        QContactPhoneNumber phoneNumber;
hgs
parents:
diff changeset
   305
        phoneNumber.setNumber(value);
hgs
parents:
diff changeset
   306
        phoneNumber.setSubTypes(QContactPhoneNumber::SubTypeMobile);
hgs
parents:
diff changeset
   307
        contact.saveDetail(&phoneNumber);
hgs
parents:
diff changeset
   308
        detail = phoneNumber;
hgs
parents:
diff changeset
   309
    }
hgs
parents:
diff changeset
   310
    else if (definitionName == QContactEmailAddress::DefinitionName)
hgs
parents:
diff changeset
   311
    {
hgs
parents:
diff changeset
   312
        QContactEmailAddress email;
hgs
parents:
diff changeset
   313
        email.setEmailAddress(value);
hgs
parents:
diff changeset
   314
        contact.saveDetail(&email);
hgs
parents:
diff changeset
   315
        detail = email;
hgs
parents:
diff changeset
   316
    }
hgs
parents:
diff changeset
   317
    else if (definitionName == QContactOnlineAccount::DefinitionName)
hgs
parents:
diff changeset
   318
    {
hgs
parents:
diff changeset
   319
        QContactOnlineAccount account;
hgs
parents:
diff changeset
   320
        account.setAccountUri(value);
hgs
parents:
diff changeset
   321
        account.setSubTypes(QContactOnlineAccount::SubTypeSipVoip);
hgs
parents:
diff changeset
   322
        contact.saveDetail(&account);
hgs
parents:
diff changeset
   323
        detail = account;
hgs
parents:
diff changeset
   324
    }
hgs
parents:
diff changeset
   325
hgs
parents:
diff changeset
   326
    // Launch the view
hgs
parents:
diff changeset
   327
    CntViewParameters params;
hgs
parents:
diff changeset
   328
    params.insert(EViewId, serviceAssignContactCardView);
hgs
parents:
diff changeset
   329
    QVariant var;
hgs
parents:
diff changeset
   330
    var.setValue(contact);
hgs
parents:
diff changeset
   331
    params.insert(ESelectedContact, var);
hgs
parents:
diff changeset
   332
    QVariant varDetail;
hgs
parents:
diff changeset
   333
    varDetail.setValue(detail);
hgs
parents:
diff changeset
   334
    params.insert(ESelectedDetail, varDetail);
hgs
parents:
diff changeset
   335
    mViewManager->changeView(params);
hgs
parents:
diff changeset
   336
    CNT_EXIT
hgs
parents:
diff changeset
   337
}
hgs
parents:
diff changeset
   338
hgs
parents:
diff changeset
   339
hgs
parents:
diff changeset
   340
void CntServices::removeNotSupportedDetails(QContact& contact)
hgs
parents:
diff changeset
   341
{
hgs
parents:
diff changeset
   342
    CNT_ENTRY
hgs
parents:
diff changeset
   343
    // Check definition map, remove details not supported
hgs
parents:
diff changeset
   344
    for (int i=0; i < contact.details().count(); i++)
hgs
parents:
diff changeset
   345
    {
hgs
parents:
diff changeset
   346
        if (!m_definitionNames.contains(contact.details().at(i).definitionName()))
hgs
parents:
diff changeset
   347
        {
hgs
parents:
diff changeset
   348
            QContactDetail detail= contact.details().at(i);
hgs
parents:
diff changeset
   349
            contact.removeDetail(&detail);
hgs
parents:
diff changeset
   350
        }
hgs
parents:
diff changeset
   351
    }
hgs
parents:
diff changeset
   352
    CNT_EXIT
hgs
parents:
diff changeset
   353
}
hgs
parents:
diff changeset
   354
hgs
parents:
diff changeset
   355
hgs
parents:
diff changeset
   356
hgs
parents:
diff changeset
   357
void CntServices::removeNotSupportedFields(QContact& contact)
hgs
parents:
diff changeset
   358
{
hgs
parents:
diff changeset
   359
    CNT_ENTRY
hgs
parents:
diff changeset
   360
    QContactManager cm("symbian");
hgs
parents:
diff changeset
   361
    QList<QContactDetail>   removeList;
hgs
parents:
diff changeset
   362
    
hgs
parents:
diff changeset
   363
    // Not all fields are supported in symbian back-end
hgs
parents:
diff changeset
   364
    // Remove not supported fields
hgs
parents:
diff changeset
   365
    for (int i=0; i < contact.details().count(); i++)
hgs
parents:
diff changeset
   366
    {
hgs
parents:
diff changeset
   367
        QContactDetail detail = contact.details().at(i);
hgs
parents:
diff changeset
   368
        if(detail.definitionName() == QContactAddress::DefinitionName)
hgs
parents:
diff changeset
   369
        {
hgs
parents:
diff changeset
   370
            QContactAddress addrDetail = static_cast<QContactAddress>(detail);
hgs
parents:
diff changeset
   371
            
hgs
parents:
diff changeset
   372
            // Sub-types not supported
hgs
parents:
diff changeset
   373
            if(detail.removeValue(QContactAddress::FieldSubTypes))
hgs
parents:
diff changeset
   374
                contact.saveDetail(&detail);
hgs
parents:
diff changeset
   375
        }
hgs
parents:
diff changeset
   376
        else if(detail.definitionName() == QContactAnniversary::DefinitionName)
hgs
parents:
diff changeset
   377
        {
hgs
parents:
diff changeset
   378
            QContactAnniversary annivDetail = static_cast<QContactAnniversary>(detail);
hgs
parents:
diff changeset
   379
            
hgs
parents:
diff changeset
   380
            // Sub-types not supported
hgs
parents:
diff changeset
   381
            if(detail.removeValue(QContactAnniversary::FieldSubType))
hgs
parents:
diff changeset
   382
                contact.saveDetail(&detail);
hgs
parents:
diff changeset
   383
            
hgs
parents:
diff changeset
   384
            // Context not supported
hgs
parents:
diff changeset
   385
            if(detail.removeValue(QContactDetail::FieldContext))
hgs
parents:
diff changeset
   386
                contact.saveDetail(&detail);
hgs
parents:
diff changeset
   387
        }
hgs
parents:
diff changeset
   388
        else if(detail.definitionName() == QContactPhoneNumber::DefinitionName)
hgs
parents:
diff changeset
   389
        {
hgs
parents:
diff changeset
   390
            QContactPhoneNumber phoneDetail = static_cast<QContactPhoneNumber>(detail);
hgs
parents:
diff changeset
   391
            
hgs
parents:
diff changeset
   392
            if(phoneDetail.subTypes().size() > 0 )
hgs
parents:
diff changeset
   393
            {
hgs
parents:
diff changeset
   394
                // Sub-types not supported
hgs
parents:
diff changeset
   395
                if(phoneDetail.subTypes().contains(QContactPhoneNumber::SubTypeVoice)
hgs
parents:
diff changeset
   396
                   || phoneDetail.subTypes().contains(QContactPhoneNumber::SubTypeMessagingCapable))
hgs
parents:
diff changeset
   397
                {
hgs
parents:
diff changeset
   398
                    detail.removeValue(QContactPhoneNumber::FieldSubTypes);
hgs
parents:
diff changeset
   399
                    contact.saveDetail(&detail);
hgs
parents:
diff changeset
   400
                }
hgs
parents:
diff changeset
   401
            }
hgs
parents:
diff changeset
   402
        }
hgs
parents:
diff changeset
   403
        else if(detail.definitionName() == QContactUrl::DefinitionName)
hgs
parents:
diff changeset
   404
        {
hgs
parents:
diff changeset
   405
            QContactUrl urlDetail = static_cast<QContactUrl>(detail);
hgs
parents:
diff changeset
   406
            
hgs
parents:
diff changeset
   407
            QString stype=QContactUrl::SubTypeHomePage;
hgs
parents:
diff changeset
   408
            if(urlDetail.subType().compare(stype) != 0)
hgs
parents:
diff changeset
   409
            {
hgs
parents:
diff changeset
   410
                detail.removeValue(QContactUrl::FieldSubType);
hgs
parents:
diff changeset
   411
                contact.saveDetail(&detail);
hgs
parents:
diff changeset
   412
            }
hgs
parents:
diff changeset
   413
        }
hgs
parents:
diff changeset
   414
    }
hgs
parents:
diff changeset
   415
    CNT_EXIT
hgs
parents:
diff changeset
   416
}
hgs
parents:
diff changeset
   417
hgs
parents:
diff changeset
   418
// This method is inherited from CntAbstractServiceProvider
hgs
parents:
diff changeset
   419
void CntServices::CompleteServiceAndCloseApp(const QVariant& retValue)
hgs
parents:
diff changeset
   420
{
hgs
parents:
diff changeset
   421
    CNT_ENTRY
hgs
parents:
diff changeset
   422
    if (  mCurrentProvider )
hgs
parents:
diff changeset
   423
        {
hgs
parents:
diff changeset
   424
        mCurrentProvider->CompleteServiceAndCloseApp( retValue );
hgs
parents:
diff changeset
   425
        }
hgs
parents:
diff changeset
   426
    CNT_EXIT
hgs
parents:
diff changeset
   427
}
hgs
parents:
diff changeset
   428
hgs
parents:
diff changeset
   429
void CntServices::setQuitable(bool quitable)
hgs
parents:
diff changeset
   430
{
hgs
parents:
diff changeset
   431
    mIsQuitable = quitable;
hgs
parents:
diff changeset
   432
}
hgs
parents:
diff changeset
   433
hgs
parents:
diff changeset
   434
void CntServices::quitApp()
hgs
parents:
diff changeset
   435
{
hgs
parents:
diff changeset
   436
    CNT_ENTRY
hgs
parents:
diff changeset
   437
   
hgs
parents:
diff changeset
   438
    // Only embedded applications should be exited once a client
hgs
parents:
diff changeset
   439
    // disconnects. At the moments QtHighWay has unresolved issues
hgs
parents:
diff changeset
   440
    // when closing non-embedded applications. Error ou1cimx1#472852
hgs
parents:
diff changeset
   441
    // has more info
hgs
parents:
diff changeset
   442
    if ( mIsQuitable ) 
hgs
parents:
diff changeset
   443
    {
hgs
parents:
diff changeset
   444
       qApp->quit();
hgs
parents:
diff changeset
   445
    }
hgs
parents:
diff changeset
   446
   
hgs
parents:
diff changeset
   447
    CNT_EXIT
hgs
parents:
diff changeset
   448
}
hgs
parents:
diff changeset
   449
hgs
parents:
diff changeset
   450
Q_IMPLEMENT_USER_METATYPE(CntServicesContact)
hgs
parents:
diff changeset
   451
Q_IMPLEMENT_USER_METATYPE_NO_OPERATORS(CntServicesContactList)