mmappcomponents/harvester/server/inc/mpxharvesterengine.h
changeset 0 a2952bb97e68
child 19 51035f0751c2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappcomponents/harvester/server/inc/mpxharvesterengine.h	Thu Dec 17 08:55:47 2009 +0200
@@ -0,0 +1,325 @@
+/*
+* 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:  Harvester Engine to handle file and system related events
+*
+*/
+
+
+#ifndef CHARVESTERENGINE_H
+#define CHARVESTERENGINE_H
+
+#include <e32base.h>
+#include <f32file.h>
+#include <bamdesca.h>
+#include <mpxcollectionobserver.h>
+#include <mpxtaskqueueobserver.h>
+#include <mpxplaylistengineobserver.h>
+#include "mpxsystemeventobserver.h"
+
+// FORWARD DECLARATIONS
+class CMPXHarvesterFileHandler;
+class CMPXFsFormatMonitor;
+class CMPXMediaRemovalMonitor;
+class CMPXUsbEventHandler;
+class CMPXMMCEjectMonitor;
+class CMPXMedia;
+class CMPXActiveTaskQueue;
+class CMPXPlaylistEngine;
+class MMPXHarvesterEngineObserver;
+class MMPXCollectionUtility;
+class RHvsMsg;
+
+/**
+ *  Harvester engine to monitor for file system events
+ *
+ *  @lib mpxharvesterserver.exe
+ *  @since S60 S60_version 3.0
+ */
+NONSHARABLE_CLASS( CMPXHarvesterEngine ) : public CBase,
+                                           public MMPXSystemEventObserver,
+                                           public MMPXTaskQueueObserver,
+                                           public MMPXPlaylistEngineObserver
+    {
+public:
+
+    /**
+    * Two-phase constructor
+    */
+    static CMPXHarvesterEngine* NewL();
+
+    /**
+    * Virtual destructor
+    */
+    virtual ~CMPXHarvesterEngine();
+
+public:  // New Functions
+
+    /**
+    * Initiates a scan of the file system
+    */
+    void ScanL();
+
+    /**
+    * Cancels a scan of the file system
+    */
+    void CancelScan();
+
+    /**
+    * Add a song to the harvester db, asyncrhonous
+    * @param aMsg Message struct for the add file
+    * @param aFile path to the file
+    * @param aObs observer to the add event,
+    *        callback with CompleteTask() on completion
+    */
+    void AddFileL( RHvsMsg* aMsg, const TDesC& aFile, MMPXHarvesterEngineObserver* aObs );
+
+    /**
+    * Add a song to the harvester db
+    * @param aMedia, media to add
+    * @return collection ID
+    */
+    TInt AddFileL( CMPXMedia*& aMedia );
+
+    /**
+    * Get media for song, asyncrhonous
+    * @param aMsg Message struct for the add file
+    * @param aFile path to the file
+    * @param aObs observer to the add event,
+    *        callback with CompleteTask() on completion
+    */
+    void GetMediaL( RHvsMsg* aMsg, const TDesC& aFile, MMPXHarvesterEngineObserver* aObs );
+
+    /**
+    * Get Collection id for the song
+    * @param aFile path to the file
+    * @return collection ID
+    */
+    TInt GetColUidL( const TDesC& aFile );
+
+    /**
+    * Remove a song from the harvester db
+    * @param aFile path to the file
+    * @param aDelete, do we want to delete the file from FS
+    * @return the Collection ID of the removed file
+    */
+    TInt RemoveFileL( const TDesC& aFile, TBool aDelete, TBool aEndTransaction=ETrue);
+
+    /**
+    * Removes multiple songs from the harvester db
+    * @param aArray list of files to delete
+    * @param aDelete, do we want to delete the file from FS
+    */
+    void RemoveMultipleFilesL( const MDesCArray& aArray, TBool aDelete, TBool aEndTransaction );
+
+    /**
+    * Remove all songs from the harvester db
+    */
+    void RemoveAllFilesL();
+
+    /**
+    * Update a file
+    * @param aFile, File name
+    * @param aCollection, Collection ID
+    */
+    void UpdateFileL( const TDesC& aFile, TInt aCollection );
+
+    /**
+    * Rename a file
+    * @param aOldPath original file path
+    * @param aNewPath new file path
+    * @param aCollection Collection ID
+    */
+    void RenameFileL( const TDesC& aOldPath, const TDesC& aNewPath, TInt aCollection );
+
+    /**
+    * Finds the collection ID based on a File name
+    * @param aFile, file name to lookup
+    * @return the collection ID
+    */
+    TInt FindCollectionIdL( const TDesC& aFile );
+
+    /**
+    * Exports a playlist based on the message
+    * @param aMessage containing the task
+    * @param aObs observer to the export event
+    *        callback to HandleImportCompleteL() on completion
+    */
+    void ExportPlaylistL( RHvsMsg* aMessage,
+                          MMPXHarvesterEngineObserver* aObs );
+
+    /**
+    * Import a playlist based on the message
+    * @param aMessage containing the task
+    * @param aObs observer callback
+    *             callback to HandleExportCompleteL() on completion
+    */
+    void ImportPlaylistL( RHvsMsg* aMessage,
+                          MMPXHarvesterEngineObserver* aObs );
+
+    /**
+    * Async method to import a file (playlist or media )
+    * @param aMessage containing the task
+    * @param aObs, observer callback
+    */
+    void ImportFileL( RHvsMsg* aMessage,
+                      MMPXHarvesterEngineObserver* aObs );
+
+    /**
+    * Query the required attributes for tracks for the specified playlist type
+    * @param aPlaylistType typ of playlist to check for required attriubtes
+    * @return list of required attributes for a playlist
+    */
+    const TArray<TMPXAttribute> RequiredAttributesL(TInt aPlaylistType) const;
+
+    /**
+    * Query the optional attributes for tracks for the specified playlist type
+    * @param aPlaylistType typ of playlist to check for optional attriubtes
+    * @return list of required attributes for a playlist
+    */
+    const TArray<TMPXAttribute> OptionalAttributesL(TInt aPlaylistType) const;
+
+    /**
+    * Query about the file extension the playlist plugin for the given type
+    * supports
+    * @return file extension which includes the period
+    */
+    const TDesC& PlaylistFileExtensionL(TInt aPlaylistType) const;
+
+    /**
+    * Determines if the given file is a playlist
+    * @param aFile file path of the file to be tested
+    * @return ETrue if it's a playlist otherwise EFalse
+    */
+    TBool IsPlaylistL( const TDesC& aFile );
+
+    /**
+    * Recreate the harvester database if corruption is detected
+    * note: all dbs are re-created for accuracy and simplicity
+    */
+    void RecreateDatabases();
+
+    /**
+    * Polls for system events
+    * If an event occurs, it will br broadcasted to the rest of the MPX framework
+    */
+    void CheckForSystemEvents();
+
+    /**
+    * Close the database transaction
+    */
+    void CloseTransactionL();
+
+protected:  // From Base Class
+
+    /*
+    * From MMPXSystemEventObserver
+    */
+    void HandleSystemEventL( TSystemEvent aEvent, TInt aData );
+
+    /*
+    * From MMPXTaskQueueObserver
+    */
+    void ExecuteTask(TInt aTask,
+                     TInt aParamData,
+                     TAny* aPtrData,
+                     const CBufBase& aBuf,
+                     TAny* aCallback,
+                     CBase* aCObject1,
+                     CBase* aCObject2);
+
+    /*
+    * From MMPXTaskQueueObserver
+    */
+    void HandleTaskError(
+        TInt aTask,
+        TAny* aPtrData,
+        TAny* aCallback,
+        TInt aError);
+
+     /*
+     * From MMPXPlaylistEngineObserver
+     */
+     void HandlePlaylistL(CMPXMedia* aPlaylist,
+                          const TInt aError,
+                          const TBool aCompleted );
+
+     /*
+     * From MMPXPlaylistEngineObserver
+     */
+     void HandlePlaylistL(const TDesC& aPlaylistUri,
+                          const TInt aError);
+
+private:  // New functions
+
+    /**
+    * Handles exporting a playlist
+    * @param aMsg, RMessage to handle
+    */
+    void DoExportPlaylistL( RHvsMsg* aMsg );
+
+    /**
+    * Handles importing a playlist
+    * @param aMsg, RMessage to handle
+    */
+    void DoImportPlaylistL( RHvsMsg* aMsg );
+
+    /**
+    * Handles importing a file
+    * @param aMsg, RMessage to handle
+    */
+    void DoImportFileL( RHvsMsg* aMsg );
+
+    /**
+    * Stop playback synchronously
+    */
+    void DoStopPlaybackL();
+
+private:
+
+    /**
+    *  C++ constructor
+    */
+    CMPXHarvesterEngine();
+
+    /**
+    * 2nd-phase constructor
+    */
+    void ConstructL();
+
+private: // data
+    RFs   iFsSession;    // Session to File System
+
+    CMPXHarvesterFileHandler* iFileHandler;
+
+    // Move to RPointerArrays of monitors in the future
+    CMPXFsFormatMonitor*      iFormatMonitor;
+    CMPXMediaRemovalMonitor*  iMediaRemovalMonitor;
+    CMPXUsbEventHandler*      iUSBMonitor;
+    CMPXMMCEjectMonitor*      iMMCMonitor;
+
+    // Internal task queue for async operations
+    CMPXActiveTaskQueue*      iTaskQueue;
+
+    // Playlist engine
+    CMPXPlaylistEngine*       iPlaylistEngine;
+
+    // Async op details
+    TMPXHarvesterServerOp     iCurAsyncOp;
+
+    // Temporary variable, avoid msg queue already exist problems
+    MMPXCollectionUtility*    iTempCollectionUtil;
+    TBool                     iDiskOpActive;
+    };
+
+#endif // CHARVESTERENGINE_H