upnpsharing/upnpcontentserver/inc/upnpcontentsharingao.h
changeset 0 7f85d04be362
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpsharing/upnpcontentserver/inc/upnpcontentsharingao.h	Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,560 @@
+/*
+* Copyright (c) 2006-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:      file sharing engine active object class defition
+ *
+*/
+
+
+
+
+
+
+
+#ifndef __UPNPCONTENTSHARINGAO_H__
+#define __UPNPCONTENTSHARINGAO_H__
+
+
+// Include Files
+#include <e32base.h>
+#include <badesca.h>  //for CDesCArray
+#include <upnpmediaserverclient.h>
+#include <upnpbrowsecriteria.h>
+#include <upnpcontainerlist.h>
+#include "upnpplaylistservices.h"
+#include "upnpalbumservices.h"
+#include "upnpselectionwriter.h"
+#include "upnpsharingcallback.h"
+#include "upnpcontentserverdefs.h"
+#include "upnpcontentmetadatautility.h"
+
+// FORWARD DECLARATIONS
+class CUPnPFileSharingEngine;
+class CUpnpContainer;
+class CUpnpObject;
+class CUpnpFileSharing;
+class CUpnpItemList;
+class CUpnpSelectionWriter;
+class CUpnpContentMetadataUtility;
+class MUpnpSharingCallback;
+
+
+// CLASS DECLARATION
+/**
+
+*  Active object class for file sharing
+*  @since S60 3.1
+*/
+NONSHARABLE_CLASS( CUpnpContentSharingAo ): public CActive
+    {
+    /**
+     * Enumeration for different sharing types
+     */
+    enum TSharingType
+        {
+        ESharing,
+        EUnsharing
+        };
+
+    /**
+     * States of this active object
+     */
+    enum TUPnPSharingState
+        {
+        ENotActive,
+        EShareFiles,
+        EStartSharing,
+        EStopSharing,
+        EUnshareMainContainers,
+        EShareMainContainers,
+        // 2.0
+        EValidateDefaultContainers,
+        EGetSharedContainers,
+        EGetSharedItems,//8
+        EUnshareContainers,
+        EUnshareContainersResult,
+        EUnshareItems,//11
+        EShareDefaultContainers,
+        EShareDefaultContainersResult,
+        EShareContainers,
+        EShareContainersResult,
+        EShareItems, //16
+        EShareItemsResult,
+        EShareAllItems,//18
+        EShareAllItemsResult,
+        ECompleteSharingRequest,
+        EEnumerateSelections
+        };
+
+    /**
+     * Sub states of this active object
+     */
+    enum TUpnpSharingSubState
+        {
+        EIdle,
+        EProfileItemList,
+        EProfileItemListResult,
+        EShareItemList,
+        EShareItemListResult
+        };
+
+ public: // Constructors and destructor
+
+    /**
+     * Two-phased constructor.
+     * @since S60 3.1
+     * @param aEngine Callback to handler
+     * @param aMetadata Pointer to CLF API
+     */
+    static CUpnpContentSharingAo* NewL(
+        MUpnpSharingCallback* aEngine,
+        CUpnpContentMetadataUtility* aMetadata );
+
+    /**
+     * Destructor.
+     * @since S60 3.1
+     */
+    virtual ~CUpnpContentSharingAo();
+
+ protected:
+
+    /**
+     * Function is called when active request is ready
+     * @since S60 3.1
+     */
+    virtual void RunL();
+
+    /**
+     * Cancels active request
+     * @since S60 3.1
+     */
+    virtual void DoCancel();
+
+    /**
+     * Handle leaves from RunL
+     * @since S60 3.1
+     */
+    TInt RunError( TInt aError );
+
+ public: // new functions
+
+    /**
+     * Initialize parameters needed in sharing
+     * @since S60 3.2
+     * @param aContainerType Type of sharing ongoing
+     * @param aCurrentSelection Array of album/playlist selections
+     * @param aPlaylistIds Ids of collections
+     * @param aPlaylistNames names of collections
+     * @param aClientStatus Clients TRequestStatus
+     */
+    void InitializeL(
+        TUpnpMediaType aContainerType,
+        const RArray<TInt>& aCurrentSelection,
+        CDesCArray& aPlaylistIds,
+        CDesCArray& aPlaylistNames,
+        const TInt aContainerId );
+
+    /**
+     * Starts file sharing process
+     * @since S60 3.1
+     */
+    void ShareFiles( );
+
+
+    /**
+     * Return the number of shared items in current selection
+     * @since S60 3.1
+     * @param aContainerType Type of selections
+     * @return TInt Object count
+     */
+    TInt SelectionObjectCountL(
+        const TUpnpMediaType aContainerType );
+
+    /**
+     * Return progress of the current sharing operation and type of sharing
+     * Progress is shown as procents
+     * @since S60 3.1
+     * @param aContainerType Type of the sharing requested
+     * @return the progress value
+     */
+    TInt SharingProgress(
+        TUpnpMediaType& aContainerType ) const;
+
+    /**
+     * From CActive
+     * @since S60 3.1
+     */
+    TBool IsActive() const;
+
+    /**
+     * Request this active ocject to stop as soon as is possible
+     * Stop is indicated to client via callback
+     * @since S60 3.1
+     * @param aStopType Type of stop operation
+     */
+    void RequestStop( MUpnpSharingCallback::TSharingStopType aStopType );
+
+
+ private:
+
+    /**
+     * C++ default constructor.
+     * @since S60 3.1
+     * @param aEngine Pointer to handler callback
+     * @param aMetadata Pointer to CLF API
+     */
+    CUpnpContentSharingAo( MUpnpSharingCallback* aEngine,
+                           CUpnpContentMetadataUtility* aMetadata );
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     * @since S60 3.1
+     */
+    void ConstructL();
+
+    /**
+     * Opens mediaserver and file sharing session
+     * @since S60 3.1
+     * @return TInt, KErrNone if connection is ok
+     *               error code otherwise
+     */
+    TInt OpenFileSharingSession();
+
+    /**
+     * Closes file sharing and mediaserver session
+     * @since S60 3.1
+     */
+    void CloseFileSharingSession();
+
+    /**
+     * Create container
+     * @since S60 3.1
+     * @param aContainerType Type of container to create
+     * @param aTitle Title of the container
+     */
+    CUpnpContainer* CreateContainerL( TUpnpMediaType aContainerType,
+                                      const TDesC8& aTitle ) const;
+
+    /**
+     * Connects to media server
+     * @since S60 3.1
+     */
+    TInt ConnectMediaServer();
+
+    /**
+     * Processes containers to unshare
+     * @since S60 3.1
+     */
+    void UnshareContainersL();
+
+    /**
+     * Adjust the value iShareAllSelection on basis of user selections
+     * @since S60 3.1
+     * @param aSelections The selections received from UI
+     */
+    void AdjustShareAllSelection(
+        const RArray<TInt>& aSelections );
+
+    /**
+     * Share the current container, iContainer
+     * @since S60 3.1
+     */
+    void ShareContainersL();
+
+    /**
+     * Shares the current set of items, iItemList
+     * @since S60 3.1
+     */
+    void ShareItemsL();
+
+
+    /**
+     * Process the result of the container sharing operation
+     * @since S60 3.1
+     */
+    void ShareContainersResultL();
+
+    /**
+     * Process the result of items sharing operation
+     * @since S60 3.1
+     */
+    void ShareItemsResultL();
+
+    /**
+     * Share individual items, not in any album/playlist
+     * @since S60 3.1
+     */
+    void ShareAllItemsL();
+
+    /**
+     * Process the result of sharing individual items
+     * @since S60 3.1
+     */
+    void AllItemsResultL();
+
+    /**
+     * Calculate correct index for indexing CLF on basis of
+     * iCurrentSelection and iShareAllSelection
+     * Verifies that the container selections user has made are valid against 
+     * current CLF / playlist content
+     * @since S60 3.1
+     * @return Index as TInt, KErrNotFound if the selection is not valid
+     */
+    TInt GetContainerIndexL();
+
+    /**
+     * Complete own request
+     * @since S60 3.1
+     */
+    void SelfComplete( const TInt aError );
+
+    /**
+     * Appends image files to iItemList. Starts from index iImageIndex and 
+     * appends maximum of KContentDirCommitAmount items. Updates iImageIndex.
+     * @since S60 3.1
+     */
+    void AppendImageFilesToListL();
+    
+    /**
+     * Appends video files to iItemList. Starts from index iVideoIndex and 
+     * appends maximum of KContentDirCommitAmount items. Updates iVideoIndex.
+     * @since S60 3.1
+     */
+    void AppendVideoFilesToListL();
+
+    /**
+     * Profiles list of items
+     * @since S60 3.1
+     */
+    void ProfileItemListL();
+
+    /**
+     * Handles the result of profiling single item
+     * @since S60 3.1
+     */
+    void ProfileItemListResult();
+
+    /**
+     * Shares list of UpnpItems
+     * @since S60 3.1
+     */
+    void ShareItemListL( const TInt& aParentId );
+
+    /**
+     * Handles the result of ShareItemListL()
+     * @since S60 3.1
+     */
+    void ShareItemListResultL();
+
+    /**
+     * Determines next state according to iSharingSubState variable
+     * @since S60 3.1
+     */
+    void HandleSharingSubstatesL();
+
+    /**
+     * Find a conatiner name from available containers on basis of id 
+     * @since S60 3.1
+     * @param aId Id to search
+     * @param aPlaylistName Name of playlist pointed by id
+     * @param aContainerType Type of the container
+     */
+    TInt GetContainerNameByIdL( const TDesC& aId, TDes8& aPlaylistName, 
+                                const TInt aContainerType );
+    
+    /**
+     * When delete the iItenList Item pointer,
+     * also delete the CUpnpObject object the pointer pointed. 
+     */
+    void DeleteListUpnpObject();
+    
+ private: // data
+
+    /**
+     * Pointer to calling handler
+     * not owned
+     */
+    MUpnpSharingCallback*         iEngine;
+
+    /**
+     * main level container index
+     */
+    TInt                            iContainerIdx;
+
+    /**
+     * object level container index
+     */
+    TInt                            iObjectIdx;
+
+    /**
+     * mediaserver session handle
+     */
+    RUpnpMediaServerClient            iMediaServer;
+
+    /**
+     * Media server API to share files
+     * owned
+     */
+    CUpnpFileSharing*                 iFileSharing;
+
+    /**
+     * Type of container to be unshared; Music or Images & video
+     */
+    TUpnpMediaType             iContainerType;
+
+    /**
+     * Indicates whether the starting sharing or stopping
+     * sharing is ongoing.
+     */
+    TInt                            iSharingState;
+
+    /**
+     * Container holder to use when sharing containers
+     * owned
+     */
+    CUpnpContainer* iTmpContainer;
+
+    /**
+     * item holder used during sharing items
+     * owned
+     */
+    CUpnpItem*      iTmpItem;
+
+    /**
+     * Structure used to hold multiple items during sharing
+     * owned
+     */
+    CUpnpItemList*                  iItemList;
+
+    /**
+     * Indexes relative to queried content in UI
+     * Received when starting sharing ShareFilesL
+     */
+    RArray<TInt> iCurrentSelections;
+
+    /**
+     * The IDs of the shared containers will appear here
+     * owned
+     */
+    CArrayFix<TInt>*                    iSharedContainerIds;
+
+    /**
+     * Id of the default container to where share
+     * Obtained from handler
+     */
+    TInt iContainerId;
+
+    /**
+     * The type of sharing: EShareNone, EShareAll, EShareMany
+     */
+    TInt iShareAllSelection;
+
+    /**
+     * Utility class for CLF
+     * owned
+     */
+    CUpnpContentMetadataUtility*        iMetadataUtility;
+
+    /**
+     * The number of succesfully shared items( containers not incl.)
+     */
+    TInt iSharedContainersCount;
+
+    /**
+     * Class handling the updating of the shared items
+     * owned
+     */
+    CUpnpSelectionWriter* iWriter;
+
+    /**
+     * Progress of the sharing process
+     */
+    TInt iSharingProgress;
+
+    /**
+     * Are all images already shared?
+     */
+    TBool iAllImagesShared;
+    
+    /**
+     * Are all videos already shared?
+     */
+    TBool iAllVideosShared;
+    
+    /**
+     * iImageIndex indicates up to which index is image sharing done so far.
+     */
+    TInt iImageIndex;
+
+    /**
+     * iVideoIndex indicates up to which index is video sharing done so far.
+     */
+    TInt iVideoIndex;
+
+    /**
+     * Possbile states when processing items. See TUpnpSharingSubState
+     */
+    TInt iSharingSubState;
+
+    /**
+     * Index used during profiling
+     */
+    TInt iProfileInd;
+
+    /**
+     * Array holding filenames of items to be shared
+     */
+    CDesCArray* iFileNameArr;
+
+    /**
+     * Flag indicating if there is profiling ongoing
+     */
+    TBool iProfilerActive;
+
+    /**
+     * Flag indicating if there if the destructor is called
+     */
+    TBool iDeletePending;
+
+    /**
+     * Indicates if the client has requested stop
+     * Value is the stop type
+     */
+    TInt iStopRequested;
+
+    /**
+     * Handle to MPX interface
+     */
+    CUPnPPlaylistServices* iPlaylists;
+
+    /**
+     * Handle to MPX interface
+     */
+    CUPnPAlbumServices* iCollections;
+
+    /**
+     * List of playlist ids
+     * Not owned
+     */
+    CDesCArray* iContainerIds;
+    
+    /**
+     * List of playlist names
+     * Not owned
+     */
+    CDesCArray* iContainerNames;
+    };
+
+#endif  // __UPNPCONTENTSHARINGAO_H__
+
+// End of file