--- a/upnpframework/upnputilities/src/upnpmetadatautility.cpp Fri Sep 17 08:31:21 2010 +0300
+++ b/upnpframework/upnputilities/src/upnpmetadatautility.cpp Mon Nov 01 12:37:49 2010 +0200
@@ -1,342 +1,342 @@
-/*
-* 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 for meta data gathering for audio files
-*
-*/
-
-
-// INCLUDE FILES
-#include <e32base.h>
-#include <MetaDataUtility.h>
-#include <MetaDataFieldContainer.h>
-
-#include "upnpmetadatautility.h"
-#include "upnpcommonutils.h"
-
-// ============================ MEMBER FUNCTIONS ============================
-
-// ---------------------------------------------------------------------------
-// CUPnPMetaDataUtility::CUPnPMetaDataUtility
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// ---------------------------------------------------------------------------
-//
-CUPnPMetaDataUtility::CUPnPMetaDataUtility()
- {
- }
-
-// ---------------------------------------------------------------------------
-// CUPnPMetaDataUtility::NewL
-// Two-phased constructor.
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CUPnPMetaDataUtility* CUPnPMetaDataUtility::NewL()
- {
- CUPnPMetaDataUtility* self = new( ELeave ) CUPnPMetaDataUtility;
-
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop();
-
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// CUPnPMetaDataUtility::ConstructL
-// Symbian 2nd phase constructor can leave.
-// ---------------------------------------------------------------------------
-//
-void CUPnPMetaDataUtility::ConstructL()
- {
- iMetaDataUtility = CMetaDataUtility::NewL();
- }
-
-// ---------------------------------------------------------------------------
-// CUPnPMetaDataUtility::~CUPnPMetaDataUtility()
-// Destructor
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CUPnPMetaDataUtility::~CUPnPMetaDataUtility()
- {
- if ( iMetaDataUtility )
- {
- TRAP_IGNORE( iMetaDataUtility->ResetL() );
- }
-
- delete iArtist;
- delete iAlbum;
- delete iGenre;
- delete iTitle;
- delete iDate;
- delete iMetaDataUtility;
- }
-
-// --------------------------------------------------------------------------
-// CUPnPMetaDataUtility::LoadMetaDataL
-// Finds correct MMF controller according to give file name
-// (other items were commented in a header).
-// --------------------------------------------------------------------------
-//
-EXPORT_C void CUPnPMetaDataUtility::LoadMetaDataL( const TDesC& aFileName )
- {
- // Cleanup existing information
- Reset();
-
- RArray<TMetaDataFieldId> wantedFields;
- CleanupClosePushL( wantedFields );
- wantedFields.AppendL( EMetaDataSongTitle );
- wantedFields.AppendL( EMetaDataArtist );
- wantedFields.AppendL( EMetaDataAlbum );
- wantedFields.AppendL( EMetaDataGenre );
- wantedFields.AppendL( EMetaDataDate );
-
- // Reset to be sure that no allocations are left over
- iMetaDataUtility->ResetL();
-
- // Open the file
- iMetaDataUtility->OpenFileL( aFileName, wantedFields );
-
- // wantedFields is not needed anymore
- CleanupStack::PopAndDestroy( &wantedFields );
-
- // Go through the meta data fields and pick the required ones
- TInt count = iMetaDataUtility->MetaDataCount();
-
- if ( count > 0 )
- {
- const CMetaDataFieldContainer& container =
- iMetaDataUtility->MetaDataFieldsL();
- TMetaDataFieldId fieldId;
- for ( TInt index = 0; index < count; index++ )
- {
- TPtrC content = container.At( index, fieldId );
- switch ( fieldId )
- {
- case EMetaDataSongTitle:
- {
- iTitle = content.AllocL();
- break;
- }
- case EMetaDataArtist:
- {
- iArtist = content.AllocL();
- break;
- }
- case EMetaDataAlbum:
- {
- iAlbum = content.AllocL();
- break;
- }
- case EMetaDataGenre:
- {
- iGenre = content.AllocL();
- break;
- }
- case EMetaDataDate:
- {
- iDate = content.AllocL();
- break;
- }
- default:
- {
- // Nothing to do
- break;
- }
- }
- }
- }
-
- if( !iDate )
- {
- // Date was not found from metadata, so get it from file properties
- RFs fs;
- User::LeaveIfError( fs.Connect() );
- CleanupClosePushL( fs );
- RFile file;
- User::LeaveIfError( file.Open( fs,aFileName, EFileRead |
- EFileShareReadersOrWriters ) );
- CleanupClosePushL( file );
-
- TTime time;
- User::LeaveIfError( file.Modified( time ) );
-
-
- iDate = UPnPCommonUtils::TTimeToUPnPDateL( time );
-
- CleanupStack::PopAndDestroy( &file );
- CleanupStack::PopAndDestroy( &fs );
-
- }
- // Cleanup
- iMetaDataUtility->ResetL();
- }
-
-// --------------------------------------------------------------------------
-// CUPnPMetaDataUtility::Title
-// Returns title for the song
-// (other items were commented in a header).
-// --------------------------------------------------------------------------
-//
-EXPORT_C const TDesC& CUPnPMetaDataUtility::Title() const
- {
- if ( iTitle )
- {
- return *iTitle;
- }
- else
- {
- return KNullDesC;
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPMetaDataUtility::Artist
-// Returns artist for the song
-// (other items were commented in a header).
-// --------------------------------------------------------------------------
-//
-EXPORT_C const TDesC& CUPnPMetaDataUtility::Artist() const
- {
- if ( iArtist )
- {
- return *iArtist;
- }
- else
- {
- return KNullDesC;
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPMetaDataUtility::Album
-// Returns album for the song
-// (other items were commented in a header).
-// --------------------------------------------------------------------------
-//
-EXPORT_C const TDesC& CUPnPMetaDataUtility::Album() const
- {
- if ( iAlbum )
- {
- return *iAlbum;
- }
- else
- {
- return KNullDesC;
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPMetaDataUtility::Genre
-// Returns genre for the song
-// (other items were commented in a header).
-// --------------------------------------------------------------------------
-//
-EXPORT_C const TDesC& CUPnPMetaDataUtility::Genre() const
- {
- if ( iGenre )
- {
- return *iGenre;
- }
- else
- {
- return KNullDesC;
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPMetaDataUtility::Date
-// Returns date for the file
-// (other items were commented in a header).
-// --------------------------------------------------------------------------
-//
-EXPORT_C const TDesC& CUPnPMetaDataUtility::Date() const
- {
- if ( iDate )
- {
- return *iDate;
- }
- else
- {
- return KNullDesC;
- }
- }
-
-// --------------------------------------------------------------------------
-// CUPnPMetaDataUtility::LoadTitleL
-// Finds the title(ID3 tag) of the file according to give file name
-// (other items were commented in a header).
-// --------------------------------------------------------------------------
-//
-EXPORT_C void CUPnPMetaDataUtility::LoadTitleL( const TDesC& aFileName )
- {
- // Cleanup existing information
- Reset();
-
- RArray<TMetaDataFieldId> wantedFields;
- CleanupClosePushL( wantedFields );
- wantedFields.Append( EMetaDataSongTitle );
-
- // Reset to be sure that no allocations are left over
- iMetaDataUtility->ResetL();
-
- // Open the file
- iMetaDataUtility->OpenFileL( aFileName, wantedFields );
-
- // wantedFields is not needed anymore
- CleanupStack::PopAndDestroy( &wantedFields );
-
- // Go through the meta data fields and pick the required ones
- TInt count = iMetaDataUtility->MetaDataCount();
-
- if ( count > 0 )
- {
- const CMetaDataFieldContainer& container =
- iMetaDataUtility->MetaDataFieldsL();
- TMetaDataFieldId fieldId;
- for ( TInt index = 0; index < count; index++ )
- {
- TPtrC content = container.At( index, fieldId );
- if ( EMetaDataSongTitle == fieldId )
- {
- iTitle = content.AllocL();
- break;
- }
- }
- }
-
- // Cleanup
- iMetaDataUtility->ResetL();
- }
-
-// ---------------------------------------------------------------------------
-// CUPnPMetaDataUtility::Reset
-// Reset member variables
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CUPnPMetaDataUtility::Reset()
- {
- delete iTitle;
- iTitle = NULL;
- delete iArtist;
- iArtist = NULL;
- delete iAlbum;
- iAlbum = NULL;
- delete iGenre;
- iGenre = NULL;
- delete iDate;
- iDate = NULL;
- }
-
-// End of File
+/*
+* 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 for meta data gathering for audio files
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <MetaDataUtility.h>
+#include <MetaDataFieldContainer.h>
+
+#include "upnpmetadatautility.h"
+#include "upnpcommonutils.h"
+
+// ============================ MEMBER FUNCTIONS ============================
+
+// ---------------------------------------------------------------------------
+// CUPnPMetaDataUtility::CUPnPMetaDataUtility
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------------------------
+//
+CUPnPMetaDataUtility::CUPnPMetaDataUtility()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CUPnPMetaDataUtility::NewL
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CUPnPMetaDataUtility* CUPnPMetaDataUtility::NewL()
+ {
+ CUPnPMetaDataUtility* self = new( ELeave ) CUPnPMetaDataUtility;
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CUPnPMetaDataUtility::ConstructL
+// Symbian 2nd phase constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CUPnPMetaDataUtility::ConstructL()
+ {
+ iMetaDataUtility = CMetaDataUtility::NewL();
+ }
+
+// ---------------------------------------------------------------------------
+// CUPnPMetaDataUtility::~CUPnPMetaDataUtility()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CUPnPMetaDataUtility::~CUPnPMetaDataUtility()
+ {
+ if ( iMetaDataUtility )
+ {
+ TRAP_IGNORE( iMetaDataUtility->ResetL() );
+ }
+
+ delete iArtist;
+ delete iAlbum;
+ delete iGenre;
+ delete iTitle;
+ delete iDate;
+ delete iMetaDataUtility;
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPMetaDataUtility::LoadMetaDataL
+// Finds correct MMF controller according to give file name
+// (other items were commented in a header).
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CUPnPMetaDataUtility::LoadMetaDataL( const TDesC& aFileName )
+ {
+ // Cleanup existing information
+ Reset();
+
+ RArray<TMetaDataFieldId> wantedFields;
+ CleanupClosePushL( wantedFields );
+ wantedFields.Append( EMetaDataSongTitle );
+ wantedFields.Append( EMetaDataArtist );
+ wantedFields.Append( EMetaDataAlbum );
+ wantedFields.Append( EMetaDataGenre );
+ wantedFields.Append( EMetaDataDate );
+
+ // Reset to be sure that no allocations are left over
+ iMetaDataUtility->ResetL();
+
+ // Open the file
+ iMetaDataUtility->OpenFileL( aFileName, wantedFields );
+
+ // wantedFields is not needed anymore
+ CleanupStack::PopAndDestroy( &wantedFields );
+
+ // Go through the meta data fields and pick the required ones
+ TInt count = iMetaDataUtility->MetaDataCount();
+
+ if ( count > 0 )
+ {
+ const CMetaDataFieldContainer& container =
+ iMetaDataUtility->MetaDataFieldsL();
+ TMetaDataFieldId fieldId;
+ for ( TInt index = 0; index < count; index++ )
+ {
+ TPtrC content = container.At( index, fieldId );
+ switch ( fieldId )
+ {
+ case EMetaDataSongTitle:
+ {
+ iTitle = content.AllocL();
+ break;
+ }
+ case EMetaDataArtist:
+ {
+ iArtist = content.AllocL();
+ break;
+ }
+ case EMetaDataAlbum:
+ {
+ iAlbum = content.AllocL();
+ break;
+ }
+ case EMetaDataGenre:
+ {
+ iGenre = content.AllocL();
+ break;
+ }
+ case EMetaDataDate:
+ {
+ iDate = content.AllocL();
+ break;
+ }
+ default:
+ {
+ // Nothing to do
+ break;
+ }
+ }
+ }
+ }
+
+ if( !iDate )
+ {
+ // Date was not found from metadata, so get it from file properties
+ RFs fs;
+ User::LeaveIfError( fs.Connect() );
+ CleanupClosePushL( fs );
+ RFile file;
+ User::LeaveIfError( file.Open( fs,aFileName, EFileRead |
+ EFileShareReadersOrWriters ) );
+ CleanupClosePushL( file );
+
+ TTime time;
+ User::LeaveIfError( file.Modified( time ) );
+
+
+ iDate = UPnPCommonUtils::TTimeToUPnPDateL( time );
+
+ CleanupStack::PopAndDestroy( &file );
+ CleanupStack::PopAndDestroy( &fs );
+
+ }
+ // Cleanup
+ iMetaDataUtility->ResetL();
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPMetaDataUtility::Title
+// Returns title for the song
+// (other items were commented in a header).
+// --------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CUPnPMetaDataUtility::Title() const
+ {
+ if ( iTitle )
+ {
+ return *iTitle;
+ }
+ else
+ {
+ return KNullDesC;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPMetaDataUtility::Artist
+// Returns artist for the song
+// (other items were commented in a header).
+// --------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CUPnPMetaDataUtility::Artist() const
+ {
+ if ( iArtist )
+ {
+ return *iArtist;
+ }
+ else
+ {
+ return KNullDesC;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPMetaDataUtility::Album
+// Returns album for the song
+// (other items were commented in a header).
+// --------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CUPnPMetaDataUtility::Album() const
+ {
+ if ( iAlbum )
+ {
+ return *iAlbum;
+ }
+ else
+ {
+ return KNullDesC;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPMetaDataUtility::Genre
+// Returns genre for the song
+// (other items were commented in a header).
+// --------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CUPnPMetaDataUtility::Genre() const
+ {
+ if ( iGenre )
+ {
+ return *iGenre;
+ }
+ else
+ {
+ return KNullDesC;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPMetaDataUtility::Date
+// Returns date for the file
+// (other items were commented in a header).
+// --------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CUPnPMetaDataUtility::Date() const
+ {
+ if ( iDate )
+ {
+ return *iDate;
+ }
+ else
+ {
+ return KNullDesC;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CUPnPMetaDataUtility::LoadTitleL
+// Finds the title(ID3 tag) of the file according to give file name
+// (other items were commented in a header).
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CUPnPMetaDataUtility::LoadTitleL( const TDesC& aFileName )
+ {
+ // Cleanup existing information
+ Reset();
+
+ RArray<TMetaDataFieldId> wantedFields;
+ CleanupClosePushL( wantedFields );
+ wantedFields.Append( EMetaDataSongTitle );
+
+ // Reset to be sure that no allocations are left over
+ iMetaDataUtility->ResetL();
+
+ // Open the file
+ iMetaDataUtility->OpenFileL( aFileName, wantedFields );
+
+ // wantedFields is not needed anymore
+ CleanupStack::PopAndDestroy( &wantedFields );
+
+ // Go through the meta data fields and pick the required ones
+ TInt count = iMetaDataUtility->MetaDataCount();
+
+ if ( count > 0 )
+ {
+ const CMetaDataFieldContainer& container =
+ iMetaDataUtility->MetaDataFieldsL();
+ TMetaDataFieldId fieldId;
+ for ( TInt index = 0; index < count; index++ )
+ {
+ TPtrC content = container.At( index, fieldId );
+ if ( EMetaDataSongTitle == fieldId )
+ {
+ iTitle = content.AllocL();
+ break;
+ }
+ }
+ }
+
+ // Cleanup
+ iMetaDataUtility->ResetL();
+ }
+
+// ---------------------------------------------------------------------------
+// CUPnPMetaDataUtility::Reset
+// Reset member variables
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CUPnPMetaDataUtility::Reset()
+ {
+ delete iTitle;
+ iTitle = NULL;
+ delete iArtist;
+ iArtist = NULL;
+ delete iAlbum;
+ iAlbum = NULL;
+ delete iGenre;
+ iGenre = NULL;
+ delete iDate;
+ iDate = NULL;
+ }
+
+// End of File