upnpmediaserver/contentdirectoryservice/inc/upnpmspathutility.h
changeset 0 7f85d04be362
child 25 52826dcbed74
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpmediaserver/contentdirectoryservice/inc/upnpmspathutility.h	Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,222 @@
+/*
+* Copyright (c) 2002-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:  Utility class to get path related info for the media files
+*/
+
+
+
+
+
+
+#ifndef UPNP_MSPATHUTILITY_H
+#define UPNP_MSPATHUTILITY_H
+
+// INCLUDE FILES
+#include <e32base.h>    // CBase
+#include <f32file.h>    // TDriveNumber
+#include <xmlengdom.h>
+
+// FORWARD DECLARATIONS
+class CRepository;
+class CUpnpDlnaProtocolInfo;
+
+// CLASS DECLARATION
+/**
+ *  Path utility class to get path related info for the media files
+ *  @lib upnpcontentdirectoryservice.lib
+ *  Note:- This class needs to be revisited once mediaserver refactoring is 
+ *         over as there is definitely the need to remove duplicate code
+ *        
+ */
+NONSHARABLE_CLASS ( CUPnPMSPathUtility ) : public CBase
+    {
+public: // Constructors and destructor
+
+    /**
+     * Two-phased constructor.
+     */
+    static CUPnPMSPathUtility* NewL();
+
+    /**
+     * Two-phased constructor.
+     */
+    static CUPnPMSPathUtility* NewLC();
+
+    /**
+     * Destructor.
+     */
+    virtual ~CUPnPMSPathUtility();
+        
+        
+public: // new functions
+
+    /**
+     * Gets the drive for the copy operation
+     * @param aDrive, reference to copy path drive
+     */
+    void GetCopyPathDriveL( TDriveNumber& aDrive ) const;
+
+    /**
+     * Gets the path of the upnp item's file to be copied
+     * @param aItem, an xml item
+     * @param aProInfo, proto info of the resource of the xml item
+     * @return HBufC*, copy path. Ownership is transferred to the caller
+     *          Leaves in case of an error.    
+     */
+    HBufC* GetCopyPathL( const TXmlEngElement& aItem,
+                         CUpnpDlnaProtocolInfo& aProInfo ) const;
+
+    /**
+     * Gets and creates (if necessary) the path of the upnp item's 
+     * file to be copied.
+     * @param aItem, an xml item
+     * @param aProInfo, proto info of the resource of the xml item
+     * @return HBufC*, copy path. Ownership is transferred to the caller
+     *          Leaves in case of an error.    
+     */
+    HBufC* CreateCopyPathL( const TXmlEngElement& aItem,
+                            CUpnpDlnaProtocolInfo& aProInfo ) const;
+    
+private:
+    enum TMediaServerKeys 
+        {
+        EFriendlyName = 1, 
+        EUploadDirectory = 2, 
+        ESupportedMedia = 3, 
+        ESecurityManager = 4,
+        EModelUrl = 5,
+        EModelDescription = 6,
+        EModelNumber = 7,
+        ESerialNumber = 8,
+        EPresentationUrl = 9,
+        EModelName = 10,
+        EManufacturer = 11,
+        EManufacturerUrl = 12,
+        EUpnpMediaServerThumbnails = 13,
+        KUpnpMediaServerBrowseLimit = 14
+        };
+    
+    // DATA TYPES
+    enum TUPnPItemType
+        {
+        ETypeAudio = 0,
+        ETypeVideo,
+        ETypeImage,
+        ETypePlaylist,
+        ETypeOther
+        };
+    
+    /**
+     * C++ default constructor.
+     */
+    CUPnPMSPathUtility();
+
+    /**
+     * By default Symbian 2nd phase constructor is private.
+     */
+    void ConstructL(TUid aRepositoryUid);
+
+    /**
+     * Gets and creates (if necessary) the path of the upnp item's 
+     * file to be copied.
+     * @param aItem, an xml item
+     * @param aProInfo, proto info of the resource of the xml item
+     * @param aCreatePath, If ETrue path gets created otherwise not.
+     * @param aDriveNumber, drive number to be used for the path calculation
+     * @return HBufC*, copy path. Ownership is transferred to the caller
+     *          Leaves in case of an error.    
+     */
+    HBufC* GetCreateCopyPathL(const TXmlEngElement& aItem,
+                              CUpnpDlnaProtocolInfo& aProInfo,
+                              TBool aCreatePath,
+                              TDriveNumber aDriveNumber ) const;
+    /**
+    * Returns the file type according a mime type
+    *
+    * @param const TDesC8& mime type
+    * @return TUPnPItemType file type
+    */
+   TUPnPItemType FileTypeByMimeTypeL( const TDesC8& aMimeType ) const;
+   
+    /**
+     * Appends year, month and day to the path.
+     * @param aPath, path of the upnp item
+     * @param aItem, an xml item
+     */        
+    void AppendYearMonthDayL( 
+            TDes& aPath, const TXmlEngElement& aItem ) const;
+    
+    /**
+     * Appends artist and album to the path.
+     * @param aPath, path of the upnp item
+     * @param aItem, an xml item
+     */        
+    void AppendArtistAlbumL( 
+            TDes& aPath, const TXmlEngElement& aItem ) const;
+    
+    /**
+     * Appends data to the path's buffer.
+     * Leaves if data exceeds the maxlength of the buffer
+     * 
+     * @param aPath, path of the upnp item
+     * @param aData, data which needs to be appended
+     */    
+    void AppendDataL( TDes& aPath, const TDesC& aData ) const;
+    
+    /**
+     * Checks whether the data can be appended to buffer or not.
+     * Leaves if data exceeds the maxlength of the buffer
+     * 
+     * @param aPath, path of the upnp item
+     * @param aData, data which needs to be appended
+     */    
+    void CheckBufferSpaceL( const TDes& aPath, 
+            const TDesC& aData ) const;
+    
+    /**
+     * Checks whether the data of the specified length
+     * can be appended to buffer or not.
+     * Leaves if data exceeds the maxlength of the buffer
+     * 
+     * @param aPath, path of the upnp item
+     * @param aLength, length of the data which needs to be appended
+     */    
+    void CheckBufferSpaceL( const TDes& aPath, 
+            const TInt& aLength ) const;
+       
+    /**
+     * Converts given upnp date string into TTime.
+     *
+     * @param aUpnpDate value from item's dc:date element
+     * @param aTime out variable to receive corresponding TTime
+     * @return KErrNone if conversion was succesful, otherwise < 0
+     *         for error values see TTime::Parse()
+     */
+    void UPnPDateAsTTimeL( const TDesC8& aUpnpDate,
+        TTime& aTime ) const;
+
+private:    // data
+
+    /**
+    * Central repository client
+    * Note:- CUpnpMediaServerSettings is not used to avoid dependency
+    */  
+    CRepository* iRepository;
+    
+    };
+
+#endif  // UPNP_MSPATHUTILITY_H
+
+// End of file