phonebookui/pbkcommonui/src/cntfavourite.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 17 Sep 2010 08:27:32 +0300
changeset 71 7cc7d74059f9
parent 37 fd64c38c277d
permissions -rw-r--r--
Revision: 201035 Kit: 201037

/*
* 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 "cntfavourite.h"
#include <cntglobal.h>
#include <QDebug>

int CntFavourite::mCachedSymbianFavouriteId = 0;

QContactLocalId CntFavourite::createFavouriteGroup(QContactManager* aManager)
{
   QContactLocalId favouriteId = CntFavourite::favouriteGroupId(aManager);
    
   if (favouriteId == 0) {
       QContact favouriteGroup;
       favouriteGroup.setType( QContactType::TypeGroup );

       QContactName favouriteGroupName;
       favouriteGroupName.setCustomLabel( QLatin1String(FavouriteGroupName) );

       favouriteGroup.saveDetail(&favouriteGroupName);
       if (aManager->saveContact(&favouriteGroup)) {
           favouriteId = favouriteGroup.localId();
           if (aManager->managerUri() == SYMBIAN_BACKEND) {
               mCachedSymbianFavouriteId = favouriteId;
           }
       }
   }

   return favouriteId;
}

QContactLocalId CntFavourite::favouriteGroupId(QContactManager* aManager)
{
    QContactLocalId favouriteId(0);
   
    if (mCachedSymbianFavouriteId != 0 && aManager->managerUri() == SYMBIAN_BACKEND) {
        favouriteId = mCachedSymbianFavouriteId;
    } else {
        QContactDetailFilter groupFilter;
        groupFilter.setDetailDefinitionName(QContactType::DefinitionName, QContactType::FieldType);
        groupFilter.setValue(QString(QLatin1String(QContactType::TypeGroup)));
    
        QList<QContactLocalId> groupContactIds = aManager->contactIds( groupFilter );
            
        for (int i = 0; i < groupContactIds.count(); i++) {
            QContactFetchHint noRelationshipsFetchHint;
            noRelationshipsFetchHint.setOptimizationHints(QContactFetchHint::NoRelationships);
            QContact contact = aManager->contact(groupContactIds.at(i), noRelationshipsFetchHint);
            QContactName contactName = contact.detail<QContactName>();
            QString groupName = contactName.customLabel();
            if (groupName.compare(QLatin1String(FavouriteGroupName)) == 0) {
                favouriteId = groupContactIds.at(i);
                if (aManager->managerUri() == SYMBIAN_BACKEND) {
                    mCachedSymbianFavouriteId = favouriteId;
                }
                break;
            }
        }
    }
    
    return favouriteId;
}

bool CntFavourite::isMemberOfFavouriteGroup(QContactManager* contactManager, QContact* contact)
{
    QContactId favouriteId;
    favouriteId.setManagerUri(contactManager->managerUri());
    favouriteId.setLocalId(CntFavourite::favouriteGroupId(contactManager));

    QContactRelationship favouriteMembership;
    favouriteMembership.setFirst(favouriteId);
    favouriteMembership.setSecond(contact->id());
    favouriteMembership.setRelationshipType(QContactRelationship::HasMember);

    return contact->relationships().contains(favouriteMembership);
}

void CntFavourite::addContactToFavouriteGroup( QContactManager* aManager, QContactId& aId)
{
    QContactLocalId favouriteId = CntFavourite::favouriteGroupId( aManager );
    if ( favouriteId == 0 )
    {
        favouriteId = CntFavourite::createFavouriteGroup( aManager );
    }
    
    QContact favoriteGroup = aManager->contact( favouriteId );
        
    // new contact added to the favorite group
    QContactRelationship relationship;
    relationship.setRelationshipType(QContactRelationship::HasMember);
    relationship.setFirst( favoriteGroup.id() );
    relationship.setSecond( aId );
    
    // save relationship
    aManager->saveRelationship( &relationship );
}

void CntFavourite::removeContactFromFavouriteGroup(QContactManager* aManager, QContactId& aId)
{
    QContactLocalId favouriteId = CntFavourite::favouriteGroupId(aManager);
    if (favouriteId != 0) {
        QContact favoriteGroup = aManager->contact(favouriteId);
        QContactRelationship relationship;
        relationship.setRelationshipType(QContactRelationship::HasMember);
        relationship.setFirst(favoriteGroup.id());
        relationship.setSecond(aId);
        aManager->removeRelationship(relationship);
    }
}

// End of File