mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderenumerator.cpp
branchRCL_3
changeset 19 51035f0751c2
parent 17 780c925249c1
child 28 f56ec6ce2732
--- a/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderenumerator.cpp	Wed Mar 31 22:26:09 2010 +0300
+++ b/mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderenumerator.cpp	Wed Apr 14 16:28:17 2010 +0300
@@ -269,7 +269,7 @@
 //
 void CAbstractMediaMtpDataProviderEnumerator::ScanNextL()
     {
-    while (iStorages.Count() > 0)
+    while ( iStorages.Count() > 0 )
         {
         while ( iEnumState < EEnumCount )
             {
@@ -284,14 +284,15 @@
                 return;
                 }
             ++iEnumState;
-            if (iEnumState == EEnumCount)
+            if ( iEnumState == EEnumCount )
                 {
                 break;
                 }
             InitStorageL();
             }
+
         iStorages.Remove( 0 );
-        if (iStorages.Count() == 0)
+        if ( iStorages.Count() == 0 )
             {
             break;
             }
@@ -313,8 +314,6 @@
 //
 void CAbstractMediaMtpDataProviderEnumerator::RunL()
     {
-    PRINT( _L( "MM MTP => CAbstractMediaMtpDataProviderEnumerator::RunL" ) );
-
     // insert all abstract medias into handle db of framework
     CMPXMedia* media = ( *iAbstractMedias )[iCurrentIndex];
     
@@ -411,21 +410,39 @@
     TUint32 parentHandle = iFramework.ObjectMgr().HandleL( parser.DriveAndPath() );
     PERFLOGSTOP( KObjectManagerObjectUid );
 
-    object->SetUint( CMTPObjectMetaData::EParentHandle, parentHandle );
-
-    PERFLOGSTART( KObjectManagerInsert );
-    iObjectMgr.InsertObjectL( *object );
-    PERFLOGSTOP( KObjectManagerInsert );
-
-    CleanupStack::PopAndDestroy( object );// - object
+    // MTP FW returns KMTPHandleNone for parentHandle in two situations:
+    // 1. The path doesn't exist
+    // 2. The object is under root directory
+    if ( parentHandle == KMTPHandleNone )
+        {
+        if ( BaflUtils::PathExists( iFramework.Fs(), parser.DriveAndPath() ) )
+            {
+            parentHandle = KMTPHandleNoParent;
+            }
+        else
+            {
+            iDataProvider.GetWrapperL().DeleteObjectL( *object );
+            }
+        }
 
-    //Only remember the playlist file for clean up
-    if( iEnumState == EEnumPlaylist )
+    if ( parentHandle != KMTPHandleNone )
         {
-        iDataProvider.GetWrapperL().CreateDummyFile( aSuid );
+        object->SetUint( CMTPObjectMetaData::EParentHandle, parentHandle );
+
+        PERFLOGSTART( KObjectManagerInsert );
+        iObjectMgr.InsertObjectL( *object );
+        PERFLOGSTOP( KObjectManagerInsert );
+
+        CleanupStack::PopAndDestroy( object );// - object
 
-        // remember the abstract media file for clean up
-        iDataProvider.GetWrapperL().AddDummyFileL( aSuid );
+        //Only remember the playlist file for clean up
+        if( iEnumState == EEnumPlaylist )
+            {
+            iDataProvider.GetWrapperL().CreateDummyFile( aSuid );
+
+            // remember the abstract media file for clean up
+            iDataProvider.GetWrapperL().AddDummyFileL( aSuid );
+            }
         }
 
     PRINT( _L( "MM MTP <= CAbstractMediaMtpDataProviderEnumerator::AddEntryL" ) );