--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/harvester/filehandler/inc/mpxharvesterfilehandlerimp.h Thu Dec 17 08:55:47 2009 +0200
@@ -0,0 +1,440 @@
+/*
+* Copyright (c) 2006 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: File handler class to handle all file related requests
+*
+*/
+
+
+#ifndef CMPXHARVESTERFILEHANDLERIMP_H
+#define CMPXHARVESTERFILEHANDLERIMP_H
+
+#include <f32file.h>
+#include <badesca.h>
+#include <apgcli.h>
+#include <mpxattribute.h>
+#include <DRMEventObserver.h>
+
+#include "mpxfilescanstateobserver.h"
+#include "mpxdbsyncobserver.h"
+#include "mpxfileadditionobserver.h"
+#include "mpxharvesterfilehandler.h"
+#include "mpxmetadatascanobserver.h"
+#include "mpxplaylistscanobserver.h"
+#include "mpxmediatorobserver.h"
+#include "mpxdiskspacewatcher.h"
+#include "mpxdiskspacewatcherobserver.h"
+#include "mpxfoldermonitor.h"
+#include "mpxfoldermonitorobserver.h"
+#include "mpxbrokenlinkcleanupobserver.h"
+
+// FORWARD DECLARATIONS
+class CMPXFolderScanner;
+class CMPXDbSynchronizer;
+class CMPXMetadataScanner;
+class CMPXPlaylistScanner;
+class CMPXBrokenLinkCleanup;
+class CMPXDiskSpaceWatcher;
+class CMPXFolderMonitor;
+class CMPXHarvesterDatabaseManager;
+class CMPXHarvesterDB;
+class CMPXHarvesterDatabaseTable;
+class CMPXHarvesterDbItem;
+class CMPXCollectionType;
+class MMPXCollectionUtility;
+class MMPXCollection;
+class CDRMNotifier;
+
+/**
+ * File handler class to take care of all file related operations
+ *
+ * @lib mpxfilehandler
+ * @since S60 3.0
+ */
+NONSHARABLE_CLASS( CMPXHarvesterFileHandlerImp ) : public CMPXHarvesterFileHandler,
+ public MMPXFileScanStateObserver,
+ public MMPXDbSyncObserver,
+ public MMPXFileAdditionObserver,
+ public MMPXPlaylistScanObserver,
+ public MMPXMetadataScanObserver,
+ public MMPXMediatorObserver,
+ public MMPXDiskSpaceObserver,
+ public MMPXFolderMonitorObserver,
+ public MMPXBrokenLinkObserver,
+ public MDRMEventObserver
+ {
+public:
+
+ /**
+ * Two-Phased Constructor
+ * @param aFs file server session
+ */
+ static CMPXHarvesterFileHandlerImp* NewL( RFs& aFs );
+
+ /**
+ * Virtual destructor
+ */
+ virtual ~CMPXHarvesterFileHandlerImp();
+
+protected: // From Base Class
+
+ /**
+ * From CMPXHarvesterFileHandler
+ */
+ void ScanL();
+
+ /**
+ * From CMPXHarvesterFileHandler
+ */
+ void CancelScan();
+
+ /**
+ * From CMPXHarvesterFileHandler
+ */
+ void HandleSystemEventL( TSystemEvent aEvent,
+ TInt aData );
+
+ /**
+ * From CMPXHarvesterFileHandler
+ */
+ CMPXMedia* AddFileL( const TDesC& aPath );
+
+ /**
+ * From CMPXHarvesterFileHandler
+ */
+ TInt AddFileL( CMPXMedia& aMediaProp );
+
+ /**
+ * From CMPXHarvesterFileHandler
+ */
+ TInt RemoveFileL( const TDesC& aPath, TBool aEndTransaction );
+
+ /**
+ * From CMPXHarvesterFileHandler
+ */
+ void RemoveFilesL( const MDesCArray& aFilePaths );
+
+ /**
+ * From CMPXHarvesterFileHandler
+ */
+ void RemoveAllFilesL();
+
+ /**
+ * From CMPXHarvesterFileHandler
+ */
+ void UpdateFileL( const TDesC& aFile, TInt aCollection );
+
+ /**
+ * From CMPXHarvesterFileHandler
+ */
+ void RenameFileL( const TDesC& aOldPath, const TDesC& aNewPath, TInt aCollection );
+
+ /**
+ * From CMPXHarvesterFileHandler
+ */
+ TInt FindCollectionIdL( const TDesC& aFile );
+
+ /**
+ * From CMPXHarvesterFileHandler
+ */
+ void RecreateDatabases();
+
+ /**
+ * From CMPXHarvesterFileHandler
+ */
+ void CloseTransactionL();
+
+ /**
+ * Get a media object for the file
+ * @param aPath File to add
+ * @return CMPXMedia object for the item pointed to by aPath
+ * ownership transferred
+ */
+ virtual CMPXMedia* GetMediaForFileL( const TDesC& aPath );
+
+ /**
+ * Get Collection Uid for the file
+ * @param aMediaProp Media Property to add
+ * @return TInt collection ID for the item added
+ */
+ virtual TInt GetColUidForFileL( const TDesC& aPath );
+
+ /**
+ * From MMPXFileScanStateObserver
+ */
+ void HandleScanStateCompleteL( TScanState aState, TInt aErr );
+
+ /**
+ * From MMPXDbSyncObserver
+ */
+ void HandleSynchronizationComplete( TInt aErr );
+
+ /**
+ * From MMPXFileAdditionObserver
+ */
+ void HandleFileAdditionL( const TDesC& aFileName,
+ TInt aColIndex,
+ TBool aPlaylist = EFalse ); //lint !e1735
+
+ /**
+ * From MMPXFileAdditionObserver
+ */
+ void HandleOpenDriveL( TDriveNumber aDrive, const TDesC& aFolder );
+
+ /**
+ * From MMPXFIleAdditionObserver
+ */
+ void HandleDirectoryChangedL( const TDesC& aPath );
+
+ /**
+ * From MMPXFileAdditionObserver
+ */
+ TInt IsMediaFileL( const TDesC& aFile );
+
+ /**
+ * From MMPXFileAdditionObserver
+ */
+ TInt IsPlaylistFileL( const TDesC& aFile );
+
+ /**
+ * From MMPXFileAdditionObserver
+ */
+ TBool IsPathBlockedL( const TDesC& aPath );
+
+ /**
+ * From MMPXMetadataScanObserver
+ */
+ void AddFilesToCollectionL( CMPXMediaArray& aMediaArray );
+
+ /**
+ * From MMPXMetadataScanObserver
+ */
+ void UpdatesFilesInCollectionL( CMPXMediaArray& aMediaArray );
+
+ /**
+ * From MMPXMediatorObserver
+ */
+ void HandleMediatorPathUpdatedL( CMPXMedia*& aProperty,
+ TUid aOldPath );
+
+ /**
+ * From MMPXPlaylistScanObserver
+ */
+ void AddPlaylistToCollectionL( CMPXMediaArray& aMediaArray );
+
+ /**
+ * From MMPXPlaylistScanObserver
+ */
+ void UpdatePlaylistToCollectionL( CMPXMediaArray& aMediaArray );
+
+ /**
+ * From MMPXDiskSpaceObserver
+ */
+ void HandleLowDiskEvent( TInt aDrive );
+
+ /**
+ * From MMPXBrokenLinkObserver
+ */
+ void HandleBrokenLinkL( MDesCArray& aFileArray,
+ RArray<TInt>& aColId ,
+ RPointerArray<CMPXHarvesterDB>& aDb,
+ TInt aCount );
+
+ /**
+ * From MDRMEventObserver
+ */
+ void HandleEventL( MDRMEvent* aEvent );
+
+private: // New Functions
+
+ /**
+ * Parses cenrep string (KHarvesterScanPathKey)
+ * to get a list of scan paths
+ */
+ void ParseScanPathL();
+
+ /**
+ * Parse cenrep string (KHarvesterContainerKey)
+ * for a list of containers
+ */
+ void ParseContainersL();
+
+ /**
+ * Parses the auto scan cenrep key
+ * for a list of folders to automatically scan
+ */
+ void ParseAutoScanL();
+
+ /***
+ * Resets the current scan directory and frees memory
+ */
+ void Reset();
+
+ /**
+ * Handles a new item
+ * @param aFileName new file to add
+ */
+ void HandleNewItemL( const TDesC& aFileName );
+
+ /**
+ * Handles broken items
+ */
+ void HandleBrokenItemsL();
+
+ /**
+ * Handles updated items
+ * @param aFile file to update
+ */
+ void HandleUpdatedItemL( const TDesC& aFile );
+
+ /**
+ * Resolves the collection UID for a file
+ * @param aFile file and path to a file for resolution
+ * @return TInt collection ID on return
+ */
+ TInt CollectionForExtensionL( const TDesC& aFile );
+
+ /**
+ * Sets up the internal DB variables for a path
+ * @param aPath path to open a view to the database
+ */
+ void OpenDBForPathL( const TDesC& aPath );
+
+ /**
+ * Final step for the refresh operation
+ * @param aErr error code to complete with
+ */
+ void DoCompleteRefreshL( TInt aErr );
+
+ /**
+ * Perform a command on the collection
+ * @param aCommandId Id of the command
+ * @param aMediaAttribute TMPXAttriubte for the media payload
+ * @param aCollectionId collection to perform the command on
+ * @param aMedia the Media for the command
+ * @param aSync Sync operation or not. (Default ETrue)
+ */
+ void DoCommandL( TInt aCommandId,
+ TUid aCollectionId,
+ const TMPXAttribute& aMediaAttribute,
+ CMPXMedia* aMedia = NULL,
+ TBool aSync = ETrue );
+
+ /**
+ * Remove an item to a collection
+ * @param aMedia, media to add
+ * @param aCollectionId, collection UID
+ */
+ void DoRemoveL( CMPXMedia* aMedia, TUid aCollectionId );
+
+ /**
+ * Verifies if harvester and collection databases are in sync by comparing the number of records
+ * if records counts are different delete harvester db and repopulate it from collection
+ * @return TBool ETrue if synchronization is started, EFalse otherwise
+ */
+ TBool CheckDbInSyncL();
+
+ /**
+ * Get a list of files with DRM flag set from the Harvester DB.
+ * @return list of files
+ */
+ RPointerArray<CMPXHarvesterDbItem>* GetDrmFilesL();
+
+ /**
+ * Verifies if aDrive is ready.
+ * @param aDrive, certain drive name, such as EDRIVEE
+ * @return TBool ETrue if aDrive is ready,otherwise EFalse
+ */
+ TBool IsDriveReady( TDriveNumber aDrive );
+
+public:
+
+ /**
+ * Delayed callback function
+ */
+ static TInt Callback( TAny* aPtr );
+
+ /**
+ * Perform the auto scan
+ */
+ TBool DoAutoScanL();
+
+private:
+
+ /**
+ * Private Constructor
+ */
+ CMPXHarvesterFileHandlerImp( RFs& aFs );
+
+ /**
+ * 2nd Phased Constructor
+ */
+ void ConstructL();
+
+ //helper function used inside CheckDbInSyncL
+ inline TInt GetTrackCountL(TDriveNumber aDrive,TInt aColDbId, TInt aColTable);
+
+private: // data
+ // File scanning related
+ CMPXFolderScanner* iFolderScanner;
+ CMPXDbSynchronizer* iDbSynchronizer;
+ RPointerArray<CMPXDiskSpaceWatcher> iDiskMonitors;
+ RPointerArray<CMPXFolderMonitor> iFolderMonitors; // Multiple drives
+ RPointerArray<CMPXCollectionType> iSupportedTypes;
+ CDesCArray* iContainerTypes;
+ RArray<TPath> iDrivesToScan;
+ RArray<TPath> iFilteredDrivesToScan;
+ RArray<TPath> iPathsToBlock;
+ TBool iOutOfDisk;
+#ifdef RD_MULTIPLE_DRIVE
+ TInt iRemovedDrive;
+#endif // RD_MULTIPLE_DRIVE
+
+ // Metadata related
+ CMPXMetadataScanner* iMetadataScanner;
+ CMPXPlaylistScanner* iPlaylistScanner;
+ CMPXBrokenLinkCleanup* iBrokenLink;
+
+ // Session to the collection
+ // Only valid during a scan
+ //
+ MMPXCollectionUtility* iCollectionUtil;
+
+ // Database related
+ CMPXHarvesterDatabaseManager* iDBManager; // DB manager
+
+ CMPXHarvesterDB* iCurDB; // Current db reference
+ CMPXHarvesterDatabaseTable* iCurTable; // owned, must delete
+ RPointerArray<CMPXHarvesterDbItem>* iCurList; // owned, must delete
+
+ // Misc
+ RFs& iFs;
+ RApaLsSession iAppArc;
+ TInt iAddedCount;
+
+ TBool iRefreshing; // Are we currently refreshing
+ TBool iSynchronizing; // Are we currently synchronizing
+ TInt iRefreshCount; // refresh reference count
+ CPeriodic* iIdle; // Delayed callback
+ RArray<TPath> iAutoScanPaths; // list of auto scanning paths
+
+ TUid iMusicCollectionId;
+ TUid iPodcastCollectionId;
+
+ TBool iDisablePodcasting;
+
+ // DRM
+ CDRMNotifier* iDrmNotifier;
+ };
+
+#endif // CMPXHARVESTERFILEHANDLERIMP_H