# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1265063073 -7200 # Node ID b73a2e62868f3daf31ef2d7160c22f68e0263cdc # Parent acef663c1218e750b56fec90b97cb38bc6b4ae67 Revision: 201003 Kit: 201005 diff -r acef663c1218 -r b73a2e62868f clfwrapper/mediacollectionmanagersrc/mediacollectionmanagerimpl.cpp --- a/clfwrapper/mediacollectionmanagersrc/mediacollectionmanagerimpl.cpp Tue Jan 26 12:13:20 2010 +0200 +++ b/clfwrapper/mediacollectionmanagersrc/mediacollectionmanagerimpl.cpp Tue Feb 02 00:24:33 2010 +0200 @@ -84,6 +84,7 @@ { User::Leave( KErrNotSupported ); + // to stop compile warnings MMediaCollectionInfo* info = NULL; return info; } @@ -99,6 +100,7 @@ { User::Leave( KErrNotSupported ); + // to stop compile warnings TInt collectionID( 0 ); return collectionID; } @@ -220,6 +222,7 @@ { User::Leave( KErrNotSupported ); + // to stop compile warnings const TInt drive( 0 ); return drive; } diff -r acef663c1218 -r b73a2e62868f harvester/client/inc/harvesterrequestactive.h --- a/harvester/client/inc/harvesterrequestactive.h Tue Jan 26 12:13:20 2010 +0200 +++ b/harvester/client/inc/harvesterrequestactive.h Tue Feb 02 00:24:33 2010 +0200 @@ -134,6 +134,8 @@ private: // data + friend class CHarvesterRequestQueue; + /** * Session. Ref. */ @@ -157,7 +159,7 @@ TBool iAddLocation; // not own - mutable CHarvesterRequestQueue* iRequestQueue; + CHarvesterRequestQueue* iRequestQueue; TPckg iLocation; diff -r acef663c1218 -r b73a2e62868f harvester/client/src/harvesterrequestqueue.cpp --- a/harvester/client/src/harvesterrequestqueue.cpp Tue Jan 26 12:13:20 2010 +0200 +++ b/harvester/client/src/harvesterrequestqueue.cpp Tue Feb 02 00:24:33 2010 +0200 @@ -125,7 +125,8 @@ { CHarvesterRequestActive* selectedRequest = NULL; - for ( TInt i = 0; i < iRequests.Count(); i++ ) + TInt endIndex( iRequests.Count() ); + for ( TInt i = 0; i < endIndex; i++ ) { CHarvesterRequestActive* request = iRequests[i]; @@ -139,10 +140,7 @@ // correct the index so that no tasks are skipped i--; - if(i <= -1) - { - i = -1; - } + endIndex--; WRITELOG( "CHarvesterRequestQueue::RunL() - removing completed request"); } @@ -233,6 +231,7 @@ if( request ) { request->Cancel(); + request->iRequestQueue = NULL; } } } diff -r acef663c1218 -r b73a2e62868f harvester/common/inc/harvestercommon.h --- a/harvester/common/inc/harvestercommon.h Tue Jan 26 12:13:20 2010 +0200 +++ b/harvester/common/inc/harvestercommon.h Tue Feb 02 00:24:33 2010 +0200 @@ -91,7 +91,7 @@ }; const TInt KHarvesterGetRootDirFlags = EDirsFirst; -const TInt KHarvesterGetDirFlags = ESortByDate | EDescending | EDirsFirst; +const TInt KHarvesterGetDirFlags = ESortByDate | EAscending | EDirsFirst; const TInt KOriginIgnored = 255; const TInt KOriginFastHarvest = 254; @@ -101,6 +101,9 @@ const CActive::TPriority KHarvesterPriorityComposerPlugin = CActive::EPriorityStandard; const CActive::TPriority KHarvesterPriorityHarvestingPlugin = CActive::EPriorityStandard; +// Between Standard and UserInput to allow components to react to important events correctly +const TInt KHarvesterCustomImportantPriority = 5; + #endif diff -r acef663c1218 -r b73a2e62868f harvester/harvesterplugins/AudioPlugin/src/harvesteraudioplugin.cpp --- a/harvester/harvesterplugins/AudioPlugin/src/harvesteraudioplugin.cpp Tue Jan 26 12:13:20 2010 +0200 +++ b/harvester/harvesterplugins/AudioPlugin/src/harvesteraudioplugin.cpp Tue Feb 02 00:24:33 2010 +0200 @@ -441,27 +441,28 @@ CMdeObjectWrapper::HandleObjectPropertyL( mdeObject, *iPropDefs->iDatePropertyDef, &releaseDate, aIsAdd ); } - + if( iHarvestAlbumArt && iTNM && jpeg.Length() > 0 ) { - HBufC8* jpegBuf = jpeg.AllocLC(); - TBuf mimeType( KNullDesC ); + HBufC8* jpegBuf = jpeg.AllocLC(); + _LIT( KAlbumArtMimeType, "image/jpeg" ); + TBuf mimeType; + mimeType.Copy( KAlbumArtMimeType ); CThumbnailObjectSource* tnmSource = CThumbnailObjectSource::NewL( jpegBuf, mimeType, uri ); + // Ownership of buffer is transferred to Thumbnail Manager CleanupStack::Pop(); // jpegBuf - // Ownership of buffer is transferred to Thumbnail Manager iTNM->CreateThumbnails( *tnmSource ); delete tnmSource; TBool thumbnailPresent( ETrue ); CMdeObjectWrapper::HandleObjectPropertyL( mdeObject, *iPropDefs->iThumbnailPropertyDef, &thumbnailPresent, aIsAdd ); } - else if( iHarvestAlbumArt ) + else if( iHarvestAlbumArt && iTNM ) { TBool thumbnailNotPresent( EFalse ); CMdeObjectWrapper::HandleObjectPropertyL( mdeObject, *iPropDefs->iThumbnailPropertyDef, &thumbnailNotPresent, aIsAdd ); } - iAudioParser->ResetL(); diff -r acef663c1218 -r b73a2e62868f harvester/monitorplugins/mdsfileserverplugin/src/mdsfileserverplugin.cpp --- a/harvester/monitorplugins/mdsfileserverplugin/src/mdsfileserverplugin.cpp Tue Jan 26 12:13:20 2010 +0200 +++ b/harvester/monitorplugins/mdsfileserverplugin/src/mdsfileserverplugin.cpp Tue Feb 02 00:24:33 2010 +0200 @@ -391,9 +391,21 @@ break; case EFsFormatOpen: + { WRITELOG( "CMdsFileServerPlugin::DoRequestL() - EFsFormatOpen" ); // get the drive letter - err = iFsSession.Volume( volInfo, drvNumber ); + RFsPlugin fsplugin( aRequest ); + const TInt rfsPluginError( fsplugin.Connect() ); + if( rfsPluginError == KErrNone ) + { + err = fsplugin.Volume( volInfo, drvNumber ); + } + else + { + err = iFsSession.Volume( volInfo, drvNumber ); + } + fsplugin.Close(); + if( KErrNone == err ) { iFormatOldMediaId = volInfo.iUniqueID; @@ -406,6 +418,7 @@ iFormatDriveNumber = -1; } return KErrNone; + } case EFsFormatSubClose: WRITELOG( "CMdsFileServerPlugin::DoRequestL() - EFsFormatSubClose" ); diff -r acef663c1218 -r b73a2e62868f harvester/monitorplugins/mmcplugin/inc/mmcmounttaskao.h --- a/harvester/monitorplugins/mmcplugin/inc/mmcmounttaskao.h Tue Jan 26 12:13:20 2010 +0200 +++ b/harvester/monitorplugins/mmcplugin/inc/mmcmounttaskao.h Tue Feb 02 00:24:33 2010 +0200 @@ -93,6 +93,7 @@ CMmcFileList* iMmcFileList; CHarvesterEventManager* iHEM; TBool iCacheEvents; + RPointerArray iHdArray; }; diff -r acef663c1218 -r b73a2e62868f harvester/monitorplugins/mmcplugin/inc/mmcscannerao.h --- a/harvester/monitorplugins/mmcplugin/inc/mmcscannerao.h Tue Jan 26 12:13:20 2010 +0200 +++ b/harvester/monitorplugins/mmcplugin/inc/mmcscannerao.h Tue Feb 02 00:24:33 2010 +0200 @@ -20,6 +20,7 @@ #include // For CActive, link against: euser.lib #include // For RTimer, link against: euser.lib +#include #include "mdeharvestersession.h" #include "mmcfilelist.h" @@ -95,6 +96,8 @@ // Not owned MMonitorPluginObserver* iObserver; + + RPointerArray iHdArray; }; #endif // CMMCSCANNERAO_H diff -r acef663c1218 -r b73a2e62868f harvester/monitorplugins/mmcplugin/src/mmcfilelist.cpp --- a/harvester/monitorplugins/mmcplugin/src/mmcfilelist.cpp Tue Jan 26 12:13:20 2010 +0200 +++ b/harvester/monitorplugins/mmcplugin/src/mmcfilelist.cpp Tue Feb 02 00:24:33 2010 +0200 @@ -87,7 +87,7 @@ RPointerArray& aEntryArray ) { WRITELOG( "CMmcFileList::BuildFileListL - start" ); - CDesCArrayFlat* path = new(ELeave) CDesCArrayFlat( 8 ); + CDesCArrayFlat* path = new(ELeave) CDesCArrayFlat( 10 ); CleanupStack::PushL( path ); TFileName firstPath; firstPath.Copy( aDrivePath ); @@ -191,14 +191,11 @@ WRITELOG( "CMmcFileList::HandleFileEntryL()" ); // calculate batch size - TInt batchSize( 0 ); - if ( aEntryArray.Count() >= KEntryBufferSize ) + TInt batchSize( KEntryBufferSize ); + const TInt count( aEntryArray.Count() ); + if ( count < KEntryBufferSize ) { - batchSize = KEntryBufferSize; - } - else - { - batchSize = aEntryArray.Count(); + batchSize = count; } #ifdef _DEBUG diff -r acef663c1218 -r b73a2e62868f harvester/monitorplugins/mmcplugin/src/mmcmonitorplugin.cpp --- a/harvester/monitorplugins/mmcplugin/src/mmcmonitorplugin.cpp Tue Jan 26 12:13:20 2010 +0200 +++ b/harvester/monitorplugins/mmcplugin/src/mmcmonitorplugin.cpp Tue Feb 02 00:24:33 2010 +0200 @@ -24,8 +24,6 @@ #include -const TInt KMassStorageScanCustomPriority = 5; - _LIT( KColon, ":" ); // construct/destruct @@ -138,7 +136,7 @@ medias.Append( hdInfo ); TRAP_IGNORE( iHddScanner = CMmcScannerAO::NewL( hdMediaId, iMdEClient, iObserver, - aHarvesterPluginFactory, KMassStorageScanCustomPriority, alreadyWaited )); + aHarvesterPluginFactory, KHarvesterCustomImportantPriority, alreadyWaited )); } } diff -r acef663c1218 -r b73a2e62868f harvester/monitorplugins/mmcplugin/src/mmcmounttaskao.cpp --- a/harvester/monitorplugins/mmcplugin/src/mmcmounttaskao.cpp Tue Jan 26 12:13:20 2010 +0200 +++ b/harvester/monitorplugins/mmcplugin/src/mmcmounttaskao.cpp Tue Feb 02 00:24:33 2010 +0200 @@ -29,8 +29,6 @@ #include "harvesterplugininfo.h" #include "harvesterpluginfactory.h" -const TInt KEntryBufferSize = 100; - //----------------------------------------------------------------------------- // CMMCMountTaskAO //----------------------------------------------------------------------------- @@ -58,7 +56,7 @@ } CMMCMountTaskAO::CMMCMountTaskAO() : - CActive( KHarvesterPriorityMonitorPlugin ) + CActive( KHarvesterCustomImportantPriority ) { WRITELOG( "CMMCMountTaskAO::CMMCMountTaskAO" ); } @@ -81,6 +79,8 @@ } delete iMmcFileList; + iHdArray.ResetAndDestroy(); + iHdArray.Close(); } void CMMCMountTaskAO::SetMonitorObserver( MMonitorPluginObserver& aObserver ) @@ -156,6 +156,8 @@ iMountData = NULL; } + iHdArray.ResetAndDestroy(); + if( iMountDataQueue.Count() > 0 ) { iMountData = iMountDataQueue[0]; @@ -279,7 +281,7 @@ } Deinitialize(); SetNextRequest( ERequestStartTask ); - break; + return; } if ( iEntryArray.Count() > 0 ) @@ -302,7 +304,6 @@ break; } } - break; case ERequestHandleReharvest: { @@ -318,13 +319,23 @@ { HandleReharvestL( iHarvestEntryArray ); SetNextRequest( ERequestHandleReharvest ); + break; } else { + if ( iObserver ) + { + if( iHdArray.Count() > 0) + { + iObserver->MonitorEvent( iHdArray ); + } + } + iHdArray.Reset(); + iHdArray.Compress(); SetNextRequest( ERequestHandleFileEntry ); + break; } } - break; case ERequestCleanup: { @@ -394,22 +405,18 @@ { WRITELOG("CMMCMountTaskAO::HandleReharvestL"); - TInt batchSize( 0 ); - RPointerArray hdArray; - CleanupClosePushL( hdArray ); - - if ( aArray.Count() >= KEntryBufferSize ) + const TInt count( aArray.Count() ); + TInt batchSize( KMmcEntryBufferSize ); + if ( count < KMmcEntryBufferSize ) { - batchSize = KEntryBufferSize; + batchSize = count; } - else + + const TInt endIndex( count - batchSize ); + + for ( TInt i = count; --i >= endIndex; ) { - batchSize = aArray.Count(); - } - - for ( TInt i = 0; i < batchSize; i++ ) - { - CPlaceholderData* ei = aArray[0]; + CPlaceholderData* ei = aArray[i]; HBufC* fileName = ei->Uri().AllocLC(); CHarvesterData* hd = CHarvesterData::NewL( fileName ); @@ -430,24 +437,14 @@ hd->SetClientData( ei ); } - hdArray.Append( hd ); - aArray.Remove( 0 ); + iHdArray.Append( hd ); + aArray.Remove( i ); } if( aArray.Count() == 0 ) { aArray.Compress(); } - - if ( iObserver ) - { - if( hdArray.Count() > 0) - { - iObserver->MonitorEvent( hdArray ); - } - } - - CleanupStack::PopAndDestroy( &hdArray ); } void CMMCMountTaskAO::RemoveNotPresentFromMDE() diff -r acef663c1218 -r b73a2e62868f harvester/monitorplugins/mmcplugin/src/mmcscannerao.cpp --- a/harvester/monitorplugins/mmcplugin/src/mmcscannerao.cpp Tue Jan 26 12:13:20 2010 +0200 +++ b/harvester/monitorplugins/mmcplugin/src/mmcscannerao.cpp Tue Feb 02 00:24:33 2010 +0200 @@ -17,13 +17,11 @@ #include "mmcscannerao.h" #include "harvesterlog.h" #include "fsutil.h" -#include #include #include _LIT( KColon, ":" ); -const TInt KEntryBufferSize = 100; const TInt KDefaultDelay = 4; const TInt KMillion = 1000000; @@ -95,6 +93,9 @@ iHarvestEntryArray.ResetAndDestroy(); iHarvestEntryArray.Close(); + iHdArray.ResetAndDestroy(); + iHdArray.Close(); + iFs.Close(); } @@ -165,6 +166,15 @@ } else { + if ( iObserver ) + { + if( iHdArray.Count() > 0) + { + iObserver->MonitorEvent( iHdArray ); + } + } + iHdArray.Reset(); + iHdArray.Compress(); SetState( ERemoveNPFiles ); } break; @@ -181,6 +191,8 @@ case( EDone ): { iFs.Close(); + iHdArray.Reset(); + iHdArray.Compress(); iEntryArray.Compress(); iHarvestEntryArray.Compress(); break; @@ -195,23 +207,19 @@ void CMmcScannerAO::HandleReharvestL() { WRITELOG("CMMCMountTaskAO::HandleReharvestL"); - - TInt batchSize( 0 ); - RPointerArray hdArray; - CleanupClosePushL( hdArray ); - - if ( iHarvestEntryArray.Count() >= KEntryBufferSize ) + + const TInt count( iHarvestEntryArray.Count() ); + TInt batchSize( KMmcEntryBufferSize ); + if ( count < KMmcEntryBufferSize ) { - batchSize = KEntryBufferSize; + batchSize = count; } - else + + const TInt endIndex( count - batchSize ); + + for ( TInt i = count; --i >= endIndex; ) { - batchSize = iHarvestEntryArray.Count(); - } - - for ( TInt i = 0; i < batchSize; i++ ) - { - CPlaceholderData* ei = iHarvestEntryArray[0]; + CPlaceholderData* ei = iHarvestEntryArray[i]; HBufC* fileName = ei->Uri().AllocLC(); CHarvesterData* hd = CHarvesterData::NewL( fileName ); @@ -231,28 +239,14 @@ hd->SetObjectType( EPlaceholder ); hd->SetClientData( ei ); } - hdArray.Append( hd ); - iHarvestEntryArray.Remove( 0 ); + iHdArray.Append( hd ); + iHarvestEntryArray.Remove( i ); } if( iHarvestEntryArray.Count() == 0 ) { iHarvestEntryArray.Compress(); } - - if ( iObserver ) - { - if( hdArray.Count() > 0) - { - iObserver->MonitorEvent( hdArray ); - } - else - { - iObserver->MonitorEvent( hdArray[0] ); - } - } - - CleanupStack::PopAndDestroy( &hdArray ); } diff -r acef663c1218 -r b73a2e62868f harvester/server/inc/harvesterao.h --- a/harvester/server/inc/harvesterao.h Tue Jan 26 12:13:20 2010 +0200 +++ b/harvester/server/inc/harvesterao.h Tue Feb 02 00:24:33 2010 +0200 @@ -534,6 +534,8 @@ CHarvesterMediaIdUtil* iMediaIdUtil; CHarvesterAoPropertyDefs* iPropDefs; + + TBool iMassMemoryIdChecked; }; #endif //__CHARVESTERAO_H__ diff -r acef663c1218 -r b73a2e62868f harvester/server/src/harvesterao.cpp --- a/harvester/server/src/harvesterao.cpp Tue Jan 26 12:13:20 2010 +0200 +++ b/harvester/server/src/harvesterao.cpp Tue Feb 02 00:24:33 2010 +0200 @@ -17,6 +17,7 @@ #include #include +#include #include #include @@ -47,8 +48,6 @@ const TInt KContainerPlaceholderQueueSize = 10; const TInt KObjectDefStrSize = 20; -const TInt KHarvesterAOCustomPriority = 5; - _LIT( KTAGDaemonName, "ThumbAGDaemon" ); _LIT( KTAGDaemonExe, "thumbagdaemon.exe" ); @@ -114,7 +113,7 @@ // CHarvesterAO // --------------------------------------------------------------------------- // -CHarvesterAO::CHarvesterAO() : CActive( KHarvesterAOCustomPriority) +CHarvesterAO::CHarvesterAO() : CActive( KHarvesterCustomImportantPriority) { WRITELOG( "CHarvesterAO::CHarvesterAO() - begin" ); @@ -386,28 +385,46 @@ { WRITELOG1( "CHarvesterAO::HandleUnmount(%d)", aMediaId ); - TUint32 mediaId(0); - TUint removed(0); + TUint32 mediaId( 0 ); + TUint removed( 0 ); CHarvesterData* hd = NULL; - -#ifdef _DEBUG - WRITELOG1( "CHarvesterAO::HandleUnmount() iReadyPHArray.Count() = %d", iReadyPHArray.Count() ); -#endif - if( iReadyPHArray.Count() > 0 ) - { - TRAP_IGNORE( iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypePlaceholder, iReadyPHArray.Count() ) ); - TRAP_IGNORE( iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, iReadyPHArray.Count()) ); - iReadyPHArray.ResetAndDestroy(); - } TInt err( KErrNone ); #ifdef _DEBUG + WRITELOG1( "CHarvesterAO::HandleUnmount() iReadyPHArray.Count() = %d", iReadyPHArray.Count() ); +#endif + TInt arrayCount( iReadyPHArray.Count() ); + if( arrayCount > 0 ) + { + for( TInt i=arrayCount-1; i>= 0; i--) + { + hd = iPHArray[i]; + err = iMediaIdUtil->GetMediaId( hd->Uri(), mediaId ); + + if( err == KErrNone && mediaId == aMediaId ) + { + WRITELOG1( "CHarvesterAO::HandleUnmount() remove iReadyPHArray %d", i); + delete hd; + hd = NULL; + iReadyPHArray.Remove( i ); + removed++; + arrayCount--; + } + } + WRITELOG1( "CHarvesterAO::HandleUnmount() DecreaseItemCountL iReadyPHArray %d", removed); + TRAP_IGNORE( iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypePlaceholder, removed) ); + } + + removed = 0; + +#ifdef _DEBUG WRITELOG1( "CHarvesterAO::HandleUnmount() iPHArray.Count() = %d", iPHArray.Count() ); #endif - if( iPHArray.Count() > 0 ) + arrayCount = iPHArray.Count(); + if( arrayCount > 0 ) { - for( TInt i=iPHArray.Count()-1; i>= 0; i--) + for( TInt i=arrayCount-1; i>= 0; i--) { hd = iPHArray[i]; err = iMediaIdUtil->GetMediaId( hd->Uri(), mediaId ); @@ -419,6 +436,7 @@ hd = NULL; iPHArray.Remove( i ); removed++; + arrayCount--; } } WRITELOG1( "CHarvesterAO::HandleUnmount() DecreaseItemCountL iPHArray %d", removed); @@ -430,9 +448,10 @@ #ifdef _DEBUG WRITELOG1( "CHarvesterAO::HandleUnmount() iContainerPHArray.Count() = %d", iContainerPHArray.Count() ); #endif - if( iContainerPHArray.Count() > 0 ) + arrayCount = iContainerPHArray.Count(); + if( arrayCount > 0 ) { - for( TInt i=iContainerPHArray.Count()-1; i>= 0; i--) + for( TInt i=arrayCount-1; i>= 0; i--) { hd = iContainerPHArray[i]; err = iMediaIdUtil->GetMediaId( hd->Uri(), mediaId ); @@ -444,18 +463,21 @@ hd = NULL; iContainerPHArray.Remove( i ); removed++; + arrayCount--; } } WRITELOG1( "CHarvesterAO::HandleUnmount() DecreaseItemCountL iContainerPHArray %d", removed); TRAP_IGNORE( iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypePlaceholder, removed) ); } - - TUint count = iQueue->ItemsInQueue(); + + removed = 0; + + const TUint count = iQueue->ItemsInQueue(); WRITELOG1( "CHarvesterAO::HandleUnmount() iQueue.Count() = %d", count ); if( count > 0 ) { WRITELOG( "CHarvesterAO::HandleUnmount() remove iQueue" ); - TUint removed = iQueue->RemoveItems( aMediaId ); + removed = iQueue->RemoveItems( aMediaId ); WRITELOG1( "CHarvesterAO::HandleUnmount() removed iQueue = %d", removed ); TRAP_IGNORE( iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypePlaceholder, removed ) ); TRAP_IGNORE( iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, removed ) ); @@ -466,15 +488,15 @@ removed = 0; RPointerArray& hpiArray = iHarvesterPluginFactory->GetPluginInfos(); - const TInt arrayCount( hpiArray.Count() ); - if( arrayCount > 0 ) + const TInt hpiArrayCount( hpiArray.Count() ); + if( hpiArrayCount > 0 ) { RArray placeholders; TUint32 mediaId( 0 ); TInt err( KErrNone ); - for( TInt i = arrayCount; --i >= 0; ) + for( TInt i = hpiArrayCount; --i >= 0; ) { CHarvesterPluginInfo* hpi = hpiArray[i]; for( TInt j = hpi->iQueue.Count(); --j >= 0; ) @@ -668,7 +690,8 @@ TInt fastHarvestPlaceholderCount = 0; - for (TInt i = iPHArray.Count() ; --i >= 0;) + TInt endindex( iPHArray.Count() ); + for( TInt i = 0; i < endindex; i++ ) { CHarvesterData* hd = iPHArray[i]; @@ -676,6 +699,8 @@ { iContainerPHArray.Append( hd ); iPHArray.Remove( i ); + i--; + endindex--; continue; } TBuf objDefStr; @@ -690,6 +715,8 @@ delete hd; hd = NULL; iPHArray.Remove( i ); + i--; + endindex--; iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); continue; } @@ -717,6 +744,8 @@ delete hd; hd = NULL; iPHArray.Remove( i ); + i--; + endindex--; iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); CleanupStack::PopAndDestroy( entry ); CleanupStack::PopAndDestroy( phData ); @@ -743,6 +772,8 @@ delete hd; hd = NULL; iPHArray.Remove( i ); + i--; + endindex--; iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); continue; } @@ -764,7 +795,7 @@ mdeObject->AddUint32PropertyL( *iPropDefs->iSizePropertyDef, phData->FileSize() ); // set creation date - TTime localModifiedDate = phData->Modified() + timeOffsetSeconds; + const TTime localModifiedDate = phData->Modified() + timeOffsetSeconds; mdeObject->AddTimePropertyL( *iPropDefs->iCreationDatePropertyDef, localModifiedDate ); // set modification date @@ -812,6 +843,8 @@ iReadyPHArray.Append( hd ); iPHArray.Remove( i ); + i--; + endindex--; } const TInt objectCount = mdeObjectArray.Count(); @@ -1219,6 +1252,28 @@ } TRAP_IGNORE( BootPartialRestoreScanL() ); #endif + + if( !iMassMemoryIdChecked ) + { + TInt drive( -1 ); + TInt massStorageError( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultMassStorage, drive ) ); + if( massStorageError == KErrNone ) + { + TVolumeInfo massStorageVolumeInfo; + iFs.Volume( massStorageVolumeInfo, drive ); + const TUint32 massStorageMediaId( massStorageVolumeInfo.iUniqueID ); + massStorageError = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage, drive ); + if( massStorageError == KErrNone ) + { + iFs.Volume( massStorageVolumeInfo, drive ); + // Update mass storage media id if the mass storage is not memory card + if( massStorageVolumeInfo.iUniqueID != massStorageMediaId && massStorageMediaId != 0 ) + { + iMdEHarvesterSession->CheckMassStorageMediaId( massStorageMediaId ); + } + } + } + } } else { @@ -1344,16 +1399,19 @@ #ifdef _DEBUG WRITELOG1("CHarvesterAO::RunL - items in ready pharray: %d", iReadyPHArray.Count() ); #endif - const TInt beginIndex( iReadyPHArray.Count() ); - TInt endIndex( beginIndex - KPlaceholderQueueSize ); - if( endIndex < 0 ) + const TInt arrayCount( iReadyPHArray.Count() ); + TInt endIndex( KPlaceholderQueueSize ); + if( arrayCount < KPlaceholderQueueSize ) { - endIndex = 0; + endIndex = arrayCount; } - for ( TInt i = beginIndex; --i >= endIndex; ) + for( TInt i = 0; i < endIndex; i++ ) { CheckFileExtensionAndHarvestL( iReadyPHArray[i] ); iReadyPHArray.Remove( i ); + // correct the index so harvesting order remains ok + i--; + endIndex--; } if( iReadyPHArray.Count() ) { @@ -2255,6 +2313,26 @@ { WRITELOG("CHarvesterAO::BootScanL() - begin"); + + TInt drive( -1 ); + TInt massStorageError( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultMassStorage, drive ) ); + if( massStorageError == KErrNone ) + { + TVolumeInfo massStorageVolumeInfo; + iFs.Volume( massStorageVolumeInfo, drive ); + const TUint32 massStorageMediaId( massStorageVolumeInfo.iUniqueID ); + massStorageError = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage, drive ); + if( massStorageError == KErrNone ) + { + iFs.Volume( massStorageVolumeInfo, drive ); + // Update mass storage media id if the mass storage is not memory card + if( massStorageVolumeInfo.iUniqueID != massStorageMediaId && massStorageMediaId != 0 ) + { + iMdEHarvesterSession->CheckMassStorageMediaId( massStorageMediaId ); + } + } + } + TVolumeInfo volumeInfo; iFs.Volume( volumeInfo, EDriveC ); @@ -2268,6 +2346,7 @@ RPointerArray hdArray; CleanupClosePushL( hdArray ); + TBool rootDir( ETrue ); while( aScanItems.Count() > 0 ) { @@ -2275,8 +2354,17 @@ TUint32 preinstalled = aScanItems[0]->iPreinstalled; CDir* directory = NULL; - TInt error = iFs.GetDir( folder->Des(), KEntryAttDir, KHarvesterGetDirFlags, directory ); - + TInt error( KErrNone ); + if( rootDir ) + { + error = iFs.GetDir( folder->Des(), KEntryAttDir, KHarvesterGetRootDirFlags, directory ); + rootDir = EFalse; + } + else + { + error = iFs.GetDir( folder->Des(), KEntryAttDir, KHarvesterGetDirFlags, directory ); + } + if ( error == KErrNone ) { CleanupStack::PushL( directory ); @@ -2407,6 +2495,8 @@ iMdEHarvesterSession->RemoveFilesNotPresent( volumeInfo.iUniqueID, ETrue ); + iMassMemoryIdChecked = ETrue; + WRITELOG("CHarvesterAO::BootScanL() - end"); } diff -r acef663c1218 -r b73a2e62868f harvester/server/src/harvesterqueue.cpp --- a/harvester/server/src/harvesterqueue.cpp Tue Jan 26 12:13:20 2010 +0200 +++ b/harvester/server/src/harvesterqueue.cpp Tue Feb 02 00:24:33 2010 +0200 @@ -244,7 +244,8 @@ void CHarvesterQueue::MonitorEvent( RPointerArray& aHarvesterDataArray ) { - for( TInt i = aHarvesterDataArray.Count(); --i >= 0; ) + const TInt count( aHarvesterDataArray.Count() ); + for( TInt i = 0; i < count; i++ ) { MonitorEvent( aHarvesterDataArray[i] ); } diff -r acef663c1218 -r b73a2e62868f inc/mdeharvestersession.h --- a/inc/mdeharvestersession.h Tue Jan 26 12:13:20 2010 +0200 +++ b/inc/mdeharvestersession.h Tue Feb 02 00:24:33 2010 +0200 @@ -326,6 +326,11 @@ */ IMPORT_C void ResetDBL(); + /** + * Update DB with current internal mass storage media id + */ + void CheckMassStorageMediaId( const TUint32 aMediaId ); + private: CMdESessionImpl* iSession; diff -r acef663c1218 -r b73a2e62868f inc/mdscommoninternal.h --- a/inc/mdscommoninternal.h Tue Jan 26 12:13:20 2010 +0200 +++ b/inc/mdscommoninternal.h Tue Feb 02 00:24:33 2010 +0200 @@ -48,6 +48,9 @@ _LIT( KSchemaChunkName, "MdSSchema" ); _LIT( KCMediaIdKey, "CDriveMediaId" ); +_LIT( KMassStorageMediaIdKey, "MassStorageMediaId" ); + +const TInt KMmcEntryBufferSize = 100; // The server version. A version must be specified when // creating a session with the server. @@ -124,6 +127,7 @@ EGetPending, // Get objects with pending flag EResetDB, // Reset database (works only in DEBUG build) EChangeMediaId, // Change C-drive media id and update objects + EChangeMassStorageMediaId, // Change internal mass storage media id and update objects EUnknownMdEServRqst // handle for unknown requests }; diff -r acef663c1218 -r b73a2e62868f locationmanager/locationtrail/inc/clocationrecord.h --- a/locationmanager/locationtrail/inc/clocationrecord.h Tue Jan 26 12:13:20 2010 +0200 +++ b/locationmanager/locationtrail/inc/clocationrecord.h Tue Feb 02 00:24:33 2010 +0200 @@ -20,7 +20,7 @@ #include #include -#include +#include #include "rlocationtrail.h" #include "locationdatatype.h" diff -r acef663c1218 -r b73a2e62868f locationmanager/locationtrail/inc/cpositioninfo.h --- a/locationmanager/locationtrail/inc/cpositioninfo.h Tue Jan 26 12:13:20 2010 +0200 +++ b/locationmanager/locationtrail/inc/cpositioninfo.h Tue Feb 02 00:24:33 2010 +0200 @@ -19,8 +19,8 @@ #ifndef C_CPOSITIONINFO_H #define C_CPOSITIONINFO_H -#include -#include +#include +#include #include "rlocationtrail.h" /** diff -r acef663c1218 -r b73a2e62868f locationmanager/locationtrail/inc/ctracklog.h --- a/locationmanager/locationtrail/inc/ctracklog.h Tue Jan 26 12:13:20 2010 +0200 +++ b/locationmanager/locationtrail/inc/ctracklog.h Tue Feb 02 00:24:33 2010 +0200 @@ -20,9 +20,9 @@ #define CTRACKLOG_H_ #include -#include +#include #include "clocationrecord.h" -#include +#include class MTrackLogObserver; class CGpxConverterAO; diff -r acef663c1218 -r b73a2e62868f mds_plat/location_manager_api/inc/locationdatatype.h --- a/mds_plat/location_manager_api/inc/locationdatatype.h Tue Jan 26 12:13:20 2010 +0200 +++ b/mds_plat/location_manager_api/inc/locationdatatype.h Tue Feb 02 00:24:33 2010 +0200 @@ -17,7 +17,7 @@ #ifndef LOCATIONDATATYPE_H_ #define LOCATIONDATATYPE_H_ -#include +#include #include /* diff -r acef663c1218 -r b73a2e62868f mds_plat/location_manager_api/inc/rlocationmanager.h --- a/mds_plat/location_manager_api/inc/rlocationmanager.h Tue Jan 26 12:13:20 2010 +0200 +++ b/mds_plat/location_manager_api/inc/rlocationmanager.h Tue Feb 02 00:24:33 2010 +0200 @@ -19,7 +19,7 @@ #define R_RLOCATIONMANAGER_H #include -#include +#include #include /** diff -r acef663c1218 -r b73a2e62868f mds_plat/location_manager_api/inc/rlocationobjectmanipulator.h --- a/mds_plat/location_manager_api/inc/rlocationobjectmanipulator.h Tue Jan 26 12:13:20 2010 +0200 +++ b/mds_plat/location_manager_api/inc/rlocationobjectmanipulator.h Tue Feb 02 00:24:33 2010 +0200 @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include "mdccommon.h" diff -r acef663c1218 -r b73a2e62868f mds_plat/location_manager_api/inc/rlocationtrail.h --- a/mds_plat/location_manager_api/inc/rlocationtrail.h Tue Jan 26 12:13:20 2010 +0200 +++ b/mds_plat/location_manager_api/inc/rlocationtrail.h Tue Feb 02 00:24:33 2010 +0200 @@ -20,7 +20,7 @@ #include #include -#include +#include #include #include diff -r acef663c1218 -r b73a2e62868f mds_plat/location_manager_api/inc/rtracklog.h --- a/mds_plat/location_manager_api/inc/rtracklog.h Tue Jan 26 12:13:20 2010 +0200 +++ b/mds_plat/location_manager_api/inc/rtracklog.h Tue Feb 02 00:24:33 2010 +0200 @@ -18,7 +18,7 @@ #ifndef RTRACKLOG_H_ #define RTRACKLOG_H_ -#include +#include #include #include diff -r acef663c1218 -r b73a2e62868f metadataengine/client/bwincw/mdeclientu.def --- a/metadataengine/client/bwincw/mdeclientu.def Tue Jan 26 12:13:20 2010 +0200 +++ b/metadataengine/client/bwincw/mdeclientu.def Tue Feb 02 00:24:33 2010 +0200 @@ -294,4 +294,5 @@ ?SetPendingL@CMdEHarvesterSession@@QAEXABV?$RArray@K@@@Z @ 293 NONAME ; void CMdEHarvesterSession::SetPendingL(class RArray const &) ?PlaceholderOnly@CMdEObjectCondition@@QBEHXZ @ 294 NONAME ; int CMdEObjectCondition::PlaceholderOnly(void) const ?SetPlaceholderOnly@CMdEObjectCondition@@QAEXH@Z @ 295 NONAME ; void CMdEObjectCondition::SetPlaceholderOnly(int) + ?CheckMassStorageMediaId@CMdEHarvesterSession@@QAEXK@Z @ 296 NONAME ; void CMdEHarvesterSession::CheckMassStorageMediaId(unsigned long) diff -r acef663c1218 -r b73a2e62868f metadataengine/client/eabi/mdeclientu.def --- a/metadataengine/client/eabi/mdeclientu.def Tue Jan 26 12:13:20 2010 +0200 +++ b/metadataengine/client/eabi/mdeclientu.def Tue Feb 02 00:24:33 2010 +0200 @@ -365,4 +365,5 @@ _ZN20CMdEHarvesterSession13ResetPendingLERK6RArrayImE @ 364 NONAME _ZN19CMdEObjectCondition18SetPlaceholderOnlyEi @ 365 NONAME _ZNK19CMdEObjectCondition15PlaceholderOnlyEv @ 366 NONAME + _ZN20CMdEHarvesterSession23CheckMassStorageMediaIdEm @ 367 NONAME diff -r acef663c1218 -r b73a2e62868f metadataengine/client/inc/mdeenginesession.h --- a/metadataengine/client/inc/mdeenginesession.h Tue Jan 26 12:13:20 2010 +0200 +++ b/metadataengine/client/inc/mdeenginesession.h Tue Feb 02 00:24:33 2010 +0200 @@ -465,6 +465,11 @@ */ void DoChangeCDriveMediaId(); + /** + * Change intenal mass storage media id in the DB and update objects accordingly + */ + void DoCheckMassStorageMediaId( const TUint32 aMediaId ); + /** * Set "binary composing to file" pending flag to objects * diff -r acef663c1218 -r b73a2e62868f metadataengine/client/inc/mdenotifierao.h --- a/metadataengine/client/inc/mdenotifierao.h Tue Jan 26 12:13:20 2010 +0200 +++ b/metadataengine/client/inc/mdenotifierao.h Tue Feb 02 00:24:33 2010 +0200 @@ -130,7 +130,6 @@ */ void DoNotifyObserver(); - void DecodeIdBufferL(); void DecodeRelationItemBufferL(); diff -r acef663c1218 -r b73a2e62868f metadataengine/client/src/mdeenginesession.cpp --- a/metadataengine/client/src/mdeenginesession.cpp Tue Jan 26 12:13:20 2010 +0200 +++ b/metadataengine/client/src/mdeenginesession.cpp Tue Feb 02 00:24:33 2010 +0200 @@ -808,9 +808,19 @@ void RMdEEngineSession::DoChangeCDriveMediaId() { - SendReceive( EChangeMediaId ); + Send( EChangeMediaId ); } +void RMdEEngineSession::DoCheckMassStorageMediaId( const TUint32 aMediaId ) + { + TPckgC mediaIdPckg( aMediaId ); + + TIpcArgs ipcArgs; + ipcArgs.Set( 0, &mediaIdPckg ); + + SendReceive( EChangeMassStorageMediaId, ipcArgs ); + } + void RMdEEngineSession::DoSetPendingL( const RArray& aObjectIds ) { HBufC8* idBuffer = SerializeArrayL( aObjectIds ); diff -r acef663c1218 -r b73a2e62868f metadataengine/client/src/mdeharvestersession.cpp --- a/metadataengine/client/src/mdeharvestersession.cpp Tue Jan 26 12:13:20 2010 +0200 +++ b/metadataengine/client/src/mdeharvestersession.cpp Tue Feb 02 00:24:33 2010 +0200 @@ -342,3 +342,8 @@ aObjectIdBuffer ); } +EXPORT_C void CMdEHarvesterSession::CheckMassStorageMediaId( const TUint32 aMediaId ) + { + iSession->EngineSession().DoCheckMassStorageMediaId( aMediaId ); + } + diff -r acef663c1218 -r b73a2e62868f metadataengine/client/src/mdesessionimpl.cpp --- a/metadataengine/client/src/mdesessionimpl.cpp Tue Jan 26 12:13:20 2010 +0200 +++ b/metadataengine/client/src/mdesessionimpl.cpp Tue Feb 02 00:24:33 2010 +0200 @@ -2523,6 +2523,7 @@ delete iNotifiers[index]; iNotifiers[index] = NULL; iNotifiers.Remove( index ); + iNotifiers.Compress(); } else { @@ -2544,6 +2545,7 @@ delete iNotifiers[index]; iNotifiers[index] = NULL; iNotifiers.Remove( index ); + iNotifiers.Compress(); } else { @@ -2574,6 +2576,7 @@ delete iNotifiers[index]; iNotifiers[index] = NULL; iNotifiers.Remove( index ); + iNotifiers.Compress(); } else { @@ -2627,6 +2630,7 @@ delete iNotifiers[index]; iNotifiers[index] = NULL; iNotifiers.Remove( index ); + iNotifiers.Compress(); } else { diff -r acef663c1218 -r b73a2e62868f metadataengine/server/group/mdsserver.mmp --- a/metadataengine/server/group/mdsserver.mmp Tue Jan 26 12:13:20 2010 +0200 +++ b/metadataengine/server/group/mdsserver.mmp Tue Feb 02 00:24:33 2010 +0200 @@ -93,6 +93,7 @@ LIBRARY flogger.lib LIBRARY hash.lib LIBRARY inetprotutil.lib +LIBRARY platformenv.lib UNPAGED diff -r acef663c1218 -r b73a2e62868f metadataengine/server/inc/mdsimportexport.h --- a/metadataengine/server/inc/mdsimportexport.h Tue Jan 26 12:13:20 2010 +0200 +++ b/metadataengine/server/inc/mdsimportexport.h Tue Feb 02 00:24:33 2010 +0200 @@ -520,6 +520,8 @@ TInt iLastDriveNumber; TVolumeInfo iLastVolumeInfo; + + TBool iLogEnabled; }; diff -r acef663c1218 -r b73a2e62868f metadataengine/server/inc/mdsmaintenanceengine.h --- a/metadataengine/server/inc/mdsmaintenanceengine.h Tue Jan 26 12:13:20 2010 +0200 +++ b/metadataengine/server/inc/mdsmaintenanceengine.h Tue Feb 02 00:24:33 2010 +0200 @@ -82,9 +82,9 @@ CMdCSerializationBuffer& aItems ); /** - * Stores C-drive media id to the DB. + * Stores drive media id to the DB. */ - void StoreCDriveMediaIdL(); + void StoreDriveMediaIdsL(); /** * Creates metadata tables to database. diff -r acef663c1218 -r b73a2e62868f metadataengine/server/inc/mdsmanipulationengine.h --- a/metadataengine/server/inc/mdsmanipulationengine.h Tue Jan 26 12:13:20 2010 +0200 +++ b/metadataengine/server/inc/mdsmanipulationengine.h Tue Feb 02 00:24:33 2010 +0200 @@ -240,7 +240,12 @@ * Updates C drive media id for all objects with the old media id. */ void ChangeMediaIdL(); - + + /** + * Updates internal mass storage media id for all objects. + */ + void CheckMassStorageMediaIdL( const TUint32 aMediaId ); + /** * Adds new relation definition to the DB. * @param aNamespaceId namespace id diff -r acef663c1218 -r b73a2e62868f metadataengine/server/inc/mdsserversession.h --- a/metadataengine/server/inc/mdsserversession.h Tue Jan 26 12:13:20 2010 +0200 +++ b/metadataengine/server/inc/mdsserversession.h Tue Feb 02 00:24:33 2010 +0200 @@ -306,6 +306,11 @@ void ChangeMediaIdL( const RMessage2& aMessage ); /** + * Check media id of internal mass storage to DB and update items accordingly + */ + void CheckMassStorageMediaIdL( const RMessage2& aMessage ); + + /** * Set "binary composing to file" pending flag to objects. * * @param aMessage message from client where first argument is diff -r acef663c1218 -r b73a2e62868f metadataengine/server/inc/mdssqlobjectmanipulate.h --- a/metadataengine/server/inc/mdssqlobjectmanipulate.h Tue Jan 26 12:13:20 2010 +0200 +++ b/metadataengine/server/inc/mdssqlobjectmanipulate.h Tue Feb 02 00:24:33 2010 +0200 @@ -465,6 +465,8 @@ */ TInt GetPendingL(TDefId aObjectDefId, TInt aBufferSize, RArray& aObjectIds); + + void CheckMassStorageMediaIdL( const TUint32 aMediaId ); protected: // personal methods diff -r acef663c1218 -r b73a2e62868f metadataengine/server/src/mdsimportexport.cpp --- a/metadataengine/server/src/mdsimportexport.cpp Tue Jan 26 12:13:20 2010 +0200 +++ b/metadataengine/server/src/mdsimportexport.cpp Tue Feb 02 00:24:33 2010 +0200 @@ -51,10 +51,12 @@ const TInt KMdsMaxUriLenght = KMaxFileName; const TChar KMdsLineFeed = '\n'; +#ifdef _DEBUG const TInt KMdsMaxLogLineLenght( 2056 ); _LIT( KMdsErrorLogDirectory, "Metadata" ); _LIT( KMdsErrorLogFilename, "importerror.log" ); +#endif // keyword definitions in import file _LIT8( KMdsKeywordComment, "//" ); @@ -117,8 +119,13 @@ { delete iConverter; - iLog.CloseLog(); - iLog.Close(); +#ifdef _DEBUG + if( iLogEnabled ) + { + iLog.CloseLog(); + iLog.Close(); + } +#endif iFs.Close(); delete iBuffer; @@ -136,10 +143,16 @@ User::LeaveIfError( iFs.Connect() ); iConverter->PrepareToConvertToOrFromL( KCharacterSetIdentifierUtf8, iFs ); - - User::LeaveIfError( iLog.Connect( ) ); - iLog.CreateLog( KMdsErrorLogDirectory, KMdsErrorLogFilename, EFileLoggingModeOverwrite ); - iLog.SetDateAndTime(EFalse, ETrue); + +#ifdef _DEBUG + const TInt logError( iLog.Connect( ) ); + if( logError == KErrNone ) + { + iLogEnabled = ETrue; + iLog.CreateLog( KMdsErrorLogDirectory, KMdsErrorLogFilename, EFileLoggingModeOverwrite ); + iLog.SetDateAndTime(EFalse, ETrue); + } +#endif iBuffer = NULL; iLastObjectDef = NULL; @@ -2474,19 +2487,28 @@ // LogError // ------------------------------------------------ // +#ifdef _DEBUG void CMdsImportExport::LogError( const TDesC& aMessage ) { - _LIT( KParseError, "Parse error: %S" ); - _LIT( KCurrentFile, "Current file: %S" ); - _LIT( KCurrentLineNum, "Current line number: %d" ); - _LIT( KCurrentLine, "Current line: %S" ); - iLog.WriteFormat( KParseError, &aMessage ); - iLog.WriteFormat( KCurrentFile, &iFileName ); - iLog.WriteFormat( KCurrentLineNum, iLineNumber ); - TBuf16 line16; - Conv8To16( iLine, line16 ); - iLog.WriteFormat( KCurrentLine, &line16 ); + if( iLogEnabled ) + { + _LIT( KParseError, "Parse error: %S" ); + _LIT( KCurrentFile, "Current file: %S" ); + _LIT( KCurrentLineNum, "Current line number: %d" ); + _LIT( KCurrentLine, "Current line: %S" ); + iLog.WriteFormat( KParseError, &aMessage ); + iLog.WriteFormat( KCurrentFile, &iFileName ); + iLog.WriteFormat( KCurrentLineNum, iLineNumber ); + TBuf16 line16; + Conv8To16( iLine, line16 ); + iLog.WriteFormat( KCurrentLine, &line16 ); + } } +#else +void CMdsImportExport::LogError( const TDesC& /*aMessage*/ ) + { + } +#endif // ------------------------------------------------ diff -r acef663c1218 -r b73a2e62868f metadataengine/server/src/mdsmaintenanceengine.cpp --- a/metadataengine/server/src/mdsmaintenanceengine.cpp Tue Jan 26 12:13:20 2010 +0200 +++ b/metadataengine/server/src/mdsmaintenanceengine.cpp Tue Feb 02 00:24:33 2010 +0200 @@ -16,6 +16,8 @@ */ // INCLUDE FILES +#include + #include "mdsmaintenanceengine.h" #include "mdslogger.h" #include "mdsmanipulationengine.h" @@ -153,7 +155,7 @@ TRAP_IGNORE( ImportMetadataL( aManipulate, aSchema, KMdsDefaultRomImportFile ) ); } - StoreCDriveMediaIdL(); + StoreDriveMediaIdsL(); } else { @@ -226,10 +228,10 @@ } // ------------------------------------------------ -// StoreCDriveMediaIdL +// StoreDriveMediaIdsL // ------------------------------------------------ // -void CMdSMaintenanceEngine::StoreCDriveMediaIdL() +void CMdSMaintenanceEngine::StoreDriveMediaIdsL() { RFs fs; User::LeaveIfError( fs.Connect() ); @@ -238,6 +240,26 @@ fs.Volume( volumeInfo, EDriveC ); MMdsPreferences::InsertL( KCMediaIdKey, MMdsPreferences::EPreferenceValueSet, (TUint32) volumeInfo.iUniqueID ); + + TInt drive( -1 ); + TInt massStorageError( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultMassStorage, drive ) ); + if( massStorageError == KErrNone ) + { + TVolumeInfo massStorageVolumeInfo; + fs.Volume( massStorageVolumeInfo, drive ); + const TUint32 massStorageMediaId( massStorageVolumeInfo.iUniqueID ); + massStorageError = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage, drive ); + if( massStorageError == KErrNone ) + { + fs.Volume( massStorageVolumeInfo, drive ); + // Update mass storage media id if the mass storage is not memory card + if( massStorageVolumeInfo.iUniqueID != massStorageMediaId && massStorageMediaId != 0 ) + { + MMdsPreferences::InsertL( KMassStorageMediaIdKey, MMdsPreferences::EPreferenceValueSet, + (TUint32) massStorageMediaId ); + } + } + } CleanupStack::PopAndDestroy( &fs ); } diff -r acef663c1218 -r b73a2e62868f metadataengine/server/src/mdsmanipulationengine.cpp --- a/metadataengine/server/src/mdsmanipulationengine.cpp Tue Jan 26 12:13:20 2010 +0200 +++ b/metadataengine/server/src/mdsmanipulationengine.cpp Tue Feb 02 00:24:33 2010 +0200 @@ -1002,6 +1002,20 @@ CleanupStack::PopAndDestroy( &transaction ); } +void CMdSManipulationEngine::CheckMassStorageMediaIdL( const TUint32 aMediaId ) + { + CMdSSqLiteConnection& connection = MMdSDbConnectionPool::GetDefaultDBL(); + RMdSTransaction transaction( connection ); + CleanupClosePushL( transaction ); + User::LeaveIfError( transaction.Error() ); + + iManipulate->CheckMassStorageMediaIdL( aMediaId ); + + transaction.CommitL(); + + CleanupStack::PopAndDestroy( &transaction ); + } + void CMdSManipulationEngine::AddRelationDefL( TDefId aNamespaceId, const TDesC& aRelationDefName ) { CMdsNamespaceDef* namespaceDef = CONST_CAST( CMdsNamespaceDef*, iSchema.GetNamespaceByIdL( aNamespaceId ) ); diff -r acef663c1218 -r b73a2e62868f metadataengine/server/src/mdsnotifier.cpp --- a/metadataengine/server/src/mdsnotifier.cpp Tue Jan 26 12:13:20 2010 +0200 +++ b/metadataengine/server/src/mdsnotifier.cpp Tue Feb 02 00:24:33 2010 +0200 @@ -468,7 +468,7 @@ aSerializedItems.PositionL( KNoOffset ); aSerializedItemIds.PositionL( KNoOffset ); - TBool someMatches = iComparator->MatchL( e.NamespaceDefId(), e.iType, e.Condition(), + const TBool someMatches = iComparator->MatchL( e.NamespaceDefId(), e.iType, e.Condition(), aSerializedItems, aSerializedItemIds, matchingItemIdArray, e.AllowConfidential() ); @@ -561,9 +561,12 @@ } } - if( objectIdArray.Count() != 0 - || eventIdArray.Count() != 0 - || relationIdArray.Count() != 0 ) + const TInt objectCount( objectIdArray.Count() ); + const TInt eventCount( eventIdArray.Count() ); + const TInt relationCount( relationIdArray.Count() ); + if( objectCount != 0 + || eventCount != 0 + || relationCount != 0 ) { const TInt entriesCount = iEntries.Count(); for( TInt i=0; i < entriesCount; ++i ) @@ -581,13 +584,13 @@ continue; } - if( e.iType & EObjectNotifyRemove && objectIdArray.Count() > 0 ) + if( e.iType & EObjectNotifyRemove && objectCount > 0 ) { // collect matching object IDs RArray matchingObjectIdArray; CleanupClosePushL( matchingObjectIdArray ); - TBool allMatches = iComparator->MatchObjectIdsL( e.Condition(), + const TBool allMatches = iComparator->MatchObjectIdsL( e.Condition(), objectIdArray, matchingObjectIdArray ); // check is there any matches @@ -634,7 +637,7 @@ CleanupStack::PopAndDestroy( &matchingObjectIdArray ); } else if( ( e.iType & EEventNotifyRemove ) - && eventIdArray.Count() > 0 ) + && eventCount > 0 ) { // event condition can't contain ID conditions, // so get all IDs @@ -655,7 +658,7 @@ } } else if( ( e.iType & ERelationNotifyRemove ) - && relationIdArray.Count() > 0 ) + && relationCount > 0 ) { // relation condition can't contain ID conditions, // so get all IDs @@ -677,7 +680,6 @@ } } } - CleanupStack::PopAndDestroy( 3, &objectIdArray ); // relationIdArray, eventIdArray, objectIdArray } @@ -694,7 +696,7 @@ { TEntry& e = iEntries[i]; - if ( ! (e.iType & ( EObjectNotifyModify | ERelationNotifyModify /*| ERelationItemNotifyModify*/ ) ) ) + if ( ! (e.iType & ( EObjectNotifyModify | ERelationNotifyModify ) ) ) { continue; } @@ -705,7 +707,7 @@ aSerializedItems.PositionL( KNoOffset ); aSerializedItemIds.PositionL( KNoOffset ); - TBool someMatches = iComparator->MatchL( e.NamespaceDefId(), + const TBool someMatches = iComparator->MatchL( e.NamespaceDefId(), e.iType, e.Condition(), aSerializedItems, aSerializedItemIds, matchingObjectIdArray, e.AllowConfidential() ); @@ -714,7 +716,7 @@ if( e.IsPending() ) { // match found. trigger notifier entry ! - TRAPD( err, e.TriggerL( EObjectNotifyModify | ERelationNotifyModify /*| ERelationItemNotifyModify*/, + TRAPD( err, e.TriggerL( EObjectNotifyModify | ERelationNotifyModify, matchingObjectIdArray ) ); if( err != KErrNone ) { @@ -723,7 +725,7 @@ } else { - TRAP_IGNORE( e.CacheL( EObjectNotifyModify | ERelationNotifyModify /*| ERelationItemNotifyModify*/, + TRAP_IGNORE( e.CacheL( EObjectNotifyModify | ERelationNotifyModify, matchingObjectIdArray ) ); } } @@ -755,7 +757,7 @@ RArray matchingObjectIdArray; CleanupClosePushL( matchingObjectIdArray ); - TBool allMatches = iComparator->MatchObjectIdsL( e.Condition(), + const TBool allMatches = iComparator->MatchObjectIdsL( e.Condition(), aObjectIds, matchingObjectIdArray ); // check is there any matches @@ -764,7 +766,7 @@ if(e.IsPending()) { // Match found. Trigger notifier entry. - TInt err; + TInt err( KErrNone ); if( allMatches ) { @@ -810,7 +812,8 @@ // void CMdSNotifier::NotifyRemovedL(const RArray& aItemIdArray) { - for( TInt i=0; i 0 ) && ( itemIds.iEventIds.iPtr.iCount > 0 ) && - ( aType & ( EEventNotifyAdd /*| EEventNotifyRemove*/ ) ) ) + ( aType & ( EEventNotifyAdd ) ) ) { // event ID count and event item count should match __ASSERT_DEBUG( items.iEvents.iPtr.iCount == itemIds.iEventIds.iPtr.iCount, MMdCCommon::Panic( KErrCorrupt ) ); @@ -183,7 +183,7 @@ } else if( ( items.iRelations.iPtr.iCount > 0 ) && ( itemIds.iRelationIds.iPtr.iCount > 0 ) && - ( aType & ( ERelationNotifyAdd | ERelationNotifyModify /*| ERelationNotifyRemove*/ ) ) ) + ( aType & ( ERelationNotifyAdd | ERelationNotifyModify ) ) ) { // relation ID count and relation item count should match __ASSERT_DEBUG( items.iRelations.iPtr.iCount == itemIds.iRelationIds.iPtr.iCount, MMdCCommon::Panic( KErrCorrupt ) ); diff -r acef663c1218 -r b73a2e62868f metadataengine/server/src/mdsserver.cpp --- a/metadataengine/server/src/mdsserver.cpp Tue Jan 26 12:13:20 2010 +0200 +++ b/metadataengine/server/src/mdsserver.cpp Tue Feb 02 00:24:33 2010 +0200 @@ -93,6 +93,7 @@ EGetPending, EResetDB, EChangeMediaId, + EChangeMassStorageMediaId, EUnknownMdEServRqst // handle for unknown requests }; @@ -140,7 +141,8 @@ CPolicyServer::ECustomCheck, // EGetPendingCount CPolicyServer::ECustomCheck, // EGetPending CPolicyServer::ECustomCheck, // EResetDB - CPolicyServer::ECustomCheck, // EChangeMediaId + CPolicyServer::ECustomCheck, // EChangeMediaId + CPolicyServer::ECustomCheck, // EChangeMassStorageMediaId CPolicyServer::ENotSupported // EUnknownMdEServRqst }; @@ -170,6 +172,7 @@ case EAddRelationDef: case EAddEventDef: case EImportSchema: + case EChangeMassStorageMediaId: case ESetObjectToPresentByGuid: { if( aMsg.HasCapability( ECapabilityWriteDeviceData ) ) diff -r acef663c1218 -r b73a2e62868f metadataengine/server/src/mdsserversession.cpp --- a/metadataengine/server/src/mdsserversession.cpp Tue Jan 26 12:13:20 2010 +0200 +++ b/metadataengine/server/src/mdsserversession.cpp Tue Feb 02 00:24:33 2010 +0200 @@ -410,6 +410,12 @@ ChangeMediaIdL( aMessage ); break; } + + case EChangeMassStorageMediaId: + { + CheckMassStorageMediaIdL( aMessage ); + break; + } case ESetPending: { @@ -1509,6 +1515,15 @@ iServer.Manipulate().ChangeMediaIdL(); } +void CMdSServerSession::CheckMassStorageMediaIdL( const RMessage2& aMessage ) + { + TUint32 mediaId; + TPckg mediaIdPckg( mediaId ); + aMessage.ReadL( 0, mediaIdPckg ); + + iServer.Manipulate().CheckMassStorageMediaIdL( mediaId ); + } + void CMdSServerSession::SetPendingL(const RMessage2& aMessage) { const TInt serializedObjectIdsLength = aMessage.GetDesLength( 0 ); diff -r acef663c1218 -r b73a2e62868f metadataengine/server/src/mdssqlobjectmanipulate.cpp --- a/metadataengine/server/src/mdssqlobjectmanipulate.cpp Tue Jan 26 12:13:20 2010 +0200 +++ b/metadataengine/server/src/mdssqlobjectmanipulate.cpp Tue Feb 02 00:24:33 2010 +0200 @@ -1020,6 +1020,27 @@ CleanupStack::PopAndDestroy( &clauseOne ); } +void CMdSSqlObjectManipulate::CheckMassStorageMediaIdL( const TUint32 aMediaId ) + { + TUint32 oldMediaId( 0 ); + const TInt rowCount = MMdsPreferences::GetL( KMassStorageMediaIdKey, + MMdsPreferences::EPreferenceValueGet, oldMediaId ); + if( rowCount == 0 ) + { + MMdsPreferences::InsertL( KMassStorageMediaIdKey, MMdsPreferences::EPreferenceValueSet, (TUint32) aMediaId ); + } + else if( aMediaId != oldMediaId ) + { + RArray objectIds; + CleanupClosePushL( objectIds ); + MMdsPreferences::UpdateL( KMassStorageMediaIdKey, MMdsPreferences::EPreferenceValueSet, (TUint32) aMediaId ); + SetFilesToNotPresentL( oldMediaId, EFalse, objectIds ); + objectIds.Reset(); + RemoveFilesNotPresentL( oldMediaId, &objectIds ); + CleanupStack::PopAndDestroy( &objectIds ); + } + } + const CMdsPropertyDef& CMdSSqlObjectManipulate::ReadPropertyL( CMdCSerializationBuffer& aBuffer, const CMdsObjectDef& aObjectDef, CMdsClauseBuffer& aBaseObjectClause, CMdsClauseBuffer& aObjectClause, diff -r acef663c1218 -r b73a2e62868f sis/mds/mds_stub.sis Binary file sis/mds/mds_stub.sis has changed diff -r acef663c1218 -r b73a2e62868f sis/mds/package.pkg --- a/sis/mds/package.pkg Tue Jan 26 12:13:20 2010 +0200 +++ b/sis/mds/package.pkg Tue Feb 02 00:24:33 2010 +0200 @@ -17,7 +17,7 @@ &EN ;packet-header (name, uid, major, minor, build, type) -#{"Metadata System Upgrade"},(0x200009F5), 9, 20, 1, TYPE=SA, RU +#{"Metadata System Upgrade"},(0x200009F5), 9, 20, 2, TYPE=SA, RU ; Localised vendor name %{"Nokia"} diff -r acef663c1218 -r b73a2e62868f sis/mds/package_separate.pkg --- a/sis/mds/package_separate.pkg Tue Jan 26 12:13:20 2010 +0200 +++ b/sis/mds/package_separate.pkg Tue Feb 02 00:24:33 2010 +0200 @@ -17,7 +17,7 @@ &EN ;packet-header (name, uid, major, minor, build, type) -#{"Metadata System Upgrade"},(0x200009F5), 9, 20, 1, TYPE=SA, RU +#{"Metadata System Upgrade"},(0x200009F5), 9, 20, 2, TYPE=SA, RU ; Localised vendor name %{"Nokia"} diff -r acef663c1218 -r b73a2e62868f sis/mds/stub.pkg --- a/sis/mds/stub.pkg Tue Jan 26 12:13:20 2010 +0200 +++ b/sis/mds/stub.pkg Tue Feb 02 00:24:33 2010 +0200 @@ -17,7 +17,7 @@ &EN ; Header -#{"Metadata System"}, (0x200009F5), 9, 20, 1, TYPE=SA +#{"Metadata System"}, (0x200009F5), 9, 20, 2, TYPE=SA ; Localised Vendor name %{"Nokia"}