upnpharvester/mdhserver/inc/server/mdhmediaservercontainer.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:52:00 +0200
changeset 0 7f85d04be362
permissions -rw-r--r--
Revision: 200947 Kit: 200951

/*
* 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:      Metadata Harvester's media server container header
*
*/







#ifndef CMMDHMEDIASERVERCONTAINER_H
#define CMMDHMEDIASERVERCONTAINER_H

//  INCLUDES
#include <e32std.h>
#include <upnpavcontrolpoint.h>

#include "mdhconnectionmonitorobserver.h"
#include "mdhavcpadapter.h"
#include "cmcommon.h"

//  CONSTANTS

_LIT8( KRootContainerId, "0" );
    
_LIT8( KSearchCriteria, 
    "upnp:class derivedfrom &quot;object.item&quot; and @refID exists false");
    
_LIT8( KSearchFilter,    "*" );
_LIT8( KMdhSearchFilter, "dc:title,dc:date,upnp:class,"
    "upnp:album,upnp:artist,upnp:genre,res,upnp:albumArtURI,"
    "res@size,res@duration,@restricted,res@resolution,"
    "res@bitrate" );
    
_LIT8( KSortCriteria,    "" );


// FORWARD DECLARATIONS
class CMdHConnectionMonitor;
class CCmMdhMetadataCollector; 
class CCmMdhServer;
class CCmDmMain;
class CCmSettingsEngine;
class CCmMediaServerFull;
class CCmSearchResponseHash;
class MCmSettings;

// DATA TYPES

enum TCmMdhMediaserverState
    {
    ECmMdhMediaserverSynchronized = 1,
    ECmMdhMediaserverNotSynchronized,
    ECmMdhMediaserverNoSearchCaps
    };

// CLASS DECLARATION
/**
*  CCmMdhMediaserverInfo
*  Encapsulates server information
*
*  @since S60 3.1
*/

class CCmMdhMediaserverInfo : public CBase
    {
    public:
    
        /**
         * Creates new CCmMdhMediaserverInfo class
         * @return  pointer to CCmSmItemInfo class
         */    
        static CCmMdhMediaserverInfo* NewL();
        
        /**
         * Creates new CCmMdhMediaserverInfo class
         * @return  pointer to CCmSmItemInfo class
         */           
        static CCmMdhMediaserverInfo* NewLC();
        
        /**
         * Destructor
         */           
        ~CCmMdhMediaserverInfo();
        
    private:
    
        /**
         * Default constructor
         */              
        CCmMdhMediaserverInfo();
        
        /**
         * ConstructL
         */         
        void ConstructL();
    
    public:
        
        /** Media server identifier */
        HBufC8* iUuid;
        
        /** State of media server */
        TCmMdhMediaserverState iMediaserverState;
        
        /** media server's Systemupdate id */
        TInt iSystemUpdateId;    
    }; 
   
   
// CLASS DECLARATION

