--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/inc/vcxmyvideosalbums.h Thu Apr 01 23:22:15 2010 +0300
@@ -0,0 +1,305 @@
+/*
+* 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 the License "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: Albums related collection functionality.
+*/
+
+
+
+#ifndef VCXMYVIDEOSALBUMS_H
+#define VCXMYVIDEOSALBUMS_H
+
+// INCLUDES
+#include <mdequery.h>
+#include "vcxmyvideosmdsdb.h"
+#include "vcxmyvideosalbum.h"
+
+// FORWARD DECLARATIONS
+class CVcxMyVideosMdsDb;
+class CMPXMedia;
+class CVcxMyVideosCollectionPlugin;
+class CVcxMyVideosAlbum;
+
+// CONSTANTS
+
+// CLASS DECLARATION
+
+/**
+* Albums related collection functionality.
+*
+* @lib mpxmyvideoscollectionplugin.lib
+*/
+NONSHARABLE_CLASS(CVcxMyVideosAlbums) : public CBase, public MVcxMyVideosMdsAlbumsObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor
+ * @return object constructed
+ */
+ static CVcxMyVideosAlbums* NewL( CVcxMyVideosCollectionPlugin& aCollectionPlugin );
+
+ /**
+ * Destructor
+ */
+ virtual ~CVcxMyVideosAlbums();
+
+ public: // new methods
+
+ /**
+ * Returns album from iAlbums array by MDS ID. Ownership does not move.
+ *
+ * @param aMdsId MDS ID of the album to get.
+ * @param aPos If given, then the position index in iAlbums is written here.
+ * Ownership does not move.
+ * @return Pointer to album or NULL if not found.
+ */
+ CVcxMyVideosAlbum* Album( TUint32 aMdsId, TInt* aPos = NULL );
+
+ /**
+ * Creates iAlbumList if it doesn't exist yet. The list is populated
+ * from async callback, HandleGetAlbumsResp().
+ */
+ void CreateAlbumListL();
+
+ /**
+ * Fetches MDS IDs from MDS for all videos belonging to albums.
+ * Ie fills iAlbums[*]->iVideoList[*].iMdsId (and iAlbums[*]->iVideoList[*].iRelationMdsId) fields.
+ * Causes several async calls to MDS.
+ */
+ void GetAlbumContentIdsL();
+
+ /**
+ * Adds videos to album.
+ *
+ * @param aCmd See attribute usage from vcxmyvideosdefs.h.
+ */
+ void AddVideosToAlbumL( CMPXMedia* aCmd );
+
+ /**
+ * Removes videos from album.
+ *
+ * @param aCmd See attribute usage from vcxmyvideosdefs.h.
+ */
+ void RemoveVideosFromAlbumL( CMPXMedia* aCmd );
+
+ /**
+ * Adds album to MDS and to this class. KMPXMediaGeneralTitle
+ * should be set in aCmd. Upon completion, the KMPXMediaGeneralId
+ * attribute contains the new MPX item ID. Leaves if could
+ * not add to MDS.
+ *
+ * @param aCmd Command object received from collection client.
+ */
+ void AddAlbumL( CMPXMedia& aCmd );
+
+ /**
+ * Removes albums from MDS. MDS delete events will clean up albums
+ * from this class.
+ *
+ * @param aCmd MPX command received from the client. Contains media array,
+ * which contains medias with album IDs set to KMPXMediaGeneralId.
+ * Ownership does not move.
+ */
+ void RemoveAlbumsFromMdsOnlyL( CMPXMedia* aCmd );
+
+ /**
+ * Removes albums from this object (iAlbumList and iAlbums).
+ * Called from MDS delete event. Album IDs which were removed are
+ * also removed from aAlbumIds array. After the call aAlbumIds
+ * will contain items which were not found and not deleted.
+ * Sends appropriate events to collection client.
+ *
+ * @param aAlbumIds Album IDs to be removed.
+ */
+ void RemoveAlbumsL( RArray<TUint32>& aAlbumIds );
+
+ /**
+ * Removes album from this class (iAlbumList and iAlbums).
+ * Adds event to message list but does not send it.
+ *
+ * @param aMdsIds Album MDS ID to be removed.
+ * @param aCompress If ETrue, then iAlbums is compressed,
+ * otherwise not.
+ * @return ETrue if album was found and removed.
+ */
+ TBool RemoveAlbum( TUint32 aMdsId, TBool aCompress );
+
+ /**
+ * Fetches albums from MDS. This is called from MDS insert event.
+ *
+ * @param aAlbumIds Album IDs to fetch.
+ */
+ void AddAlbumsFromMdsL( RArray<TUint32>& aAlbumIds );
+
+ /**
+ * From MVcxMyVideosMdsAlbumsObserver.
+ * Process albums arriving from MDS. Response to VcxMyVideosMdsAlbums::GetAlbumsL.
+ */
+ void HandleGetAlbumsRespL( CMPXMedia* aAlbumList );
+
+ /**
+ * From MVcxMyVideosMdsAlbumsObserver.
+ * Process content ids arriving from MDS. Response to VcxMyVideosMdsAlbums::GetAlbumContentIdsL.
+ *
+ * @param aAlbumId ID of the album.
+ * @param aAlbumContent Array containing MDS object IDs. This array is the same which
+ * was given in GetAlbumContentIdsL call.
+ */
+ void HandleGetAlbumContentIdsRespL( TUint32 aAlbumId,
+ RArray<TVcxMyVideosAlbumVideo>& aAlbumContentIds );
+
+ /**
+ * From MVcxMyVideosMdsAlbumsObserver.
+ * Response to VcxMyVideosMdsAlbums::GetAlbumsL.
+ * Sends insert events to collection clients.
+ *
+ * @param aAlbumList Pointer to same array which was given in GetAlbums call.
+ */
+ void HandleGetAlbumsResp( CMPXMedia* aAlbumList );
+
+ /**
+ * From MVcxMyVideosMdsAlbumsObserver.
+ * Process content ids arriving from MDS. Response to CVcxMyVideosMdsAlbums::GetAlbumContentIdsL.
+ *
+ * @param aAlbumId ID of the album.
+ * @param aAlbumContent Array containing MDS object IDs. This array is the same which
+ * was given in GetAlbumContentL call.
+ */
+ void HandleGetAlbumContentIdsResp( TUint32 aAlbumId,
+ RArray<TVcxMyVideosAlbumVideo>& aAlbumContentIds );
+
+ /**
+ * From MVcxMyVideosMdsAlbumsObserver.
+ * Process content videos arriving from MDS. Response to CVcxMyVideosMdsAlbums::GetAlbumContentVideosL.
+ *
+ * @param aAlbumId Album ID.
+ * @param aVideoList Media containing media array, array items are videos.
+ * @param aError Error code in case of failure.
+ * @param aFirstNewItemIndex The index of the first new item.
+ * @param aNewItemCount How many new items since the last results.
+ * @param aComplete ETrue is query is complete, EFalse if there is new to come.
+ */
+ void HandleGetAlbumContentVideosResp( TUint32 /*aAlbumId*/, CMPXMedia& /*aVideoList*/,
+ TInt /*aError*/, TInt /*aFirstNewItemIndex*/, TInt /*aNewItemCount*/, TBool /*aComplete*/ ) {}
+
+ /**
+ * From MVcxMyVideosMdsAlbumsObserver.
+ * Response to CVcxMyVideosMdsAlbums::AddVideosToAlbumL.
+ *
+ * @param aCmd Pointer to object which was given in AddVideosToAlbumL
+ * function call. Ownership does not move.
+ * @param aItemArray Item array which was tried to add to MDS.
+ */
+ void HandleAddVideosToAlbumResp( CMPXMedia* aCmd,
+ RPointerArray<CMdEInstanceItem>& aItemArray );
+
+ /**
+ * From MVcxMyVideosMdsAlbumsObserver.
+ * Response to CVcxMyVideosMdsAlbums::RemoveRelationsL.
+ */
+ void HandleRemoveRelationsResp( RArray<TUint32>& aRelationIds,
+ RArray<TUint32>& aResults );
+
+ /**
+ * From MVcxMyVideosMdsAlbumsObserver.
+ * Response to CVcxMyVideosMdsAlbums::RemoveAlbumsL.
+ */
+ void HandleRemoveAlbumsResp( CMPXMedia* aCmd,
+ RArray<TUint32>& aResultIds );
+
+ /**
+ * From MVcxMyVideosMdsAlbumsObserver.
+ * Relation events from MDS. This object is set as an observer at
+ * iCollection.ConstructL, CVcxMyVideosMdsDb::NewL(..,aAlbumsObserver,..).
+ */
+ void HandleRelationEvent( TObserverNotificationType aType,
+ const RArray<TMdERelation>& aRelationArray );
+ private:
+
+ /**
+ * Fills in iAlbums array. This is called when iAlbumList is ready.
+ * Pointers to CVcxMyVideosVideoCache::iVideoList are not filled
+ * in yet.
+ */
+ void CreateAlbumsL();
+
+ /**
+ * Constructor
+ */
+ CVcxMyVideosAlbums( CVcxMyVideosCollectionPlugin& aCollectionPlugin );
+
+ /**
+ * Symbian 2nd phase constructor.
+ */
+ void ConstructL();
+
+ /**
+ * Leaving version of HandleAddVideosToAlbumResp.
+ */
+ void DoHandleAddVideosToAlbumRespL( CMPXMedia* aCmd,
+ RPointerArray<CMdEInstanceItem>& aItemArray );
+
+ public:
+
+ /**
+ * Album list. This is given to client when categorylevel items are requested. Own.
+ * If this is destroyed/edited, then pointers have to be updated in iAlbums.
+ */
+ CMPXMedia* iAlbumList;
+
+ /**
+ * Array containing MDS IDs and pointers to album and video media items.
+ * Album media items are in iAlbumList and video media items are in
+ * CVcxMyVideosVideoCache::iVideoList.
+ */
+ RArray<CVcxMyVideosAlbum*> iAlbums;
+
+ /**
+ * ETrue when iAlbumList is ready and iAlbums contains video IDs.
+ */
+ TBool iAlbumListIsComplete;
+
+ private:
+
+ /**
+ * Owner of this object.
+ */
+ CVcxMyVideosCollectionPlugin& iCollection;
+
+ /**
+ * Used in MDS operations to store MDS video (or relation) IDs.
+ */
+ RArray<TUint32> iMdsOpTargetIds;
+
+ /**
+ * Store album video data during relation deletion. This is to
+ * avoid second search when resp arrives.
+ */
+ RArray<TVcxMyVideosAlbumVideo> iRemoveFromAlbumVideos;
+
+ /**
+ * Used in MDS operations to store operation results. Is in sync with iMdsOpTargetIds.
+ */
+ RArray<TInt> iMdsOpResults;
+
+ /**
+ * Used in MDS operations to store operation results. Is in sync with iMdsOpTargetIds.
+ */
+ RArray<TUint32> iMdsOpResultsUint32;
+
+ };
+
+#endif // VCXMYVIDEOSALBUMS_H
+
+