upnpavcontroller/upnpavcontrollerhelper/src/upnpfileutility.cpp
branchnew development branch with rendering state machine and other goodies
changeset 38 5360b7ddc251
parent 0 7f85d04be362
--- a/upnpavcontroller/upnpavcontrollerhelper/src/upnpfileutility.cpp	Fri Sep 17 08:31:21 2010 +0300
+++ b/upnpavcontroller/upnpavcontrollerhelper/src/upnpfileutility.cpp	Mon Nov 01 12:37:49 2010 +0200
@@ -1,186 +1,187 @@
-/*
-* Copyright (c) 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 for working with files in upnp context
-*
-*/
-
-
-
-
-
-
-// INCLUDE FILES
-// System
-#include <e32std.h>
-#include <upnpelement.h>
-#include <DRMCommon.h>              // OEM-DRM
-#include <caf/content.h>                // CAF (WM-DRM check)
-#include <caf/agent.h>                  // CAF (WM-DRM check)
-#include <pathinfo.h>               // PathInfo
-
-// upnpframework / avcontroller helper api
-#include "upnpitemutility.h"        // FindAttributeByName
-#include "upnpconstantdefs.h"       // KAttributeSize
-#include "upnpfileutility.h"
-
-// upnpframework / internal api's
-#include "upnpsettingsengine.h"     // get target drive
-
-_LIT( KComponentLogfile, "upnpavcontrollerhelper.txt");
-#include "upnplog.h"
-
-// CONSTANTS
-_LIT( KWmDrmAgentName,     "PV WMA CAF Agent" );
-_LIT( K60WmDrmAgentName,   "WM DRM Agent" );
-const TInt64 KPhoneMemoryThreshold    = 1048576; //1MB
-
-
-// ============================ LOCAL FUNCTIONS =============================
-
-// --------------------------------------------------------------------------
-// UPnPFileUtility::IsFileDrmProtectedL
-//---------------------------------------------------------------------------
-EXPORT_C TBool UPnPFileUtility::IsFileProtectedL(
-    const TDesC& aFilePath )
-    {
-    __LOG( "FileUtility:IsFileDrmProtectedL( aFileName )" );
-    TBool isProtected = ETrue;
-
-    // Check if the file is OEM-DRM protected
-    DRMCommon* drmCommon = DRMCommon::NewL();
-    CleanupStack::PushL( drmCommon );
-    User::LeaveIfError( drmCommon->Connect() );
-    User::LeaveIfError( drmCommon->IsProtectedFile(
-        aFilePath, isProtected ) );
-    CleanupStack::PopAndDestroy( drmCommon );
-    drmCommon = NULL;
-
-    // If not OEM-DRM protected, check if the file is WM-DRM protected
-    if( !isProtected )
-        {
-        CContent* content = CContent::NewLC( aFilePath );
-        TAgent agent = content->Agent();
-
-        // Check if .wma file
-        if( agent.Name().CompareF( KWmDrmAgentName ) == 0 ||
-            agent.Name().CompareF( K60WmDrmAgentName ) == 0 )
-            {
-            __LOG( "FileUtility:IsFileDrmProtectedL: .wma file " );
-            CData* data = CData::NewL( (TVirtualPathPtr) aFilePath,
-                EPeek, EContentShareReadOnly );
-            data->GetAttribute( EIsProtected, isProtected );
-            delete data;
-            }
-        CleanupStack::PopAndDestroy( content );
-        content = NULL;
-        }
-    return isProtected;
-    }
-
-
-// --------------------------------------------------------------------------
-// UPnPFileUtility::FitsInMemory
-// see UPnPFileUtility.h
-// --------------------------------------------------------------------------
-EXPORT_C TBool UPnPFileUtility::FitsInMemory(
-    const CUpnpElement& aResource )
-    {
-    TBool result( ETrue );
-    
-    //it will always return ETrue if Leave
-    TRAP_IGNORE( result = FitsInMemoryL( aResource ) );
-    return result;
-    }
-
-
-// --------------------------------------------------------------------------
-// UPnPFileUtility::FitsInMemory
-// see UPnPFileUtility.h
-// --------------------------------------------------------------------------
-TBool UPnPFileUtility::FitsInMemoryL( const CUpnpElement& aResource )
-    {
-    __LOG( "UPnPFileUtility::FitsInMemoryL" );
-    // 1. get object size
-    TInt fileSize = -1;
-    const CUpnpAttribute* attr =
-        UPnPItemUtility::FindAttributeByName( aResource, KAttributeSize );
-
-    //if "file size" not found, straightly go for downloading
-    if( !attr )   
-        {
-        __LOG( "UPnPFileUtility::size not found" );
-        return ETrue;
-        }
-
-    // 2. convert size to integer
-    TLex8 sizeconvert( attr->Value() );
-    sizeconvert.Val( fileSize );
-
-    if( fileSize < 0)
-        {
-        __LOG1( "UPnPFileUtility::file size %d", fileSize );
-        return ETrue;
-        }
-           
-    // 3. check the copy target configuration
-    CUPnPSettingsEngine* engine = NULL;
-    engine = CUPnPSettingsEngine::NewL();
-    CleanupStack::PushL( engine );
-    
-    HBufC* location = HBufC::NewLC( KMaxFileName );
-    TPtr locationPtr( location->Des() );
-    TBool isPhoneMemory;
-    
-    engine->GetCopyLocationL( locationPtr, isPhoneMemory );
-        
-    // 4. check bytes available in the drive
-    RFs fileServer;
-    CleanupClosePushL( fileServer );
-    User::LeaveIfError( fileServer.Connect() );
-
-    TVolumeInfo freeVol;
-
-    User::LeaveIfError( fileServer.SetSessionPath( locationPtr ) );
-    User::LeaveIfError( fileServer.Volume( freeVol ) );
-
-    CleanupStack::PopAndDestroy(); // close fileServer;
-    CleanupStack::PopAndDestroy(); // delete location
-    CleanupStack::PopAndDestroy( engine ); // not needed anymore
-
-    __LOG1( "UPnPFileUtility::free space: %d", freeVol.iFree );
-
-    TInt64 freeSize = 0;
-
-    // 5. result
-    // With phone memory a threshold is used. 
-    if( isPhoneMemory )
-        {
-        freeSize = freeVol.iFree - KPhoneMemoryThreshold;
-        }
-    else
-        {
-        freeSize = freeVol.iFree;
-        }
-
-    if( freeSize >= fileSize )
-        {
-        __LOG( "UPnPFileUtility::FitsInMemoryL -TRUE" );
-        return ETrue;
-        }
-    else
-        {
-        __LOG( "UPnPFileUtility::FitsInMemoryL -FALSE" );
-        return EFalse;
-        }
-    }
+/*
+* Copyright (c) 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 for working with files in upnp context
+*
+*/
+
+
+
+
+
+
+// INCLUDE FILES
+// System
+#include <e32std.h>
+#include <upnpelement.h>
+#include <caf/content.h>                // CAF (WM-DRM check)
+#include <caf/agent.h>                  // CAF (WM-DRM check)
+#include <caf/rightsinfo.h>
+#include <DRMCommon.h>         // OEM-DRM
+#include <pathinfo.h>               // PathInfo
+
+// dlnasrv / avcontroller helper api
+#include "upnpitemutility.h"        // FindAttributeByName
+#include "upnpconstantdefs.h"       // KAttributeSize
+#include "upnpfileutility.h"
+
+// dlnasrv / internal api's
+#include "upnpsettingsengine.h"     // get target drive
+
+_LIT( KComponentLogfile, "upnpavcontrollerhelper.txt");
+#include "upnplog.h"
+
+// CONSTANTS
+_LIT( KWmDrmAgentName,     "PV WMA CAF Agent" );
+_LIT( K60WmDrmAgentName,   "WM DRM Agent" );
+const TInt64 KPhoneMemoryThreshold    = 1048576; //1MB
+
+
+// ============================ LOCAL FUNCTIONS =============================
+
+// --------------------------------------------------------------------------
+// UPnPFileUtility::IsFileDrmProtectedL
+//---------------------------------------------------------------------------
+EXPORT_C TBool UPnPFileUtility::IsFileProtectedL(
+    const TDesC& aFilePath )
+    {
+    __LOG( "FileUtility:IsFileDrmProtectedL( aFileName )" );
+    TBool isProtected = ETrue;
+
+    // Check if the file is OEM-DRM protected
+    DRMCommon* drmCommon = DRMCommon::NewL();
+    CleanupStack::PushL( drmCommon );
+    User::LeaveIfError( drmCommon->Connect() );
+    User::LeaveIfError( drmCommon->IsProtectedFile(
+        aFilePath, isProtected ) );
+    CleanupStack::PopAndDestroy( drmCommon );
+    drmCommon = NULL;
+
+    // If not OEM-DRM protected, check if the file is WM-DRM protected
+    if( !isProtected )
+        {
+        CContent* content = CContent::NewLC( aFilePath );
+        TAgent agent = content->Agent();
+
+        // Check if .wma file
+        if( agent.Name().CompareF( KWmDrmAgentName ) == 0 ||
+            agent.Name().CompareF( K60WmDrmAgentName ) == 0 )
+            {
+            __LOG( "FileUtility:IsFileDrmProtectedL: .wma file " );
+            CData* data = CData::NewL( (TVirtualPathPtr) aFilePath,
+                EPeek, EContentShareReadOnly );
+            data->GetAttribute( EIsProtected, isProtected );
+            delete data;
+            }
+        CleanupStack::PopAndDestroy( content );
+        content = NULL;
+        }
+    return isProtected;
+    }
+
+
+// --------------------------------------------------------------------------
+// UPnPFileUtility::FitsInMemory
+// see UPnPFileUtility.h
+// --------------------------------------------------------------------------
+EXPORT_C TBool UPnPFileUtility::FitsInMemory(
+    const CUpnpElement& aResource )
+    {
+    TBool result( ETrue );
+    
+    //it will always return ETrue if Leave
+    TRAP_IGNORE( result = FitsInMemoryL( aResource ) );
+    return result;
+    }
+
+
+// --------------------------------------------------------------------------
+// UPnPFileUtility::FitsInMemory
+// see UPnPFileUtility.h
+// --------------------------------------------------------------------------
+TBool UPnPFileUtility::FitsInMemoryL( const CUpnpElement& aResource )
+    {
+    __LOG( "UPnPFileUtility::FitsInMemoryL" );
+    // 1. get object size
+    TInt fileSize = -1;
+    const CUpnpAttribute* attr =
+        UPnPItemUtility::FindAttributeByName( aResource, KAttributeSize );
+
+    //if "file size" not found, straightly go for downloading
+    if( !attr )   
+        {
+        __LOG( "UPnPFileUtility::size not found" );
+        return ETrue;
+        }
+
+    // 2. convert size to integer
+    TLex8 sizeconvert( attr->Value() );
+    sizeconvert.Val( fileSize );
+
+    if( fileSize < 0)
+        {
+        __LOG1( "UPnPFileUtility::file size %d", fileSize );
+        return ETrue;
+        }
+           
+    // 3. check the copy target configuration
+    CUPnPSettingsEngine* engine = NULL;
+    engine = CUPnPSettingsEngine::NewL();
+    CleanupStack::PushL( engine );
+    
+    HBufC* location = HBufC::NewLC( KMaxFileName );
+    TPtr locationPtr( location->Des() );
+    TBool isPhoneMemory;
+    
+    engine->GetCopyLocationL( locationPtr, isPhoneMemory );
+        
+    // 4. check bytes available in the drive
+    RFs fileServer;
+    CleanupClosePushL( fileServer );
+    User::LeaveIfError( fileServer.Connect() );
+
+    TVolumeInfo freeVol;
+
+    User::LeaveIfError( fileServer.SetSessionPath( locationPtr ) );
+    User::LeaveIfError( fileServer.Volume( freeVol ) );
+
+    CleanupStack::PopAndDestroy(); // close fileServer;
+    CleanupStack::PopAndDestroy(); // delete location
+    CleanupStack::PopAndDestroy( engine ); // not needed anymore
+
+    __LOG1( "UPnPFileUtility::free space: %d", freeVol.iFree );
+
+    TInt64 freeSize = 0;
+
+    // 5. result
+    // With phone memory a threshold is used. 
+    if( isPhoneMemory )
+        {
+        freeSize = freeVol.iFree - KPhoneMemoryThreshold;
+        }
+    else
+        {
+        freeSize = freeVol.iFree;
+        }
+
+    if( freeSize >= fileSize )
+        {
+        __LOG( "UPnPFileUtility::FitsInMemoryL -TRUE" );
+        return ETrue;
+        }
+    else
+        {
+        __LOG( "UPnPFileUtility::FitsInMemoryL -FALSE" );
+        return EFalse;
+        }
+    }