activityfw/storage/client/src/afstorageentry.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 06 Jul 2010 14:37:10 +0300
changeset 104 9b022b1f357c
permissions -rw-r--r--
Revision: 201025 Kit: 2010127

/*
* 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 <xqconversions.h>

#include "afstorageentry.h"
#include "afentry.h"
#include "afserializer.h"
#include "afstorageglobals.h"
// -----------------------------------------------------------------------------
/**
 * Constructor. 
 * Initialize object with preallocated symbian specyfic data structure. Function doesn't copy content
 * @param data - pointer to symbian specyfic data structure
 */
AfStorageEntry::AfStorageEntry(QSharedPointer<CAfEntry> data)
:
mData(data)
{}

// -----------------------------------------------------------------------------
/**
* Constructor
* Initialize object with preallocated data structure. Function doesn't copy content
* @param data - activity data structure
*/
AfStorageEntry::AfStorageEntry(const AfStorageEntry &data)
:
    mData(data.mData)
{}

// -----------------------------------------------------------------------------
/**
 * Constructor
 * Initialize object with data. Function do deep copy of data
 * @param appId - unique application identifier
 * @param actId - activity identifier
 * @param privateData - private part of activity data
 * @param publicData - public part of activity data
 */
AfStorageEntry::AfStorageEntry(int appId, 
                               const QString &actId, 
                               const QVariant &privateData, 
                               const QVariantHash& publicData)
:
    mData(0)
{
    int flags(0);
    QVariantHash privData;
    privData.insert(ActivityDataKeyword, privateData);
    RBuf8 privateBuff, publicBuff;
    CleanupClosePushL(privateBuff);
    CleanupClosePushL(publicBuff);
    privateBuff << privData;
    publicBuff << publicData;
    
    if (publicData.end() != publicData.find(ActivityPersistence) && 
        publicData[ActivityPersistence].toBool()) {
        flags |= CAfEntry::Persistent;
    }
    
    if (publicData.end() != publicData.find(ActivityVisibility) && 
        !publicData[ActivityVisibility].toBool()) {
        flags |= CAfEntry::Invisible;
    }
    
    HBufC *actBuff = XQConversions::qStringToS60Desc(actId);
    CleanupStack::PushL(actBuff);
    mData = QSharedPointer<CAfEntry>(CAfEntry::NewL(flags, 
                                                    appId, 
                                                    *actBuff, 
                                                    KNullDesC, 
                                                    privateBuff, 
                                                    publicBuff));
    CleanupStack::PopAndDestroy(actBuff);
    CleanupStack::PopAndDestroy(&publicBuff);
    CleanupStack::PopAndDestroy(&privateBuff);
}

// -----------------------------------------------------------------------------
/**
 * Retrieve S60 structure representation
 */
const CAfEntry* AfStorageEntry::data() const
{
    return mData.data();
}
 

// -----------------------------------------------------------------------------
/**
 * Retrieve activity flags
 * @return activity flags
 */
int AfStorageEntry::flags() const
{
    return mData->Flags();
}

// -----------------------------------------------------------------------------
/**
 * Retrieve application unique identifier
 * @return application identifier
 */
int AfStorageEntry::applicationId() const
{
    return mData->ApplicationId();
}

// -----------------------------------------------------------------------------
/**
 * Retrieve activity identifier. Identyfier is unique for each application 
 * @return activity identifier
 */
QString AfStorageEntry::activityId() const
{
    return XQConversions::s60DescToQString(mData->ActivityId());
}

// -----------------------------------------------------------------------------
/**
 * Retrieve path to activity thumbanil path 
 * @return thumbail loacation path
 */
QString AfStorageEntry::imageSrc() const
{
    return XQConversions::s60DescToQString(mData->ImageSrc());
}

// -----------------------------------------------------------------------------
/**
 * Retrieve public part of activity data 
 * @return public activity data
 */
QVariantHash AfStorageEntry::publicData() const
{
    QVariantHash deserializedData;
    deserializedData << mData->Data(CAfEntry::Public);
    deserializedData.insert(ActivityApplicationKeyword, applicationId());
    deserializedData.insert(ActivityActivityKeyword, activityId());
    deserializedData.insert(ActivityScreenshotKeyword, imageSrc());
    deserializedData.insert(ActivityPersistence, (flags() & CAfEntry::Persistent) ? true : false);
    deserializedData.insert(ActivityVisibility, (flags() & CAfEntry::Invisible) ? false : true);
    return deserializedData;
}

// -----------------------------------------------------------------------------
/**
 * Retrieve private part of activity data 
 * @return private activity data
 */
QVariant AfStorageEntry::privateData() const
{
    QVariantHash deserializedData;
    deserializedData << mData->Data(CAfEntry::Private);
    return deserializedData[ActivityDataKeyword];
}