diff -r 000000000000 -r 7f85d04be362 upnpharvester/cdssync/cdssynclib/inc/cdssyncimplsql.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/upnpharvester/cdssync/cdssynclib/inc/cdssyncimplsql.h Thu Dec 17 08:52:00 2009 +0200 @@ -0,0 +1,596 @@ +/* +* Copyright (c) 2008 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: Cds Sync Implementation Header +* +*/ + + + + + + + +#ifndef __CDSSYNCIMPL_H__ +#define __CDSSYNCIMPL_H__ + +#include +#include +#include +#include "cdssync.h" +#include +#include + +// Forward declarations +class CCdsSyncSqlAo; +class MCmSqlMain; +class CCmSqlPropertyItem; +class CCmSqlGenericItem; +class CCmSqlBaseItem; + +typedef RPointerArray CCmSqlPropertyItemArray; + +using namespace Xml; + +/** + * CItemResource class definition + * + * @lib cdssync.lib + * @since S60 5.1 + */ +NONSHARABLE_CLASS( CItemResource ) : public CBase +{ +public: + + /** + * Two-phased constructor. + */ + static CItemResource* NewLC(); + + /** + * Two-phased constructor. + */ + static CItemResource* NewL(); + + /** + * Destructor + */ + virtual ~CItemResource(); + +private: + /** + * Performs the first phase of two phase construction. + */ + CItemResource(); + + /** + * Performs the second phase construction. + */ + void ConstructL(); + +public: + /** + * Track duration + */ + HBufC8* iDuration; // owned + /** + * Track bitrate + */ + HBufC8* iBitrate; // owned + /** + * File size + */ + HBufC8* iSize; // owned + /** + * Item resolution + */ + HBufC8* iResolution; // owned + /** + * Item uri + */ + HBufC8* iUri; // owned + /** + * Item protocol + */ + HBufC8* iProtocol; // owned +}; + + +/** + * CCdsSyncImpl class definition + * + * @lib cdssync.lib + * + * @since S60 5.1 + */ +class CCdsSyncImpl : public CActive, + public MContentHandler + { + +private: + + // Syncronization status + enum TCdsSyncStatus + { + ECdsSyncIdle, + ECdsSyncInitializing, + ECdsSyncReadyToParse, + ECdsSyncParsing, + ECdsSyncFinalizing + }; + +public: + + /** + * Two-phased constructor. + */ + static CCdsSyncImpl* NewLC(); + + /** + * Two-phased constructor. + */ + static CCdsSyncImpl* NewL(); + + /** + * Destructor + */ + ~CCdsSyncImpl(); + +public: // new functions + + /** + * Initializes data + * + * @Since S60 5.1 + * @param aSourceDataArray, source data + * @param aDeviceId, device id where data is retrieved + * @param aObserver, process observer + * @param aAddGranularity, data granularity + */ + void InitL( RPointerArray& aSourceDataArray, + const TInt& aDeviceId, + MCdsSyncObserver& aObserver, + TInt aAddGranularity); + + /** + * Notifies when data is added + * + * @Since S60 5.1 + * @param aSourceDataComplete, indicates if all source data is added + */ + void NotifySourceDataAddedL( + TBool aSourceDataComplete = EFalse ); + + /** + * Cancels operation and cleans data + * + * @Since S60 5.1 + */ + void ResetL(); + + /** + * Called when operation is completed + * + * @Since S60 5.1 + * @param aErrCode, error code + */ + void OperationsCompleteL( TInt aErrCode ); + + /** + * Notifies observer about progress + * + * @Since S60 5.1 + * @param aItemCount, processed items + */ + void ProgressL( TInt aItemCount ); + + /** + * Returns the chunk count to be processed including current chunk + * + * @Since S60 5.1 + * @return TInt, chunk count + */ + TInt ChunkCount(); + + /** + * Returns successfully processed item count. + * + * @since S60 5.1 + * @return TInt, count of items that has been processed successfully. + */ + TInt ProcessedItemCount(); + + /** + * Sets search index to cds sync + * + * @since S60 5.1 + * @param aSearchIndex, search index + */ + void SetSearchIndex( const TInt aSearchIndex ); + + /** + * Chunk complete callback + * + * @since S60 5.1 + */ + void ChunkCompleteL(); + +// From base class MContentHandler + + /** + * From MContentHandler + * See base class definition + */ + void OnStartDocumentL( const RDocumentParameters& aDocParam, + TInt aErrorCode ); + /** + * From MContentHandler + * See base class definition + */ + void OnEndDocumentL( TInt aErrorCode ); + + /** + * From MContentHandler + * See base class definition + */ + void OnStartElementL( const RTagInfo& aElement, + const RAttributeArray& aAttributes, + TInt aErrorCode ); + + /** + * From MContentHandler + * See base class definition + */ + void OnEndElementL( const RTagInfo& aElement, TInt aErrorCode ); + + /** + * From MContentHandler + * See base class definition + */ + void OnContentL( const TDesC8& aBytes, TInt aErrorCode ); + + /** + * From MContentHandler + * See base class definition + */ + void OnStartPrefixMappingL( const RString& aPrefix, + const RString& aUri, + TInt aErrorCode); + + /** + * From MContentHandler + * See base class definition + */ + void OnEndPrefixMappingL( const RString& aPrefix, TInt aErrorCode ); + + /** + * From MContentHandler + * See base class definition + */ + void OnIgnorableWhiteSpaceL( const TDesC8& aBytes, TInt aErrorCode ); + + /** + * From MContentHandler + * See base class definition + */ + void OnSkippedEntityL( const RString& aName, TInt aErrorCode ); + + /** + * From MContentHandler + * See base class definition + */ + void OnProcessingInstructionL( const TDesC8& aTarget, + const TDesC8& aData, + TInt aErrorCode); + + /** + * From MContentHandler + * See base class definition + */ + void OnError( TInt aErrorCode ); + + /** + * From MContentHandler + * See base class definition + */ + TAny* GetExtendedInterface( const TInt32 aUid ); + +// From base class CActive + + /** + * From CActive + * See base class definition + */ + void RunL(); + + /** + * From CActive + * See base class definition + */ + void DoCancel(); + +private: + + /** + * Performs the first phase of two phase construction. + */ + CCdsSyncImpl(); + + /** + * Performs the second phase construction. + */ + void ConstructL(); + + /** + * Parses profile id + * + * @since S60 5.1 + * @param aItem, item data + * @param aRes, item resource + */ + void ParseProfileIdL( CCmSqlGenericItem& aItem, + const CItemResource& aRes ) const; + + /** + * Starts background parsing + * + * @since S60 5.1 + */ + TInt DoBackgroundParseL(); + + /** + * Background parsing callback + * + * @since S60 5.1 + * @param aCdsSync, observer + */ + static TInt BackgroundParseL( TAny *aCdsSync ); + + /** + * Finds attributes + * + * @since S60 5.1 + * @param aName, local name + * @param aPref, prefix + * @param aAttributes, attribute array + */ + TInt FindAttribute( const TDesC8& aName, + const TDesC8& aPref, + const RAttributeArray& aAttributes ) const; + + /** + * Parses resolution information + * + * @since S60 5.1 + * @param aDes, buffer to be parsed + * @param aWidth, image widht + * @param aHeight, image height + */ + void ParseResolution( const TDesC8& aDes, + TUint& aWidth, + TUint& aHeight ) const; + + /** + * Parses value from descriptor + * + * @since S60 5.1 + * @param aDes, buffer to be parsed + * @return TUInt, parsed value + */ + TUint ParseUint( const TDesC8& aDes ) const; + + /** + * Parses value from descriptor + * + * @since S60 5.1 + * @param aDes, buffer to be parsed + * @return TInt64, parsed value + */ + TInt64 ParseInt64( const TDesC8& aDes ) const; + + /** + * Parses track duration + * + * @since S60 5.1 + * @param aDes, buffer to be parsed + * @return TReal, duration + */ + TReal ParseDuration( const TDesC8& aDes ) const; + + /** + * Parses time + * + * @since S60 5.1 + * @param aDes, buffer to be parsed + * @return TTime, parsed time + */ + TTime ParseTime( const TDesC8& aDes ) const; + + /** + * Calculates hash value + * + * @since S60 5.1 + * @return HBufC, hash value + */ + HBufC8* CalculateHashL() const; + + /** + * Append escpace characters to hash value + * + * @since S60 5.1 + * @param aHash, hash value + * @return HBufC, hash value with escape charachters + */ + HBufC* EscapeHashLC( const TDesC8& aHash ) const; + + /** + * Gets property ID + * + * @since S60 5.1 + * @param aMetadataIndex, index for metadata type table + * @param aValue, property name + * @return TInt64, property id + */ + TInt64 GetPropertyIdL( TInt aMetadataIndex, const TDesC8& aValue ) const; + + /** + * Clears item data + * + * @since S60 5.1 + */ + void CleanItemData(); + + /** + * Removes unchanged items + * + * @since S60 5.1 + */ + void RemoveUnchangedItems(); + + /** + * Parses uri + * + * @since S60 5.1 + */ + void ParseUri(); + +private: + + /** + * Cds Sync observer + */ + MCdsSyncObserver* iObserver; // not owned + /** + * Parser + */ + CParser* iParser; // owned + /** + * Metadata database + */ + MCmSqlMain* iMetadataDb; // owned + /** + * Active object for low priority processing + */ + CIdle* iBackground; // owned + /** + * Cds Sync active object + */ + CCdsSyncSqlAo* iSqlAo; // owned + /** + * Data chuck + */ + HBufC8* iCurrentDocument; // owned + /** + * Sync status + */ + TCdsSyncStatus iState; + /** + * Data buffer + */ + HBufC8* iCurrentContent; // owned + /** + * Item id + */ + HBufC8* iItemId; // owned + /** + * Artist name + */ + HBufC8* iArtist; // owned + /** + * Album name + */ + HBufC8* iAlbum; // owned + /** + * Title + */ + HBufC8* iTitle; // owned + /** + * Album class + */ + HBufC8* iClass; // owned + /** + * Music genre + */ + HBufC8* iGenre; // owned + /** + * Album data + */ + HBufC8* iDate; // owned + /** + * Description field + */ + HBufC8* iDescription; // owned + /** + * Album art + */ + HBufC8* iAlbumArtUri; // owned + /** + * Item resource array + */ + RPointerArray iResources; // items owned + /** + * Flag for indicating that source data is ready + */ + TBool iSourceDataComplete; + /** + * Datachunk index + */ + TInt iChunkIndex; + /** + * Amount of unchanged items + */ + TInt iUnchangedItemCount; + /** + * Hash order + */ + TLinearOrder iHashOrder; + /** + * Name order + */ + TLinearOrder iNameOrder; + /** + * Source data array + */ + RPointerArray* iSourceDataArray; // not owned + /** + * Name array + */ + RPointerArray iNames; // items owned + /** + * Array of items to add + */ + RPointerArray iItemsToAdd; // items owned + /** + * Array of items in the database + */ + RPointerArray iItemsInDb; // items owned + /** + * File server session + */ + RFs iFs; + /** + * Search index + */ + TInt iSearchIndex; + /** + * Count of processed items + */ + TInt iProcessedItems; +#ifdef _DEBUG + /** + * Hash time + */ + TInt64 iHashTime; +#endif // _DEBUG + }; +#endif // __CDSSYNCIMPL_H__