diff -r 780c925249c1 -r 51035f0751c2 mmappcomponents/mmmtpdataprovider/mmmtpdpplugins/abstractmediamtpdataprovider/src/cabstractmediamtpdataproviderenumerator.cpp --- 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" ) );