/**
*  CCmMdhMediaserverContainer
*  This is a class for metadata harvester server's
*  media server container component
*
*  @since S60 3.1
*/
class CCmMdhMediaserverContainer : public CCmMdhAvControlPointAdapter,
                                   public MMdHConnectionMonitorObserver
    {
    public:  // Constructors and destructor
        
        /**
        * Two-phased constructor.
        */
        static CCmMdhMediaserverContainer* NewL( CCmMdhServer& aMdhServer );
        
        /**
        * Destructor.
        */
        virtual ~CCmMdhMediaserverContainer();
        
    public: // Functions from base classes

        /**
        * Handles UPnP device discoveries.
        * @param aDevice Device that is discovered.
        */
        void DeviceDiscoveredL( CUpnpDevice* aDevice );

        /**
        * Handles UPnP device disappears.
        * @param aDevice Device that disappeared.
        */
        void DeviceDisappearedL( CUpnpDevice* aDevice );   
        
        /**
        * Observer callback for Content Directory Search function.
        * @since Series 60 2.0
        * @param aUuid Source device UUID. 
        * @param aSessionId 
        * @param aErr UPnP error code.
        * @param aContainerId
        * @param aSearchCriteria
        * @param aFilter
        * @param aIndex
        * @param arequest
        * @param aSortCriteria
        * @param aResult
        * @param aReturned
        * @param aMatches
        * @param aUpdateID
        */
        void CdsSearchResponse(
            const TDesC8& aUuid,
            TInt aSessionId,
            TInt aErr,
            const TDesC8& aContainerId,
            const TDesC8& aSearchCriteria,
            const TDesC8& aFilter,
            TInt aIndex,
            TInt aRequest,
            const TDesC8& aSortCriteria,
            const TDesC8& aResult,
            TInt aReturned,
            TInt aMatches,
            const TDesC8& aUpdateID );     
        
        /**
        * Observer callback for Content Directory 
        * GetSearchCapabilities function.
        * @since Series 60 2.0
        * @param aUuid Source device UUID. 
        * @param aSessionId 
        * @param aErr UPnP error code.
        * @param aSearchCaps
        */
        void CdsSearchCapabilitiesResponse(
            const TDesC8& aUuid,
            TInt aSessionId,
            TInt aErr,
            const TDesC8& aSearchCaps );
            
        /**
        * Observer callback for Content Directory 
        * GetSystemUpdateID function.
        * @since Series 60 2.0
        * @param aSessionId 
        * @param aErr UPnP error code.
        * @param aSystemUpdateId
        */
        void CdsSystemUpdateIdResponse(
            const TDesC8& aUuid,
            TInt aSessionId,
            TInt aErr,
            TInt aSystemUpdateId );
        
    
    public: // From MUPnPConnectionMonitorObserver
    
         /**
         * This function will be called when WLan connection is lost
         * for UPnP 
         *
         * @since S60 3.1
         */ 
         virtual void ConnectionLost();
    
             
    public: // New functions
    
        /**
        * Searchs for media servers
        * @since Series 60 2.0
        */
        void SearchMediaserversL();
        
        /**
        * Harvests media servers
        * @since Series 60 2.0
        */
        void HarvestMediaserversL();
        
        /**
        * Static timer callback function
        * @since Series 60 2.0
        * @param aNy media server container instance
        */
        static TInt SearchTimerCompletedL( TAny* aNy );
        
        /**
        * Timer callback function
        * @since Series 60 2.0
        */
        TInt DoSearchTimerCompletedL();
        
        /**
        * Harvest completion callback function
        * @param aErr error code
        * @since Series 60 2.0
        */
        void HarvestCompleteL( TInt aErr );
        
        /**
        * Cancels harvest
        * @since Series 60 2.0
        */
        void CancelSearchL();
        
        /**
        * Cancels search
        * @since Series 60 2.0
        */
        void CancelHarvestL();
        
        /**
        * Gets media server id from database
        * @since Series 60 2.0
        * @param aSearchCaps
        * @return media server id
        */
        TInt IdForMediaServerL( TDesC8& aUuid );
        
        /**
        * Sends progress info
        * @since Series 60 2.0
        * @param aProgress progressed item count
        */
        void SendProgressInfo( TInt aProgress );

        /**
        * Add hash for search response
        * @since S60 3.2
        * @param aMediaServerId, media server id
        * @param aSearchIndex, search index
        * @param aItemCount, item count
        * @param aHash, hash code
        * @return error code
        */        
        TInt AddHashValueForResponseL( TInt aMediaServerId, 
                                       TInt aSearchIndex, 
                                       TInt aItemCount, 
                                       const TDesC8& aHash ); 

        /**
        * Retrieves hash codes for defined media server
        * @since S60 3.2
        * @param aMediaServerId, media server id
        * @param aHashValues, hash codes
        * @return None
        */                                     
        void HashValuesForMediaServerL( TInt aMediaServerId,
            RPointerArray<CCmSearchResponseHash>& aHashValues );

        /**
        * Deletes hash values
        * @since S60 3.2
        * @param aMediaServerId, media server id
        * @param aSearchIndex, search index
        * @return None
        */
        void DeleteOldHashValuesL( const TInt aMediaserverId,
            const TInt aSearchIndex );                        
  
    private:

       /**
        * Constructor.
        */
        CCmMdhMediaserverContainer(CCmMdhServer& aMdhServer);
         
       /**
        * By default Symbian 2nd phase constructor is private.
        */
        void ConstructL();
        
        /**
        * Harvest a media server
        * @since Series 60 2.0
        * @param aMediaServerIndex media server array index
        */
        void DoHarvestMediaserverL( TInt aMediaserverIndex );
        
        
        /**
        * Adds a media server to database if it doesn't exist there
        * @since Series 60 2.0
        * @param aMediaServe media server device object
        * @return whether server is active or not (new servers are not active)
        */
        TBool AddToDbIfNewL( CUpnpDevice& aMediaserver );
        
        /**
        * Decreases pending responses counter and finishes search if ready
        * @since Series 60 2.0
        */
        void DecResponsesAndFinishIfReadyL();
        
        /**
        * Leaving version of method CdsSystemUpdateIdResponse.
        * @since Series 60 3.1
        * @param aErr UPnP error code.
        * @param aSystemUpdateId
        */
        void CdsSystemUpdateIdResponseL(
            const TDesC8& aUuid,
            TInt aErr,
            TInt aSystemUpdateId );

        /**
        * Leaving version of GetSearchCapabilities function.
        * @since Series 60 3.1
        * @param aUuid Source device UUID. 
        * @param aErr UPnP error code.
        * @param aSearchCaps
        */
        void CdsSearchCapabilitiesResponseL(
            const TDesC8& aUuid,
            TInt aErr,
            const TDesC8& aSearchCaps );
            
        /**
        * Leaving version of CdsSearchResponseL function.
        * @since Series 60 3.1
        * @param aUuid Source device UUID. 
        * @param aSessionId 
        * @param aErr UPnP error code.
        * @param aContainerId
        * @param aSearchCriteria
        * @param aFilter
        * @param aIndex
        * @param arequest
        * @param aSortCriteria
        * @param aResult
        * @param aReturned
        * @param aMatches
        * @param aUpdateID
        */
        void CdsSearchResponseL(
            const TDesC8& aUuid,
            TInt aSessionId,
            TInt aErr,
            const TDesC8& aResult,
            TInt aReturned,
            TInt aMatches );  
            
    private:    // Data
    
        // metadata collector container
        CCmMdhMetadataCollector* iMetadataCollector;    // owned
        
        // av control point
        CUpnpAVControlPoint* iAvControlPoint;           // owned
        
        // databse manager
        CCmDmMain* iDbManager;                          // owned
        
        // reference to host server
        CCmMdhServer& iMdhServer;
        
        // Settings engine
        MCmSettings*        iSettings;                  // owned
        
        // Connection monitor
        CMdHConnectionMonitor* iMdHConMon;              // owned
        
        // timer 
        CPeriodic* iTimer;                              // owned
        
        // array for media server information
        RPointerArray<CCmMdhMediaserverInfo> iMediaservers; // items owned
        
        // array of old media servers
        RPointerArray<CCmMediaServerFull> iOldMediaServers; // items owned
        
        TCmProgressInfo iProgressInfo;
        
        // index for storing which media server we are harvesting
        TInt iMediaserverIndex;
        
        TInt iResponsesPending;
        
        TInt iTotalItemCount;
 
        // The IAP that is used
        TInt iIap;
        
        TBool iHarvestErrCode;
        
        TBool iHarvestActive;
        
        TBool iAllFound;
        
        //index of havest item which has been sent to property
        TInt iPropertyItemIndex;
   
    };

#endif      // CMMDHMEDIASERVERCONTAINER_H   
            
// End of File