--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpmpxplugins/upnpplaybackplugins/inc/upnptrack.h Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,372 @@
+/*
+* Copyright (c) 2008 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: class for containing and obtaining music track-specific
+* data from media server
+*
+*/
+
+
+
+
+
+
+#ifndef C_UPNPTRACK_H
+#define C_UPNPTRACK_H
+
+// INCLUDES
+#include <e32base.h>
+#include "upnpitemresolverobserver.h"
+#include "upnpresourceselector.h"
+
+// FORWARD DECLARATIONS
+class TMPXAttribute;
+class TMPXAttributeData;
+class MUPnPAVController;
+class MUPnPAVBrowsingSession;
+class MUPnPTrackObserver;
+class MMPXPlaybackPluginObserver;
+class CUpnpItem;
+class MUPnPItemResolver;
+
+// CONSTANTS
+const TInt KMaxElementSize = 256;
+
+
+/**
+ * A helper class for containing and obtaining music track-specific data
+ * from media server
+ *
+ * @lib upnpmusicplugins.lib
+ * @since S60 v3.1
+ */
+class CUPnPTrack
+ : public CBase
+ , public MUPnPItemResolverObserver
+ {
+
+public: // datatypes
+
+ /**
+ * Defines direction of playback
+ *
+ * EDirectionRemote - Used in local to remote and remote to remote
+ * playback cases
+ * EDirectionLocal - Used only in remote to local case.
+ *
+ */
+ enum TPlaybackDirection
+ {
+ EDirectionRemote = 0,
+ EDirectionLocal
+ };
+public:
+
+ /**
+ * static constructor
+ *
+ * @param aAvController AVController
+ * @return a new CUPnPTrack instance
+ * @since Series 60 3.1
+ */
+ static CUPnPTrack* NewL( MUPnPAVController& aAvController );
+
+ /**
+ * Destructor
+ *
+ * @since Series 60 3.1
+ */
+ virtual ~CUPnPTrack();
+
+ /**
+ * Parse and saves the song path from given descriptor
+ *
+ * @param aCodedTrackUri track URI that may be coded
+ * @param atrackObserver observer to notify when resolve is complete
+ * @param aPlaybackDirection direction of playback
+ * @since Series 60 3.1
+ */
+ void ResolveURIL( const TDesC& aCodedTrackUri,
+ MUPnPTrackObserver& aTrackObserver,
+ TPlaybackDirection aPlaybackDirection );
+
+ /**
+ * Returns the original URI given in initialisation
+ *
+ * @return TDesC URI
+ * @since Series 60 3.1
+ */
+ const TDesC& URI() const;
+
+ /**
+ * Returns the true UPNP URI of a remote track
+ *
+ * @return TDesC8 URI
+ * @since Series 60 3.1
+ */
+ const TDesC8& UpnpURI() const;
+
+ /**
+ * Returns the remote upnp item that represents the track
+ *
+ * @return CUpnpItem the item reference
+ * @since Series 60 3.1
+ */
+ const CUpnpItem& UpnpItem() const;
+
+ /**
+ * Returns the file path of local item
+ *
+ * @return TDesC file path
+ * @since Series 60 3.1
+ */
+ const TDesC& FilePath() const;
+
+ /**
+ * Return location of track. ETrue = remote. EFalse = local
+ *
+ * @return TBool location of track
+ * @since Series 60 3.1
+ */
+ TBool IsRemote() const;
+
+ /**
+ * Get metadata information for track from media server
+ *
+ * @param aAttrs list of wanted media propeties
+ * @param aObs the plugin observer that will receive the metadata
+ * @since Series 60 3.1
+ */
+ void GetMetaDataL( const TArray<TMPXAttribute>& aAttrs,
+ MMPXPlaybackPluginObserver& aObs );
+
+ /**
+ * Delivers media changed event to playback framework
+ * @param aObs the plugin observer
+ */
+ void SendMediaChangedEventL(
+ MMPXPlaybackPluginObserver& aObs );
+
+ /**
+ * current track duration
+ * @return track duration in milliseconds
+ */
+ TInt TrackDuration();
+
+ /**
+ * overrides current track duration. Normally a track can provide
+ * duration information for current remote track. However sometimes
+ * the data is missing. In this case it can be set using this method.
+ * @param aMilliseconds the duration in milliseconds
+ */
+ void SetTrackDuration( TInt aMilliseconds );
+
+ /**
+ *
+ */
+ void Delete();
+
+protected: // MUPnPItemResolverObserver
+
+ /**
+ * See MUPnPItemResolverObserver
+ */
+ void ResolveComplete( const MUPnPItemResolver& aResolver, TInt aError );
+
+private:
+
+ /**
+ * Default constructor
+ *
+ * @param aAvController AVController
+ * @since Series 60 3.1
+ */
+ CUPnPTrack( MUPnPAVController& aAvController );
+
+ /**
+ * 2nd phase constructor
+ *
+ * @since Series 60 3.1
+ */
+ void ConstructL();
+
+ /**
+ * Parse and save HttpURI, media server id and object id from
+ * given descriptor
+ *
+ * @since Series 60 3.1
+ * @param aSong descriptor to be parsed
+ */
+ void ParsePiecesL( const TDesC& aSong );
+
+ /**
+ * See MUPnPAVBrowsingSessionObserver
+ *
+ * @since Series 60 3.1
+ */
+ void BrowseResponseL( const TDesC8& aBrowseResponse, TInt aError );
+
+ /**
+ * Starts a browsing session within the object
+ */
+ void StartBrowsingSessionL();
+
+ /**
+ * Stops a browsing session within the object
+ */
+ void StopBrowsingSession();
+
+ /**
+ * Delivers metadata to observer
+ * @param aAttrs list of wanted media propeties
+ * @param aObs the plugin observer that will receive the metadata
+ * @param aError error code to be delivered to client
+ */
+ void DeliverMedataL( const TArray<TMPXAttribute>& aAttrs,
+ MMPXPlaybackPluginObserver& aObs, TInt aError = KErrNone );
+
+ /**
+ * Fills item metadata into given MediaL object
+ * @param aMedia the MPX media object to fill metadata into
+ * @param aAttrs list of metadata elements to fill
+ */
+ void FillMediaFromItemL( CMPXMedia& aMedia,
+ const TArray<TMPXAttribute>& aAttrs );
+
+ /**
+ * Tests if given attribute exists in the attribute array
+ * returns true if it is found.
+ * @param aAttrs the attribute array
+ * @param aAttrData the attribute to look for
+ * @return ETrue if it was found, EFalse otherwise
+ */
+ TBool Exists( const TArray<TMPXAttribute>& aAttrs,
+ const TMPXAttributeData& aAttrData ) const;
+
+ /**
+ * A helper method that converts text from 8-bit to 16-bit.
+ * Note that a member buffer is used that has static length.
+ */
+ const HBufC16* CUPnPTrack::To16LC( const TDesC8& aText );
+
+private: // data
+
+ /**
+ * Defines location of track
+ *
+ * @since Series 60 3.1
+ */
+ enum TTrackLocation
+ {
+ ETrackLocationLocal = 0,
+ ETrackLocationRemote
+ };
+
+ /**
+ * Defines track state
+ *
+ * @since Series 60 3.2
+ */
+ enum TTrackState
+ {
+ EStateIdle,
+ EStateResolving,
+ EStateSelfDestruct,
+ EStateReady
+ };
+
+
+ /**
+ * Location of track
+ */
+ TTrackLocation iTrackLocation;
+
+ /**
+ * URI for local track
+ */
+ HBufC* iOriginalURI;
+
+ /**
+ * Media server name
+ */
+ HBufC8* iMediaServer;
+
+ /**
+ * Object id
+ */
+ HBufC8* iObjectId;
+
+ /**
+ * The AV Controller resource
+ */
+ MUPnPAVController& iAvController;
+
+ /**
+ * The rendering session
+ */
+ MUPnPAVBrowsingSession* iBrowsingSession;
+
+ /**
+ * Track observer during resolving phase
+ */
+ MUPnPTrackObserver* iTrackObserver;
+
+ /**
+ * Observer for metadata queries
+ * Stored in case metadata is not ready yet when queried
+ */
+ MMPXPlaybackPluginObserver* iMetadataObserver;
+
+ /**
+ * Attributes in metadata query
+ */
+ RArray<TMPXAttribute> iQueriedAttributes;
+
+ /**
+ * temp buffer used in 8->16 -bit conversion
+ */
+ TBuf16<KMaxElementSize> iTempBuf;
+
+ /**
+ * track duration in milliseconds (from some other source)
+ */
+ TInt iTrackDuration;
+
+ /**
+ * Resolver for remote or local item (Owned).
+ */
+ MUPnPItemResolver* iItemResolver;
+
+ /**
+ * Selectors for remote item.
+ */
+ TUPnPSelectDefaultResource iDefaultSelector;
+
+ /**
+ * Selectors for local item.
+ */
+ TUPnPSelectFirstResource iFirstSelector;
+
+ /**
+ * Tells is resolve item completed.
+ */
+ TBool iIsItemSolved;
+
+ /**
+ * Current track state
+ */
+ TTrackState iState;
+ };
+
+
+#endif // C_UPNPTRACK_H