utilityapps/creator/engine/src/creator_phonebookapi.cpp
author hgs
Mon, 18 Oct 2010 16:30:05 +0300
changeset 55 2d9cac8919d3
parent 51 creator/engine/src/creator_phonebookapi.cpp@b048e15729d6
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 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 "creator_phonebookapi.h"
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
CCreatorPhonebookAPI::CCreatorPhonebookAPI ()
hgs
parents:
diff changeset
    21
    {
hgs
parents:
diff changeset
    22
    mContactMngr = new QContactManager("symbian");
hgs
parents:
diff changeset
    23
    }
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
CCreatorPhonebookAPI::~CCreatorPhonebookAPI ()
hgs
parents:
diff changeset
    26
    {
hgs
parents:
diff changeset
    27
    if( mContactMngr )
hgs
parents:
diff changeset
    28
        {
hgs
parents:
diff changeset
    29
        delete mContactMngr;
hgs
parents:
diff changeset
    30
        mContactMngr = NULL;
hgs
parents:
diff changeset
    31
        }
hgs
parents:
diff changeset
    32
    }
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
quint32 CCreatorPhonebookAPI::saveContact( const QList<QContactDetail>& list )
hgs
parents:
diff changeset
    35
    {
hgs
parents:
diff changeset
    36
    // create a new contact item
hgs
parents:
diff changeset
    37
    QContact store;
hgs
parents:
diff changeset
    38
    quint32 id;
hgs
parents:
diff changeset
    39
    for(int i = 0 ; i < list.count() ; i++ )
hgs
parents:
diff changeset
    40
    	{
hgs
parents:
diff changeset
    41
		QContactDetail cntdetail = list.at(i);
51
hgs
parents: 31
diff changeset
    42
		store.saveDetail(&cntdetail);
31
hgs
parents:
diff changeset
    43
    	}
hgs
parents:
diff changeset
    44
    /*foreach( QContactDetail cntdetail, list )
hgs
parents:
diff changeset
    45
        {
51
hgs
parents: 31
diff changeset
    46
        store.saveDetail( &cntdetail );
31
hgs
parents:
diff changeset
    47
        }
hgs
parents:
diff changeset
    48
    */
51
hgs
parents: 31
diff changeset
    49
    mContactMngr->saveContact( &store );
31
hgs
parents:
diff changeset
    50
    id = store.localId();
hgs
parents:
diff changeset
    51
    return id;
hgs
parents:
diff changeset
    52
    }
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
quint32 CCreatorPhonebookAPI::createGroup( const QString& groupName )
hgs
parents:
diff changeset
    55
	{
hgs
parents:
diff changeset
    56
	QContact newGroup;
hgs
parents:
diff changeset
    57
	newGroup.setType(QContactType::TypeGroup);
hgs
parents:
diff changeset
    58
	QContactName newGroupName;
hgs
parents:
diff changeset
    59
	newGroupName.setCustomLabel( groupName );
hgs
parents:
diff changeset
    60
	newGroup.saveDetail(&newGroupName);
hgs
parents:
diff changeset
    61
	mContactMngr->saveContact(&newGroup);
hgs
parents:
diff changeset
    62
	return newGroup.localId();
hgs
parents:
diff changeset
    63
	}
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
int CCreatorPhonebookAPI::numberOfContacts()
hgs
parents:
diff changeset
    66
	{
hgs
parents:
diff changeset
    67
	QList<QContactLocalId> contacts = mContactMngr->contactIds();
hgs
parents:
diff changeset
    68
	return contacts.count();
hgs
parents:
diff changeset
    69
	
hgs
parents:
diff changeset
    70
	}
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
bool CCreatorPhonebookAPI::IsContactGroupL( const QContact& contact )
hgs
parents:
diff changeset
    73
	{
hgs
parents:
diff changeset
    74
	 
hgs
parents:
diff changeset
    75
	if( contact.type() == QContactType::TypeGroup )
hgs
parents:
diff changeset
    76
		{
hgs
parents:
diff changeset
    77
		return true;
hgs
parents:
diff changeset
    78
		}
hgs
parents:
diff changeset
    79
	return false;
hgs
parents:
diff changeset
    80
	}
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
int CCreatorPhonebookAPI::addContactToGroup( QContactLocalId group, QContactLocalId contact )
hgs
parents:
diff changeset
    83
	{
hgs
parents:
diff changeset
    84
	QContact newGroup = mContactMngr->contact( group );
hgs
parents:
diff changeset
    85
	QContact contactLink = mContactMngr->contact( contact );
hgs
parents:
diff changeset
    86
	int ret = 0;
hgs
parents:
diff changeset
    87
	if( contact && IsContactGroupL( contactLink ) == false )
hgs
parents:
diff changeset
    88
	    {
hgs
parents:
diff changeset
    89
        QList<QContactRelationship> relationships = contactLink.relationships(QContactRelationship::HasMember);
hgs
parents:
diff changeset
    90
        if( !relationships.count() && contactLink.type() == QContactType::TypeContact ) //just for contacts that are not in relationship - not in group yet
hgs
parents:
diff changeset
    91
			{
hgs
parents:
diff changeset
    92
			QContactRelationship* contactRel = new QContactRelationship();
hgs
parents:
diff changeset
    93
			contactRel->setRelationshipType(QContactRelationship::HasMember);
hgs
parents:
diff changeset
    94
			contactRel->setFirst(newGroup.id());
hgs
parents:
diff changeset
    95
			contactRel->setSecond( contactLink.id() );
hgs
parents:
diff changeset
    96
			mContactMngr->saveRelationship( contactRel );
hgs
parents:
diff changeset
    97
			delete contactRel;
hgs
parents:
diff changeset
    98
			ret++;
hgs
parents:
diff changeset
    99
			}         
hgs
parents:
diff changeset
   100
		}
hgs
parents:
diff changeset
   101
	return ret;
hgs
parents:
diff changeset
   102
	}
