diff -r 000000000000 -r 8466d47a6819 ipsservices/ipssosplugin/inc/ipsplgmrulist.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ipsservices/ipssosplugin/inc/ipsplgmrulist.h Thu Dec 17 08:39:21 2009 +0200 @@ -0,0 +1,181 @@ +/* +* Copyright (c) 2007 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: This file defines class CIpsPlgMruList. +* +*/ + + +#ifndef IPSPLGMRULIST_H +#define IPSPLGMRULIST_H + + +const TUid KCRUidIpsSosMru = { 0x20010128 }; + +/** + * Most recent used name and address store + * + * Reads and writes most recent used email addresses to central + * repository. Central repository stores key - value -pairs. In this + * case, first 16 bits of a key is used to identify mailbox and last 16 + * bits makes key unique for name and address information. Example: + * + * Key Value + * 0000 0000 : integer + * 0000 0001 <1. name of mailboxid1> : descriptor + * 0000 0002 <1. email addr of mailboxid1> : descriptor + * 0000 0003 <2. name of mailboxid1> : descriptor + * 0000 0004 <2. email addr of mailbodid1> : descriptor + * .... .... + * .... .... + * 0001 0000 : integer + * 0001 0001 <1. email addr of mailboxid2> : descriptor + * 0001 0002 <1. email addr of mailboxid2> : descriptor + * .... .... + * .... .... + * FFFF 0000 : integer + * FFFF 0001 <1. email addr of mailboxIdNNNN> : descriptor + * FFFF 0002 <1. email addr of mailboxIdNNNN> : descriptor + * + * @lib ipssosplugin.lib + * @since + */ +class CIpsPlgMruList : public CBase + { +public: + /** + * Two-phased constructor. + */ + static CIpsPlgMruList* NewL( ); + + /** + * Destructor. + */ + virtual ~CIpsPlgMruList(); + + /** + * Reads last used contacts from centrep and return + * array of descriptors that contains data. Data is read + * from cache if not changed in centrep. On error situation + * return empty descriptor array. + * + * @param aMailbox unique mailbox id + * @return descriptor array + * @since FS 1.0 + */ + CDesCArrayFlat* GetMruListL( const TFSMailMsgId& aMailbox ); + + /** + * Writes last used contacts to centrep. + * On error all data consern mailbox is cleared from centrep + * + * @param aMailbox unique mailbox id + * @param aNewMruList contact descriptor array + * @since FS 1.0 + */ + void SetMruListL( const TFSMailMsgId& aMailBoxId, + MDesCArray* aNewMruList ); + + /** + * Cleares all data stored under mailbox id + * + * @param aMailbox unique mailbox id + * @since FS 1.0 + */ + void ClearDataL( const TFSMailMsgId& aMailBoxId ); + +private: + + /** + * Constructor + */ + CIpsPlgMruList( ); + + /** + * Constructor for leaving methods + */ + void ConstructL( ); + + /** + * Reads descriptor identified by aKey from centrep + * + * @param aKey centrep key for descriptor + * @return KErrCorrupt or error from centrep transaction + */ + TInt StoreToArrayL(TUint32 aKey); + + /** + * Read all mailbox keys from centrep to array + * finds key that contains mailboxid + * + * @param aMboxId mailbox id key to be finded + * @param aMboxKey correct key or invalid key if mailbox id not + * founded from centrep + * @param aArray array where all mailbox keys will be stored + * @return KErrNone or KErrNotFound + */ + TInt GetMailboxKeyFromRepositoryL( + TInt aMboxId, + TUint32& aMboxKey, + RArray& aArray ); + + /** + * inline for creating iRepository, for performance reasons + * not created in constructl + */ + inline static void CreateRepositoryL( CRepository*& aRep ); + + /** + * Find smallest key that not founded in array + * + * @param aKeys set of keys which is sorted in fuction + * @return unique key + */ + TUint32 GetUnusedMboxKey( RArray& aKeys ); + + /** + * Find smallest key that not founded in array + * + * @param aMboxKey mailbox key which data error conserns + * @param aError system wide error code + */ + void HandleRepositoryError( TUint32 aMboxKey, TInt aError ); + +private: // data + + // Mru list repository instance + CRepository* iRepository; + + // array for repository data + RPointerArray iHbufArray; + + // array for repository keys + RArray iKeys; + + }; + + + +// inline for centrep object creation +inline void CIpsPlgMruList::CreateRepositoryL( CRepository*& aRep ) + { + if ( !aRep ) + { + // real uid needed + aRep = CRepository::NewL( KCRUidIpsSosMru ); + } + } + +#endif // IPSPLGMRULIST_H + +// End of file