videocollection/mpxmyvideoscollection/src/vcxmyvideoscollectionutil.cpp
changeset 0 96612d01cf9f
child 8 ce5ada96ab30
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videocollection/mpxmyvideoscollection/src/vcxmyvideoscollectionutil.cpp	Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,525 @@
+/*
+* 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 the License "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: 
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <mpxmedia.h>
+#include <mpxmediaarray.h>
+#include <mpxlog.h>
+#include <mpxmediacontainerdefs.h>
+#include <mpxmediageneraldefs.h>
+#include <vcxmyvideosdefs.h>
+#include <mpxmessagecontainerdefs.h>
+#include <bautils.h>
+#include <mpxmediavideodefs.h>
+#ifdef _DEBUG
+#include <flogger.h>
+#include <f32file.h> 
+#endif
+#include "vcxmyvideoscollectionutil.h"
+
+// ============================ MEMBER FUNCTIONS ==============================
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCollectionUtil::CreateEmptyMediaListL
+// ----------------------------------------------------------------------------
+//
+CMPXMedia* TVcxMyVideosCollectionUtil::CreateEmptyMediaListL()
+    {
+    RArray<TInt> supportedIds;
+    CleanupClosePushL( supportedIds ); // 1->
+                
+    supportedIds.AppendL( KMPXMediaIdContainer );
+    supportedIds.AppendL( KMPXMediaIdGeneral );
+
+    //create container
+    CMPXMedia* container = CMPXMedia::NewL( supportedIds.Array() );
+    CleanupStack::PushL( container ); // 2->
+
+    CMPXMediaArray* mediaArray = CMPXMediaArray::NewL();
+    CleanupStack::PushL( mediaArray ); // 3->
+
+    container->SetCObjectValueL( KMPXMediaArrayContents, mediaArray );
+
+    CleanupStack::PopAndDestroy( mediaArray );    // <-3
+    CleanupStack::Pop( container );               // <-2    
+    CleanupStack::PopAndDestroy( &supportedIds ); // <-1
+    return container;
+    }
+
+// ----------------------------------------------------------------------------
+// CVcxMyVideosCollectionUtil::CreateEmptyMessageListL
+// ----------------------------------------------------------------------------
+//
+CMPXMedia* TVcxMyVideosCollectionUtil::CreateEmptyMessageListL()
+    {
+    RArray<TInt> supportedIds;
+    CleanupClosePushL( supportedIds ); // 1->
+                
+    supportedIds.AppendL( KMPXMediaIdContainer );
+
+    //create container
+    CMPXMedia* container = CMPXMedia::NewL( supportedIds.Array() );
+    CleanupStack::PushL( container ); // 2->
+
+    CMPXMediaArray* messageArray = CMPXMediaArray::NewL();
+    CleanupStack::PushL( messageArray ); // 3->
+
+    container->SetCObjectValueL( KMPXMessageArrayContents, messageArray );
+
+    CleanupStack::PopAndDestroy( messageArray );  // <-3
+    CleanupStack::Pop( container );               // <-2
+    CleanupStack::PopAndDestroy( &supportedIds ); // <-1
+    return container;
+    }
+
+// ---------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::CopyFromListToListL
+// ---------------------------------------------------------------------------
+//
+void TVcxMyVideosCollectionUtil::CopyFromListToListL(
+        CMPXMedia& aFromList,
+        CMPXMedia& aToList,
+        RArray<TUint32>& aMdsIds )
+    {
+    MPX_FUNC("TVcxMyVideosCollectionUtil::CopyFromListToListL ()");
+    
+    if ( !aFromList.IsSupported( KMPXMediaArrayContents ) ||
+            !aToList.IsSupported( KMPXMediaArrayContents ) )
+        {
+        MPX_DEBUG1("TVcxMyVideosCollectionUtil::CopyFromListToListL left, media array(s) missing. ");
+        User::Leave( KErrArgument );
+        }
+
+    TInt mdsIdsCount          = aMdsIds.Count();
+    CMPXMediaArray* fromArray = aFromList.Value<CMPXMediaArray>( KMPXMediaArrayContents );
+    CMPXMediaArray* toArray   = aToList.Value<CMPXMediaArray>( KMPXMediaArrayContents );
+    TInt fromArrayCount       = fromArray->Count();
+    TMPXItemId fromId;
+    TMPXItemId toId;
+
+    for ( TInt i = 0; i < mdsIdsCount; i++ )
+        {
+        for ( TInt j = 0; j < fromArrayCount; j++ )
+            {
+            if ( aMdsIds[i] ==
+                    fromArray->AtL( j )->ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId ).iId1 )
+                {
+                toArray->AppendL( *fromArray->AtL( j ) );
+                MPX_DEBUG3("TVcxMyVideosCollectionUtil:: copying %d (from pointer %x)", aMdsIds[i], fromArray->AtL( j ));
+                break;
+                }                
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::CopyFromListToListL
+// ---------------------------------------------------------------------------
+//
+void TVcxMyVideosCollectionUtil::CopyFromListToListL(
+        RArray<CMPXMedia*>& aFromArray,
+        CMPXMedia& aToList,
+        RArray<TUint32>& aMdsIds )
+    {
+    MPX_FUNC("TVcxMyVideosCollectionUtil::CopyFromListToListL( RArray version )");
+    
+    if ( !aToList.IsSupported( KMPXMediaArrayContents ) )
+        {
+        MPX_DEBUG1("TVcxMyVideosCollectionUtil::CopyFromListToListL left, media array missing. ");
+        User::Leave( KErrArgument );
+        }
+
+    TInt mdsIdsCount          = aMdsIds.Count();
+    CMPXMediaArray* toArray   = aToList.Value<CMPXMediaArray>( KMPXMediaArrayContents );
+    TInt fromArrayCount       = aFromArray.Count();
+    TMPXItemId fromId;
+    TMPXItemId toId;
+
+    for ( TInt i = 0; i < mdsIdsCount; i++ )
+        {
+        for ( TInt j = 0; j < fromArrayCount; j++ )
+            {
+            if ( aMdsIds[i] ==
+                    aFromArray[j]->ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId ).iId1 )
+                {
+                toArray->AppendL( *aFromArray[j] );
+                MPX_DEBUG3("TVcxMyVideosCollectionUtil:: copying %d (from pointer %x)", aMdsIds[i], aFromArray[j]);
+                break;
+                }                
+            }
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// This helper function converts drive letter to drive number
+// ---------------------------------------------------------------------------
+//
+TInt TVcxMyVideosCollectionUtil::DriveLetter2DriveNumber( const TDesC &aDrive )
+    {
+    TInt    retVal = KErrArgument;
+
+    if (aDrive.Length() > 0)
+        {
+        TChar letter = aDrive[0];
+    	letter.UpperCase();
+    	if (letter >= 'A' && letter <= 'Z')
+    		{
+    		retVal = (TInt)letter - 'A';
+    		}
+        }
+
+    return retVal;
+    }
+
+// ---------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::MakeUniqueFileNameL
+// ---------------------------------------------------------------------------
+//
+void TVcxMyVideosCollectionUtil::MakeUniqueFileNameL( RFs& aFs, const TDesC& aPath,
+        TDes& aUniquePath )
+    {
+    const TInt KMaxDigits     = 7;
+    TBuf<KMaxDigits> counterDigits;
+    
+    aUniquePath = aPath;
+    TInt counter = 1;
+    //TInt zeros   = 0;
+    TInt pos     = 0;
+    while( BaflUtils::FileExists( aFs, aUniquePath ) )
+        {
+        pos   = aPath.Locate( '.' );
+        if ( pos == KErrNotFound )
+            {
+            aUniquePath  = aPath;
+            }
+        else
+            {
+            aUniquePath  = aPath.Mid( 0, pos );
+            }
+        counterDigits.Format(_L("%d"), counter++);
+        aUniquePath.Append( '_' );
+        aUniquePath.Append( '(' );
+        aUniquePath.AppendJustify( counterDigits, KMaxDigits, TAlign( ERight ), '0' );
+        aUniquePath.Append( ')' );
+        if ( pos != KErrNotFound )
+            {
+            aUniquePath.Append( aPath.Mid( pos ) );
+            }
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::OriginL
+// ----------------------------------------------------------------------------
+//
+TUint8 TVcxMyVideosCollectionUtil::OriginL( CMPXMedia& aVideo )
+    {
+    TUint8 origin = EVcxMyVideosOriginOther;
+                            
+    if ( aVideo.IsSupported( KVcxMediaMyVideosOrigin ) )
+        {
+        origin = aVideo.ValueTObjectL<TUint8>( KVcxMediaMyVideosOrigin );                
+        if ( origin == EVcxMyVideosOriginSideLoaded )
+            {
+            origin = EVcxMyVideosOriginOther;
+            }
+        }
+    return origin;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::FlagsL
+// ----------------------------------------------------------------------------
+//
+TUint32 TVcxMyVideosCollectionUtil::FlagsL( CMPXMedia& aVideo )
+    {
+    TUint32 flags = 0;
+                            
+    if ( aVideo.IsSupported( KMPXMediaGeneralFlags ) )
+        {
+        flags = aVideo.ValueTObjectL<TUint32>( KMPXMediaGeneralFlags );                
+        }
+    return flags;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::DownloadIdL
+// ----------------------------------------------------------------------------
+//
+TUint32 TVcxMyVideosCollectionUtil::DownloadIdL( CMPXMedia& aVideo )
+    {
+    TUint32 downloadId = 0;
+                            
+    if ( aVideo.IsSupported( KVcxMediaMyVideosDownloadId ) )
+        {
+        downloadId = aVideo.ValueTObjectL<TUint32>( KVcxMediaMyVideosDownloadId );                
+        }
+    return downloadId;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::DownloadStateL
+// ----------------------------------------------------------------------------
+//
+TVcxMyVideosDownloadState TVcxMyVideosCollectionUtil::DownloadStateL( CMPXMedia& aVideo )
+    {
+    TVcxMyVideosDownloadState downloadState = EVcxMyVideosDlStateNone;
+                            
+    if ( aVideo.IsSupported( KVcxMediaMyVideosDownloadState ) )
+        {
+        downloadState = static_cast<TVcxMyVideosDownloadState>(
+                aVideo.ValueTObjectL<TUint8>( KVcxMediaMyVideosDownloadState ) );
+        }
+    return downloadState;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::IdL
+// ----------------------------------------------------------------------------
+//
+TMPXItemId TVcxMyVideosCollectionUtil::IdL( CMPXMedia& aVideo )
+    {
+    TMPXItemId id( 0, 0 );
+                            
+    if ( aVideo.IsSupported( KMPXMediaGeneralId ) )
+        {
+        id = aVideo.ValueTObjectL<TMPXItemId>( KMPXMediaGeneralId );
+        }
+    return id;
+    }
+
+
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::DurationL
+// ----------------------------------------------------------------------------
+//
+TReal32 TVcxMyVideosCollectionUtil::DurationL( CMPXMedia& aVideo )
+    {
+    TReal32 duration = -1;
+                            
+    if ( aVideo.IsSupported( KVcxMediaMyVideosDuration ) )
+        {
+        duration = aVideo.ValueTObjectL<TReal32>( KVcxMediaMyVideosDuration );
+        }
+    return duration;
+    }
+
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::Title
+// ----------------------------------------------------------------------------
+//
+const TDesC& TVcxMyVideosCollectionUtil::Title( CMPXMedia& aVideo )
+    {                            
+    if ( aVideo.IsSupported( KMPXMediaGeneralTitle ) )
+        {
+        return aVideo.ValueText( KMPXMediaGeneralTitle );
+        }
+    else
+        {
+        return KNullDesC;
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::RatingL
+// ----------------------------------------------------------------------------
+//
+TUint8 TVcxMyVideosCollectionUtil::RatingL( CMPXMedia& aVideo )
+    {
+    TUint8 rating = 0;
+                            
+    if ( aVideo.IsSupported( KVcxMediaMyVideosRating ) )
+        {
+        rating = aVideo.ValueTObjectL<TUint8>( KVcxMediaMyVideosRating );                
+        }
+    return rating;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::AudioFourCcL
+// ----------------------------------------------------------------------------
+//
+TUint32 TVcxMyVideosCollectionUtil::AudioFourCcL( CMPXMedia& aVideo )
+    {
+    TUint32 audioFourCc = 0;
+                            
+    if ( aVideo.IsSupported( KVcxMediaMyVideosAudioFourCc ) )
+        {
+        audioFourCc = aVideo.ValueTObjectL<TUint32>( KVcxMediaMyVideosAudioFourCc );                
+        }
+    return audioFourCc;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::AreSupported
+// ----------------------------------------------------------------------------
+//
+TBool TVcxMyVideosCollectionUtil::AreSupported( CMPXMedia& aVideo,
+        const TArray<TMPXAttribute>& aAttrs,
+        TBool& aNonSupportedAttrCanBeFoundFromMds )
+    {
+    MPX_FUNC("TVcxMyVideosCollectionUtil::AreSupported()");
+
+    TBool areSupported( ETrue );
+    aNonSupportedAttrCanBeFoundFromMds = EFalse;
+    
+    for ( TInt i = 0; i < aAttrs.Count(); i++ )
+        {
+        if ( !aVideo.IsSupported( aAttrs[i] ) )
+            {
+            MPX_DEBUG3("  attr (%x)(%x) not supported in media object", aAttrs[i].ContentId(),
+                    aAttrs[i].AttributeId() );
+
+            areSupported = EFalse;
+            
+            if ( AttrBelongsToFullSet( aAttrs[i] ) )
+                {
+                MPX_DEBUG1("  attr can be found from mds");
+                aNonSupportedAttrCanBeFoundFromMds = ETrue;
+                return areSupported; // We can return since areSupported and aNonSupportedAttrCanBeFoundFromMds
+                                     // won't change anymore, no matter what rest of the attributes are.
+                                     // Fetching from MDS is justified.
+                }
+            else
+                {
+                MPX_DEBUG1("  attr can NOT be found from mds");
+                }
+            }
+        }
+
+    return areSupported;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::AttrBelongsToFullSet
+// ----------------------------------------------------------------------------
+//
+TBool TVcxMyVideosCollectionUtil::AttrBelongsToFullSet( const TMPXAttribute& aAttr )
+    {
+    // these attributes are saved to MDS but not to cache.
+    if ( aAttr == KMPXMediaGeneralComment ||
+        aAttr == KMPXMediaGeneralCopyright ||
+        aAttr == KMPXMediaGeneralMimeType ||
+        aAttr == KMPXMediaGeneralLastPlaybackPosition ||
+        aAttr == KVcxMediaMyVideosModifiedDate ||
+        aAttr == KVcxMediaMyVideosAudioLanguage ||
+        aAttr == KVcxMediaMyVideosAuthor ||
+        aAttr == KMPXMediaVideoBitRate ||
+        aAttr == KMPXMediaVideoHeight ||
+        aAttr == KMPXMediaVideoWidth ||
+        aAttr == KMPXMediaVideoArtist )
+        {
+        return ETrue;
+        }
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::Origin
+// ----------------------------------------------------------------------------
+//
+TInt TVcxMyVideosCollectionUtil::Origin( TInt aCategoryId )
+    {
+    switch ( aCategoryId )
+        {
+        case KVcxMvcCategoryIdAll:
+            return KErrNotFound;
+
+        case KVcxMvcCategoryIdDownloads:
+            return EVcxMyVideosOriginDownloaded;
+
+        case KVcxMvcCategoryIdTvRecordings:
+            return EVcxMyVideosOriginTvRecording;
+            
+        case KVcxMvcCategoryIdCaptured:
+            return EVcxMyVideosOriginCapturedWithCamera;
+            
+        case KVcxMvcCategoryIdOther:
+            return EVcxMyVideosOriginOther;
+        }
+    return KErrNotFound;
+    }
+    
+#ifdef _DEBUG
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::PrintOpenFileHandlesL
+// ----------------------------------------------------------------------------
+//
+void TVcxMyVideosCollectionUtil::PrintOpenFileHandlesL( const TDesC& aFileName, RFs& aFs )
+    {
+
+#ifdef _DEBUG
+    TPtrC fileName( aFileName.Mid(2) );
+    MPX_DEBUG2("TVcxMyVideosCollectionUtil :: Checking open file handles to %S", &fileName);
+#endif
+
+    CFileList* fileList = 0;
+
+    TOpenFileScan fileScan( aFs );
+
+    fileScan.NextL( fileList );   
+  
+    while ( fileList )   
+        {
+        for (TInt i = 0; i < fileList->Count(); i++ )   
+            {   
+            if ( (*fileList)[i].iName == aFileName.Mid(2) )
+                {
+                TFullName processName;
+                GetProcessName( fileScan.ThreadId(), processName );
+                MPX_DEBUG3("TVcxMyVideosCollectionUtil:: %S has a file handle open to %S.", &processName, &(*fileList)[i].iName);
+                }
+            }
+
+        fileScan.NextL( fileList );   
+        }
+    }   
+
+// ----------------------------------------------------------------------------
+// TVcxMyVideosCollectionUtil::GetProcessName
+// ----------------------------------------------------------------------------
+//
+void TVcxMyVideosCollectionUtil::GetProcessName( TInt aThreadId, TFullName& aProcessName )
+    {
+  	TFindThread find(_L("*"));
+  	while( find.Next( aProcessName ) == KErrNone )
+        {
+      	RThread thread;
+      	TInt err = thread.Open( aProcessName );
+      	
+      	if ( err == KErrNone )
+      	    {
+      	    if ( thread.Id().Id() ==  aThreadId )
+      	        {
+      	        aProcessName = thread.Name();
+                thread.Close();
+                return;
+      	        }
+      	         	
+      	    thread.Close();
+      	    }
+        }
+    aProcessName = KNullDesC;
+    }   
+#endif
+   
+// End of file