hgs
parents:
diff changeset
   103
int CCreatorPhonebookAPI::addToGroup(QContactLocalId group, int amount)
hgs
parents:
diff changeset
   104
	{
hgs
parents:
diff changeset
   105
	QList<QContactLocalId> contacts = mContactMngr->contactIds();
hgs
parents:
diff changeset
   106
	int ret = 0;		
hgs
parents:
diff changeset
   107
	int tmp = 0;
hgs
parents:
diff changeset
   108
	int cnt = 0;
hgs
parents:
diff changeset
   109
	
hgs
parents:
diff changeset
   110
	for( int i=0; cnt < amount && i < contacts.count() ; i++ )
hgs
parents:
diff changeset
   111
		{
hgs
parents:
diff changeset
   112
		QContact contact = mContactMngr->contact( mContactMngr->contactIds().at(i) );
hgs
parents:
diff changeset
   113
		if( contact.type() == QContactType::TypeContact )
hgs
parents:
diff changeset
   114
			{
hgs
parents:
diff changeset
   115
			tmp = addContactToGroup(group,mContactMngr->contactIds().at(i)); 
hgs
parents:
diff changeset
   116
			ret += tmp;
hgs
parents:
diff changeset
   117
			if(tmp)
hgs
parents:
diff changeset
   118
				{
hgs
parents:
diff changeset
   119
				cnt++;
hgs
parents:
diff changeset
   120
				tmp = 0;
hgs
parents:
diff changeset
   121
				}
hgs
parents:
diff changeset
   122
			}
hgs
parents:
diff changeset
   123
		}
hgs
parents:
diff changeset
   124
	return ret;
hgs
parents:
diff changeset
   125
	}
hgs
parents:
diff changeset
   126
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
bool CCreatorPhonebookAPI::deleteAllContacts()
hgs
parents:
diff changeset
   129
    {
hgs
parents:
diff changeset
   130
    QList<QContactLocalId> all = mContactMngr->contactIds();
hgs
parents:
diff changeset
   131
    return deleteContacts( all );
hgs
parents:
diff changeset
   132
    }
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
bool CCreatorPhonebookAPI::deleteAllContacts( const QString& type )
hgs
parents:
diff changeset
   135
    {
hgs
parents:
diff changeset
   136
    QList<QContactLocalId> contactsToDelete;
hgs
parents:
diff changeset
   137
    QList<QContactLocalId> contacts = mContactMngr->contactIds();
hgs
parents:
diff changeset
   138
    foreach(QContactLocalId contactId, contacts)
hgs
parents:
diff changeset
   139
        {
hgs
parents:
diff changeset
   140
        QContact contact = mContactMngr->contact( contactId );
hgs
parents:
diff changeset
   141
        if( contact.type() == type )
hgs
parents:
diff changeset
   142
            {
hgs
parents:
diff changeset
   143
            contactsToDelete.append( contact.localId() );
hgs
parents:
diff changeset
   144
            }
hgs
parents:
diff changeset
   145
        }
hgs
parents:
diff changeset
   146
    return deleteContacts( contactsToDelete );
hgs
parents:
diff changeset
   147
    }
