diff -r fd64c38c277d -r b46a585f6909 phonebookengines/cntlistmodel/inc/cntcache_p.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/cntlistmodel/inc/cntcache_p.h Fri Jun 11 13:29:23 2010 +0300 @@ -0,0 +1,139 @@ +/* +* Copyright (c) 2010 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: Private data and helper classes used by class CntCache. +* +*/ + +#ifndef CNTCACHE_P_H +#define CNTCACHE_P_H + +#include +#include +#include +#include +#include +#include +#include "cntinfoprovider.h" + +#define DP( s ); +#define DP_IN( s ); +#define DP_OUT( s ); + +class ThumbnailManager; + +QTM_USE_NAMESPACE + +/*! + Private shared data for the CntContactInfo class. + */ +class CntContactInfoData : public QSharedData +{ +public: + CntContactInfoData() : id(-1), fields(0) { } + ~CntContactInfoData() { } + +public: + int id; + int fields; + QString name; + QString text; + HbIcon icon1; + HbIcon icon2; +}; + +/*! + Cache item that holds info for one contact: name, text and two icon names. + */ +class CntInfoCacheItem +{ +public: + int cacheOrder; + int contactId; + QString name; + QString text; + QString icons[2]; +}; + +/*! + Cache item that holds one icon. Data member isFetched is false until the + icon has been fetched asynchronously. + */ +class CntIconCacheItem +{ +public: + int cacheOrder; + QString iconName; + bool isFetched; + QSet contactIds; + HbIcon icon; +}; + +/*! + Low priority thread that fetches contact info and icons in the background. + CntCacheThread uses data provider plugins and thumbnail manager to retrieve + the actual data. This class' responsibilities are 1) fetch the requested + data in a timely manner and 2) interfere with the UI as little as possible. + This is mainly orchestrated by the client, who calls postponeJobs() when + the UI is active, and who only requests urgent jobs. + + If the client sends too many requests (e.g. during a long scrolling operation + in the UI), then the oldest jobs will be cancelled. However, the cancelled jobs + will be informed back to the client later so that it can choose to reschedule + the jobs. + */ +class CntCacheThread : public QThread +{ + Q_OBJECT +public: + CntCacheThread(); + ~CntCacheThread(); + + void run(); + void scheduleInfoJob(int contactId); + void scheduleIconJob(const QString& iconName); + void postponeJobs(); + bool event(QEvent *event); + +signals: + void infoFieldUpdated(int contactId, ContactInfoField infoField, const QString& infoValue); + void infoCancelled(int contactId); + void iconUpdated(const QString& iconName, const HbIcon& icon); + void iconCancelled(const QString& iconName); + void allJobsDone(); + +private slots: + void onInfoFieldReady(CntInfoProvider* sender, int contactId, + ContactInfoField field, const QString& text); + void onIconReady(const QPixmap& pixmap, void *data, int id, int error); + void doAllJobs(); + +private: + QContactManager* mContactManager; // for fetching QContact objects + ThumbnailManager* mThumbnailManager; // for fetching icons + + // maps info providers to their responsibilities + QMap mDataProviders; + + QMutex mJobMutex; // guards access to the job lists + bool mJobLoopRunning; // true from when job loop event has been posted until job loop exits + int mPostponeJobs; // set to true by client if it needs the CPU + QList mInfoJobs; // list of all info jobs + QList mCancelledInfoJobs; // list of all cancelled info jobs + QList mIconJobs; // list of all icon jobs + QList mCancelledIconJobs; // list of all cancelled icon jobs + int mIconRequestId; // the id for the last request to thumbnail manager + QString mIconRequestName; // the name of the icon last requested from thumbnail manager +}; + +#endif