ipsservices/ipssosplugin/inc/ipsplgmrulist.h
changeset 0 8466d47a6819
child 18 578830873419
--- /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   <mailboxId1>                     : 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   <mailboxId2>                     : integer
+ *  0001 0001   <1. email addr of mailboxid2>    : descriptor
+ *  0001 0002   <1. email addr of mailboxid2>    : descriptor
+ *  .... ....
+ *  .... ....
+ *  FFFF 0000   <mailboxIdFFFF+1>                : 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<TUint32>& 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<TUint32>& 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<HBufC>    iHbufArray;
+
+    // array for repository keys
+    RArray<TUint32>         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