diff -r 5b6f26637ad3 -r f4a778e096c2 phonebookengines/VirtualPhonebook/VPbkSimStoreImpl/inc/CMultipleReadCmd.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/VirtualPhonebook/VPbkSimStoreImpl/inc/CMultipleReadCmd.h Wed Sep 01 12:29:52 2010 +0100 @@ -0,0 +1,178 @@ +/* +* Copyright (c) 2002-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: A class that can read multiple contacts from ETel store. +* Uses ETel RMobilePhoneBookStore Read +* +*/ + + + +#ifndef VPBKSIMSTOREIMPL_CMULTIPLEREADCMD_H +#define VPBKSIMSTOREIMPL_CMULTIPLEREADCMD_H + +// INCLUDES +#include +#include +#include + +// FORWARD DECLARATIONS +class CVPbkETelCntConverter; +class CVPbkSimContactBuf; + +namespace VPbkSimStoreImpl { + +// FORWARD DECLARATIONS +class CBasicStore; + +// CLASS DECLARATION + +/** +* A class that can read multiple contacts from ETel store. +* +*/ +NONSHARABLE_CLASS(CMultipleReadCmd) : public CActive, + public MVPbkSimCommand + { + public: // Constructors and destructor + + /** + * Two-phased constructor. Reads all contacts from ETel. + * @param aBasicStore the parent store for the contacts + * @return a new instance of this class + */ + static CMultipleReadCmd* NewLC( CBasicStore& aBasicStore ); + + /** + * Two-phased constructor. + * @param aBasicStore the parent store for the contacts + * @param aFirstIndexToRead the first ETel index to read ( >=1 ) + * @param aLastIndexToRead the last ETel index to read + * @return a new instance of this class + */ + static CMultipleReadCmd* NewLC( CBasicStore& aBasicStore, + TInt aFirstIndexToRead, TInt aLastIndexToRead ); + + /** + * Two-phased constructor. + * + * This constructor is for the case that command is created before + * the index is known. + * @param aBasicStore the parent store for the contacts + * @param aIndexToRead a reference to the index to read + * @return a new instance of this class + */ + static CMultipleReadCmd* NewLC( CBasicStore& aBasicStore, + TInt& aIndexToRead ); + + /** + * Destructor. + */ + virtual ~CMultipleReadCmd(); + + public: // Functions from base classes + + /** + * From MVPbkSimCommand + */ + void Execute(); + + /** + * From MVPbkSimCommand + */ + void AddObserverL( MVPbkSimCommandObserver& aObserver ); + + /** + * From MVPbkSimCommand + */ + void CancelCmd(); + + private: // Functions from base classes + /** + * From CActive + */ + void RunL(); + + /** + * From CActive + */ + void DoCancel(); + + /** + * From CActive + */ + TInt RunError( TInt aError ); + + private: // Construction + + /** + * C++ constructor. + */ + CMultipleReadCmd( CBasicStore& aBasicStore, + TInt aFirstIndexToRead, TInt aLastIndexToRead ); + + /** + * C++ constructor. + */ + CMultipleReadCmd( CBasicStore& aBasicStore, + TInt& aIndexToRead ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + private: // New functions + /// Completes the active object with given result + void DoDummyRequest( TInt aResult ); + /// Does the ETel request + void DoRequest(); + /// Checks that is buffer growing without control + TBool IsBufferSizeInSane(); + /// Enlarges the buffer if it wasn't big enough + void EnlargeBufferL(); + /// Converts contact from buffer + void ConvertContactsL(); + /// Returns ETrue if buffer was big enough + TBool WasBufferBigEnough(); + /// Inserts contacts to contact array + void UpdateContactArrayL(); + /// Fills buffer with zeros and sets the length to zero + void ResetBuffer(); + + private: // Data + /// The parent store + CBasicStore& iBasicStore; + /// The first ETel index to read, minimum is 1, not zero. + TInt iFirstIndexToRead; + /// The amount contacts that is tried to read at once + TInt iLastIndexToRead; + /// The index to read in the case the index is not known when + /// the command is created. + const TInt& iIndexToRead; + /// Own: a buffer for ETel contacts + HBufC8* iBuffer; + /// A pointer to the buffer + TPtr8 iBufferPtr; + /// Own: converts ETel contacts to own format + CVPbkETelCntConverter* iCntConverter; + /// an array for the contacts. Owns contact until contact array + /// takes the ownership + RPointerArray iCntArray; + /// Ref: only one observer supported + MVPbkSimCommandObserver* iObserver; + }; +} // namespace VPbkSimStoreImpl +#endif // VPBKSIMSTOREIMPL_CMULTIPLEREADCMD_H + +// End of File