hgs
parents:
diff changeset
   148
hgs
parents:
diff changeset
   149
hgs
parents:
diff changeset
   150
bool CCreatorPhonebookAPI::deleteContacts( const QList<QContactLocalId>& list )
hgs
parents:
diff changeset
   151
    {
hgs
parents:
diff changeset
   152
    QMap<int, QContactManager::Error> errorMap;
hgs
parents:
diff changeset
   153
    return mContactMngr->removeContacts( list, &errorMap );
hgs
parents:
diff changeset
   154
    }
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
QContact CCreatorPhonebookAPI::contact( const QContactLocalId& contactId )
hgs
parents:
diff changeset
   157
    {
hgs
parents:
diff changeset
   158
    return mContactMngr->contact( contactId );
hgs
parents:
diff changeset
   159
    }
51
hgs
parents: 31
diff changeset
   160
hgs
parents: 31
diff changeset
   161
QString CCreatorPhonebookAPI::phoneNumber( const QContactLocalId& contactId )
hgs
parents: 31
diff changeset
   162
    {
hgs
parents: 31
diff changeset
   163
    QString strNumber;
hgs
parents: 31
diff changeset
   164
    QContact contact = mContactMngr->contact( contactId );
hgs
parents: 31
diff changeset
   165
    if( !contact.isEmpty() )
hgs
parents: 31
diff changeset
   166
        {
hgs
parents: 31
diff changeset
   167
        QContactPhoneNumber phoneNumber = static_cast<QContactPhoneNumber>( contact.detail( QContactPhoneNumber::DefinitionName ) );
hgs
parents: 31
diff changeset
   168
        strNumber = phoneNumber.number();
hgs
parents: 31
diff changeset
   169
        }
hgs
parents: 31
diff changeset
   170
    return strNumber;
hgs
parents: 31
diff changeset
   171
    }
hgs
parents: 31
diff changeset
   172
hgs
parents: 31
diff changeset
   173
bool CCreatorPhonebookAPI::contactDetails( const QContactLocalId& contactId, QString& name, QString& phoneNumber, QString& email )
hgs
parents: 31
diff changeset
   174
    {
hgs
parents: 31
diff changeset
   175
    bool success(false);
hgs
parents: 31
diff changeset
   176
    QContact contact = mContactMngr->contact( contactId );
hgs
parents: 31
diff changeset
   177
    if( !contact.isEmpty() )
hgs
parents: 31
diff changeset
   178
        {
hgs
parents: 31
diff changeset
   179
        QContactPhoneNumber contactPhoneNumber = static_cast<QContactPhoneNumber>( contact.detail( QContactPhoneNumber::DefinitionName ) );
hgs
parents: 31
diff changeset
   180
        phoneNumber = contactPhoneNumber.number();
hgs
parents: 31
diff changeset
   181
        QContactEmailAddress contactEmailAddress = static_cast<QContactEmailAddress>( contact.detail( QContactEmailAddress::DefinitionName ) );
hgs
parents: 31
diff changeset
   182
        email = contactEmailAddress.emailAddress();
hgs
parents: 31
diff changeset
   183
        QContactDisplayLabel contactDisplayLabel = static_cast<QContactDisplayLabel>( contact.detail( QContactDisplayLabel::DefinitionName ) );
hgs
parents: 31
diff changeset
   184
        name = contactDisplayLabel.label();
hgs
parents: 31
diff changeset
   185
        success = true;
hgs
parents: 31
diff changeset
   186
        }
hgs
parents: 31
diff changeset
   187
    return success;
hgs
parents: 31
diff changeset
   188
    }
31
hgs
parents:
diff changeset
   189
// End of File