diff -r 000000000000 -r ff3acec5bc43 mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbplaylist.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitedbhgplugin/inc/mpxdbplaylist.h Thu Dec 17 08:45:05 2009 +0200 @@ -0,0 +1,335 @@ +/* +* 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 class manages the Playlist table and owns a +* CMPXPlaylistSongs instance for managing the PlaylistSongs and +* PlaylistSongInfo tables. +* +* The Playlist table stores one record for each playlist. +* +* +*/ + + +#ifndef MPXDBPLAYLIST_H +#define MPXDBPLAYLIST_H + +// INCLUDES +#include "mpxdbtable.h" + +// CLASS FORWARDS +class RSqlStatement; +class CMPXDbPlaylistSongs; +class CMPXMedia; +class CMPXMediaArray; + +// CLASS DECLARATION + +/** +* Responsible for managing the playlist tables +* +* @lib MPXDbPlugin.lib +*/ +class MMPXDbPlaylistObserver + { + public: + virtual TInt HandlePlaylistDurationL(TUint32 aPlaylistId) = 0; + }; +class CMPXDbPlaylist : public CMPXDbTable + { + public: + + /** + * Two-phased constructor. + * @param aDbManager database manager to use for database interactions + * @return New CMPXDbPlaylist instance. + */ + static CMPXDbPlaylist* NewL(CMPXDbManager& aDbManager, MMPXDbPlaylistObserver& aObserver); + + /** + * Two-phased constructor. + * @param aDbManager database manager to use for database interactions + * @return New CMPXDbManager instance on the cleanup stack. + */ + static CMPXDbPlaylist* NewLC(CMPXDbManager& aDbManager, MMPXDbPlaylistObserver& aObserver); + + /** + * Destructor + */ + virtual ~CMPXDbPlaylist(); + + public: + + /** + * Add a playlist to the playlist table. If playlist already exists, + * it is updated. + * @param aMedia playlist media to be added to the collection + * @return The unique id of the playlist + */ + TUint32 AddPlaylistL(const CMPXMedia& aMedia); + + /** + * Add one or multiple songs to the playlist. + * @param aPlaylistId identifies the playlist + * @param aMediaArray contains the song information to be added + */ + void AddSongsL(TUint32 aPlaylistId, const CMPXMediaArray& aMediaArray); + + /** + * Update playlist info + * @param aMedia playlist object which contains playlist Id, file path, + * timestamp, etc... to be updated in the playlist table + * @param aMessage change event message for the playlist updated + */ + void UpdatePlaylistL(const CMPXMedia& aMedia, CMPXMessage& aMessage, TInt aDriveId); + + /** + * Update a playlist song + * @param aMedia song info + * @param aResetFlags indicates whether the song db flags should be reset or just updated + * @param aItemChangedMessages returns the change messages for the playlists updated + * @return ETrue if the change is visible in the UI + */ + TBool UpdateSongL(const CMPXMedia& aMedia, TBool aResetFlags, + CMPXMessageArray* aItemChangedMessages = NULL); + + /** + * Remove a playlist and return its URI + * @param aPlaylistId identifies the playlist + * @return HBufC containing the URI. Ownership is transferred. + */ + HBufC* DeletePlaylistL(TUint32 aPlaylistId); + + /** + * Remove a playlist + * @param aPlaylistId identifies the playlist + */ + void DeletePlaylistNoUriL(TUint32 aPlaylistId); + + /** + * Delete a song from the playlist tables. + * @param aSongId identifies the song + * @param aItemChangedMessages returns the item changed messages + */ + void DeleteSongL(TUint32 aSongId, CMPXMessageArray& aItemChangedMessages); + + /** + * Delete a song from the playlist tables. + * @param aPlaylistId identifies the playlist + * @param aSongId identifies the song + * @param aOrdinal song ordinal + */ + void DeleteSongL(TUint32 aPlaylistId, TUint32 aSongId, TInt aOrdinal); + + /** + * Remove all playlists. + */ + void DeleteAllPlaylistsL(); + + /** + * Gets the total number of playlists. + * @return number of playlists + */ + TInt CountL(); + + /** + * Get information on a specified playlist + * @param aPlaylistId identifies the playlist + * @param aAttrs the attributes to include for the playlists found. + * @param aMedia returns the playlist information + */ + void GetPlaylistL(TUint32 aPlaylistId, const TArray& aAttrs, + CMPXMedia& aMedia); + + /** + * Get all playlists + * @param aAttrs the attributes to include for the playlists found. + * @param aMediaArray returns the playlist information + */ + void GetAllPlaylistsL(const TArray& aAttrs, + CMPXMediaArray& aMediaArray); + + /** + * Get the name of a playlist. + * @param aPlaylistId identifies the playlist + * @return name matching the specified playlist ID. Ownership is transferred. + */ + HBufC* GetNameL(TUint32 aPlaylistId); + + /** + * Get a playlist' uri + * @param aPlaylistId identifies the playlist + * @return URI matching the specified playlist ID. Ownership is transferred. + */ + HBufC* GetUriL(TUint32 aPlaylistId); + + /** + * Return the playlist ID for a specified URI. + * @param aUri URI of the playlistId + * @return playlist ID + */ + TUint32 GetIdL(const TDesC& aUri); + + /** + * Find playlist(s) which match(es) the selection criteria + * @param aCriteria selection criteria + * @param aAttrs the attributes to include for the playlist(s) matching the + * selection criteria + * @param aMediaArray playlist(s) matching the selection criteria + */ + void FindAllL(const CMPXMedia& aCriteria, const TArray& aAttrs, + CMPXMediaArray& aMediaArray); + + /** + * Find the drive Id for a playlist + * @param aPlaylistId identifies the playlist + * @return corresponding drive id + */ + TInt GetDriveIdL(TUint32 aPlaylistId); + + /** + * Provides access to the songs for the current playlist. + * @return CMPXDbPlaylistSongs reference to be used to access the songs + */ + CMPXDbPlaylistSongs& Songs(); + + /** + * Returns the playlist count for a given drive + * @param aDrive drive + * @return the count + */ + TUint GetDrivePlaylistCountL(TInt aDrive); + + /** + * Get URIs for a given number of playlists + * @param aDrive, specifies drive number for db selection + * @param aFromID, specifies unique ID of last record retrieved + * @param aRecords, specifies the number of records to get + * @param aUriArr, will contain all URIs on return + * @param aLastID, will contain unique ID of a last record in the array + */ + void GetPlaylistUriArrayL(TInt aDrive, TInt aFromID, TInt aRecords, + CDesCArray& aUriArr, TInt& aLastID); + + private: + + /** + * Update the media with information found in the Playlist table + * @param aRecord playlist table + * @param aAttrs the attributes to include for the playlist matching the + * selection criteria + * @param aMedia returns playlist details + */ + void UpdateMediaL(RSqlStatement& aRecord, const TArray& aAttrs, + CMPXMedia& aMedia); + + /** + * Create playlist table view and have the current row point to aPlaylistId + * @param aPlaylistId ID of the playlist to match + * @return RSqlStatement with row pointing to selected aPlaylistId + * Function leaves with KErrNotFound if RSqlStatement is unable to initialize + * or row cannot be found + */ + RSqlStatement GetPlaylistRecordL(TUint32 aPlaylistId); + + /** + * Add a new playlist + * @param aMedia contains the playlist info + * @param aDriveId drive to add the playlist to + * @return ID of the new playlist + */ + TUint32 DoAddPlaylistL(const CMPXMedia& aMedia, TInt aDriveId); + + /** + * Update a playlist + * @param aPlaylistId identifies the playlist + * @param aMedia contains the playlist info + * @param aDriveId drive to add the playlist to + * @param aMessage change event message for the playlist updated + */ + void DoUpdatePlaylistL(TUint32 aPlaylistId, const CMPXMedia& aMedia, TInt aDriveId, + CMPXMessage& aMessage); + + /** + * Sets the Time field for all playlists that contain the specified song to the + * current time + * @param aSongId identifies the song + * @param aItemChangedMessages if not NULL item changed messages are added for all + * updated playlists + * @param aSongInPlaylists out parameter that flags if the song is part of a playlist or not + */ + void UpdatePlaylistsForSongL(TUint32 aSongId, CMPXMessageArray* aItemChangedMessages,TBool &aSongInPlaylists); + + /** + * Sets the Time field for a playlist to the current time. + * @param aPlaylistId identifies the playlist + * @param aDrive playlist drive + */ + void UpdatePlaylistTimeL(TUint32 aPlaylistId, TInt aDrive); + + TInt GetDrivePlaylistDuration(TUint32 aPlaylistId); + private: // from MMPXTable + + /** + * @see MMPXTable + */ + virtual void CreateTableL(RSqlDatabase& aDatabase, TBool aCorruptTable); + + /** + * @see MMPXTable + */ + virtual void DropTableL(RSqlDatabase& aDatabase); + + /** + * @see MMPXTable + */ + virtual TBool CheckTableL(RSqlDatabase& aDatabase); + + private: + + /** + * C++ constructor + * @param aDbManager database manager to use for database interactions + */ + CMPXDbPlaylist(CMPXDbManager& aDbManager, MMPXDbPlaylistObserver& aObserver); + + /** + * Second phase constructor + */ + void ConstructL(); + + private: + + /** + * Column indexes in the playlist table + */ + enum TPlaylistColumns + { + EPlaylistUniqueId = KMPXTableDefaultIndex, + EPlaylistVolumeId, + EPlaylistDbFlag, + EPlaylistSync, + EPlaylistName, + EPlaylistUri, + EPlaylistTime + }; + + private: // Data + + CMPXDbPlaylistSongs* iPlaylistSongs; + MMPXDbPlaylistObserver& iObserver; + }; + +#endif // MPXDBPLAYLIST_H + +// End of File