51 // constants |
51 // constants |
52 const TInt32 KFileMonitorPluginUid = 0x20007186; // file monitor plugin implementation uid |
52 const TInt32 KFileMonitorPluginUid = 0x20007186; // file monitor plugin implementation uid |
53 |
53 |
54 const TInt KPlaceholderQueueSize = 99; |
54 const TInt KPlaceholderQueueSize = 99; |
55 const TInt KContainerPlaceholderQueueSize = 10; |
55 const TInt KContainerPlaceholderQueueSize = 10; |
|
56 const TInt KReadyPlaceholderQueueSize = 10; |
56 const TInt KObjectDefStrSize = 20; |
57 const TInt KObjectDefStrSize = 20; |
57 |
58 |
58 _LIT( KTAGDaemonName, "ThumbAGDaemon" ); |
59 _LIT( KTAGDaemonName, "ThumbAGDaemon" ); |
59 _LIT( KTAGDaemonExe, "thumbagdaemon.exe" ); |
60 _LIT( KTAGDaemonExe, "thumbagdaemon.exe" ); |
60 |
61 |
74 { |
75 { |
75 } |
76 } |
76 |
77 |
77 void CHarvesterAoPropertyDefs::ConstructL(CMdEObjectDef& aObjectDef) |
78 void CHarvesterAoPropertyDefs::ConstructL(CMdEObjectDef& aObjectDef) |
78 { |
79 { |
79 CMdENamespaceDef& nsDef = aObjectDef.NamespaceDef(); |
80 SetByObjectDefL( aObjectDef ); |
80 |
|
81 // Common property definitions |
|
82 CMdEObjectDef& objectDef = nsDef.GetObjectDefL( MdeConstants::Object::KBaseObject ); |
|
83 iCreationDatePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KCreationDateProperty ); |
|
84 iLastModifiedDatePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KLastModifiedDateProperty ); |
|
85 iSizePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KSizeProperty ); |
|
86 iOriginPropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KOriginProperty ); |
|
87 iItemTypePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KItemTypeProperty ); |
|
88 iTitlePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KTitleProperty ); |
|
89 iDefaultFolderPropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KInDefaultFolder ); |
|
90 |
|
91 CMdEObjectDef& mediaDef = nsDef.GetObjectDefL( MdeConstants::MediaObject::KMediaObject ); |
|
92 iPreinstalledPropertyDef = &mediaDef.GetPropertyDefL( MdeConstants::MediaObject::KPreinstalledProperty ); |
|
93 } |
81 } |
94 |
82 |
95 CHarvesterAoPropertyDefs* CHarvesterAoPropertyDefs::NewL(CMdEObjectDef& aObjectDef) |
83 CHarvesterAoPropertyDefs* CHarvesterAoPropertyDefs::NewL() |
96 { |
84 { |
97 CHarvesterAoPropertyDefs* self = |
85 CHarvesterAoPropertyDefs* self = |
98 new (ELeave) CHarvesterAoPropertyDefs(); |
86 new (ELeave) CHarvesterAoPropertyDefs(); |
99 CleanupStack::PushL( self ); |
87 return self; |
100 self->ConstructL( aObjectDef ); |
88 } |
101 CleanupStack::Pop( self ); |
89 |
102 return self; |
90 void CHarvesterAoPropertyDefs::SetByObjectDefL(CMdEObjectDef& aObjectDef) |
103 } |
91 { |
104 |
92 CMdENamespaceDef& nsDef = aObjectDef.NamespaceDef(); |
|
93 |
|
94 // Common property definitions |
|
95 CMdEObjectDef& objectDef = nsDef.GetObjectDefL( MdeConstants::Object::KBaseObject ); |
|
96 iCreationDatePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KCreationDateProperty ); |
|
97 iLastModifiedDatePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KLastModifiedDateProperty ); |
|
98 iSizePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KSizeProperty ); |
|
99 iOriginPropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KOriginProperty ); |
|
100 iItemTypePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KItemTypeProperty ); |
|
101 iTitlePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KTitleProperty ); |
|
102 iDefaultFolderPropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KInDefaultFolder ); |
|
103 |
|
104 CMdEObjectDef& mediaDef = nsDef.GetObjectDefL( MdeConstants::MediaObject::KMediaObject ); |
|
105 iPreinstalledPropertyDef = &mediaDef.GetPropertyDefL( MdeConstants::MediaObject::KPreinstalledProperty ); |
|
106 } |
|
107 |
105 // --------------------------------------------------------------------------- |
108 // --------------------------------------------------------------------------- |
106 // NewLC |
109 // NewLC |
107 // --------------------------------------------------------------------------- |
110 // --------------------------------------------------------------------------- |
108 // |
111 // |
109 CHarvesterAO* CHarvesterAO::NewLC() |
112 CHarvesterAO* CHarvesterAO::NewLC() |
220 |
227 |
221 iTempReadyPHArray.ResetAndDestroy(); |
228 iTempReadyPHArray.ResetAndDestroy(); |
222 iTempReadyPHArray.Close(); |
229 iTempReadyPHArray.Close(); |
223 |
230 |
224 delete iHarvesterOomAO; |
231 delete iHarvesterOomAO; |
|
232 iHarvesterOomAO = NULL; |
225 delete iRestoreWatcher; |
233 delete iRestoreWatcher; |
|
234 iRestoreWatcher = NULL; |
226 delete iOnDemandAO; |
235 delete iOnDemandAO; |
|
236 iOnDemandAO = NULL; |
227 delete iMdEHarvesterSession; |
237 delete iMdEHarvesterSession; |
|
238 iMdEHarvesterSession = NULL; |
228 delete iMdESession; |
239 delete iMdESession; |
|
240 iMdESession = NULL; |
229 delete iQueue; |
241 delete iQueue; |
|
242 iQueue = NULL; |
230 delete iHarvesterPluginFactory; |
243 delete iHarvesterPluginFactory; |
|
244 iHarvesterPluginFactory = NULL; |
231 delete iMdeObjectHandler; |
245 delete iMdeObjectHandler; |
|
246 iMdeObjectHandler = NULL; |
232 delete iUnmountHandlerAO; |
247 delete iUnmountHandlerAO; |
|
248 iUnmountHandlerAO = NULL; |
233 |
249 |
234 delete iPropDefs; |
250 delete iPropDefs; |
|
251 iPropDefs = NULL; |
235 delete iCameraExtensionArray; |
252 delete iCameraExtensionArray; |
|
253 iCameraExtensionArray = NULL; |
236 |
254 |
237 delete iPhoneImagesPath; |
255 delete iPhoneImagesPath; |
|
256 iPhoneImagesPath = NULL; |
238 delete iMmcImagesPath; |
257 delete iMmcImagesPath; |
|
258 iMmcImagesPath = NULL; |
239 |
259 |
240 delete iPhoneVideosPath; |
260 delete iPhoneVideosPath; |
|
261 iPhoneVideosPath = NULL; |
241 delete iMmcVideosPath; |
262 delete iMmcVideosPath; |
|
263 iMmcVideosPath = NULL; |
242 |
264 |
243 delete iPhoneSoundsPath; |
265 delete iPhoneSoundsPath; |
|
266 iPhoneSoundsPath = NULL; |
244 delete iMmcSoundsPath; |
267 delete iMmcSoundsPath; |
|
268 iMmcSoundsPath = NULL; |
245 |
269 |
246 RMediaIdUtil::ReleaseInstance(); |
270 RMediaIdUtil::ReleaseInstance(); |
247 |
271 |
248 REComSession::FinalClose(); |
272 REComSession::FinalClose(); |
249 } |
273 } |
291 iHarvesterPluginFactory->SetBlacklist( *iBlacklist ); |
315 iHarvesterPluginFactory->SetBlacklist( *iBlacklist ); |
292 |
316 |
293 // Reset harvesting status for clients in case blacklisted file was handled |
317 // Reset harvesting status for clients in case blacklisted file was handled |
294 iHarvesterPluginFactory->SendHarvestingStatusEventL( EFalse ); |
318 iHarvesterPluginFactory->SendHarvestingStatusEventL( EFalse ); |
295 |
319 |
|
320 iPropDefs = CHarvesterAoPropertyDefs::NewL(); |
|
321 |
296 iCameraExtensionArray = new ( ELeave ) CDesCArraySeg( 6 ); |
322 iCameraExtensionArray = new ( ELeave ) CDesCArraySeg( 6 ); |
297 iCameraExtensionArray->InsertIsqL( KExtensionMp4 ); |
323 iCameraExtensionArray->InsertIsqL( KExtensionMp4 ); |
298 iCameraExtensionArray->InsertIsqL( KExtensionMpg4 ); |
324 iCameraExtensionArray->InsertIsqL( KExtensionMpg4 ); |
299 iCameraExtensionArray->InsertIsqL( KExtensionMpeg4 ); |
325 iCameraExtensionArray->InsertIsqL( KExtensionMpeg4 ); |
300 iCameraExtensionArray->InsertIsqL( KExtension3gp ); |
326 iCameraExtensionArray->InsertIsqL( KExtension3gp ); |
352 |
378 |
353 TCleanupItem cleanupItem( MdsUtils::CleanupEComArray, &infoArray ); |
379 TCleanupItem cleanupItem( MdsUtils::CleanupEComArray, &infoArray ); |
354 CleanupStack::PushL( cleanupItem ); |
380 CleanupStack::PushL( cleanupItem ); |
355 |
381 |
356 CMonitorPlugin::ListImplementationsL( infoArray ); |
382 CMonitorPlugin::ListImplementationsL( infoArray ); |
357 TInt count( 0 ); |
383 const TInt count( infoArray.Count() ); |
358 count = infoArray.Count(); |
|
359 CMonitorPlugin* plugin = NULL; |
384 CMonitorPlugin* plugin = NULL; |
360 |
385 |
361 for ( TInt i = 0; i < count; i++ ) |
386 for ( TInt i = 0; i < count; i++ ) |
362 { |
387 { |
363 TUid uid = infoArray[i]->ImplementationUid(); // Create the plug-ins |
388 TUid uid = infoArray[i]->ImplementationUid(); // Create the plug-ins |
408 // |
433 // |
409 void CHarvesterAO::StartMonitoring() |
434 void CHarvesterAO::StartMonitoring() |
410 { |
435 { |
411 WRITELOG( "CHarvesterAO::StartMonitoring()" ); |
436 WRITELOG( "CHarvesterAO::StartMonitoring()" ); |
412 OstTrace0( TRACE_NORMAL, CHARVESTERAO_STARTMONITORING, "CHarvesterAO::StartMonitoring" ); |
437 OstTrace0( TRACE_NORMAL, CHARVESTERAO_STARTMONITORING, "CHarvesterAO::StartMonitoring" ); |
413 |
|
414 const TInt count( iMonitorPluginArray.Count() ); |
438 const TInt count( iMonitorPluginArray.Count() ); |
415 |
439 |
416 for ( TInt i = 0; i < count; i++ ) |
440 for ( TInt i = 0; i < count; i++ ) |
417 { |
441 { |
418 iMonitorPluginArray[i]->StartMonitoring( *iQueue, iMdESession, NULL, |
442 iMonitorPluginArray[i]->StartMonitoring( *iQueue, iMdESession, NULL, |
427 void CHarvesterAO::StopMonitoring() |
451 void CHarvesterAO::StopMonitoring() |
428 { |
452 { |
429 WRITELOG( "CHarvesterAO::StopMonitoring()" ); |
453 WRITELOG( "CHarvesterAO::StopMonitoring()" ); |
430 |
454 |
431 OstTrace0( TRACE_NORMAL, CHARVESTERAO_STOPMONITORING, "CHarvesterAO::StopMonitoring" ); |
455 OstTrace0( TRACE_NORMAL, CHARVESTERAO_STOPMONITORING, "CHarvesterAO::StopMonitoring" ); |
432 |
456 |
433 const TInt count( iMonitorPluginArray.Count() ); |
457 for( TInt i = iMonitorPluginArray.Count() - 1; i >=0; i-- ) |
434 |
|
435 for ( TInt i = 0; i < count; i++ ) |
|
436 { |
458 { |
437 iMonitorPluginArray[i]->StopMonitoring(); |
459 iMonitorPluginArray[i]->StopMonitoring(); |
438 } |
460 } |
439 } |
461 } |
440 |
462 |
445 void CHarvesterAO::PauseMonitoring() |
467 void CHarvesterAO::PauseMonitoring() |
446 { |
468 { |
447 WRITELOG( "CHarvesterAO::PauseMonitoring()" ); |
469 WRITELOG( "CHarvesterAO::PauseMonitoring()" ); |
448 OstTrace0( TRACE_NORMAL, CHARVESTERAO_PAUSEMONITORING, "CHarvesterAO::PauseMonitoring" ); |
470 OstTrace0( TRACE_NORMAL, CHARVESTERAO_PAUSEMONITORING, "CHarvesterAO::PauseMonitoring" ); |
449 |
471 |
450 const TInt count( iMonitorPluginArray.Count() ); |
472 for( TInt i = iMonitorPluginArray.Count() - 1; i >=0; i-- ) |
451 |
|
452 for ( TInt i = 0; i<count; i++ ) |
|
453 { |
473 { |
454 iMonitorPluginArray[i]->PauseMonitoring(); |
474 iMonitorPluginArray[i]->PauseMonitoring(); |
455 } |
475 } |
|
476 |
456 OstTrace0( TRACE_NORMAL, DUP1_CHARVESTERAO_PAUSEMONITORING, "CHarvesterAO::PauseMonitoring - end" ); |
477 OstTrace0( TRACE_NORMAL, DUP1_CHARVESTERAO_PAUSEMONITORING, "CHarvesterAO::PauseMonitoring - end" ); |
457 WRITELOG( "CHarvesterAO::PauseMonitoring() - end" ); |
478 WRITELOG( "CHarvesterAO::PauseMonitoring() - end" ); |
458 } |
479 } |
459 |
480 |
460 // --------------------------------------------------------------------------- |
481 // --------------------------------------------------------------------------- |
516 if( err == KErrNone && mediaId == aMediaId ) |
537 if( err == KErrNone && mediaId == aMediaId ) |
517 { |
538 { |
518 WRITELOG1( "CHarvesterAO::HandleUnmount() remove iReadyPHArray %d", i); |
539 WRITELOG1( "CHarvesterAO::HandleUnmount() remove iReadyPHArray %d", i); |
519 OstTrace1( TRACE_NORMAL, DUP2_CHARVESTERAO_HANDLEUNMOUNT, "CHarvesterAO::HandleUnmount remove iReadyPHArray %d", i ); |
540 OstTrace1( TRACE_NORMAL, DUP2_CHARVESTERAO_HANDLEUNMOUNT, "CHarvesterAO::HandleUnmount remove iReadyPHArray %d", i ); |
520 |
541 |
|
542 HarvestCompleted( hd->ClientId(), hd->Uri(), KErrCancel ); |
521 delete hd; |
543 delete hd; |
522 hd = NULL; |
544 hd = NULL; |
523 iReadyPHArray.Remove( i ); |
545 iReadyPHArray.Remove( i ); |
524 removed++; |
546 removed++; |
525 arrayCount--; |
547 arrayCount--; |
553 if( err == KErrNone && mediaId == aMediaId ) |
575 if( err == KErrNone && mediaId == aMediaId ) |
554 { |
576 { |
555 WRITELOG1( "CHarvesterAO::HandleUnmount() remove iPHArray %d", i); |
577 WRITELOG1( "CHarvesterAO::HandleUnmount() remove iPHArray %d", i); |
556 OstTrace1( TRACE_NORMAL, DUP5_CHARVESTERAO_HANDLEUNMOUNT, "CHarvesterAO::HandleUnmount remove iPHArray %d", i ); |
578 OstTrace1( TRACE_NORMAL, DUP5_CHARVESTERAO_HANDLEUNMOUNT, "CHarvesterAO::HandleUnmount remove iPHArray %d", i ); |
557 |
579 |
|
580 HarvestCompleted( hd->ClientId(), hd->Uri(), KErrCancel ); |
558 delete hd; |
581 delete hd; |
559 hd = NULL; |
582 hd = NULL; |
560 iPHArray.Remove( i ); |
583 iPHArray.Remove( i ); |
561 removed++; |
584 removed++; |
562 arrayCount--; |
585 arrayCount--; |
589 if( err == KErrNone && mediaId == aMediaId ) |
612 if( err == KErrNone && mediaId == aMediaId ) |
590 { |
613 { |
591 WRITELOG1( "CHarvesterAO::HandleUnmount() remove iContainerPHArray %d", i); |
614 WRITELOG1( "CHarvesterAO::HandleUnmount() remove iContainerPHArray %d", i); |
592 OstTrace1( TRACE_NORMAL, DUP8_CHARVESTERAO_HANDLEUNMOUNT, "CHarvesterAO::HandleUnmount remove iContainerPHArray %d", i ); |
615 OstTrace1( TRACE_NORMAL, DUP8_CHARVESTERAO_HANDLEUNMOUNT, "CHarvesterAO::HandleUnmount remove iContainerPHArray %d", i ); |
593 |
616 |
|
617 HarvestCompleted( hd->ClientId(), hd->Uri(), KErrCancel ); |
594 delete hd; |
618 delete hd; |
595 hd = NULL; |
619 hd = NULL; |
596 iContainerPHArray.Remove( i ); |
620 iContainerPHArray.Remove( i ); |
597 removed++; |
621 removed++; |
598 arrayCount--; |
622 arrayCount--; |
823 } |
849 } |
824 while( hd != NULL && |
850 while( hd != NULL && |
825 iPHArray.Count() < KPlaceholderQueueSize && |
851 iPHArray.Count() < KPlaceholderQueueSize && |
826 hd->ObjectType() == EPlaceholder ) |
852 hd->ObjectType() == EPlaceholder ) |
827 { |
853 { |
828 iPHArray.Append( hd ); |
854 if(iPHArray.Append( hd ) != KErrNone) |
829 if( hd->Origin() == MdeConstants::Object::ECamera || |
|
830 hd->ObjectType() == EFastHarvest ) |
|
831 { |
855 { |
832 if( !iFastHarvestNeeded ) |
856 HarvestCompleted( hd->ClientId(), hd->Uri(), KErrNoMemory ); |
833 { |
857 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
834 iFastHarvestNeeded = ETrue; |
858 delete hd; |
835 // Fast harvest event must be handled even if MMC handling would be ongoing |
859 hd = NULL; |
836 SetPriority( KHarvesterPriorityMonitorPlugin ); |
|
837 } |
|
838 break; |
|
839 } |
860 } |
840 else if( iFastHarvestNeeded ) |
861 else |
841 { |
862 { |
842 iFastHarvestNeeded = EFalse; |
863 if( hd->Origin() == MdeConstants::Object::ECamera || |
843 SetPriority( KHarvesterCustomImportantPriority ); |
864 hd->ObjectType() == EFastHarvest ) |
|
865 { |
|
866 if( !iFastHarvestNeeded ) |
|
867 { |
|
868 iFastHarvestNeeded = ETrue; |
|
869 // Fast harvest event must be handled even if MMC handling would be ongoing |
|
870 SetPriority( KHarvesterPriorityMonitorPlugin ); |
|
871 } |
|
872 break; |
|
873 } |
|
874 else if( iFastHarvestNeeded ) |
|
875 { |
|
876 iFastHarvestNeeded = EFalse; |
|
877 SetPriority( KHarvesterCustomImportantPriority ); |
|
878 } |
844 } |
879 } |
845 hd = iQueue->GetNextItem(); |
880 hd = iQueue->GetNextItem(); |
846 } |
881 } |
847 |
882 |
848 if( iFastHarvestNeeded && iPHArray.Count() > 0 ) |
883 if( iFastHarvestNeeded && iPHArray.Count() > 0 ) |
849 { |
884 { |
850 TRAPD( err, HandlePlaceholdersL( ETrue ) ); |
885 TRAPD( err, HandlePlaceholdersL( ETrue ) ); |
851 |
886 |
852 // make sure that when HandlePlaceholdersL leaves, iPHArray is cleared |
887 // make sure that when HandlePlaceholdersL leaves unexpectedly, iPHArray is cleared |
853 if ( err != KErrNone ) |
888 if ( err != KErrNone ) |
854 { |
889 { |
855 iPHArray.ResetAndDestroy(); |
890 if( err != KErrDiskFull ) |
856 iTempReadyPHArray.ResetAndDestroy(); |
891 { |
|
892 iPHArray.ResetAndDestroy(); |
|
893 iTempReadyPHArray.ResetAndDestroy(); |
|
894 } |
857 User::Leave( err ); |
895 User::Leave( err ); |
858 } |
896 } |
859 |
897 |
860 TInt count( iReadyPHArray.Count() ); |
898 TInt count( iReadyPHArray.Count() ); |
861 for( TInt i = 0; i < count; i++ ) |
899 for( TInt i = 0; i < count; i++ ) |
875 |
913 |
876 if( hd ) |
914 if( hd ) |
877 { |
915 { |
878 if( hd->ObjectType() == EPlaceholder ) |
916 if( hd->ObjectType() == EPlaceholder ) |
879 { |
917 { |
880 iPHArray.Append( hd ); |
918 if( iPHArray.Append( hd ) != KErrNone ) |
|
919 { |
|
920 HarvestCompleted( hd->ClientId(), hd->Uri(), KErrNoMemory ); |
|
921 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
|
922 delete hd; |
|
923 hd = NULL; |
|
924 } |
881 } |
925 } |
882 else |
926 else |
883 { |
927 { |
884 CheckFileExtensionAndHarvestL( hd ); |
928 if( iReadyPHArray.Append( hd ) != KErrNone) |
885 if( iUnmountDetected ) |
929 { |
886 { |
930 delete hd; |
887 iQueue->Append( hd ); |
931 hd = NULL; |
888 return; |
932 } |
889 } |
|
890 } |
933 } |
891 } |
934 } |
892 |
935 |
893 if( iPHArray.Count() > 0 ) |
936 if( iPHArray.Count() > 0 ) |
894 { |
937 { |
895 TRAPD( err, HandlePlaceholdersL( ETrue ) ); |
938 TRAPD( err, HandlePlaceholdersL( ETrue ) ); |
896 |
939 |
897 // make sure that when HandlePlaceholdersL leaves, iPHArray is cleared |
940 // make sure that when HandlePlaceholdersL leaves unexpectedly, iPHArray is cleared |
898 if ( err != KErrNone ) |
941 if ( err != KErrNone ) |
899 { |
942 { |
900 iPHArray.ResetAndDestroy(); |
943 if( err != KErrDiskFull ) |
901 iTempReadyPHArray.ResetAndDestroy(); |
944 { |
|
945 iPHArray.ResetAndDestroy(); |
|
946 iTempReadyPHArray.ResetAndDestroy(); |
|
947 } |
902 User::Leave( err ); |
948 User::Leave( err ); |
903 } |
949 } |
904 } |
950 } |
905 } |
951 } |
906 else |
952 else |
929 |
975 |
930 RPointerArray<CMdEObject> mdeObjectArray; |
976 RPointerArray<CMdEObject> mdeObjectArray; |
931 CleanupClosePushL( mdeObjectArray ); |
977 CleanupClosePushL( mdeObjectArray ); |
932 |
978 |
933 TTimeIntervalSeconds timeOffsetSeconds = User::UTCOffset(); |
979 TTimeIntervalSeconds timeOffsetSeconds = User::UTCOffset(); |
|
980 |
|
981 CMdENamespaceDef& defNS = iMdESession->GetDefaultNamespaceDefL(); |
934 |
982 |
935 TInt endindex( iPHArray.Count() ); |
983 TInt endindex( iPHArray.Count() ); |
936 for( TInt i = 0; i < endindex; i++ ) |
984 for( TInt i = 0; i < endindex; i++ ) |
937 { |
985 { |
938 CHarvesterData* hd = iPHArray[i]; |
986 CHarvesterData* hd = iPHArray[i]; |
939 |
987 |
940 if( aCheck && iHarvesterPluginFactory->IsContainerFileL( hd->Uri() ) ) |
988 if( aCheck && iHarvesterPluginFactory->IsContainerFileL( hd->Uri() ) ) |
941 { |
989 { |
942 iContainerPHArray.Append( hd ); |
990 if( iContainerPHArray.Append( hd ) != KErrNone ) |
|
991 { |
|
992 HarvestCompleted( hd->ClientId(), hd->Uri(), KErrNoMemory ); |
|
993 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
|
994 delete hd; |
|
995 hd = NULL; |
|
996 } |
|
997 |
943 iPHArray.Remove( i ); |
998 iPHArray.Remove( i ); |
944 i--; |
999 i--; |
945 endindex--; |
1000 endindex--; |
946 continue; |
1001 continue; |
947 } |
1002 } |
|
1003 |
948 TBuf<KObjectDefStrSize> objDefStr; |
1004 TBuf<KObjectDefStrSize> objDefStr; |
949 |
1005 |
950 if( !CheckForCameraItem( hd, objDefStr ) ) |
1006 if( !CheckForCameraItem( hd, objDefStr ) ) |
951 { |
1007 { |
952 iHarvesterPluginFactory->GetObjectDefL( *hd, objDefStr ); |
1008 iHarvesterPluginFactory->GetObjectDefL( hd, objDefStr ); |
953 } |
1009 } |
954 |
1010 |
955 // GetObjectDef can cause context switch, and if unmount happens when this execution is |
1011 // GetObjectDef can cause context switch, and if unmount happens when this execution is |
956 // interrupted, the ph arrays can be invalid. Thus, abort whole run, and start over to make sure |
1012 // interrupted, the ph arrays can be invalid. Thus, abort whole run, and start over to make sure |
957 // the arrays are valid. |
1013 // the arrays are valid. |
958 if( iUnmountDetected ) |
1014 if( iUnmountDetected ) |
959 { |
1015 { |
960 WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - Unmount detected during execution!" ); |
1016 WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - Unmount detected during execution!" ); |
961 for( TInt y( iTempReadyPHArray.Count() -1 ); y >=0; y-- ) |
1017 for( TInt y( iTempReadyPHArray.Count() -1 ); y >=0; y-- ) |
962 { |
1018 { |
963 CHarvesterData* hd = iTempReadyPHArray[y]; |
1019 CHarvesterData* tempHd = iTempReadyPHArray[y]; |
964 iPHArray.Insert( hd, 0 ); |
1020 |
|
1021 if(iPHArray.Insert( tempHd, 0 ) != KErrNone) |
|
1022 { |
|
1023 HarvestCompleted( tempHd->ClientId(), tempHd->Uri(), KErrNoMemory ); |
|
1024 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
|
1025 delete tempHd; |
|
1026 tempHd = NULL; |
|
1027 } |
965 } |
1028 } |
966 iTempReadyPHArray.Reset(); |
1029 iTempReadyPHArray.Reset(); |
967 CleanupStack::PopAndDestroy( &mdeObjectArray ); |
1030 CleanupStack::PopAndDestroy( &mdeObjectArray ); |
968 return; |
1031 return; |
969 } |
1032 } |
974 { |
1037 { |
975 WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - Priority interrupt during execution!" ); |
1038 WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - Priority interrupt during execution!" ); |
976 const TInt currentPHArrayCount( iPHArray.Count() ); |
1039 const TInt currentPHArrayCount( iPHArray.Count() ); |
977 for( TInt y( iTempReadyPHArray.Count() -1 ); y >=0; y-- ) |
1040 for( TInt y( iTempReadyPHArray.Count() -1 ); y >=0; y-- ) |
978 { |
1041 { |
979 CHarvesterData* hd = iTempReadyPHArray[y]; |
1042 CHarvesterData* tempHd = iTempReadyPHArray[y]; |
980 if( currentPHArrayCount ) |
1043 if(iPHArray.Insert( tempHd, 0 ) != KErrNone) |
981 { |
1044 { |
982 // Leave the first item in the array as it is the priority item |
1045 HarvestCompleted( tempHd->ClientId(), tempHd->Uri(), KErrNoMemory ); |
983 iPHArray.Insert( hd, 1 ); |
1046 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
984 } |
1047 delete tempHd; |
985 else |
1048 tempHd = NULL; |
986 { |
|
987 iPHArray.Insert( hd, 0 ); |
|
988 } |
1049 } |
989 } |
1050 } |
990 iTempReadyPHArray.Reset(); |
1051 iTempReadyPHArray.Reset(); |
991 CleanupStack::PopAndDestroy( &mdeObjectArray ); |
1052 CleanupStack::PopAndDestroy( &mdeObjectArray ); |
992 return; |
1053 return; |
|
1054 } |
|
1055 // Check if disk is full |
|
1056 // If disk is detected to be full, no items can be added to MDS db, thus abort the run, and start over |
|
1057 // when disk space is available to make sure the arrays are valid. |
|
1058 else if( iDiskFull ) |
|
1059 { |
|
1060 WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - No disk space available!" ); |
|
1061 for( TInt y( iTempReadyPHArray.Count() -1 ); y >=0; y-- ) |
|
1062 { |
|
1063 CHarvesterData* tempHd = iTempReadyPHArray[y]; |
|
1064 |
|
1065 if(iPHArray.Insert( tempHd, 0 ) != KErrNone) |
|
1066 { |
|
1067 HarvestCompleted( tempHd->ClientId(), tempHd->Uri(), KErrNoMemory ); |
|
1068 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
|
1069 delete tempHd; |
|
1070 tempHd = NULL; |
|
1071 } |
|
1072 } |
|
1073 iTempReadyPHArray.Reset(); |
|
1074 CleanupStack::PopAndDestroy( &mdeObjectArray ); |
|
1075 User::Leave( KErrDiskFull ); |
993 } |
1076 } |
994 |
1077 |
995 if( objDefStr.Length() == 0 || |
1078 if( objDefStr.Length() == 0 || |
996 ( objDefStr == KInUse ) ) |
1079 ( objDefStr == KInUse ) ) |
997 { |
1080 { |
1006 endindex--; |
1089 endindex--; |
1007 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
1090 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
1008 continue; |
1091 continue; |
1009 } |
1092 } |
1010 |
1093 |
1011 CMdENamespaceDef& defNS = iMdESession->GetDefaultNamespaceDefL(); |
|
1012 CMdEObjectDef& mdeObjectDef = defNS.GetObjectDefL( objDefStr ); |
1094 CMdEObjectDef& mdeObjectDef = defNS.GetObjectDefL( objDefStr ); |
1013 |
1095 |
1014 CMdEObject* mdeObject = iMdESession->NewObjectL( mdeObjectDef, hd->Uri() ); |
1096 HBufC* hdUri = hd->Uri().AllocL(); |
|
1097 CleanupStack::PushL( hdUri ); |
|
1098 CMdEObject* mdeObject = iMdESession->NewObjectL( mdeObjectDef, *hdUri ); |
|
1099 CleanupStack::PopAndDestroy( hdUri ); |
1015 CleanupStack::PushL( mdeObject ); |
1100 CleanupStack::PushL( mdeObject ); |
1016 |
1101 |
1017 CPlaceholderData* phData = NULL; |
1102 CPlaceholderData* phData = NULL; |
1018 |
1103 |
1019 if( hd->TakeSnapshot() ) |
1104 if( hd->TakeSnapshot() ) |
1170 |
1255 |
1171 CleanupStack::PopAndDestroy( phData ); |
1256 CleanupStack::PopAndDestroy( phData ); |
1172 |
1257 |
1173 CleanupStack::Pop( mdeObject ); |
1258 CleanupStack::Pop( mdeObject ); |
1174 |
1259 |
1175 iTempReadyPHArray.Append( hd ); |
1260 if(iTempReadyPHArray.Append( hd ) != KErrNone) |
|
1261 { |
|
1262 HarvestCompleted( hd->ClientId(), hd->Uri(), KErrNoMemory ); |
|
1263 delete hd; |
|
1264 hd = NULL; |
|
1265 } |
1176 iPHArray.Remove( i ); |
1266 iPHArray.Remove( i ); |
1177 i--; |
1267 i--; |
1178 endindex--; |
1268 endindex--; |
1179 } |
1269 } |
1180 |
1270 |
1181 const TInt tempArrayCount( iTempReadyPHArray.Count() ); |
|
1182 for( TInt i( 0 ); i < tempArrayCount; i++ ) |
|
1183 { |
|
1184 CHarvesterData* hd = iTempReadyPHArray[i]; |
|
1185 iReadyPHArray.Append( hd ); |
|
1186 } |
|
1187 iTempReadyPHArray.Reset(); |
|
1188 |
|
1189 const TInt objectCount = mdeObjectArray.Count(); |
1271 const TInt objectCount = mdeObjectArray.Count(); |
1190 |
1272 |
1191 if( objectCount > 0 ) |
1273 if( objectCount > 0 ) |
1192 { |
1274 { |
1193 // add object to mde |
1275 // add object to mde |
1194 iMdEHarvesterSession->AutoLockL( mdeObjectArray ); |
1276 iMdEHarvesterSession->AutoLockL( mdeObjectArray ); |
1195 const TInt addError( iMdESession->AddObjectsL( mdeObjectArray ) ); |
1277 TInt addError( KErrNone ); |
|
1278 TRAPD( addFailure, addError = iMdESession->AddObjectsL( mdeObjectArray ) ); |
|
1279 if( addFailure == KErrDiskFull ) |
|
1280 { |
|
1281 WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - No disk space available!" ); |
|
1282 for( TInt y( iTempReadyPHArray.Count() -1 ); y >=0; y-- ) |
|
1283 { |
|
1284 CHarvesterData* tempHd = iTempReadyPHArray[y]; |
|
1285 |
|
1286 if(iPHArray.Insert( tempHd, 0 ) != KErrNone) |
|
1287 { |
|
1288 HarvestCompleted( tempHd->ClientId(), tempHd->Uri(), KErrNoMemory ); |
|
1289 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
|
1290 delete tempHd; |
|
1291 tempHd = NULL; |
|
1292 } |
|
1293 } |
|
1294 iTempReadyPHArray.Reset(); |
|
1295 CleanupStack::PopAndDestroy( &mdeObjectArray ); |
|
1296 User::Leave( KErrDiskFull ); |
|
1297 } |
|
1298 else if( addFailure != KErrNone ) |
|
1299 { |
|
1300 User::Leave( addFailure ); |
|
1301 } |
|
1302 |
1196 if( addError != KErrNone ) |
1303 if( addError != KErrNone ) |
1197 { |
1304 { |
1198 // If some error occures, retry |
1305 // If some error occures, retry |
1199 iMdESession->AddObjectsL( mdeObjectArray ); |
1306 iMdESession->AddObjectsL( mdeObjectArray ); |
1200 } |
1307 } |
1201 |
1308 |
|
1309 const TInt tempArrayCount( iTempReadyPHArray.Count() ); |
|
1310 for( TInt i( 0 ); i < tempArrayCount; i++ ) |
|
1311 { |
|
1312 CHarvesterData* tempHd = iTempReadyPHArray[i]; |
|
1313 if(iReadyPHArray.Append( tempHd ) != KErrNone) |
|
1314 { |
|
1315 HarvestCompleted( tempHd->ClientId(), tempHd->Uri(), KErrNoMemory ); |
|
1316 delete tempHd; |
|
1317 tempHd = NULL; |
|
1318 } |
|
1319 } |
|
1320 iTempReadyPHArray.Reset(); |
|
1321 |
1202 iHarvesterEventManager->IncreaseItemCount( EHEObserverTypePlaceholder, |
1322 iHarvesterEventManager->IncreaseItemCount( EHEObserverTypePlaceholder, |
1203 objectCount ); |
1323 objectCount ); |
1204 iHarvesterEventManager->SendEventL( EHEObserverTypePlaceholder, EHEStateStarted, |
1324 iHarvesterEventManager->SendEventL( EHEObserverTypePlaceholder, EHEStateStarted, |
1205 iHarvesterEventManager->ItemCount( EHEObserverTypePlaceholder ) ); |
1325 iHarvesterEventManager->ItemCount( EHEObserverTypePlaceholder ) ); |
1206 |
1326 |
1232 TBool isError = EFalse; |
1352 TBool isError = EFalse; |
1233 CMdEObject* mdeObject = &aHD->MdeObject(); |
1353 CMdEObject* mdeObject = &aHD->MdeObject(); |
1234 const TDesC& uri = aHD->Uri(); |
1354 const TDesC& uri = aHD->Uri(); |
1235 TBool objectExisted = ETrue; |
1355 TBool objectExisted = ETrue; |
1236 |
1356 |
1237 if( ! mdeObject ) |
1357 if( !mdeObject ) |
1238 { |
1358 { |
1239 objectExisted = EFalse; |
1359 objectExisted = EFalse; |
1240 WRITELOG1( "CHarvesterAO::CheckFileExtensionAndHarvestL() - no mdeobject. URI: %S", &uri ); |
1360 WRITELOG1( "CHarvesterAO::CheckFileExtensionAndHarvestL() - no mdeobject. URI: %S", &uri ); |
1241 TBuf<KObjectDefStrSize> objDefStr; |
1361 TBuf<KObjectDefStrSize> objDefStr; |
1242 iHarvesterPluginFactory->GetObjectDefL( *aHD, objDefStr ); |
1362 iHarvesterPluginFactory->GetObjectDefL( aHD, objDefStr ); |
1243 |
1363 |
1244 // GetObjectDef can cause context switch, and if unmount happens when this execution is |
1364 // GetObjectDef can cause context switch, and if unmount happens when this execution is |
1245 // interrupted, the ph data can be invalid. Thus, abort whole run, and start over to make sure |
1365 // interrupted, the ph data can be invalid. Thus, abort whole run, and start over to make sure |
1246 // the data is valid. |
1366 // the data is valid. |
1247 if( iUnmountDetected ) |
1367 if( !aHD ) |
1248 { |
1368 { |
1249 return; |
1369 return; |
1250 } |
1370 } |
1251 |
1371 |
1252 if( objDefStr.Length() == 0 ) |
1372 if( objDefStr.Length() == 0 ) |
1347 |
1467 |
1348 if( objectExisted && aHD->EventType() == EHarvesterAdd ) |
1468 if( objectExisted && aHD->EventType() == EHarvesterAdd ) |
1349 { |
1469 { |
1350 iMdESession->RemoveObjectL( aHD->Uri() ); |
1470 iMdESession->RemoveObjectL( aHD->Uri() ); |
1351 } |
1471 } |
|
1472 |
|
1473 // If context swich occures just right due to RemoveObjectL, check aHD for validity |
|
1474 if( !aHD ) |
|
1475 { |
|
1476 return; |
|
1477 } |
1352 |
1478 |
1353 TInt pluginErr = KErrNone; |
1479 TInt pluginErr = KErrNone; |
1354 TRAPD( err, pluginErr = iHarvesterPluginFactory->HarvestL( aHD )); |
1480 TRAPD( err, pluginErr = iHarvesterPluginFactory->HarvestL( aHD )); |
|
1481 |
1355 if ( err != KErrNone ) |
1482 if ( err != KErrNone ) |
1356 { |
1483 { |
1357 WRITELOG1( "CHarvesterAO::CheckFileExtensionAndHarvestL() - plugin error: %d", err ); |
1484 WRITELOG1( "CHarvesterAO::CheckFileExtensionAndHarvestL() - plugin error: %d", err ); |
1358 OstTrace1( TRACE_NORMAL, DUP6_CHARVESTERAO_CHECKFILEEXTENSIONANDHARVESTL, "CHarvesterAO::CheckFileExtensionAndHarvestL - plugin error: %d", err ); |
1485 OstTrace1( TRACE_NORMAL, DUP6_CHARVESTERAO_CHECKFILEEXTENSIONANDHARVESTL, "CHarvesterAO::CheckFileExtensionAndHarvestL - plugin error: %d", err ); |
1359 |
1486 |
1379 return; |
1506 return; |
1380 } |
1507 } |
1381 |
1508 |
1382 WRITELOG1("CHarvesterAO::CheckFileExtensionAndHarvestL() - ends with error %d", pluginErr ); |
1509 WRITELOG1("CHarvesterAO::CheckFileExtensionAndHarvestL() - ends with error %d", pluginErr ); |
1383 OstTrace1( TRACE_NORMAL, DUP8_CHARVESTERAO_CHECKFILEEXTENSIONANDHARVESTL, "CHarvesterAO::CheckFileExtensionAndHarvestL) - ends with error %d", pluginErr ); |
1510 OstTrace1( TRACE_NORMAL, DUP8_CHARVESTERAO_CHECKFILEEXTENSIONANDHARVESTL, "CHarvesterAO::CheckFileExtensionAndHarvestL) - ends with error %d", pluginErr ); |
1384 |
|
1385 SetNextRequest( ERequestHarvest ); |
|
1386 } |
1511 } |
1387 |
1512 |
1388 // --------------------------------------------------------------------------- |
1513 // --------------------------------------------------------------------------- |
1389 // HarvestingCompleted |
1514 // HarvestingCompleted |
1390 // --------------------------------------------------------------------------- |
1515 // --------------------------------------------------------------------------- |
1510 |
1635 |
1511 WRITELOG( "==============================ERROR done =========================" ); |
1636 WRITELOG( "==============================ERROR done =========================" ); |
1512 OstTrace0( TRACE_NORMAL, DUP12_CHARVESTERAO_HARVESTINGCOMPLETED, "==============================ERROR done =========================" ); |
1637 OstTrace0( TRACE_NORMAL, DUP12_CHARVESTERAO_HARVESTINGCOMPLETED, "==============================ERROR done =========================" ); |
1513 |
1638 |
1514 } |
1639 } |
1515 |
|
1516 SetNextRequest( ERequestHarvest ); |
|
1517 } |
1640 } |
1518 |
1641 |
1519 // --------------------------------------------------------------------------- |
1642 // --------------------------------------------------------------------------- |
1520 // HandleSessionOpened |
1643 // HandleSessionOpened |
1521 // --------------------------------------------------------------------------- |
1644 // --------------------------------------------------------------------------- |
1658 TRAP_IGNORE( BootRomScanL() ); |
1781 TRAP_IGNORE( BootRomScanL() ); |
1659 } |
1782 } |
1660 TRAP_IGNORE( BootPartialRestoreScanL() ); |
1783 TRAP_IGNORE( BootPartialRestoreScanL() ); |
1661 #endif |
1784 #endif |
1662 |
1785 |
1663 if( !iMassMemoryIdChecked ) |
1786 // Store the internal mass memory media ID to DB, and update data if necessary |
1664 { |
1787 TInt drive( -1 ); |
1665 TInt drive( -1 ); |
1788 TInt internalMassStorageError( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultMassStorage, drive ) ); |
1666 TInt massStorageError( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultMassStorage, drive ) ); |
1789 if( internalMassStorageError == KErrNone ) |
1667 if( massStorageError == KErrNone ) |
1790 { |
|
1791 TVolumeInfo internalMassStorageVolumeInfo; |
|
1792 internalMassStorageError = iFs.Volume( internalMassStorageVolumeInfo, drive ); |
|
1793 if( internalMassStorageError == KErrNone ) |
1668 { |
1794 { |
1669 TVolumeInfo massStorageVolumeInfo; |
1795 const TUint32 massStorageMediaId( internalMassStorageVolumeInfo.iUniqueID ); |
1670 iFs.Volume( massStorageVolumeInfo, drive ); |
1796 TUint32 mmcMediaId( 0 ); |
1671 const TUint32 massStorageMediaId( massStorageVolumeInfo.iUniqueID ); |
1797 TInt mmcError( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage, drive ) ); |
1672 massStorageError = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage, drive ); |
1798 if( mmcError == KErrNone ) |
1673 if( massStorageError == KErrNone ) |
|
1674 { |
1799 { |
1675 iFs.Volume( massStorageVolumeInfo, drive ); |
1800 TVolumeInfo mmcVolumeInfo; |
1676 // Update mass storage media id if the mass storage is not memory card |
1801 mmcError = iFs.Volume( mmcVolumeInfo, drive ); |
1677 if( massStorageVolumeInfo.iUniqueID != massStorageMediaId && massStorageMediaId != 0 ) |
1802 if( mmcError == KErrNone ) |
|
1803 { |
|
1804 mmcMediaId = mmcVolumeInfo.iUniqueID; |
|
1805 } |
|
1806 } |
|
1807 |
|
1808 // If removable storage is not found, assume internal mass storage was mounted |
|
1809 if( mmcError ) |
|
1810 { |
|
1811 if( massStorageMediaId != 0 ) |
1678 { |
1812 { |
1679 iMdEHarvesterSession->CheckMassStorageMediaId( massStorageMediaId ); |
1813 iMdEHarvesterSession->CheckMassStorageMediaId( massStorageMediaId ); |
1680 } |
1814 } |
1681 } |
1815 } |
|
1816 else if( massStorageMediaId != mmcMediaId && |
|
1817 massStorageMediaId != 0 ) |
|
1818 { |
|
1819 iMdEHarvesterSession->CheckMassStorageMediaId( massStorageMediaId ); |
|
1820 } |
1682 } |
1821 } |
1683 } |
1822 } |
1684 } |
1823 } |
1685 else |
1824 else |
1686 { |
1825 { |
1816 case ERequestHarvest: |
1955 case ERequestHarvest: |
1817 { |
1956 { |
1818 WRITELOG( "CHarvesterAO::RunL - ERequestHarvest" ); |
1957 WRITELOG( "CHarvesterAO::RunL - ERequestHarvest" ); |
1819 OstTrace0( TRACE_NORMAL, DUP2_CHARVESTERAO_RUNL, "CHarvesterAO::RunL - ERequestHarvest" ); |
1958 OstTrace0( TRACE_NORMAL, DUP2_CHARVESTERAO_RUNL, "CHarvesterAO::RunL - ERequestHarvest" ); |
1820 |
1959 |
1821 // harvest new items first... |
1960 // harvest new items first |
1822 if ( iQueue->ItemsInQueue() > 0 ) |
1961 if ( iQueue->ItemsInQueue() > 0 ) |
1823 { |
1962 { |
1824 WRITELOG( "CHarvesterAO::RunL - Items in queue - calling ReadItemFromQueueL()" ); |
1963 WRITELOG( "CHarvesterAO::RunL - Items in queue - calling ReadItemFromQueueL()" ); |
1825 ReadItemFromQueueL(); |
1964 ReadItemFromQueueL(); |
1826 SetNextRequest( ERequestHarvest ); |
1965 SetNextRequest( ERequestHarvest ); |
1829 |
1968 |
1830 // no more items to handle from main queue |
1969 // no more items to handle from main queue |
1831 else |
1970 else |
1832 { |
1971 { |
1833 WRITELOG( "CHarvesterAO::RunL - No items in main queue" ); |
1972 WRITELOG( "CHarvesterAO::RunL - No items in main queue" ); |
|
1973 // If interrupts occured, check the normal placeholder array for possible items to |
|
1974 // be handled before moving on to container or ready placeholders |
|
1975 if( iPHArray.Count() > 0 ) |
|
1976 { |
|
1977 WRITELOG( "CHarvesterAO::RunL - Items found in placeholder array" ); |
|
1978 TRAPD( err, HandlePlaceholdersL( ETrue ) ); |
|
1979 |
|
1980 // make sure that when HandlePlaceholdersL leaves unexpectedly, iPHArray is cleared |
|
1981 if ( err != KErrNone ) |
|
1982 { |
|
1983 if( err != KErrDiskFull ) |
|
1984 { |
|
1985 iPHArray.ResetAndDestroy(); |
|
1986 iTempReadyPHArray.ResetAndDestroy(); |
|
1987 } |
|
1988 User::Leave( err ); |
|
1989 } |
|
1990 SetNextRequest( ERequestHarvest ); |
|
1991 break; |
|
1992 } |
1834 // All registered fast harvested items or placeholders handled at this point |
1993 // All registered fast harvested items or placeholders handled at this point |
1835 // if container files to harvest, handle those next |
1994 // if container files to harvest, handle those next |
1836 if( iContainerPHArray.Count() > 0 ) |
1995 else if( iContainerPHArray.Count() > 0 ) |
1837 { |
1996 { |
1838 WRITELOG( "CHarvesterAO::RunL - Items in iContainterPHArray - requesting ERequestContainerPlaceholder handling" ); |
1997 WRITELOG( "CHarvesterAO::RunL - Items in iContainterPHArray - requesting ERequestContainerPlaceholder handling" ); |
1839 iFastHarvestNeeded = EFalse; |
1998 iFastHarvestNeeded = EFalse; |
1840 iHarvestingPlaceholders = EFalse; |
1999 iHarvestingPlaceholders = EFalse; |
1841 SetPriority( KHarvesterPriorityHarvestingPlugin ); |
2000 SetPriority( KHarvesterPriorityHarvestingPlugin ); |
1862 { |
2021 { |
1863 #ifdef _DEBUG |
2022 #ifdef _DEBUG |
1864 WRITELOG1("CHarvesterAO::RunL - items in ready pharray: %d", arrayCount ); |
2023 WRITELOG1("CHarvesterAO::RunL - items in ready pharray: %d", arrayCount ); |
1865 OstTrace1( TRACE_NORMAL, DUP3_CHARVESTERAO_RUNL, "CHarvesterAO::RunL - items in ready pharray: %d", arrayCount ); |
2024 OstTrace1( TRACE_NORMAL, DUP3_CHARVESTERAO_RUNL, "CHarvesterAO::RunL - items in ready pharray: %d", arrayCount ); |
1866 #endif |
2025 #endif |
1867 TInt endIndex( KPlaceholderQueueSize ); |
2026 TInt endIndex( KReadyPlaceholderQueueSize ); |
1868 if( arrayCount < KPlaceholderQueueSize ) |
2027 if( arrayCount < KReadyPlaceholderQueueSize ) |
1869 { |
2028 { |
1870 endIndex = arrayCount; |
2029 endIndex = arrayCount; |
1871 } |
2030 } |
1872 for( TInt i = 0; i < endIndex; i++ ) |
2031 for( TInt i = 0; i < endIndex; i++ ) |
1873 { |
2032 { |
1911 iContainerPHArray.Remove( 0 ); |
2070 iContainerPHArray.Remove( 0 ); |
1912 i++; |
2071 i++; |
1913 } |
2072 } |
1914 TRAPD( err, HandlePlaceholdersL( EFalse ) ); |
2073 TRAPD( err, HandlePlaceholdersL( EFalse ) ); |
1915 |
2074 |
1916 // make sure that when HandlePlaceholdersL leaves, iPHArray is cleared |
2075 // make sure that when HandlePlaceholdersL leaves unexpectedly, iPHArray is cleared |
1917 if ( err != KErrNone ) |
2076 if ( err != KErrNone ) |
1918 { |
2077 { |
1919 iContainerPHArray.ResetAndDestroy(); |
2078 if( err != KErrDiskFull ) |
1920 iPHArray.ResetAndDestroy(); |
2079 { |
1921 iTempReadyPHArray.ResetAndDestroy(); |
2080 iContainerPHArray.ResetAndDestroy(); |
1922 User::Leave( err ); |
2081 iPHArray.ResetAndDestroy(); |
1923 } |
2082 iTempReadyPHArray.ResetAndDestroy(); |
|
2083 } |
|
2084 User::Leave( err ); |
|
2085 } |
1924 SetNextRequest( ERequestHarvest ); |
2086 SetNextRequest( ERequestHarvest ); |
1925 } |
2087 } |
1926 break; |
2088 break; |
1927 |
2089 |
1928 // pause request |
2090 // pause request |
1978 // RunError |
2140 // RunError |
1979 // --------------------------------------------------------------------------- |
2141 // --------------------------------------------------------------------------- |
1980 // |
2142 // |
1981 TInt CHarvesterAO::RunError( TInt aError ) |
2143 TInt CHarvesterAO::RunError( TInt aError ) |
1982 { |
2144 { |
1983 WRITELOG( "CHarvesterAO::RunError" ); |
2145 WRITELOG1( "CHarvesterAO::RunError, error: %d", aError ); |
1984 OstTrace0( TRACE_NORMAL, CHARVESTERAO_RUNERROR, "CHarvesterAO::RunError" ); |
2146 OstTrace0( TRACE_NORMAL, CHARVESTERAO_RUNERROR, "CHarvesterAO::RunError" ); |
1985 |
2147 |
1986 switch( iNextRequest ) |
2148 switch( iNextRequest ) |
1987 { |
2149 { |
1988 case ERequestHarvest: |
2150 case ERequestHarvest: |
1989 { |
2151 { |
1990 WRITELOG( "CHarvesterAO::RunError - state ERequestHarvest" ); |
2152 WRITELOG( "CHarvesterAO::RunError - state ERequestHarvest" ); |
1991 OstTrace0( TRACE_NORMAL, DUP1_CHARVESTERAO_RUNERROR, "CHarvesterAO::RunError - state ERequestHarvest" ); |
2153 OstTrace0( TRACE_NORMAL, DUP1_CHARVESTERAO_RUNERROR, "CHarvesterAO::RunError - state ERequestHarvest" ); |
|
2154 if( aError == KErrDiskFull || aError == KErrNoMemory ) |
|
2155 { |
|
2156 SetNextRequest( ERequestIdle ); |
|
2157 } |
|
2158 } |
|
2159 break; |
|
2160 |
|
2161 case ERequestContainerPlaceholder: |
|
2162 { |
|
2163 WRITELOG( "CHarvesterAO::RunError - state ERequestContainerPlaceholder" ); |
|
2164 OstTrace0( TRACE_NORMAL, DUP5_CHARVESTERAO_RUNERROR, "CHarvesterAO::RunError - state ERequestContainerPlaceholder" ); |
|
2165 if( aError == KErrDiskFull || aError == KErrNoMemory ) |
|
2166 { |
|
2167 SetNextRequest( ERequestIdle ); |
|
2168 } |
1992 } |
2169 } |
1993 break; |
2170 break; |
1994 |
2171 |
1995 case ERequestPause: |
2172 case ERequestPause: |
1996 { |
2173 { |
2103 WRITELOG("CHarvesterAO::HandleDiskSpaceNotificationL()"); |
2280 WRITELOG("CHarvesterAO::HandleDiskSpaceNotificationL()"); |
2104 OstTrace0( TRACE_NORMAL, CHARVESTERAO_HANDLEDISKSPACENOTIFICATIONL, "CHarvesterAO::HandleDiskSpaceNotificationL" ); |
2281 OstTrace0( TRACE_NORMAL, CHARVESTERAO_HANDLEDISKSPACENOTIFICATIONL, "CHarvesterAO::HandleDiskSpaceNotificationL" ); |
2105 |
2282 |
2106 if( MMdSHarvesterDiskSpaceObserver::EMore == aDiskSpaceDirection ) |
2283 if( MMdSHarvesterDiskSpaceObserver::EMore == aDiskSpaceDirection ) |
2107 { |
2284 { |
|
2285 WRITELOG("CHarvesterAO::HandleDiskSpaceNotificationL() - disk space available"); |
|
2286 OstTrace0( TRACE_NORMAL, DUP2_CHARVESTERAO_HANDLEDISKSPACENOTIFICATIONL, "CHarvesterAO::HandleDiskSpaceNotificationL - disk space available" ); |
|
2287 iDiskFull = EFalse; |
|
2288 } |
|
2289 else |
|
2290 { |
2108 WRITELOG("CHarvesterAO::HandleDiskSpaceNotificationL() - disk full"); |
2291 WRITELOG("CHarvesterAO::HandleDiskSpaceNotificationL() - disk full"); |
2109 OstTrace0( TRACE_NORMAL, DUP1_CHARVESTERAO_HANDLEDISKSPACENOTIFICATIONL, "CHarvesterAO::HandleDiskSpaceNotificationL - disk full" ); |
2292 OstTrace0( TRACE_NORMAL, DUP1_CHARVESTERAO_HANDLEDISKSPACENOTIFICATIONL, "CHarvesterAO::HandleDiskSpaceNotificationL - disk full" ); |
2110 iDiskFull = EFalse; |
|
2111 } |
|
2112 else |
|
2113 { |
|
2114 WRITELOG("CHarvesterAO::HandleDiskSpaceNotificationL() - disk space available"); |
|
2115 OstTrace0( TRACE_NORMAL, DUP2_CHARVESTERAO_HANDLEDISKSPACENOTIFICATIONL, "CHarvesterAO::HandleDiskSpaceNotificationL - disk space available" ); |
|
2116 iDiskFull = ETrue; |
2293 iDiskFull = ETrue; |
2117 if( iServerPaused ) |
2294 if( iServerPaused ) |
2118 { |
2295 { |
2119 return; |
2296 return; |
2120 } |
2297 } |
2939 const RPointerArray<HBufC>& aIgnorePaths, |
3126 const RPointerArray<HBufC>& aIgnorePaths, |
2940 TBool aCheckDrive ) |
3127 TBool aCheckDrive ) |
2941 { |
3128 { |
2942 WRITELOG("CHarvesterAO::BootScanL() - begin"); |
3129 WRITELOG("CHarvesterAO::BootScanL() - begin"); |
2943 OstTrace0( TRACE_NORMAL, CHARVESTERAO_BOOTSCANL, "CHarvesterAO::BootScanL - begin" ); |
3130 OstTrace0( TRACE_NORMAL, CHARVESTERAO_BOOTSCANL, "CHarvesterAO::BootScanL - begin" ); |
2944 |
|
2945 TInt drive( -1 ); |
|
2946 TInt massStorageError( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultMassStorage, drive ) ); |
|
2947 if( massStorageError == KErrNone ) |
|
2948 { |
|
2949 TVolumeInfo massStorageVolumeInfo; |
|
2950 iFs.Volume( massStorageVolumeInfo, drive ); |
|
2951 const TUint32 massStorageMediaId( massStorageVolumeInfo.iUniqueID ); |
|
2952 massStorageError = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage, drive ); |
|
2953 if( massStorageError == KErrNone ) |
|
2954 { |
|
2955 iFs.Volume( massStorageVolumeInfo, drive ); |
|
2956 // Update mass storage media id if the mass storage is not memory card |
|
2957 if( massStorageVolumeInfo.iUniqueID != massStorageMediaId && massStorageMediaId != 0 ) |
|
2958 { |
|
2959 iMdEHarvesterSession->CheckMassStorageMediaId( massStorageMediaId ); |
|
2960 } |
|
2961 } |
|
2962 } |
|
2963 |
3131 |
2964 TVolumeInfo volumeInfo; |
3132 TVolumeInfo volumeInfo; |
2965 iFs.Volume( volumeInfo, EDriveC ); |
3133 iFs.Volume( volumeInfo, EDriveC ); |
2966 |
3134 |
2967 iMdEHarvesterSession->SetFilesToNotPresent( volumeInfo.iUniqueID, ETrue ); |
3135 iMdEHarvesterSession->SetFilesToNotPresent( volumeInfo.iUniqueID, ETrue ); |
3039 if( !IsDescInArray( path, aIgnorePaths ) ) |
3207 if( !IsDescInArray( path, aIgnorePaths ) ) |
3040 { |
3208 { |
3041 WRITELOG("CHarvesterAO::BootScanL() - scanFolders.AppendL"); |
3209 WRITELOG("CHarvesterAO::BootScanL() - scanFolders.AppendL"); |
3042 OstTrace0( TRACE_NORMAL, DUP2_CHARVESTERAO_BOOTSCANL, "CHarvesterAO::BootScanL - scanFolders.AppendL" ); |
3210 OstTrace0( TRACE_NORMAL, DUP2_CHARVESTERAO_BOOTSCANL, "CHarvesterAO::BootScanL - scanFolders.AppendL" ); |
3043 TScanItem* item = new (ELeave) TScanItem(); |
3211 TScanItem* item = new (ELeave) TScanItem(); |
|
3212 CleanupStack::PushL( item ); |
3044 item->iPath = name->AllocL(); |
3213 item->iPath = name->AllocL(); |
3045 item->iPreinstalled = MdeConstants::MediaObject::ENotPreinstalled; |
3214 item->iPreinstalled = MdeConstants::MediaObject::ENotPreinstalled; |
3046 aScanItems.AppendL( item ); |
3215 CleanupStack::Pop( item ); |
|
3216 aScanItems.AppendL( item ); // ownership is transferred |
3047 } |
3217 } |
3048 } |
3218 } |
3049 else |
3219 else |
3050 { |
3220 { |
3051 TPtrC filename = *name; |
3221 TPtrC filename = *name; |
3101 hd->SetObjectType( EPlaceholder ); |
3271 hd->SetObjectType( EPlaceholder ); |
3102 hd->SetOrigin( MdeConstants::Object::EOther ); |
3272 hd->SetOrigin( MdeConstants::Object::EOther ); |
3103 hd->SetClientData( phData ); |
3273 hd->SetClientData( phData ); |
3104 |
3274 |
3105 CleanupStack::Pop( phData ); |
3275 CleanupStack::Pop( phData ); |
3106 hdArray.Append( hd ); |
3276 |
|
3277 if(hdArray.Append( hd ) != KErrNone ) |
|
3278 { |
|
3279 delete hd; |
|
3280 hd = NULL; |
|
3281 } |
3107 } |
3282 } |
3108 CleanupStack::PopAndDestroy( &results ); |
3283 CleanupStack::PopAndDestroy( &results ); |
3109 CleanupStack::PopAndDestroy( &fileInfos ); |
3284 CleanupStack::PopAndDestroy( &fileInfos ); |
3110 CleanupStack::PopAndDestroy( &uris ); |
3285 CleanupStack::PopAndDestroy( &uris ); |
3111 } |
3286 } |
3126 iQueue->MonitorEvent( hdArray ); |
3301 iQueue->MonitorEvent( hdArray ); |
3127 CleanupStack::PopAndDestroy( &hdArray ); |
3302 CleanupStack::PopAndDestroy( &hdArray ); |
3128 |
3303 |
3129 iMdEHarvesterSession->RemoveFilesNotPresent( volumeInfo.iUniqueID, ETrue ); |
3304 iMdEHarvesterSession->RemoveFilesNotPresent( volumeInfo.iUniqueID, ETrue ); |
3130 |
3305 |
3131 iMassMemoryIdChecked = ETrue; |
|
3132 |
|
3133 WRITELOG("CHarvesterAO::BootScanL() - end"); |
3306 WRITELOG("CHarvesterAO::BootScanL() - end"); |
3134 OstTrace0( TRACE_NORMAL, DUP5_CHARVESTERAO_BOOTSCANL, "CHarvesterAO::BootScanL - end" ); |
3307 OstTrace0( TRACE_NORMAL, DUP5_CHARVESTERAO_BOOTSCANL, "CHarvesterAO::BootScanL - end" ); |
3135 } |
3308 } |
3136 |
3309 |
3137 void CHarvesterAO::SetHarvesterStatusObserver( MHarvesterStatusObserver* aObserver ) |
3310 void CHarvesterAO::SetHarvesterStatusObserver( MHarvesterStatusObserver* aObserver ) |