51 // constants |
50 // constants |
52 const TInt32 KFileMonitorPluginUid = 0x20007186; // file monitor plugin implementation uid |
51 const TInt32 KFileMonitorPluginUid = 0x20007186; // file monitor plugin implementation uid |
53 |
52 |
54 const TInt KPlaceholderQueueSize = 99; |
53 const TInt KPlaceholderQueueSize = 99; |
55 const TInt KContainerPlaceholderQueueSize = 10; |
54 const TInt KContainerPlaceholderQueueSize = 10; |
|
55 const TInt KReadyPlaceholderQueueSize = 10; |
56 const TInt KObjectDefStrSize = 20; |
56 const TInt KObjectDefStrSize = 20; |
57 |
57 |
58 _LIT( KTAGDaemonName, "ThumbAGDaemon" ); |
58 _LIT( KTAGDaemonName, "ThumbAGDaemon" ); |
59 _LIT( KTAGDaemonExe, "thumbagdaemon.exe" ); |
59 _LIT( KTAGDaemonExe, "thumbagdaemon.exe" ); |
60 |
60 |
61 _LIT(KVideo, "Video"); |
61 _LIT(KVideo, "Video"); |
62 _LIT(KInUse, "InUse"); |
62 _LIT(KInUse, "InUse"); |
63 |
63 |
64 _LIT(KUndefinedMime, " "); |
64 _LIT(KUndefined, " "); |
65 |
65 |
66 _LIT( KExtensionMp4, "mp4" ); |
66 _LIT( KExtensionMp4, "mp4" ); |
67 _LIT( KExtensionMpg4, "mpg4" ); |
67 _LIT( KExtensionMpg4, "mpg4" ); |
68 _LIT( KExtensionMpeg4, "mpeg4" ); |
68 _LIT( KExtensionMpeg4, "mpeg4" ); |
69 _LIT( KExtension3gp, "3gp" ); |
69 _LIT( KExtension3gp, "3gp" ); |
74 { |
74 { |
75 } |
75 } |
76 |
76 |
77 void CHarvesterAoPropertyDefs::ConstructL(CMdEObjectDef& aObjectDef) |
77 void CHarvesterAoPropertyDefs::ConstructL(CMdEObjectDef& aObjectDef) |
78 { |
78 { |
79 CMdENamespaceDef& nsDef = aObjectDef.NamespaceDef(); |
79 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 } |
80 } |
94 |
81 |
95 CHarvesterAoPropertyDefs* CHarvesterAoPropertyDefs::NewL(CMdEObjectDef& aObjectDef) |
82 CHarvesterAoPropertyDefs* CHarvesterAoPropertyDefs::NewL() |
96 { |
83 { |
97 CHarvesterAoPropertyDefs* self = |
84 CHarvesterAoPropertyDefs* self = |
98 new (ELeave) CHarvesterAoPropertyDefs(); |
85 new (ELeave) CHarvesterAoPropertyDefs(); |
99 CleanupStack::PushL( self ); |
86 return self; |
100 self->ConstructL( aObjectDef ); |
87 } |
101 CleanupStack::Pop( self ); |
88 |
102 return self; |
89 void CHarvesterAoPropertyDefs::SetByObjectDefL(CMdEObjectDef& aObjectDef) |
103 } |
90 { |
104 |
91 CMdENamespaceDef& nsDef = aObjectDef.NamespaceDef(); |
|
92 |
|
93 // Common property definitions |
|
94 CMdEObjectDef& objectDef = nsDef.GetObjectDefL( MdeConstants::Object::KBaseObject ); |
|
95 iCreationDatePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KCreationDateProperty ); |
|
96 iLastModifiedDatePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KLastModifiedDateProperty ); |
|
97 iSizePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KSizeProperty ); |
|
98 iOriginPropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KOriginProperty ); |
|
99 iItemTypePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KItemTypeProperty ); |
|
100 iTitlePropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KTitleProperty ); |
|
101 iDefaultFolderPropertyDef = &objectDef.GetPropertyDefL( MdeConstants::Object::KInDefaultFolder ); |
|
102 |
|
103 CMdEObjectDef& mediaDef = nsDef.GetObjectDefL( MdeConstants::MediaObject::KMediaObject ); |
|
104 iPreinstalledPropertyDef = &mediaDef.GetPropertyDefL( MdeConstants::MediaObject::KPreinstalledProperty ); |
|
105 } |
|
106 |
105 // --------------------------------------------------------------------------- |
107 // --------------------------------------------------------------------------- |
106 // NewLC |
108 // NewLC |
107 // --------------------------------------------------------------------------- |
109 // --------------------------------------------------------------------------- |
108 // |
110 // |
109 CHarvesterAO* CHarvesterAO::NewLC() |
111 CHarvesterAO* CHarvesterAO::NewLC() |
151 iManualPauseEnabled = EFalse; |
153 iManualPauseEnabled = EFalse; |
152 iFastHarvestNeeded = EFalse; |
154 iFastHarvestNeeded = EFalse; |
153 iHarvestingPlaceholders = EFalse; |
155 iHarvestingPlaceholders = EFalse; |
154 |
156 |
155 iUnmountDetected = EFalse; |
157 iUnmountDetected = EFalse; |
|
158 iUnmountHandlingOngoing = EFalse; |
156 iPriorityInterruptDetected = EFalse; |
159 iPriorityInterruptDetected = EFalse; |
|
160 iLocManipulatorConnected = EFalse; |
157 } |
161 } |
158 |
162 |
159 // --------------------------------------------------------------------------- |
163 // --------------------------------------------------------------------------- |
160 // ~CHarvesterAO |
164 // ~CHarvesterAO |
161 // --------------------------------------------------------------------------- |
165 // --------------------------------------------------------------------------- |
220 |
230 |
221 iTempReadyPHArray.ResetAndDestroy(); |
231 iTempReadyPHArray.ResetAndDestroy(); |
222 iTempReadyPHArray.Close(); |
232 iTempReadyPHArray.Close(); |
223 |
233 |
224 delete iHarvesterOomAO; |
234 delete iHarvesterOomAO; |
|
235 iHarvesterOomAO = NULL; |
225 delete iRestoreWatcher; |
236 delete iRestoreWatcher; |
|
237 iRestoreWatcher = NULL; |
226 delete iOnDemandAO; |
238 delete iOnDemandAO; |
|
239 iOnDemandAO = NULL; |
227 delete iMdEHarvesterSession; |
240 delete iMdEHarvesterSession; |
|
241 iMdEHarvesterSession = NULL; |
228 delete iMdESession; |
242 delete iMdESession; |
|
243 iMdESession = NULL; |
229 delete iQueue; |
244 delete iQueue; |
|
245 iQueue = NULL; |
230 delete iHarvesterPluginFactory; |
246 delete iHarvesterPluginFactory; |
|
247 iHarvesterPluginFactory = NULL; |
231 delete iMdeObjectHandler; |
248 delete iMdeObjectHandler; |
|
249 iMdeObjectHandler = NULL; |
232 delete iUnmountHandlerAO; |
250 delete iUnmountHandlerAO; |
|
251 iUnmountHandlerAO = NULL; |
233 |
252 |
234 delete iPropDefs; |
253 delete iPropDefs; |
|
254 iPropDefs = NULL; |
235 delete iCameraExtensionArray; |
255 delete iCameraExtensionArray; |
|
256 iCameraExtensionArray = NULL; |
236 |
257 |
237 delete iPhoneImagesPath; |
258 delete iPhoneImagesPath; |
|
259 iPhoneImagesPath = NULL; |
238 delete iMmcImagesPath; |
260 delete iMmcImagesPath; |
|
261 iMmcImagesPath = NULL; |
239 |
262 |
240 delete iPhoneVideosPath; |
263 delete iPhoneVideosPath; |
|
264 iPhoneVideosPath = NULL; |
241 delete iMmcVideosPath; |
265 delete iMmcVideosPath; |
|
266 iMmcVideosPath = NULL; |
242 |
267 |
243 delete iPhoneSoundsPath; |
268 delete iPhoneSoundsPath; |
|
269 iPhoneSoundsPath = NULL; |
244 delete iMmcSoundsPath; |
270 delete iMmcSoundsPath; |
|
271 iMmcSoundsPath = NULL; |
245 |
272 |
246 RMediaIdUtil::ReleaseInstance(); |
273 RMediaIdUtil::ReleaseInstance(); |
247 |
274 |
248 REComSession::FinalClose(); |
275 REComSession::FinalClose(); |
249 } |
276 } |
291 iHarvesterPluginFactory->SetBlacklist( *iBlacklist ); |
318 iHarvesterPluginFactory->SetBlacklist( *iBlacklist ); |
292 |
319 |
293 // Reset harvesting status for clients in case blacklisted file was handled |
320 // Reset harvesting status for clients in case blacklisted file was handled |
294 iHarvesterPluginFactory->SendHarvestingStatusEventL( EFalse ); |
321 iHarvesterPluginFactory->SendHarvestingStatusEventL( EFalse ); |
295 |
322 |
|
323 iPropDefs = CHarvesterAoPropertyDefs::NewL(); |
|
324 |
296 iCameraExtensionArray = new ( ELeave ) CDesCArraySeg( 6 ); |
325 iCameraExtensionArray = new ( ELeave ) CDesCArraySeg( 6 ); |
297 iCameraExtensionArray->InsertIsqL( KExtensionMp4 ); |
326 iCameraExtensionArray->InsertIsqL( KExtensionMp4 ); |
298 iCameraExtensionArray->InsertIsqL( KExtensionMpg4 ); |
327 iCameraExtensionArray->InsertIsqL( KExtensionMpg4 ); |
299 iCameraExtensionArray->InsertIsqL( KExtensionMpeg4 ); |
328 iCameraExtensionArray->InsertIsqL( KExtensionMpeg4 ); |
300 iCameraExtensionArray->InsertIsqL( KExtension3gp ); |
329 iCameraExtensionArray->InsertIsqL( KExtension3gp ); |
352 |
381 |
353 TCleanupItem cleanupItem( MdsUtils::CleanupEComArray, &infoArray ); |
382 TCleanupItem cleanupItem( MdsUtils::CleanupEComArray, &infoArray ); |
354 CleanupStack::PushL( cleanupItem ); |
383 CleanupStack::PushL( cleanupItem ); |
355 |
384 |
356 CMonitorPlugin::ListImplementationsL( infoArray ); |
385 CMonitorPlugin::ListImplementationsL( infoArray ); |
357 TInt count( 0 ); |
386 const TInt count( infoArray.Count() ); |
358 count = infoArray.Count(); |
|
359 CMonitorPlugin* plugin = NULL; |
387 CMonitorPlugin* plugin = NULL; |
360 |
388 |
361 for ( TInt i = 0; i < count; i++ ) |
389 for ( TInt i = 0; i < count; i++ ) |
362 { |
390 { |
363 TUid uid = infoArray[i]->ImplementationUid(); // Create the plug-ins |
391 TUid uid = infoArray[i]->ImplementationUid(); // Create the plug-ins |
408 // |
436 // |
409 void CHarvesterAO::StartMonitoring() |
437 void CHarvesterAO::StartMonitoring() |
410 { |
438 { |
411 WRITELOG( "CHarvesterAO::StartMonitoring()" ); |
439 WRITELOG( "CHarvesterAO::StartMonitoring()" ); |
412 OstTrace0( TRACE_NORMAL, CHARVESTERAO_STARTMONITORING, "CHarvesterAO::StartMonitoring" ); |
440 OstTrace0( TRACE_NORMAL, CHARVESTERAO_STARTMONITORING, "CHarvesterAO::StartMonitoring" ); |
413 |
|
414 const TInt count( iMonitorPluginArray.Count() ); |
441 const TInt count( iMonitorPluginArray.Count() ); |
415 |
442 |
416 for ( TInt i = 0; i < count; i++ ) |
443 for ( TInt i = 0; i < count; i++ ) |
417 { |
444 { |
418 iMonitorPluginArray[i]->StartMonitoring( *iQueue, iMdESession, NULL, |
445 iMonitorPluginArray[i]->StartMonitoring( *iQueue, iMdESession, NULL, |
445 void CHarvesterAO::PauseMonitoring() |
470 void CHarvesterAO::PauseMonitoring() |
446 { |
471 { |
447 WRITELOG( "CHarvesterAO::PauseMonitoring()" ); |
472 WRITELOG( "CHarvesterAO::PauseMonitoring()" ); |
448 OstTrace0( TRACE_NORMAL, CHARVESTERAO_PAUSEMONITORING, "CHarvesterAO::PauseMonitoring" ); |
473 OstTrace0( TRACE_NORMAL, CHARVESTERAO_PAUSEMONITORING, "CHarvesterAO::PauseMonitoring" ); |
449 |
474 |
450 const TInt count( iMonitorPluginArray.Count() ); |
475 for( TInt i = iMonitorPluginArray.Count() - 1; i >=0; i-- ) |
451 |
|
452 for ( TInt i = 0; i<count; i++ ) |
|
453 { |
476 { |
454 iMonitorPluginArray[i]->PauseMonitoring(); |
477 iMonitorPluginArray[i]->PauseMonitoring(); |
455 } |
478 } |
|
479 |
456 OstTrace0( TRACE_NORMAL, DUP1_CHARVESTERAO_PAUSEMONITORING, "CHarvesterAO::PauseMonitoring - end" ); |
480 OstTrace0( TRACE_NORMAL, DUP1_CHARVESTERAO_PAUSEMONITORING, "CHarvesterAO::PauseMonitoring - end" ); |
457 WRITELOG( "CHarvesterAO::PauseMonitoring() - end" ); |
481 WRITELOG( "CHarvesterAO::PauseMonitoring() - end" ); |
458 } |
482 } |
459 |
483 |
460 // --------------------------------------------------------------------------- |
484 // --------------------------------------------------------------------------- |
516 if( err == KErrNone && mediaId == aMediaId ) |
541 if( err == KErrNone && mediaId == aMediaId ) |
517 { |
542 { |
518 WRITELOG1( "CHarvesterAO::HandleUnmount() remove iReadyPHArray %d", i); |
543 WRITELOG1( "CHarvesterAO::HandleUnmount() remove iReadyPHArray %d", i); |
519 OstTrace1( TRACE_NORMAL, DUP2_CHARVESTERAO_HANDLEUNMOUNT, "CHarvesterAO::HandleUnmount remove iReadyPHArray %d", i ); |
544 OstTrace1( TRACE_NORMAL, DUP2_CHARVESTERAO_HANDLEUNMOUNT, "CHarvesterAO::HandleUnmount remove iReadyPHArray %d", i ); |
520 |
545 |
|
546 HarvestCompleted( hd->ClientId(), hd->Uri(), KErrCancel ); |
521 delete hd; |
547 delete hd; |
522 hd = NULL; |
548 hd = NULL; |
523 iReadyPHArray.Remove( i ); |
549 iReadyPHArray.Remove( i ); |
524 removed++; |
550 removed++; |
525 arrayCount--; |
551 arrayCount--; |
553 if( err == KErrNone && mediaId == aMediaId ) |
579 if( err == KErrNone && mediaId == aMediaId ) |
554 { |
580 { |
555 WRITELOG1( "CHarvesterAO::HandleUnmount() remove iPHArray %d", i); |
581 WRITELOG1( "CHarvesterAO::HandleUnmount() remove iPHArray %d", i); |
556 OstTrace1( TRACE_NORMAL, DUP5_CHARVESTERAO_HANDLEUNMOUNT, "CHarvesterAO::HandleUnmount remove iPHArray %d", i ); |
582 OstTrace1( TRACE_NORMAL, DUP5_CHARVESTERAO_HANDLEUNMOUNT, "CHarvesterAO::HandleUnmount remove iPHArray %d", i ); |
557 |
583 |
|
584 HarvestCompleted( hd->ClientId(), hd->Uri(), KErrCancel ); |
558 delete hd; |
585 delete hd; |
559 hd = NULL; |
586 hd = NULL; |
560 iPHArray.Remove( i ); |
587 iPHArray.Remove( i ); |
561 removed++; |
588 removed++; |
562 arrayCount--; |
589 arrayCount--; |
589 if( err == KErrNone && mediaId == aMediaId ) |
616 if( err == KErrNone && mediaId == aMediaId ) |
590 { |
617 { |
591 WRITELOG1( "CHarvesterAO::HandleUnmount() remove iContainerPHArray %d", i); |
618 WRITELOG1( "CHarvesterAO::HandleUnmount() remove iContainerPHArray %d", i); |
592 OstTrace1( TRACE_NORMAL, DUP8_CHARVESTERAO_HANDLEUNMOUNT, "CHarvesterAO::HandleUnmount remove iContainerPHArray %d", i ); |
619 OstTrace1( TRACE_NORMAL, DUP8_CHARVESTERAO_HANDLEUNMOUNT, "CHarvesterAO::HandleUnmount remove iContainerPHArray %d", i ); |
593 |
620 |
|
621 HarvestCompleted( hd->ClientId(), hd->Uri(), KErrCancel ); |
594 delete hd; |
622 delete hd; |
595 hd = NULL; |
623 hd = NULL; |
596 iContainerPHArray.Remove( i ); |
624 iContainerPHArray.Remove( i ); |
597 removed++; |
625 removed++; |
598 arrayCount--; |
626 arrayCount--; |
819 iHarvestingPlaceholders = ETrue; |
847 iHarvestingPlaceholders = ETrue; |
820 if( !iFastHarvestNeeded ) |
848 if( !iFastHarvestNeeded ) |
821 { |
849 { |
822 SetPriority( KHarvesterCustomImportantPriority ); |
850 SetPriority( KHarvesterCustomImportantPriority ); |
823 } |
851 } |
824 while( hd != NULL && |
852 while( hd && |
825 iPHArray.Count() < KPlaceholderQueueSize && |
853 iPHArray.Count() < KPlaceholderQueueSize && |
826 hd->ObjectType() == EPlaceholder ) |
854 hd->ObjectType() == EPlaceholder ) |
827 { |
855 { |
828 iPHArray.Append( hd ); |
856 if(iPHArray.Append( hd ) != KErrNone) |
829 if( hd->Origin() == MdeConstants::Object::ECamera || |
|
830 hd->ObjectType() == EFastHarvest ) |
|
831 { |
857 { |
832 if( !iFastHarvestNeeded ) |
858 HarvestCompleted( hd->ClientId(), hd->Uri(), KErrNoMemory ); |
833 { |
859 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
834 iFastHarvestNeeded = ETrue; |
860 delete hd; |
835 // Fast harvest event must be handled even if MMC handling would be ongoing |
861 hd = NULL; |
836 SetPriority( KHarvesterPriorityMonitorPlugin ); |
|
837 } |
|
838 break; |
|
839 } |
862 } |
840 else if( iFastHarvestNeeded ) |
863 else |
841 { |
864 { |
842 iFastHarvestNeeded = EFalse; |
865 if( hd->Origin() == MdeConstants::Object::ECamera || |
843 SetPriority( KHarvesterCustomImportantPriority ); |
866 hd->ObjectType() == EFastHarvest ) |
|
867 { |
|
868 if( !iFastHarvestNeeded ) |
|
869 { |
|
870 iFastHarvestNeeded = ETrue; |
|
871 // Fast harvest event must be handled even if MMC handling would be ongoing |
|
872 SetPriority( KHarvesterPriorityMonitorPlugin ); |
|
873 } |
|
874 break; |
|
875 } |
|
876 else if( iFastHarvestNeeded ) |
|
877 { |
|
878 iFastHarvestNeeded = EFalse; |
|
879 SetPriority( KHarvesterCustomImportantPriority ); |
|
880 } |
844 } |
881 } |
845 hd = iQueue->GetNextItem(); |
882 hd = iQueue->GetNextItem(); |
846 } |
883 } |
847 |
884 |
848 if( iFastHarvestNeeded && iPHArray.Count() > 0 ) |
885 if( iFastHarvestNeeded && iPHArray.Count() > 0 ) |
849 { |
886 { |
850 TRAPD( err, HandlePlaceholdersL( ETrue ) ); |
887 TRAPD( err, HandlePlaceholdersL( ETrue ) ); |
851 |
888 |
852 // make sure that when HandlePlaceholdersL leaves, iPHArray is cleared |
889 // make sure that when HandlePlaceholdersL leaves unexpectedly, iPHArray is cleared |
853 if ( err != KErrNone ) |
890 if ( err != KErrNone ) |
854 { |
891 { |
855 iPHArray.ResetAndDestroy(); |
892 if( err != KErrDiskFull ) |
856 iTempReadyPHArray.ResetAndDestroy(); |
893 { |
|
894 iPHArray.ResetAndDestroy(); |
|
895 iTempReadyPHArray.ResetAndDestroy(); |
|
896 } |
857 User::Leave( err ); |
897 User::Leave( err ); |
858 } |
898 } |
859 |
899 |
860 TInt count( iReadyPHArray.Count() ); |
900 TInt count( iReadyPHArray.Count() ); |
861 for( TInt i = 0; i < count; i++ ) |
901 for( TInt i = 0; i < count; i++ ) |
875 |
915 |
876 if( hd ) |
916 if( hd ) |
877 { |
917 { |
878 if( hd->ObjectType() == EPlaceholder ) |
918 if( hd->ObjectType() == EPlaceholder ) |
879 { |
919 { |
880 iPHArray.Append( hd ); |
920 if( iPHArray.Append( hd ) != KErrNone ) |
|
921 { |
|
922 HarvestCompleted( hd->ClientId(), hd->Uri(), KErrNoMemory ); |
|
923 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
|
924 delete hd; |
|
925 hd = NULL; |
|
926 } |
881 } |
927 } |
882 else |
928 else |
883 { |
929 { |
884 CheckFileExtensionAndHarvestL( hd ); |
930 if( iReadyPHArray.Append( hd ) != KErrNone) |
885 if( iUnmountDetected ) |
931 { |
886 { |
932 delete hd; |
887 iQueue->Append( hd ); |
933 hd = NULL; |
888 return; |
934 } |
889 } |
|
890 } |
935 } |
891 } |
936 } |
892 |
937 |
893 if( iPHArray.Count() > 0 ) |
938 if( iPHArray.Count() > 0 ) |
894 { |
939 { |
895 TRAPD( err, HandlePlaceholdersL( ETrue ) ); |
940 TRAPD( err, HandlePlaceholdersL( ETrue ) ); |
896 |
941 |
897 // make sure that when HandlePlaceholdersL leaves, iPHArray is cleared |
942 // make sure that when HandlePlaceholdersL leaves unexpectedly, iPHArray is cleared |
898 if ( err != KErrNone ) |
943 if ( err != KErrNone ) |
899 { |
944 { |
900 iPHArray.ResetAndDestroy(); |
945 if( err != KErrDiskFull ) |
901 iTempReadyPHArray.ResetAndDestroy(); |
946 { |
|
947 iPHArray.ResetAndDestroy(); |
|
948 iTempReadyPHArray.ResetAndDestroy(); |
|
949 } |
902 User::Leave( err ); |
950 User::Leave( err ); |
903 } |
951 } |
904 } |
952 } |
905 } |
953 } |
906 else |
954 else |
929 |
977 |
930 RPointerArray<CMdEObject> mdeObjectArray; |
978 RPointerArray<CMdEObject> mdeObjectArray; |
931 CleanupClosePushL( mdeObjectArray ); |
979 CleanupClosePushL( mdeObjectArray ); |
932 |
980 |
933 TTimeIntervalSeconds timeOffsetSeconds = User::UTCOffset(); |
981 TTimeIntervalSeconds timeOffsetSeconds = User::UTCOffset(); |
|
982 |
|
983 CMdENamespaceDef& defNS = iMdESession->GetDefaultNamespaceDefL(); |
934 |
984 |
935 TInt endindex( iPHArray.Count() ); |
985 TInt endindex( iPHArray.Count() ); |
936 for( TInt i = 0; i < endindex; i++ ) |
986 for( TInt i = 0; i < endindex; i++ ) |
937 { |
987 { |
938 CHarvesterData* hd = iPHArray[i]; |
988 CHarvesterData* hd = iPHArray[i]; |
939 |
989 |
940 if( aCheck && iHarvesterPluginFactory->IsContainerFileL( hd->Uri() ) ) |
990 if( aCheck && |
|
991 hd->Origin() != MdeConstants::Object::ECamera && |
|
992 iHarvesterPluginFactory->IsContainerFileL( hd->Uri() ) ) |
941 { |
993 { |
942 iContainerPHArray.Append( hd ); |
994 if( iContainerPHArray.Append( hd ) != KErrNone ) |
|
995 { |
|
996 HarvestCompleted( hd->ClientId(), hd->Uri(), KErrNoMemory ); |
|
997 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
|
998 delete hd; |
|
999 hd = NULL; |
|
1000 } |
|
1001 |
943 iPHArray.Remove( i ); |
1002 iPHArray.Remove( i ); |
944 i--; |
1003 i--; |
945 endindex--; |
1004 endindex--; |
946 continue; |
1005 continue; |
947 } |
1006 } |
|
1007 |
948 TBuf<KObjectDefStrSize> objDefStr; |
1008 TBuf<KObjectDefStrSize> objDefStr; |
949 |
1009 |
950 if( !CheckForCameraItem( hd, objDefStr ) ) |
1010 if( !CheckForCameraItem( hd, objDefStr ) ) |
951 { |
1011 { |
952 iHarvesterPluginFactory->GetObjectDefL( *hd, objDefStr ); |
1012 iHarvesterPluginFactory->GetObjectDefL( hd, objDefStr ); |
953 } |
1013 } |
954 |
1014 |
955 // GetObjectDef can cause context switch, and if unmount happens when this execution is |
1015 // 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 |
1016 // interrupted, the ph arrays can be invalid. Thus, abort whole run, and start over to make sure |
957 // the arrays are valid. |
1017 // the arrays are valid. |
958 if( iUnmountDetected ) |
1018 if( iUnmountDetected ) |
959 { |
1019 { |
960 WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - Unmount detected during execution!" ); |
1020 WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - Unmount detected during execution!" ); |
961 for( TInt y( iTempReadyPHArray.Count() -1 ); y >=0; y-- ) |
1021 for( TInt y( iTempReadyPHArray.Count() -1 ); y >=0; y-- ) |
962 { |
1022 { |
963 CHarvesterData* hd = iTempReadyPHArray[y]; |
1023 CHarvesterData* tempHd = iTempReadyPHArray[y]; |
964 iPHArray.Insert( hd, 0 ); |
1024 |
|
1025 if(iPHArray.Insert( tempHd, 0 ) != KErrNone) |
|
1026 { |
|
1027 HarvestCompleted( tempHd->ClientId(), tempHd->Uri(), KErrNoMemory ); |
|
1028 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
|
1029 delete tempHd; |
|
1030 tempHd = NULL; |
|
1031 } |
965 } |
1032 } |
966 iTempReadyPHArray.Reset(); |
1033 iTempReadyPHArray.Reset(); |
967 CleanupStack::PopAndDestroy( &mdeObjectArray ); |
1034 CleanupStack::PopAndDestroy( &mdeObjectArray ); |
968 return; |
1035 return; |
969 } |
1036 } |
974 { |
1041 { |
975 WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - Priority interrupt during execution!" ); |
1042 WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - Priority interrupt during execution!" ); |
976 const TInt currentPHArrayCount( iPHArray.Count() ); |
1043 const TInt currentPHArrayCount( iPHArray.Count() ); |
977 for( TInt y( iTempReadyPHArray.Count() -1 ); y >=0; y-- ) |
1044 for( TInt y( iTempReadyPHArray.Count() -1 ); y >=0; y-- ) |
978 { |
1045 { |
979 CHarvesterData* hd = iTempReadyPHArray[y]; |
1046 CHarvesterData* tempHd = iTempReadyPHArray[y]; |
980 if( currentPHArrayCount ) |
1047 if(iPHArray.Insert( tempHd, 0 ) != KErrNone) |
981 { |
1048 { |
982 // Leave the first item in the array as it is the priority item |
1049 HarvestCompleted( tempHd->ClientId(), tempHd->Uri(), KErrNoMemory ); |
983 iPHArray.Insert( hd, 1 ); |
1050 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
984 } |
1051 delete tempHd; |
985 else |
1052 tempHd = NULL; |
986 { |
|
987 iPHArray.Insert( hd, 0 ); |
|
988 } |
1053 } |
989 } |
1054 } |
990 iTempReadyPHArray.Reset(); |
1055 iTempReadyPHArray.Reset(); |
991 CleanupStack::PopAndDestroy( &mdeObjectArray ); |
1056 CleanupStack::PopAndDestroy( &mdeObjectArray ); |
992 return; |
1057 return; |
993 } |
1058 } |
|
1059 // Check if disk is full |
|
1060 // If disk is detected to be full, no items can be added to MDS db, thus abort the run, and start over |
|
1061 // when disk space is available to make sure the arrays are valid. |
|
1062 else if( iDiskFull ) |
|
1063 { |
|
1064 WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - No disk space available!" ); |
|
1065 for( TInt y( iTempReadyPHArray.Count() -1 ); y >=0; y-- ) |
|
1066 { |
|
1067 CHarvesterData* tempHd = iTempReadyPHArray[y]; |
|
1068 |
|
1069 if(iPHArray.Insert( tempHd, 0 ) != KErrNone) |
|
1070 { |
|
1071 HarvestCompleted( tempHd->ClientId(), tempHd->Uri(), KErrNoMemory ); |
|
1072 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
|
1073 delete tempHd; |
|
1074 tempHd = NULL; |
|
1075 } |
|
1076 } |
|
1077 iTempReadyPHArray.Reset(); |
|
1078 CleanupStack::PopAndDestroy( &mdeObjectArray ); |
|
1079 User::Leave( KErrDiskFull ); |
|
1080 } |
994 |
1081 |
995 if( objDefStr.Length() == 0 || |
1082 if( objDefStr.Length() == 0 || |
996 ( objDefStr == KInUse ) ) |
1083 ( objDefStr == KInUse ) ) |
997 { |
1084 { |
998 WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - no objectDef or in use, failing harvesting" ); |
1085 #ifdef _DEBUG |
|
1086 if( objDefStr.Length() == 0 ) |
|
1087 { |
|
1088 WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - no objectDef failing harvesting" ); |
|
1089 } |
|
1090 else |
|
1091 { |
|
1092 WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - in use, failing harvesting" ); |
|
1093 } |
|
1094 WRITELOG1( "CHarvesterAO::HandlePlaceholdersL() - harvesting failed, uri: %S", &(hd->Uri()) ); |
|
1095 #endif |
|
1096 // If object has not been created in the device so that monitors would have |
|
1097 // picked up creation event, and the file is in use, subclose event will |
|
1098 // not trigger the file to be harvester when closed, thus it needs to be moved |
|
1099 // to reharvesting queue |
|
1100 if( objDefStr == KInUse && |
|
1101 !hd->TakeSnapshot() ) |
|
1102 { |
|
1103 iPHArray.Remove( i ); |
|
1104 i--; |
|
1105 endindex--; |
|
1106 iReHarvester->AddItem( hd ); |
|
1107 continue; |
|
1108 } |
999 const TInt error( KErrUnknown ); |
1109 const TInt error( KErrUnknown ); |
1000 // notify observer, notification is needed even if file is not supported |
1110 // notify observer, notification is needed even if file is not supported |
1001 HarvestCompleted( hd->ClientId(), hd->Uri(), error ); |
1111 HarvestCompleted( hd->ClientId(), hd->Uri(), error ); |
1002 delete hd; |
1112 delete hd; |
1003 hd = NULL; |
1113 hd = NULL; |
1006 endindex--; |
1116 endindex--; |
1007 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
1117 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
1008 continue; |
1118 continue; |
1009 } |
1119 } |
1010 |
1120 |
1011 CMdENamespaceDef& defNS = iMdESession->GetDefaultNamespaceDefL(); |
|
1012 CMdEObjectDef& mdeObjectDef = defNS.GetObjectDefL( objDefStr ); |
1121 CMdEObjectDef& mdeObjectDef = defNS.GetObjectDefL( objDefStr ); |
1013 |
1122 |
1014 CMdEObject* mdeObject = iMdESession->NewObjectL( mdeObjectDef, hd->Uri() ); |
1123 HBufC* hdUri = hd->Uri().AllocL(); |
|
1124 CleanupStack::PushL( hdUri ); |
|
1125 CMdEObject* mdeObject = iMdESession->NewObjectL( mdeObjectDef, *hdUri ); |
|
1126 CleanupStack::PopAndDestroy( hdUri ); |
1015 CleanupStack::PushL( mdeObject ); |
1127 CleanupStack::PushL( mdeObject ); |
1016 |
1128 |
1017 CPlaceholderData* phData = NULL; |
1129 CPlaceholderData* phData = NULL; |
1018 |
1130 |
1019 if( hd->TakeSnapshot() ) |
1131 if( hd->TakeSnapshot() ) |
1170 |
1282 |
1171 CleanupStack::PopAndDestroy( phData ); |
1283 CleanupStack::PopAndDestroy( phData ); |
1172 |
1284 |
1173 CleanupStack::Pop( mdeObject ); |
1285 CleanupStack::Pop( mdeObject ); |
1174 |
1286 |
1175 iTempReadyPHArray.Append( hd ); |
1287 if(iTempReadyPHArray.Append( hd ) != KErrNone) |
|
1288 { |
|
1289 HarvestCompleted( hd->ClientId(), hd->Uri(), KErrNoMemory ); |
|
1290 delete hd; |
|
1291 hd = NULL; |
|
1292 } |
1176 iPHArray.Remove( i ); |
1293 iPHArray.Remove( i ); |
1177 i--; |
1294 i--; |
1178 endindex--; |
1295 endindex--; |
1179 } |
1296 } |
1180 |
1297 |
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(); |
1298 const TInt objectCount = mdeObjectArray.Count(); |
1190 |
1299 |
1191 if( objectCount > 0 ) |
1300 if( objectCount > 0 ) |
1192 { |
1301 { |
1193 // add object to mde |
1302 // add object to mde |
1194 iMdEHarvesterSession->AutoLockL( mdeObjectArray ); |
1303 iMdEHarvesterSession->AutoLockL( mdeObjectArray ); |
1195 const TInt addError( iMdESession->AddObjectsL( mdeObjectArray ) ); |
1304 TInt addError( KErrNone ); |
|
1305 TRAPD( addFailure, addError = iMdESession->AddObjectsL( mdeObjectArray ) ); |
|
1306 if( addFailure == KErrDiskFull ) |
|
1307 { |
|
1308 WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - No disk space available!" ); |
|
1309 for( TInt y( iTempReadyPHArray.Count() -1 ); y >=0; y-- ) |
|
1310 { |
|
1311 CHarvesterData* tempHd = iTempReadyPHArray[y]; |
|
1312 |
|
1313 if(iPHArray.Insert( tempHd, 0 ) != KErrNone) |
|
1314 { |
|
1315 HarvestCompleted( tempHd->ClientId(), tempHd->Uri(), KErrNoMemory ); |
|
1316 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
|
1317 delete tempHd; |
|
1318 tempHd = NULL; |
|
1319 } |
|
1320 } |
|
1321 iTempReadyPHArray.Reset(); |
|
1322 CleanupStack::PopAndDestroy( &mdeObjectArray ); |
|
1323 User::Leave( KErrDiskFull ); |
|
1324 } |
|
1325 else if( addFailure != KErrNone ) |
|
1326 { |
|
1327 User::Leave( addFailure ); |
|
1328 } |
|
1329 |
1196 if( addError != KErrNone ) |
1330 if( addError != KErrNone ) |
1197 { |
1331 { |
1198 // If some error occures, retry |
1332 // If some error occures, retry |
1199 iMdESession->AddObjectsL( mdeObjectArray ); |
1333 iMdESession->AddObjectsL( mdeObjectArray ); |
1200 } |
1334 } |
1201 |
1335 |
|
1336 const TInt tempArrayCount( iTempReadyPHArray.Count() ); |
|
1337 for( TInt i( 0 ); i < tempArrayCount; i++ ) |
|
1338 { |
|
1339 CHarvesterData* tempHd = iTempReadyPHArray[i]; |
|
1340 if(iReadyPHArray.Append( tempHd ) != KErrNone) |
|
1341 { |
|
1342 HarvestCompleted( tempHd->ClientId(), tempHd->Uri(), KErrNoMemory ); |
|
1343 delete tempHd; |
|
1344 tempHd = NULL; |
|
1345 } |
|
1346 } |
|
1347 iTempReadyPHArray.Reset(); |
|
1348 |
1202 iHarvesterEventManager->IncreaseItemCount( EHEObserverTypePlaceholder, |
1349 iHarvesterEventManager->IncreaseItemCount( EHEObserverTypePlaceholder, |
1203 objectCount ); |
1350 objectCount ); |
1204 iHarvesterEventManager->SendEventL( EHEObserverTypePlaceholder, EHEStateStarted, |
1351 iHarvesterEventManager->SendEventL( EHEObserverTypePlaceholder, EHEStateStarted, |
1205 iHarvesterEventManager->ItemCount( EHEObserverTypePlaceholder ) ); |
1352 iHarvesterEventManager->ItemCount( EHEObserverTypePlaceholder ) ); |
1206 |
1353 |
1232 TBool isError = EFalse; |
1379 TBool isError = EFalse; |
1233 CMdEObject* mdeObject = &aHD->MdeObject(); |
1380 CMdEObject* mdeObject = &aHD->MdeObject(); |
1234 const TDesC& uri = aHD->Uri(); |
1381 const TDesC& uri = aHD->Uri(); |
1235 TBool objectExisted = ETrue; |
1382 TBool objectExisted = ETrue; |
1236 |
1383 |
1237 if( ! mdeObject ) |
1384 if( !mdeObject ) |
1238 { |
1385 { |
1239 objectExisted = EFalse; |
1386 objectExisted = EFalse; |
1240 WRITELOG1( "CHarvesterAO::CheckFileExtensionAndHarvestL() - no mdeobject. URI: %S", &uri ); |
1387 WRITELOG1( "CHarvesterAO::CheckFileExtensionAndHarvestL() - no mdeobject. URI: %S", &uri ); |
1241 TBuf<KObjectDefStrSize> objDefStr; |
1388 TBuf<KObjectDefStrSize> objDefStr; |
1242 iHarvesterPluginFactory->GetObjectDefL( *aHD, objDefStr ); |
1389 iHarvesterPluginFactory->GetObjectDefL( aHD, objDefStr ); |
1243 |
1390 |
1244 // GetObjectDef can cause context switch, and if unmount happens when this execution is |
1391 // 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 |
1392 // interrupted, the ph data can be invalid. Thus, abort whole run, and start over to make sure |
1246 // the data is valid. |
1393 // the data is valid. |
1247 if( iUnmountDetected ) |
1394 if( !aHD ) |
1248 { |
1395 { |
1249 return; |
1396 return; |
1250 } |
1397 } |
1251 |
1398 |
1252 if( objDefStr.Length() == 0 ) |
1399 if( objDefStr.Length() == 0 ) |
1347 |
1494 |
1348 if( objectExisted && aHD->EventType() == EHarvesterAdd ) |
1495 if( objectExisted && aHD->EventType() == EHarvesterAdd ) |
1349 { |
1496 { |
1350 iMdESession->RemoveObjectL( aHD->Uri() ); |
1497 iMdESession->RemoveObjectL( aHD->Uri() ); |
1351 } |
1498 } |
|
1499 |
|
1500 // If context swich occures just right due to RemoveObjectL, check aHD for validity |
|
1501 if( !aHD ) |
|
1502 { |
|
1503 return; |
|
1504 } |
1352 |
1505 |
1353 TInt pluginErr = KErrNone; |
1506 TInt pluginErr = KErrNone; |
1354 TRAPD( err, pluginErr = iHarvesterPluginFactory->HarvestL( aHD )); |
1507 TRAPD( err, pluginErr = iHarvesterPluginFactory->HarvestL( aHD )); |
|
1508 |
1355 if ( err != KErrNone ) |
1509 if ( err != KErrNone ) |
1356 { |
1510 { |
1357 WRITELOG1( "CHarvesterAO::CheckFileExtensionAndHarvestL() - plugin error: %d", err ); |
1511 WRITELOG1( "CHarvesterAO::CheckFileExtensionAndHarvestL() - plugin error: %d", err ); |
1358 OstTrace1( TRACE_NORMAL, DUP6_CHARVESTERAO_CHECKFILEEXTENSIONANDHARVESTL, "CHarvesterAO::CheckFileExtensionAndHarvestL - plugin error: %d", err ); |
1512 OstTrace1( TRACE_NORMAL, DUP6_CHARVESTERAO_CHECKFILEEXTENSIONANDHARVESTL, "CHarvesterAO::CheckFileExtensionAndHarvestL - plugin error: %d", err ); |
1359 |
1513 |
1379 return; |
1533 return; |
1380 } |
1534 } |
1381 |
1535 |
1382 WRITELOG1("CHarvesterAO::CheckFileExtensionAndHarvestL() - ends with error %d", pluginErr ); |
1536 WRITELOG1("CHarvesterAO::CheckFileExtensionAndHarvestL() - ends with error %d", pluginErr ); |
1383 OstTrace1( TRACE_NORMAL, DUP8_CHARVESTERAO_CHECKFILEEXTENSIONANDHARVESTL, "CHarvesterAO::CheckFileExtensionAndHarvestL) - ends with error %d", pluginErr ); |
1537 OstTrace1( TRACE_NORMAL, DUP8_CHARVESTERAO_CHECKFILEEXTENSIONANDHARVESTL, "CHarvesterAO::CheckFileExtensionAndHarvestL) - ends with error %d", pluginErr ); |
1384 |
|
1385 SetNextRequest( ERequestHarvest ); |
|
1386 } |
1538 } |
1387 |
1539 |
1388 // --------------------------------------------------------------------------- |
1540 // --------------------------------------------------------------------------- |
1389 // HarvestingCompleted |
1541 // HarvestingCompleted |
1390 // --------------------------------------------------------------------------- |
1542 // --------------------------------------------------------------------------- |
1439 if( locData ) |
1591 if( locData ) |
1440 { |
1592 { |
1441 WRITELOG( "CHarvesterAO::HarvestingCompleted() - Creating location object. " ); |
1593 WRITELOG( "CHarvesterAO::HarvestingCompleted() - Creating location object. " ); |
1442 OstTrace0( TRACE_NORMAL, DUP6_CHARVESTERAO_HARVESTINGCOMPLETED, "CHarvesterAO::HarvestingCompleted - Creating location object." ); |
1594 OstTrace0( TRACE_NORMAL, DUP6_CHARVESTERAO_HARVESTINGCOMPLETED, "CHarvesterAO::HarvestingCompleted - Creating location object." ); |
1443 |
1595 |
1444 RLocationObjectManipulator lo; |
1596 TInt loError( KErrNone ); |
1445 |
1597 if( !iLocManipulatorConnected ) |
1446 const TInt loError = lo.Connect(); |
1598 { |
|
1599 loError = iLocManipulator.Connect(); |
|
1600 if( loError == KErrNone ) |
|
1601 { |
|
1602 iLocManipulatorConnected = ETrue; |
|
1603 } |
|
1604 } |
1447 |
1605 |
1448 if (loError == KErrNone) |
1606 if (loError == KErrNone) |
1449 { |
1607 { |
1450 TInt err = lo.CreateLocationObject( *locData, aHD->MdeObject().Id() ); |
1608 TInt err = iLocManipulator.CreateLocationObject( *locData, aHD->MdeObject().Id() ); |
1451 if( err != KErrNone ) |
1609 if( err != KErrNone ) |
1452 { |
1610 { |
1453 WRITELOG( "CHarvesterAO::HarvestingCompleted() - Location object creation failed!!!" ); |
1611 WRITELOG( "CHarvesterAO::HarvestingCompleted() - Location object creation failed!!!" ); |
1454 OstTrace0( TRACE_NORMAL, DUP7_CHARVESTERAO_HARVESTINGCOMPLETED, "CHarvesterAO::HarvestingCompleted - Location object creation failed!!!" ); |
1612 OstTrace0( TRACE_NORMAL, DUP7_CHARVESTERAO_HARVESTINGCOMPLETED, "CHarvesterAO::HarvestingCompleted - Location object creation failed!!!" ); |
1455 |
1613 iLocManipulator.Close(); |
|
1614 iLocManipulatorConnected = EFalse; |
1456 } |
1615 } |
1457 } |
1616 } |
1458 else |
1617 else |
1459 { |
1618 { |
1460 WRITELOG( "CHarvesterAO::HarvestingCompleted() - LocationObjectManipulator connect failed!!!" ); |
1619 WRITELOG( "CHarvesterAO::HarvestingCompleted() - LocationObjectManipulator connect failed!!!" ); |
1461 OstTrace0( TRACE_NORMAL, DUP8_CHARVESTERAO_HARVESTINGCOMPLETED, "CHarvesterAO::HarvestingCompleted - LocationObjectManipulator connect failed!!" ); |
1620 OstTrace0( TRACE_NORMAL, DUP8_CHARVESTERAO_HARVESTINGCOMPLETED, "CHarvesterAO::HarvestingCompleted - LocationObjectManipulator connect failed!!" ); |
1462 } |
1621 } |
1463 |
|
1464 lo.Close(); |
|
1465 } |
1622 } |
1466 |
1623 |
1467 TRAP_IGNORE( iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ) ); |
1624 TRAP_IGNORE( iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ) ); |
1468 |
1625 |
1469 delete aHD; |
1626 delete aHD; |
1510 |
1667 |
1511 WRITELOG( "==============================ERROR done =========================" ); |
1668 WRITELOG( "==============================ERROR done =========================" ); |
1512 OstTrace0( TRACE_NORMAL, DUP12_CHARVESTERAO_HARVESTINGCOMPLETED, "==============================ERROR done =========================" ); |
1669 OstTrace0( TRACE_NORMAL, DUP12_CHARVESTERAO_HARVESTINGCOMPLETED, "==============================ERROR done =========================" ); |
1513 |
1670 |
1514 } |
1671 } |
1515 |
|
1516 SetNextRequest( ERequestHarvest ); |
|
1517 } |
1672 } |
1518 |
1673 |
1519 // --------------------------------------------------------------------------- |
1674 // --------------------------------------------------------------------------- |
1520 // HandleSessionOpened |
1675 // HandleSessionOpened |
1521 // --------------------------------------------------------------------------- |
1676 // --------------------------------------------------------------------------- |
1658 TRAP_IGNORE( BootRomScanL() ); |
1813 TRAP_IGNORE( BootRomScanL() ); |
1659 } |
1814 } |
1660 TRAP_IGNORE( BootPartialRestoreScanL() ); |
1815 TRAP_IGNORE( BootPartialRestoreScanL() ); |
1661 #endif |
1816 #endif |
1662 |
1817 |
1663 if( !iMassMemoryIdChecked ) |
1818 // Store the internal mass memory media ID to DB, and update data if necessary |
1664 { |
1819 TInt drive( -1 ); |
1665 TInt drive( -1 ); |
1820 TInt internalMassStorageError( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultMassStorage, drive ) ); |
1666 TInt massStorageError( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultMassStorage, drive ) ); |
1821 if( internalMassStorageError == KErrNone ) |
1667 if( massStorageError == KErrNone ) |
1822 { |
|
1823 TVolumeInfo internalMassStorageVolumeInfo; |
|
1824 internalMassStorageError = iFs.Volume( internalMassStorageVolumeInfo, drive ); |
|
1825 if( internalMassStorageError == KErrNone ) |
1668 { |
1826 { |
1669 TVolumeInfo massStorageVolumeInfo; |
1827 const TUint32 massStorageMediaId( internalMassStorageVolumeInfo.iUniqueID ); |
1670 iFs.Volume( massStorageVolumeInfo, drive ); |
1828 if( massStorageMediaId != 0 ) |
1671 const TUint32 massStorageMediaId( massStorageVolumeInfo.iUniqueID ); |
|
1672 massStorageError = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage, drive ); |
|
1673 if( massStorageError == KErrNone ) |
|
1674 { |
1829 { |
1675 iFs.Volume( massStorageVolumeInfo, drive ); |
1830 TUint32 mmcMediaId( 0 ); |
1676 // Update mass storage media id if the mass storage is not memory card |
1831 TInt mmcDrive( -1 ); |
1677 if( massStorageVolumeInfo.iUniqueID != massStorageMediaId && massStorageMediaId != 0 ) |
1832 TInt mmcError( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage, mmcDrive ) ); |
|
1833 if( mmcError == KErrNone ) |
|
1834 { |
|
1835 if( drive != mmcDrive ) |
|
1836 { |
|
1837 TVolumeInfo mmcVolumeInfo; |
|
1838 mmcError = iFs.Volume( mmcVolumeInfo, mmcDrive ); |
|
1839 if( mmcError == KErrNone ) |
|
1840 { |
|
1841 mmcMediaId = mmcVolumeInfo.iUniqueID; |
|
1842 } |
|
1843 } |
|
1844 else |
|
1845 { |
|
1846 mmcMediaId = massStorageMediaId; |
|
1847 } |
|
1848 } |
|
1849 |
|
1850 // If removable storage is not found, assume internal mass storage was mounted |
|
1851 if( mmcError ) |
|
1852 { |
|
1853 iMdEHarvesterSession->CheckMassStorageMediaId( massStorageMediaId ); |
|
1854 } |
|
1855 else if( massStorageMediaId != mmcMediaId ) |
1678 { |
1856 { |
1679 iMdEHarvesterSession->CheckMassStorageMediaId( massStorageMediaId ); |
1857 iMdEHarvesterSession->CheckMassStorageMediaId( massStorageMediaId ); |
1680 } |
1858 } |
1681 } |
1859 } |
1682 } |
1860 } |
1683 } |
1861 } |
1684 } |
1862 } |
1685 else |
1863 else |
1686 { |
1864 { |
1741 OstTrace0( TRACE_NORMAL, CHARVESTERAO_PAUSEHARVESTER, "CHarvesterAO::PauseHarvester" ); |
1919 OstTrace0( TRACE_NORMAL, CHARVESTERAO_PAUSEHARVESTER, "CHarvesterAO::PauseHarvester" ); |
1742 |
1920 |
1743 iHarvesterPluginFactory->PauseHarvester( ETrue ); |
1921 iHarvesterPluginFactory->PauseHarvester( ETrue ); |
1744 iServerPaused = ETrue; |
1922 iServerPaused = ETrue; |
1745 |
1923 |
1746 if( !iRamFull && !iDiskFull && !iUnmountDetected ) |
|
1747 { |
|
1748 iManualPauseEnabled = ETrue; |
|
1749 } |
|
1750 |
|
1751 // Everything is paused |
1924 // Everything is paused |
1752 WRITELOG( "CHarvesterAO::PauseHarvester() - Moving paused state paused" ); |
1925 WRITELOG( "CHarvesterAO::PauseHarvester() - Moving paused state paused" ); |
1753 OstTrace0( TRACE_NORMAL, DUP1_CHARVESTERAO_PAUSEHARVESTER, "CHarvesterAO::PauseHarvester - Moving paused state paused" ); |
1926 OstTrace0( TRACE_NORMAL, DUP1_CHARVESTERAO_PAUSEHARVESTER, "CHarvesterAO::PauseHarvester - Moving paused state paused" ); |
1754 |
1927 |
1755 return KErrNone; |
1928 return KErrNone; |
1761 // |
1934 // |
1762 void CHarvesterAO::ResumeHarvesterL() |
1935 void CHarvesterAO::ResumeHarvesterL() |
1763 { |
1936 { |
1764 WRITELOG( "CHarvesterAO::ResumeHarvesterL()" ); |
1937 WRITELOG( "CHarvesterAO::ResumeHarvesterL()" ); |
1765 OstTrace0( TRACE_NORMAL, CHARVESTERAO_RESUMEHARVESTERL, "CHarvesterAO::ResumeHarvesterL" ); |
1938 OstTrace0( TRACE_NORMAL, CHARVESTERAO_RESUMEHARVESTERL, "CHarvesterAO::ResumeHarvesterL" ); |
|
1939 |
|
1940 if( iRamFull || iDiskFull || iUnmountHandlingOngoing || iManualPauseEnabled ) |
|
1941 { |
|
1942 return; |
|
1943 } |
1766 |
1944 |
1767 iHarvesterPluginFactory->PauseHarvester( EFalse ); |
1945 iHarvesterPluginFactory->PauseHarvester( EFalse ); |
1768 iServerPaused = EFalse; |
1946 iServerPaused = EFalse; |
1769 |
1947 |
1770 if( !iManualPauseEnabled && |
1948 if( iNextRequest == ERequestIdle ) |
1771 iNextRequest == ERequestIdle ) |
|
1772 { |
1949 { |
1773 SetNextRequest( ERequestHarvest ); |
1950 SetNextRequest( ERequestHarvest ); |
1774 } |
1951 } |
1775 |
|
1776 iManualPauseEnabled = EFalse; |
|
1777 } |
1952 } |
1778 |
1953 |
1779 // --------------------------------------------------------------------------- |
1954 // --------------------------------------------------------------------------- |
1780 // RunL |
1955 // RunL |
1781 // --------------------------------------------------------------------------- |
1956 // --------------------------------------------------------------------------- |
1807 |
1982 |
1808 iReadyPHArray.Compress(); |
1983 iReadyPHArray.Compress(); |
1809 iContainerPHArray.Compress(); |
1984 iContainerPHArray.Compress(); |
1810 iPHArray.Compress(); |
1985 iPHArray.Compress(); |
1811 iTempReadyPHArray.Compress(); |
1986 iTempReadyPHArray.Compress(); |
|
1987 |
|
1988 if( iLocManipulatorConnected ) |
|
1989 { |
|
1990 iLocManipulator.Close(); |
|
1991 iLocManipulatorConnected = EFalse; |
|
1992 } |
1812 } |
1993 } |
1813 break; |
1994 break; |
1814 |
1995 |
1815 // data added to harvester queue |
1996 // data added to harvester queue |
1816 case ERequestHarvest: |
1997 case ERequestHarvest: |
1817 { |
1998 { |
1818 WRITELOG( "CHarvesterAO::RunL - ERequestHarvest" ); |
1999 WRITELOG( "CHarvesterAO::RunL - ERequestHarvest" ); |
1819 OstTrace0( TRACE_NORMAL, DUP2_CHARVESTERAO_RUNL, "CHarvesterAO::RunL - ERequestHarvest" ); |
2000 OstTrace0( TRACE_NORMAL, DUP2_CHARVESTERAO_RUNL, "CHarvesterAO::RunL - ERequestHarvest" ); |
1820 |
2001 |
1821 // harvest new items first... |
2002 // harvest new items first |
1822 if ( iQueue->ItemsInQueue() > 0 ) |
2003 if ( iQueue->ItemsInQueue() > 0 ) |
1823 { |
2004 { |
1824 WRITELOG( "CHarvesterAO::RunL - Items in queue - calling ReadItemFromQueueL()" ); |
2005 WRITELOG( "CHarvesterAO::RunL - Items in queue - calling ReadItemFromQueueL()" ); |
1825 ReadItemFromQueueL(); |
2006 ReadItemFromQueueL(); |
1826 SetNextRequest( ERequestHarvest ); |
2007 SetNextRequest( ERequestHarvest ); |
1829 |
2010 |
1830 // no more items to handle from main queue |
2011 // no more items to handle from main queue |
1831 else |
2012 else |
1832 { |
2013 { |
1833 WRITELOG( "CHarvesterAO::RunL - No items in main queue" ); |
2014 WRITELOG( "CHarvesterAO::RunL - No items in main queue" ); |
|
2015 // If interrupts occured, check the normal placeholder array for possible items to |
|
2016 // be handled before moving on to container or ready placeholders |
|
2017 if( iPHArray.Count() > 0 ) |
|
2018 { |
|
2019 WRITELOG( "CHarvesterAO::RunL - Items found in placeholder array" ); |
|
2020 TRAPD( err, HandlePlaceholdersL( ETrue ) ); |
|
2021 |
|
2022 // make sure that when HandlePlaceholdersL leaves unexpectedly, iPHArray is cleared |
|
2023 if ( err != KErrNone ) |
|
2024 { |
|
2025 if( err != KErrDiskFull ) |
|
2026 { |
|
2027 iPHArray.ResetAndDestroy(); |
|
2028 iTempReadyPHArray.ResetAndDestroy(); |
|
2029 } |
|
2030 User::Leave( err ); |
|
2031 } |
|
2032 SetNextRequest( ERequestHarvest ); |
|
2033 break; |
|
2034 } |
1834 // All registered fast harvested items or placeholders handled at this point |
2035 // All registered fast harvested items or placeholders handled at this point |
1835 // if container files to harvest, handle those next |
2036 // if container files to harvest, handle those next |
1836 if( iContainerPHArray.Count() > 0 ) |
2037 else if( iContainerPHArray.Count() > 0 ) |
1837 { |
2038 { |
1838 WRITELOG( "CHarvesterAO::RunL - Items in iContainterPHArray - requesting ERequestContainerPlaceholder handling" ); |
2039 WRITELOG( "CHarvesterAO::RunL - Items in iContainterPHArray - requesting ERequestContainerPlaceholder handling" ); |
1839 iFastHarvestNeeded = EFalse; |
2040 iFastHarvestNeeded = EFalse; |
1840 iHarvestingPlaceholders = EFalse; |
2041 iHarvestingPlaceholders = EFalse; |
1841 SetPriority( KHarvesterPriorityHarvestingPlugin ); |
2042 SetPriority( KHarvesterPriorityHarvestingPlugin ); |
1862 { |
2063 { |
1863 #ifdef _DEBUG |
2064 #ifdef _DEBUG |
1864 WRITELOG1("CHarvesterAO::RunL - items in ready pharray: %d", arrayCount ); |
2065 WRITELOG1("CHarvesterAO::RunL - items in ready pharray: %d", arrayCount ); |
1865 OstTrace1( TRACE_NORMAL, DUP3_CHARVESTERAO_RUNL, "CHarvesterAO::RunL - items in ready pharray: %d", arrayCount ); |
2066 OstTrace1( TRACE_NORMAL, DUP3_CHARVESTERAO_RUNL, "CHarvesterAO::RunL - items in ready pharray: %d", arrayCount ); |
1866 #endif |
2067 #endif |
1867 TInt endIndex( KPlaceholderQueueSize ); |
2068 TInt endIndex( KReadyPlaceholderQueueSize ); |
1868 if( arrayCount < KPlaceholderQueueSize ) |
2069 if( arrayCount < KReadyPlaceholderQueueSize ) |
1869 { |
2070 { |
1870 endIndex = arrayCount; |
2071 endIndex = arrayCount; |
1871 } |
2072 } |
1872 for( TInt i = 0; i < endIndex; i++ ) |
2073 for( TInt i = 0; i < endIndex; i++ ) |
1873 { |
2074 { |
1905 TInt count = iContainerPHArray.Count() > KContainerPlaceholderQueueSize ? KContainerPlaceholderQueueSize : iContainerPHArray.Count(); |
2106 TInt count = iContainerPHArray.Count() > KContainerPlaceholderQueueSize ? KContainerPlaceholderQueueSize : iContainerPHArray.Count(); |
1906 TInt i = 0; |
2107 TInt i = 0; |
1907 while( i < count ) |
2108 while( i < count ) |
1908 { |
2109 { |
1909 CHarvesterData* hd = iContainerPHArray[0]; |
2110 CHarvesterData* hd = iContainerPHArray[0]; |
1910 iPHArray.Append( hd ); |
2111 if( iPHArray.Append( hd ) != KErrNone ) |
|
2112 { |
|
2113 delete hd; |
|
2114 hd = NULL; |
|
2115 } |
1911 iContainerPHArray.Remove( 0 ); |
2116 iContainerPHArray.Remove( 0 ); |
1912 i++; |
2117 i++; |
1913 } |
2118 } |
1914 TRAPD( err, HandlePlaceholdersL( EFalse ) ); |
2119 TRAPD( err, HandlePlaceholdersL( EFalse ) ); |
1915 |
2120 |
1916 // make sure that when HandlePlaceholdersL leaves, iPHArray is cleared |
2121 // make sure that when HandlePlaceholdersL leaves unexpectedly, iPHArray is cleared |
1917 if ( err != KErrNone ) |
2122 if ( err != KErrNone ) |
1918 { |
2123 { |
1919 iContainerPHArray.ResetAndDestroy(); |
2124 if( err != KErrDiskFull ) |
1920 iPHArray.ResetAndDestroy(); |
2125 { |
1921 iTempReadyPHArray.ResetAndDestroy(); |
2126 iContainerPHArray.ResetAndDestroy(); |
1922 User::Leave( err ); |
2127 iPHArray.ResetAndDestroy(); |
1923 } |
2128 iTempReadyPHArray.ResetAndDestroy(); |
|
2129 } |
|
2130 User::Leave( err ); |
|
2131 } |
1924 SetNextRequest( ERequestHarvest ); |
2132 SetNextRequest( ERequestHarvest ); |
1925 } |
2133 } |
1926 break; |
2134 break; |
1927 |
2135 |
1928 // pause request |
2136 // pause request |
1929 case ERequestPause: |
2137 case ERequestPause: |
1930 { |
2138 { |
1931 WRITELOG( "CHarvesterAO::RunL - ERequestPause" ); |
2139 WRITELOG( "CHarvesterAO::RunL - ERequestPause" ); |
1932 OstTrace0( TRACE_NORMAL, DUP6_CHARVESTERAO_RUNL, "CHarvesterAO::RunL - ERequestPause" ); |
2140 OstTrace0( TRACE_NORMAL, DUP6_CHARVESTERAO_RUNL, "CHarvesterAO::RunL - ERequestPause" ); |
1933 User::LeaveIfError( PauseHarvester() ); |
2141 User::LeaveIfError( PauseHarvester() ); |
|
2142 iManualPauseEnabled = ETrue; |
1934 iHarvesterEventManager->SendEventL( EHEObserverTypeOverall, EHEStatePaused ); |
2143 iHarvesterEventManager->SendEventL( EHEObserverTypeOverall, EHEStatePaused ); |
1935 if( iHarvesterStatusObserver ) |
2144 if( iHarvesterStatusObserver ) |
1936 { |
2145 { |
1937 iHarvesterStatusObserver->PauseReady( KErrNone ); |
2146 iHarvesterStatusObserver->PauseReady( KErrNone ); |
1938 } |
2147 } |
1942 // resume request |
2151 // resume request |
1943 case ERequestResume: |
2152 case ERequestResume: |
1944 { |
2153 { |
1945 WRITELOG( "CHarvesterAO::RunL - ERequestResume" ); |
2154 WRITELOG( "CHarvesterAO::RunL - ERequestResume" ); |
1946 OstTrace0( TRACE_NORMAL, DUP7_CHARVESTERAO_RUNL, "CHarvesterAO::RunL - ERequestResume" ); |
2155 OstTrace0( TRACE_NORMAL, DUP7_CHARVESTERAO_RUNL, "CHarvesterAO::RunL - ERequestResume" ); |
|
2156 iManualPauseEnabled = EFalse; |
|
2157 // If for some reason, mds session is not (yet) ready, only inform that |
|
2158 // server state is no longer paused, but do not restart actual harvesting |
|
2159 // yet. |
|
2160 if( !iMdeSessionInitialized ) |
|
2161 { |
|
2162 iHarvesterEventManager->SendEventL( EHEObserverTypeOverall, EHEStateResumed ); |
|
2163 if( iHarvesterStatusObserver ) |
|
2164 { |
|
2165 iHarvesterStatusObserver->ResumeReady( KErrNone ); |
|
2166 } |
|
2167 break; |
|
2168 } |
1947 ResumeHarvesterL(); |
2169 ResumeHarvesterL(); |
1948 iHarvesterEventManager->SendEventL( EHEObserverTypeOverall, EHEStateResumed ); |
2170 iHarvesterEventManager->SendEventL( EHEObserverTypeOverall, EHEStateResumed ); |
1949 if( iHarvesterStatusObserver ) |
2171 if( iHarvesterStatusObserver ) |
1950 { |
2172 { |
1951 iHarvesterStatusObserver->ResumeReady( KErrNone ); |
2173 iHarvesterStatusObserver->ResumeReady( KErrNone ); |
1978 // RunError |
2200 // RunError |
1979 // --------------------------------------------------------------------------- |
2201 // --------------------------------------------------------------------------- |
1980 // |
2202 // |
1981 TInt CHarvesterAO::RunError( TInt aError ) |
2203 TInt CHarvesterAO::RunError( TInt aError ) |
1982 { |
2204 { |
1983 WRITELOG( "CHarvesterAO::RunError" ); |
2205 WRITELOG1( "CHarvesterAO::RunError, error: %d", aError ); |
1984 OstTrace0( TRACE_NORMAL, CHARVESTERAO_RUNERROR, "CHarvesterAO::RunError" ); |
2206 OstTrace0( TRACE_NORMAL, CHARVESTERAO_RUNERROR, "CHarvesterAO::RunError" ); |
1985 |
2207 |
1986 switch( iNextRequest ) |
2208 switch( iNextRequest ) |
1987 { |
2209 { |
1988 case ERequestHarvest: |
2210 case ERequestHarvest: |
1989 { |
2211 { |
1990 WRITELOG( "CHarvesterAO::RunError - state ERequestHarvest" ); |
2212 WRITELOG( "CHarvesterAO::RunError - state ERequestHarvest" ); |
1991 OstTrace0( TRACE_NORMAL, DUP1_CHARVESTERAO_RUNERROR, "CHarvesterAO::RunError - state ERequestHarvest" ); |
2213 OstTrace0( TRACE_NORMAL, DUP1_CHARVESTERAO_RUNERROR, "CHarvesterAO::RunError - state ERequestHarvest" ); |
|
2214 if( aError == KErrDiskFull || aError == KErrNoMemory ) |
|
2215 { |
|
2216 SetNextRequest( ERequestIdle ); |
|
2217 } |
|
2218 } |
|
2219 break; |
|
2220 |
|
2221 case ERequestContainerPlaceholder: |
|
2222 { |
|
2223 WRITELOG( "CHarvesterAO::RunError - state ERequestContainerPlaceholder" ); |
|
2224 OstTrace0( TRACE_NORMAL, DUP5_CHARVESTERAO_RUNERROR, "CHarvesterAO::RunError - state ERequestContainerPlaceholder" ); |
|
2225 if( aError == KErrDiskFull || aError == KErrNoMemory ) |
|
2226 { |
|
2227 SetNextRequest( ERequestIdle ); |
|
2228 } |
1992 } |
2229 } |
1993 break; |
2230 break; |
1994 |
2231 |
1995 case ERequestPause: |
2232 case ERequestPause: |
1996 { |
2233 { |
2103 WRITELOG("CHarvesterAO::HandleDiskSpaceNotificationL()"); |
2340 WRITELOG("CHarvesterAO::HandleDiskSpaceNotificationL()"); |
2104 OstTrace0( TRACE_NORMAL, CHARVESTERAO_HANDLEDISKSPACENOTIFICATIONL, "CHarvesterAO::HandleDiskSpaceNotificationL" ); |
2341 OstTrace0( TRACE_NORMAL, CHARVESTERAO_HANDLEDISKSPACENOTIFICATIONL, "CHarvesterAO::HandleDiskSpaceNotificationL" ); |
2105 |
2342 |
2106 if( MMdSHarvesterDiskSpaceObserver::EMore == aDiskSpaceDirection ) |
2343 if( MMdSHarvesterDiskSpaceObserver::EMore == aDiskSpaceDirection ) |
2107 { |
2344 { |
|
2345 WRITELOG("CHarvesterAO::HandleDiskSpaceNotificationL() - disk space available"); |
|
2346 OstTrace0( TRACE_NORMAL, DUP2_CHARVESTERAO_HANDLEDISKSPACENOTIFICATIONL, "CHarvesterAO::HandleDiskSpaceNotificationL - disk space available" ); |
|
2347 iDiskFull = EFalse; |
|
2348 } |
|
2349 else |
|
2350 { |
2108 WRITELOG("CHarvesterAO::HandleDiskSpaceNotificationL() - disk full"); |
2351 WRITELOG("CHarvesterAO::HandleDiskSpaceNotificationL() - disk full"); |
2109 OstTrace0( TRACE_NORMAL, DUP1_CHARVESTERAO_HANDLEDISKSPACENOTIFICATIONL, "CHarvesterAO::HandleDiskSpaceNotificationL - disk full" ); |
2352 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; |
2353 iDiskFull = ETrue; |
2117 if( iServerPaused ) |
2354 if( iServerPaused ) |
2118 { |
2355 { |
2119 return; |
2356 return; |
2120 } |
2357 } |
2939 const RPointerArray<HBufC>& aIgnorePaths, |
3185 const RPointerArray<HBufC>& aIgnorePaths, |
2940 TBool aCheckDrive ) |
3186 TBool aCheckDrive ) |
2941 { |
3187 { |
2942 WRITELOG("CHarvesterAO::BootScanL() - begin"); |
3188 WRITELOG("CHarvesterAO::BootScanL() - begin"); |
2943 OstTrace0( TRACE_NORMAL, CHARVESTERAO_BOOTSCANL, "CHarvesterAO::BootScanL - begin" ); |
3189 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 |
3190 |
2964 TVolumeInfo volumeInfo; |
3191 TVolumeInfo volumeInfo; |
2965 iFs.Volume( volumeInfo, EDriveC ); |
3192 iFs.Volume( volumeInfo, EDriveC ); |
2966 |
3193 |
2967 iMdEHarvesterSession->SetFilesToNotPresent( volumeInfo.iUniqueID, ETrue ); |
3194 iMdEHarvesterSession->SetFilesToNotPresent( volumeInfo.iUniqueID, ETrue ); |
3039 if( !IsDescInArray( path, aIgnorePaths ) ) |
3266 if( !IsDescInArray( path, aIgnorePaths ) ) |
3040 { |
3267 { |
3041 WRITELOG("CHarvesterAO::BootScanL() - scanFolders.AppendL"); |
3268 WRITELOG("CHarvesterAO::BootScanL() - scanFolders.AppendL"); |
3042 OstTrace0( TRACE_NORMAL, DUP2_CHARVESTERAO_BOOTSCANL, "CHarvesterAO::BootScanL - scanFolders.AppendL" ); |
3269 OstTrace0( TRACE_NORMAL, DUP2_CHARVESTERAO_BOOTSCANL, "CHarvesterAO::BootScanL - scanFolders.AppendL" ); |
3043 TScanItem* item = new (ELeave) TScanItem(); |
3270 TScanItem* item = new (ELeave) TScanItem(); |
|
3271 CleanupStack::PushL( item ); |
3044 item->iPath = name->AllocL(); |
3272 item->iPath = name->AllocL(); |
3045 item->iPreinstalled = MdeConstants::MediaObject::ENotPreinstalled; |
3273 item->iPreinstalled = MdeConstants::MediaObject::ENotPreinstalled; |
3046 aScanItems.AppendL( item ); |
3274 CleanupStack::Pop( item ); |
|
3275 aScanItems.AppendL( item ); // ownership is transferred |
3047 } |
3276 } |
3048 } |
3277 } |
3049 else |
3278 else |
3050 { |
3279 { |
3051 TPtrC filename = *name; |
3280 TPtrC filename = *name; |
3101 hd->SetObjectType( EPlaceholder ); |
3330 hd->SetObjectType( EPlaceholder ); |
3102 hd->SetOrigin( MdeConstants::Object::EOther ); |
3331 hd->SetOrigin( MdeConstants::Object::EOther ); |
3103 hd->SetClientData( phData ); |
3332 hd->SetClientData( phData ); |
3104 |
3333 |
3105 CleanupStack::Pop( phData ); |
3334 CleanupStack::Pop( phData ); |
3106 hdArray.Append( hd ); |
3335 |
|
3336 if(hdArray.Append( hd ) != KErrNone ) |
|
3337 { |
|
3338 delete hd; |
|
3339 hd = NULL; |
|
3340 } |
3107 } |
3341 } |
3108 CleanupStack::PopAndDestroy( &results ); |
3342 CleanupStack::PopAndDestroy( &results ); |
3109 CleanupStack::PopAndDestroy( &fileInfos ); |
3343 CleanupStack::PopAndDestroy( &fileInfos ); |
3110 CleanupStack::PopAndDestroy( &uris ); |
3344 CleanupStack::PopAndDestroy( &uris ); |
3111 } |
3345 } |
3126 iQueue->MonitorEvent( hdArray ); |
3360 iQueue->MonitorEvent( hdArray ); |
3127 CleanupStack::PopAndDestroy( &hdArray ); |
3361 CleanupStack::PopAndDestroy( &hdArray ); |
3128 |
3362 |
3129 iMdEHarvesterSession->RemoveFilesNotPresent( volumeInfo.iUniqueID, ETrue ); |
3363 iMdEHarvesterSession->RemoveFilesNotPresent( volumeInfo.iUniqueID, ETrue ); |
3130 |
3364 |
3131 iMassMemoryIdChecked = ETrue; |
|
3132 |
|
3133 WRITELOG("CHarvesterAO::BootScanL() - end"); |
3365 WRITELOG("CHarvesterAO::BootScanL() - end"); |
3134 OstTrace0( TRACE_NORMAL, DUP5_CHARVESTERAO_BOOTSCANL, "CHarvesterAO::BootScanL - end" ); |
3366 OstTrace0( TRACE_NORMAL, DUP5_CHARVESTERAO_BOOTSCANL, "CHarvesterAO::BootScanL - end" ); |
3135 } |
3367 } |
3136 |
3368 |
3137 void CHarvesterAO::SetHarvesterStatusObserver( MHarvesterStatusObserver* aObserver ) |
3369 void CHarvesterAO::SetHarvesterStatusObserver( MHarvesterStatusObserver* aObserver ) |
3220 |
3452 |
3221 // cache monitored events |
3453 // cache monitored events |
3222 PauseMonitoring(); |
3454 PauseMonitoring(); |
3223 PauseHarvester(); |
3455 PauseHarvester(); |
3224 |
3456 |
3225 iPHArray.Compress(); |
3457 iReadyPHArray.Compress(); |
3226 iReadyPHArray.Compress(); |
3458 iContainerPHArray.Compress(); |
3227 iContainerPHArray.Compress(); |
3459 iPHArray.Compress(); |
|
3460 iTempReadyPHArray.Compress(); |
3228 } |
3461 } |
3229 |
3462 |
3230 void CHarvesterAO::MemoryGood() |
3463 void CHarvesterAO::MemoryGood() |
3231 { |
3464 { |
3232 WRITELOG("CHarvesterAO::MemoryGood()"); |
3465 WRITELOG("CHarvesterAO::MemoryGood()"); |
3233 OstTrace0( TRACE_NORMAL, CHARVESTERAO_MEMORYGOOD, "CHarvesterAO::MemoryGood" ); |
3466 OstTrace0( TRACE_NORMAL, CHARVESTERAO_MEMORYGOOD, "CHarvesterAO::MemoryGood" ); |
3234 |
3467 |
3235 iRamFull = EFalse; |
3468 iRamFull = EFalse; |
3236 |
3469 |
3237 if( !iDiskFull && !iManualPauseEnabled && iServerPaused ) |
3470 if( iServerPaused ) |
3238 { |
3471 { |
3239 // resume monitoring |
3472 // resume monitoring |
3240 ResumeMonitoring(); |
3473 ResumeMonitoring(); |
3241 |
3474 |
3242 TRAP_IGNORE( ResumeHarvesterL() ); |
3475 TRAP_IGNORE( ResumeHarvesterL() ); |