50 // constants |
51 // constants |
51 const TInt32 KFileMonitorPluginUid = 0x20007186; // file monitor plugin implementation uid |
52 const TInt32 KFileMonitorPluginUid = 0x20007186; // file monitor plugin implementation uid |
52 |
53 |
53 const TInt KPlaceholderQueueSize = 99; |
54 const TInt KPlaceholderQueueSize = 99; |
54 const TInt KContainerPlaceholderQueueSize = 10; |
55 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(KUndefined, " "); |
64 _LIT(KUndefinedMime, " "); |
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 SetByObjectDefL( aObjectDef ); |
79 CMdENamespaceDef& nsDef = aObjectDef.NamespaceDef(); |
|
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 ); |
80 } |
93 } |
81 |
94 |
82 CHarvesterAoPropertyDefs* CHarvesterAoPropertyDefs::NewL() |
95 CHarvesterAoPropertyDefs* CHarvesterAoPropertyDefs::NewL(CMdEObjectDef& aObjectDef) |
83 { |
96 { |
84 CHarvesterAoPropertyDefs* self = |
97 CHarvesterAoPropertyDefs* self = |
85 new (ELeave) CHarvesterAoPropertyDefs(); |
98 new (ELeave) CHarvesterAoPropertyDefs(); |
86 return self; |
99 CleanupStack::PushL( self ); |
87 } |
100 self->ConstructL( aObjectDef ); |
88 |
101 CleanupStack::Pop( self ); |
89 void CHarvesterAoPropertyDefs::SetByObjectDefL(CMdEObjectDef& aObjectDef) |
102 return self; |
90 { |
103 } |
91 CMdENamespaceDef& nsDef = aObjectDef.NamespaceDef(); |
104 |
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 |
|
107 // --------------------------------------------------------------------------- |
105 // --------------------------------------------------------------------------- |
108 // NewLC |
106 // NewLC |
109 // --------------------------------------------------------------------------- |
107 // --------------------------------------------------------------------------- |
110 // |
108 // |
111 CHarvesterAO* CHarvesterAO::NewLC() |
109 CHarvesterAO* CHarvesterAO::NewLC() |
153 iManualPauseEnabled = EFalse; |
151 iManualPauseEnabled = EFalse; |
154 iFastHarvestNeeded = EFalse; |
152 iFastHarvestNeeded = EFalse; |
155 iHarvestingPlaceholders = EFalse; |
153 iHarvestingPlaceholders = EFalse; |
156 |
154 |
157 iUnmountDetected = EFalse; |
155 iUnmountDetected = EFalse; |
158 iUnmountHandlingOngoing = EFalse; |
|
159 iPriorityInterruptDetected = EFalse; |
156 iPriorityInterruptDetected = EFalse; |
160 iLocManipulatorConnected = EFalse; |
|
161 } |
157 } |
162 |
158 |
163 // --------------------------------------------------------------------------- |
159 // --------------------------------------------------------------------------- |
164 // ~CHarvesterAO |
160 // ~CHarvesterAO |
165 // --------------------------------------------------------------------------- |
161 // --------------------------------------------------------------------------- |
230 |
220 |
231 iTempReadyPHArray.ResetAndDestroy(); |
221 iTempReadyPHArray.ResetAndDestroy(); |
232 iTempReadyPHArray.Close(); |
222 iTempReadyPHArray.Close(); |
233 |
223 |
234 delete iHarvesterOomAO; |
224 delete iHarvesterOomAO; |
235 iHarvesterOomAO = NULL; |
|
236 delete iRestoreWatcher; |
225 delete iRestoreWatcher; |
237 iRestoreWatcher = NULL; |
|
238 delete iOnDemandAO; |
226 delete iOnDemandAO; |
239 iOnDemandAO = NULL; |
|
240 delete iMdEHarvesterSession; |
227 delete iMdEHarvesterSession; |
241 iMdEHarvesterSession = NULL; |
|
242 delete iMdESession; |
228 delete iMdESession; |
243 iMdESession = NULL; |
|
244 delete iQueue; |
229 delete iQueue; |
245 iQueue = NULL; |
|
246 delete iHarvesterPluginFactory; |
230 delete iHarvesterPluginFactory; |
247 iHarvesterPluginFactory = NULL; |
|
248 delete iMdeObjectHandler; |
231 delete iMdeObjectHandler; |
249 iMdeObjectHandler = NULL; |
|
250 delete iUnmountHandlerAO; |
232 delete iUnmountHandlerAO; |
251 iUnmountHandlerAO = NULL; |
|
252 |
233 |
253 delete iPropDefs; |
234 delete iPropDefs; |
254 iPropDefs = NULL; |
|
255 delete iCameraExtensionArray; |
235 delete iCameraExtensionArray; |
256 iCameraExtensionArray = NULL; |
|
257 |
236 |
258 delete iPhoneImagesPath; |
237 delete iPhoneImagesPath; |
259 iPhoneImagesPath = NULL; |
|
260 delete iMmcImagesPath; |
238 delete iMmcImagesPath; |
261 iMmcImagesPath = NULL; |
|
262 |
239 |
263 delete iPhoneVideosPath; |
240 delete iPhoneVideosPath; |
264 iPhoneVideosPath = NULL; |
|
265 delete iMmcVideosPath; |
241 delete iMmcVideosPath; |
266 iMmcVideosPath = NULL; |
|
267 |
242 |
268 delete iPhoneSoundsPath; |
243 delete iPhoneSoundsPath; |
269 iPhoneSoundsPath = NULL; |
|
270 delete iMmcSoundsPath; |
244 delete iMmcSoundsPath; |
271 iMmcSoundsPath = NULL; |
|
272 |
245 |
273 RMediaIdUtil::ReleaseInstance(); |
246 RMediaIdUtil::ReleaseInstance(); |
274 |
247 |
275 REComSession::FinalClose(); |
248 REComSession::FinalClose(); |
276 } |
249 } |
318 iHarvesterPluginFactory->SetBlacklist( *iBlacklist ); |
291 iHarvesterPluginFactory->SetBlacklist( *iBlacklist ); |
319 |
292 |
320 // Reset harvesting status for clients in case blacklisted file was handled |
293 // Reset harvesting status for clients in case blacklisted file was handled |
321 iHarvesterPluginFactory->SendHarvestingStatusEventL( EFalse ); |
294 iHarvesterPluginFactory->SendHarvestingStatusEventL( EFalse ); |
322 |
295 |
323 iPropDefs = CHarvesterAoPropertyDefs::NewL(); |
|
324 |
|
325 iCameraExtensionArray = new ( ELeave ) CDesCArraySeg( 6 ); |
296 iCameraExtensionArray = new ( ELeave ) CDesCArraySeg( 6 ); |
326 iCameraExtensionArray->InsertIsqL( KExtensionMp4 ); |
297 iCameraExtensionArray->InsertIsqL( KExtensionMp4 ); |
327 iCameraExtensionArray->InsertIsqL( KExtensionMpg4 ); |
298 iCameraExtensionArray->InsertIsqL( KExtensionMpg4 ); |
328 iCameraExtensionArray->InsertIsqL( KExtensionMpeg4 ); |
299 iCameraExtensionArray->InsertIsqL( KExtensionMpeg4 ); |
329 iCameraExtensionArray->InsertIsqL( KExtension3gp ); |
300 iCameraExtensionArray->InsertIsqL( KExtension3gp ); |
381 |
352 |
382 TCleanupItem cleanupItem( MdsUtils::CleanupEComArray, &infoArray ); |
353 TCleanupItem cleanupItem( MdsUtils::CleanupEComArray, &infoArray ); |
383 CleanupStack::PushL( cleanupItem ); |
354 CleanupStack::PushL( cleanupItem ); |
384 |
355 |
385 CMonitorPlugin::ListImplementationsL( infoArray ); |
356 CMonitorPlugin::ListImplementationsL( infoArray ); |
386 const TInt count( infoArray.Count() ); |
357 TInt count( 0 ); |
|
358 count = infoArray.Count(); |
387 CMonitorPlugin* plugin = NULL; |
359 CMonitorPlugin* plugin = NULL; |
388 |
360 |
389 for ( TInt i = 0; i < count; i++ ) |
361 for ( TInt i = 0; i < count; i++ ) |
390 { |
362 { |
391 TUid uid = infoArray[i]->ImplementationUid(); // Create the plug-ins |
363 TUid uid = infoArray[i]->ImplementationUid(); // Create the plug-ins |
436 // |
408 // |
437 void CHarvesterAO::StartMonitoring() |
409 void CHarvesterAO::StartMonitoring() |
438 { |
410 { |
439 WRITELOG( "CHarvesterAO::StartMonitoring()" ); |
411 WRITELOG( "CHarvesterAO::StartMonitoring()" ); |
440 OstTrace0( TRACE_NORMAL, CHARVESTERAO_STARTMONITORING, "CHarvesterAO::StartMonitoring" ); |
412 OstTrace0( TRACE_NORMAL, CHARVESTERAO_STARTMONITORING, "CHarvesterAO::StartMonitoring" ); |
|
413 |
441 const TInt count( iMonitorPluginArray.Count() ); |
414 const TInt count( iMonitorPluginArray.Count() ); |
442 |
415 |
443 for ( TInt i = 0; i < count; i++ ) |
416 for ( TInt i = 0; i < count; i++ ) |
444 { |
417 { |
445 iMonitorPluginArray[i]->StartMonitoring( *iQueue, iMdESession, NULL, |
418 iMonitorPluginArray[i]->StartMonitoring( *iQueue, iMdESession, NULL, |
470 void CHarvesterAO::PauseMonitoring() |
445 void CHarvesterAO::PauseMonitoring() |
471 { |
446 { |
472 WRITELOG( "CHarvesterAO::PauseMonitoring()" ); |
447 WRITELOG( "CHarvesterAO::PauseMonitoring()" ); |
473 OstTrace0( TRACE_NORMAL, CHARVESTERAO_PAUSEMONITORING, "CHarvesterAO::PauseMonitoring" ); |
448 OstTrace0( TRACE_NORMAL, CHARVESTERAO_PAUSEMONITORING, "CHarvesterAO::PauseMonitoring" ); |
474 |
449 |
475 for( TInt i = iMonitorPluginArray.Count() - 1; i >=0; i-- ) |
450 const TInt count( iMonitorPluginArray.Count() ); |
|
451 |
|
452 for ( TInt i = 0; i<count; i++ ) |
476 { |
453 { |
477 iMonitorPluginArray[i]->PauseMonitoring(); |
454 iMonitorPluginArray[i]->PauseMonitoring(); |
478 } |
455 } |
479 |
|
480 OstTrace0( TRACE_NORMAL, DUP1_CHARVESTERAO_PAUSEMONITORING, "CHarvesterAO::PauseMonitoring - end" ); |
456 OstTrace0( TRACE_NORMAL, DUP1_CHARVESTERAO_PAUSEMONITORING, "CHarvesterAO::PauseMonitoring - end" ); |
481 WRITELOG( "CHarvesterAO::PauseMonitoring() - end" ); |
457 WRITELOG( "CHarvesterAO::PauseMonitoring() - end" ); |
482 } |
458 } |
483 |
459 |
484 // --------------------------------------------------------------------------- |
460 // --------------------------------------------------------------------------- |
847 iHarvestingPlaceholders = ETrue; |
824 iHarvestingPlaceholders = ETrue; |
848 if( !iFastHarvestNeeded ) |
825 if( !iFastHarvestNeeded ) |
849 { |
826 { |
850 SetPriority( KHarvesterCustomImportantPriority ); |
827 SetPriority( KHarvesterCustomImportantPriority ); |
851 } |
828 } |
852 while( hd && |
829 while( hd != NULL && |
853 iPHArray.Count() < KPlaceholderQueueSize && |
830 iPHArray.Count() < KPlaceholderQueueSize && |
854 hd->ObjectType() == EPlaceholder ) |
831 hd->ObjectType() == EPlaceholder ) |
855 { |
832 { |
856 if(iPHArray.Append( hd ) != KErrNone) |
833 iPHArray.Append( hd ); |
|
834 if( hd->Origin() == MdeConstants::Object::ECamera || |
|
835 hd->ObjectType() == EFastHarvest ) |
857 { |
836 { |
858 HarvestCompleted( hd->ClientId(), hd->Uri(), KErrNoMemory ); |
837 if( !iFastHarvestNeeded ) |
859 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
838 { |
860 delete hd; |
839 iFastHarvestNeeded = ETrue; |
861 hd = NULL; |
840 // Fast harvest event must be handled even if MMC handling would be ongoing |
|
841 SetPriority( KHarvesterPriorityMonitorPlugin ); |
|
842 } |
|
843 break; |
862 } |
844 } |
863 else |
845 else if( iFastHarvestNeeded ) |
864 { |
846 { |
865 if( hd->Origin() == MdeConstants::Object::ECamera || |
847 iFastHarvestNeeded = EFalse; |
866 hd->ObjectType() == EFastHarvest ) |
848 SetPriority( KHarvesterCustomImportantPriority ); |
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 } |
|
881 } |
849 } |
882 hd = iQueue->GetNextItem(); |
850 hd = iQueue->GetNextItem(); |
883 } |
851 } |
884 |
852 |
885 if( iFastHarvestNeeded && iPHArray.Count() > 0 ) |
853 if( iFastHarvestNeeded && iPHArray.Count() > 0 ) |
886 { |
854 { |
887 TRAPD( err, HandlePlaceholdersL( ETrue ) ); |
855 TRAPD( err, HandlePlaceholdersL( ETrue ) ); |
888 |
856 |
889 // make sure that when HandlePlaceholdersL leaves unexpectedly, iPHArray is cleared |
857 // make sure that when HandlePlaceholdersL leaves, iPHArray is cleared |
890 if ( err != KErrNone ) |
858 if ( err != KErrNone ) |
891 { |
859 { |
892 if( err != KErrDiskFull ) |
860 iPHArray.ResetAndDestroy(); |
893 { |
861 iTempReadyPHArray.ResetAndDestroy(); |
894 iPHArray.ResetAndDestroy(); |
|
895 iTempReadyPHArray.ResetAndDestroy(); |
|
896 } |
|
897 User::Leave( err ); |
862 User::Leave( err ); |
898 } |
863 } |
899 |
864 |
900 TInt count( iReadyPHArray.Count() ); |
865 TInt count( iReadyPHArray.Count() ); |
901 for( TInt i = 0; i < count; i++ ) |
866 for( TInt i = 0; i < count; i++ ) |
915 |
880 |
916 if( hd ) |
881 if( hd ) |
917 { |
882 { |
918 if( hd->ObjectType() == EPlaceholder ) |
883 if( hd->ObjectType() == EPlaceholder ) |
919 { |
884 { |
920 if( iPHArray.Append( hd ) != KErrNone ) |
885 iPHArray.Append( hd ); |
921 { |
|
922 HarvestCompleted( hd->ClientId(), hd->Uri(), KErrNoMemory ); |
|
923 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
|
924 delete hd; |
|
925 hd = NULL; |
|
926 } |
|
927 } |
886 } |
928 else |
887 else |
929 { |
888 { |
930 if( iReadyPHArray.Append( hd ) != KErrNone) |
889 CheckFileExtensionAndHarvestL( hd ); |
931 { |
890 if( iUnmountDetected ) |
932 delete hd; |
891 { |
933 hd = NULL; |
892 iQueue->Append( hd ); |
934 } |
893 return; |
|
894 } |
935 } |
895 } |
936 } |
896 } |
937 |
897 |
938 if( iPHArray.Count() > 0 ) |
898 if( iPHArray.Count() > 0 ) |
939 { |
899 { |
940 TRAPD( err, HandlePlaceholdersL( ETrue ) ); |
900 TRAPD( err, HandlePlaceholdersL( ETrue ) ); |
941 |
901 |
942 // make sure that when HandlePlaceholdersL leaves unexpectedly, iPHArray is cleared |
902 // make sure that when HandlePlaceholdersL leaves, iPHArray is cleared |
943 if ( err != KErrNone ) |
903 if ( err != KErrNone ) |
944 { |
904 { |
945 if( err != KErrDiskFull ) |
905 iPHArray.ResetAndDestroy(); |
946 { |
906 iTempReadyPHArray.ResetAndDestroy(); |
947 iPHArray.ResetAndDestroy(); |
|
948 iTempReadyPHArray.ResetAndDestroy(); |
|
949 } |
|
950 User::Leave( err ); |
907 User::Leave( err ); |
951 } |
908 } |
952 } |
909 } |
953 } |
910 } |
954 else |
911 else |
977 |
934 |
978 RPointerArray<CMdEObject> mdeObjectArray; |
935 RPointerArray<CMdEObject> mdeObjectArray; |
979 CleanupClosePushL( mdeObjectArray ); |
936 CleanupClosePushL( mdeObjectArray ); |
980 |
937 |
981 TTimeIntervalSeconds timeOffsetSeconds = User::UTCOffset(); |
938 TTimeIntervalSeconds timeOffsetSeconds = User::UTCOffset(); |
982 |
|
983 CMdENamespaceDef& defNS = iMdESession->GetDefaultNamespaceDefL(); |
|
984 |
939 |
985 TInt endindex( iPHArray.Count() ); |
940 TInt endindex( iPHArray.Count() ); |
986 for( TInt i = 0; i < endindex; i++ ) |
941 for( TInt i = 0; i < endindex; i++ ) |
987 { |
942 { |
988 CHarvesterData* hd = iPHArray[i]; |
943 CHarvesterData* hd = iPHArray[i]; |
989 |
944 |
990 if( aCheck && |
945 if( aCheck && iHarvesterPluginFactory->IsContainerFileL( hd->Uri() ) ) |
991 hd->Origin() != MdeConstants::Object::ECamera && |
|
992 iHarvesterPluginFactory->IsContainerFileL( hd->Uri() ) ) |
|
993 { |
946 { |
994 if( iContainerPHArray.Append( hd ) != KErrNone ) |
947 iContainerPHArray.Append( hd ); |
995 { |
|
996 HarvestCompleted( hd->ClientId(), hd->Uri(), KErrNoMemory ); |
|
997 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
|
998 delete hd; |
|
999 hd = NULL; |
|
1000 } |
|
1001 |
|
1002 iPHArray.Remove( i ); |
948 iPHArray.Remove( i ); |
1003 i--; |
949 i--; |
1004 endindex--; |
950 endindex--; |
1005 continue; |
951 continue; |
1006 } |
952 } |
1007 |
|
1008 TBuf<KObjectDefStrSize> objDefStr; |
953 TBuf<KObjectDefStrSize> objDefStr; |
1009 |
954 |
1010 if( !CheckForCameraItem( hd, objDefStr ) ) |
955 if( !CheckForCameraItem( hd, objDefStr ) ) |
1011 { |
956 { |
1012 iHarvesterPluginFactory->GetObjectDefL( hd, objDefStr ); |
957 iHarvesterPluginFactory->GetObjectDefL( *hd, objDefStr ); |
1013 } |
958 } |
1014 |
959 |
1015 // GetObjectDef can cause context switch, and if unmount happens when this execution is |
960 // GetObjectDef can cause context switch, and if unmount happens when this execution is |
1016 // interrupted, the ph arrays can be invalid. Thus, abort whole run, and start over to make sure |
961 // interrupted, the ph arrays can be invalid. Thus, abort whole run, and start over to make sure |
1017 // the arrays are valid. |
962 // the arrays are valid. |
1018 if( iUnmountDetected ) |
963 if( iUnmountDetected ) |
1019 { |
964 { |
1020 WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - Unmount detected during execution!" ); |
965 WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - Unmount detected during execution!" ); |
1021 for( TInt y( iTempReadyPHArray.Count() -1 ); y >=0; y-- ) |
966 for( TInt y( iTempReadyPHArray.Count() -1 ); y >=0; y-- ) |
1022 { |
967 { |
1023 CHarvesterData* tempHd = iTempReadyPHArray[y]; |
968 CHarvesterData* hd = iTempReadyPHArray[y]; |
1024 |
969 iPHArray.Insert( hd, 0 ); |
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 } |
|
1032 } |
970 } |
1033 iTempReadyPHArray.Reset(); |
971 iTempReadyPHArray.Reset(); |
1034 CleanupStack::PopAndDestroy( &mdeObjectArray ); |
972 CleanupStack::PopAndDestroy( &mdeObjectArray ); |
1035 return; |
973 return; |
1036 } |
974 } |
1041 { |
979 { |
1042 WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - Priority interrupt during execution!" ); |
980 WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - Priority interrupt during execution!" ); |
1043 const TInt currentPHArrayCount( iPHArray.Count() ); |
981 const TInt currentPHArrayCount( iPHArray.Count() ); |
1044 for( TInt y( iTempReadyPHArray.Count() -1 ); y >=0; y-- ) |
982 for( TInt y( iTempReadyPHArray.Count() -1 ); y >=0; y-- ) |
1045 { |
983 { |
1046 CHarvesterData* tempHd = iTempReadyPHArray[y]; |
984 CHarvesterData* hd = iTempReadyPHArray[y]; |
1047 if(iPHArray.Insert( tempHd, 0 ) != KErrNone) |
985 if( currentPHArrayCount ) |
1048 { |
986 { |
1049 HarvestCompleted( tempHd->ClientId(), tempHd->Uri(), KErrNoMemory ); |
987 // Leave the first item in the array as it is the priority item |
1050 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
988 iPHArray.Insert( hd, 1 ); |
1051 delete tempHd; |
989 } |
1052 tempHd = NULL; |
990 else |
|
991 { |
|
992 iPHArray.Insert( hd, 0 ); |
1053 } |
993 } |
1054 } |
994 } |
1055 iTempReadyPHArray.Reset(); |
995 iTempReadyPHArray.Reset(); |
1056 CleanupStack::PopAndDestroy( &mdeObjectArray ); |
996 CleanupStack::PopAndDestroy( &mdeObjectArray ); |
1057 return; |
997 return; |
1058 } |
998 } |
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 } |
|
1081 |
999 |
1082 if( objDefStr.Length() == 0 || |
1000 if( objDefStr.Length() == 0 || |
1083 ( objDefStr == KInUse ) ) |
1001 ( objDefStr == KInUse ) ) |
1084 { |
1002 { |
1085 #ifdef _DEBUG |
1003 WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - no objectDef or in use, failing harvesting" ); |
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 } |
|
1109 const TInt error( KErrUnknown ); |
1004 const TInt error( KErrUnknown ); |
1110 // notify observer, notification is needed even if file is not supported |
1005 // notify observer, notification is needed even if file is not supported |
1111 HarvestCompleted( hd->ClientId(), hd->Uri(), error ); |
1006 HarvestCompleted( hd->ClientId(), hd->Uri(), error ); |
1112 delete hd; |
1007 delete hd; |
1113 hd = NULL; |
1008 hd = NULL; |
1116 endindex--; |
1011 endindex--; |
1117 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
1012 iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ); |
1118 continue; |
1013 continue; |
1119 } |
1014 } |
1120 |
1015 |
|
1016 CMdENamespaceDef& defNS = iMdESession->GetDefaultNamespaceDefL(); |
1121 CMdEObjectDef& mdeObjectDef = defNS.GetObjectDefL( objDefStr ); |
1017 CMdEObjectDef& mdeObjectDef = defNS.GetObjectDefL( objDefStr ); |
1122 |
1018 |
1123 HBufC* hdUri = hd->Uri().AllocL(); |
1019 CMdEObject* mdeObject = iMdESession->NewObjectL( mdeObjectDef, hd->Uri() ); |
1124 CleanupStack::PushL( hdUri ); |
|
1125 CMdEObject* mdeObject = iMdESession->NewObjectL( mdeObjectDef, *hdUri ); |
|
1126 CleanupStack::PopAndDestroy( hdUri ); |
|
1127 CleanupStack::PushL( mdeObject ); |
1020 CleanupStack::PushL( mdeObject ); |
1128 |
1021 |
1129 CPlaceholderData* phData = NULL; |
1022 CPlaceholderData* phData = NULL; |
1130 |
1023 |
1131 if( hd->TakeSnapshot() ) |
1024 if( hd->TakeSnapshot() ) |
1282 |
1175 |
1283 CleanupStack::PopAndDestroy( phData ); |
1176 CleanupStack::PopAndDestroy( phData ); |
1284 |
1177 |
1285 CleanupStack::Pop( mdeObject ); |
1178 CleanupStack::Pop( mdeObject ); |
1286 |
1179 |
1287 if(iTempReadyPHArray.Append( hd ) != KErrNone) |
1180 iTempReadyPHArray.Append( hd ); |
1288 { |
|
1289 HarvestCompleted( hd->ClientId(), hd->Uri(), KErrNoMemory ); |
|
1290 delete hd; |
|
1291 hd = NULL; |
|
1292 } |
|
1293 iPHArray.Remove( i ); |
1181 iPHArray.Remove( i ); |
1294 i--; |
1182 i--; |
1295 endindex--; |
1183 endindex--; |
1296 } |
1184 } |
1297 |
1185 |
|
1186 const TInt tempArrayCount( iTempReadyPHArray.Count() ); |
|
1187 for( TInt i( 0 ); i < tempArrayCount; i++ ) |
|
1188 { |
|
1189 CHarvesterData* hd = iTempReadyPHArray[i]; |
|
1190 iReadyPHArray.Append( hd ); |
|
1191 } |
|
1192 iTempReadyPHArray.Reset(); |
|
1193 |
1298 const TInt objectCount = mdeObjectArray.Count(); |
1194 const TInt objectCount = mdeObjectArray.Count(); |
1299 |
1195 |
1300 if( objectCount > 0 ) |
1196 if( objectCount > 0 ) |
1301 { |
1197 { |
1302 // add object to mde |
1198 // add object to mde |
1303 iMdEHarvesterSession->AutoLockL( mdeObjectArray ); |
1199 iMdEHarvesterSession->AutoLockL( mdeObjectArray ); |
1304 TInt addError( KErrNone ); |
1200 const TInt addError( iMdESession->AddObjectsL( mdeObjectArray ) ); |
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 |
|
1330 if( addError != KErrNone ) |
1201 if( addError != KErrNone ) |
1331 { |
1202 { |
1332 // If some error occures, retry |
1203 // If some error occures, retry |
1333 iMdESession->AddObjectsL( mdeObjectArray ); |
1204 iMdESession->AddObjectsL( mdeObjectArray ); |
1334 } |
1205 } |
1335 |
1206 |
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 |
|
1349 iHarvesterEventManager->IncreaseItemCount( EHEObserverTypePlaceholder, |
1207 iHarvesterEventManager->IncreaseItemCount( EHEObserverTypePlaceholder, |
1350 objectCount ); |
1208 objectCount ); |
1351 iHarvesterEventManager->SendEventL( EHEObserverTypePlaceholder, EHEStateStarted, |
1209 iHarvesterEventManager->SendEventL( EHEObserverTypePlaceholder, EHEStateStarted, |
1352 iHarvesterEventManager->ItemCount( EHEObserverTypePlaceholder ) ); |
1210 iHarvesterEventManager->ItemCount( EHEObserverTypePlaceholder ) ); |
1353 |
1211 |
1379 TBool isError = EFalse; |
1237 TBool isError = EFalse; |
1380 CMdEObject* mdeObject = &aHD->MdeObject(); |
1238 CMdEObject* mdeObject = &aHD->MdeObject(); |
1381 const TDesC& uri = aHD->Uri(); |
1239 const TDesC& uri = aHD->Uri(); |
1382 TBool objectExisted = ETrue; |
1240 TBool objectExisted = ETrue; |
1383 |
1241 |
1384 if( !mdeObject ) |
1242 if( ! mdeObject ) |
1385 { |
1243 { |
1386 objectExisted = EFalse; |
1244 objectExisted = EFalse; |
1387 WRITELOG1( "CHarvesterAO::CheckFileExtensionAndHarvestL() - no mdeobject. URI: %S", &uri ); |
1245 WRITELOG1( "CHarvesterAO::CheckFileExtensionAndHarvestL() - no mdeobject. URI: %S", &uri ); |
1388 TBuf<KObjectDefStrSize> objDefStr; |
1246 TBuf<KObjectDefStrSize> objDefStr; |
1389 iHarvesterPluginFactory->GetObjectDefL( aHD, objDefStr ); |
1247 iHarvesterPluginFactory->GetObjectDefL( *aHD, objDefStr ); |
1390 |
1248 |
1391 // GetObjectDef can cause context switch, and if unmount happens when this execution is |
1249 // GetObjectDef can cause context switch, and if unmount happens when this execution is |
1392 // interrupted, the ph data can be invalid. Thus, abort whole run, and start over to make sure |
1250 // interrupted, the ph data can be invalid. Thus, abort whole run, and start over to make sure |
1393 // the data is valid. |
1251 // the data is valid. |
1394 if( !aHD ) |
1252 if( iUnmountDetected ) |
1395 { |
1253 { |
1396 return; |
1254 return; |
1397 } |
1255 } |
1398 |
1256 |
1399 if( objDefStr.Length() == 0 ) |
1257 if( objDefStr.Length() == 0 ) |
1494 |
1352 |
1495 if( objectExisted && aHD->EventType() == EHarvesterAdd ) |
1353 if( objectExisted && aHD->EventType() == EHarvesterAdd ) |
1496 { |
1354 { |
1497 iMdESession->RemoveObjectL( aHD->Uri() ); |
1355 iMdESession->RemoveObjectL( aHD->Uri() ); |
1498 } |
1356 } |
1499 |
|
1500 // If context swich occures just right due to RemoveObjectL, check aHD for validity |
|
1501 if( !aHD ) |
|
1502 { |
|
1503 return; |
|
1504 } |
|
1505 |
1357 |
1506 TInt pluginErr = KErrNone; |
1358 TInt pluginErr = KErrNone; |
1507 TRAPD( err, pluginErr = iHarvesterPluginFactory->HarvestL( aHD )); |
1359 TRAPD( err, pluginErr = iHarvesterPluginFactory->HarvestL( aHD )); |
1508 |
|
1509 if ( err != KErrNone ) |
1360 if ( err != KErrNone ) |
1510 { |
1361 { |
1511 WRITELOG1( "CHarvesterAO::CheckFileExtensionAndHarvestL() - plugin error: %d", err ); |
1362 WRITELOG1( "CHarvesterAO::CheckFileExtensionAndHarvestL() - plugin error: %d", err ); |
1512 OstTrace1( TRACE_NORMAL, DUP6_CHARVESTERAO_CHECKFILEEXTENSIONANDHARVESTL, "CHarvesterAO::CheckFileExtensionAndHarvestL - plugin error: %d", err ); |
1363 OstTrace1( TRACE_NORMAL, DUP6_CHARVESTERAO_CHECKFILEEXTENSIONANDHARVESTL, "CHarvesterAO::CheckFileExtensionAndHarvestL - plugin error: %d", err ); |
1513 |
1364 |
1533 return; |
1384 return; |
1534 } |
1385 } |
1535 |
1386 |
1536 WRITELOG1("CHarvesterAO::CheckFileExtensionAndHarvestL() - ends with error %d", pluginErr ); |
1387 WRITELOG1("CHarvesterAO::CheckFileExtensionAndHarvestL() - ends with error %d", pluginErr ); |
1537 OstTrace1( TRACE_NORMAL, DUP8_CHARVESTERAO_CHECKFILEEXTENSIONANDHARVESTL, "CHarvesterAO::CheckFileExtensionAndHarvestL) - ends with error %d", pluginErr ); |
1388 OstTrace1( TRACE_NORMAL, DUP8_CHARVESTERAO_CHECKFILEEXTENSIONANDHARVESTL, "CHarvesterAO::CheckFileExtensionAndHarvestL) - ends with error %d", pluginErr ); |
|
1389 |
|
1390 SetNextRequest( ERequestHarvest ); |
1538 } |
1391 } |
1539 |
1392 |
1540 // --------------------------------------------------------------------------- |
1393 // --------------------------------------------------------------------------- |
1541 // HarvestingCompleted |
1394 // HarvestingCompleted |
1542 // --------------------------------------------------------------------------- |
1395 // --------------------------------------------------------------------------- |
1591 if( locData ) |
1444 if( locData ) |
1592 { |
1445 { |
1593 WRITELOG( "CHarvesterAO::HarvestingCompleted() - Creating location object. " ); |
1446 WRITELOG( "CHarvesterAO::HarvestingCompleted() - Creating location object. " ); |
1594 OstTrace0( TRACE_NORMAL, DUP6_CHARVESTERAO_HARVESTINGCOMPLETED, "CHarvesterAO::HarvestingCompleted - Creating location object." ); |
1447 OstTrace0( TRACE_NORMAL, DUP6_CHARVESTERAO_HARVESTINGCOMPLETED, "CHarvesterAO::HarvestingCompleted - Creating location object." ); |
1595 |
1448 |
1596 TInt loError( KErrNone ); |
1449 RLocationObjectManipulator lo; |
1597 if( !iLocManipulatorConnected ) |
1450 |
1598 { |
1451 const TInt loError = lo.Connect(); |
1599 loError = iLocManipulator.Connect(); |
|
1600 if( loError == KErrNone ) |
|
1601 { |
|
1602 iLocManipulatorConnected = ETrue; |
|
1603 } |
|
1604 } |
|
1605 |
1452 |
1606 if (loError == KErrNone) |
1453 if (loError == KErrNone) |
1607 { |
1454 { |
1608 TInt err = iLocManipulator.CreateLocationObject( *locData, aHD->MdeObject().Id() ); |
1455 TInt err = lo.CreateLocationObject( *locData, aHD->MdeObject().Id() ); |
1609 if( err != KErrNone ) |
1456 if( err != KErrNone ) |
1610 { |
1457 { |
1611 WRITELOG( "CHarvesterAO::HarvestingCompleted() - Location object creation failed!!!" ); |
1458 WRITELOG( "CHarvesterAO::HarvestingCompleted() - Location object creation failed!!!" ); |
1612 OstTrace0( TRACE_NORMAL, DUP7_CHARVESTERAO_HARVESTINGCOMPLETED, "CHarvesterAO::HarvestingCompleted - Location object creation failed!!!" ); |
1459 OstTrace0( TRACE_NORMAL, DUP7_CHARVESTERAO_HARVESTINGCOMPLETED, "CHarvesterAO::HarvestingCompleted - Location object creation failed!!!" ); |
1613 iLocManipulator.Close(); |
1460 |
1614 iLocManipulatorConnected = EFalse; |
|
1615 } |
1461 } |
1616 } |
1462 } |
1617 else |
1463 else |
1618 { |
1464 { |
1619 WRITELOG( "CHarvesterAO::HarvestingCompleted() - LocationObjectManipulator connect failed!!!" ); |
1465 WRITELOG( "CHarvesterAO::HarvestingCompleted() - LocationObjectManipulator connect failed!!!" ); |
1620 OstTrace0( TRACE_NORMAL, DUP8_CHARVESTERAO_HARVESTINGCOMPLETED, "CHarvesterAO::HarvestingCompleted - LocationObjectManipulator connect failed!!" ); |
1466 OstTrace0( TRACE_NORMAL, DUP8_CHARVESTERAO_HARVESTINGCOMPLETED, "CHarvesterAO::HarvestingCompleted - LocationObjectManipulator connect failed!!" ); |
1621 } |
1467 } |
|
1468 |
|
1469 lo.Close(); |
1622 } |
1470 } |
1623 |
1471 |
1624 TRAP_IGNORE( iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ) ); |
1472 TRAP_IGNORE( iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, 1 ) ); |
1625 |
1473 |
1626 delete aHD; |
1474 delete aHD; |
1667 |
1515 |
1668 WRITELOG( "==============================ERROR done =========================" ); |
1516 WRITELOG( "==============================ERROR done =========================" ); |
1669 OstTrace0( TRACE_NORMAL, DUP12_CHARVESTERAO_HARVESTINGCOMPLETED, "==============================ERROR done =========================" ); |
1517 OstTrace0( TRACE_NORMAL, DUP12_CHARVESTERAO_HARVESTINGCOMPLETED, "==============================ERROR done =========================" ); |
1670 |
1518 |
1671 } |
1519 } |
|
1520 |
|
1521 SetNextRequest( ERequestHarvest ); |
1672 } |
1522 } |
1673 |
1523 |
1674 // --------------------------------------------------------------------------- |
1524 // --------------------------------------------------------------------------- |
1675 // HandleSessionOpened |
1525 // HandleSessionOpened |
1676 // --------------------------------------------------------------------------- |
1526 // --------------------------------------------------------------------------- |
1813 TRAP_IGNORE( BootRomScanL() ); |
1663 TRAP_IGNORE( BootRomScanL() ); |
1814 } |
1664 } |
1815 TRAP_IGNORE( BootPartialRestoreScanL() ); |
1665 TRAP_IGNORE( BootPartialRestoreScanL() ); |
1816 #endif |
1666 #endif |
1817 |
1667 |
1818 // Store the internal mass memory media ID to DB, and update data if necessary |
1668 if( !iMassMemoryIdChecked ) |
1819 TInt drive( -1 ); |
1669 { |
1820 TInt internalMassStorageError( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultMassStorage, drive ) ); |
1670 TInt drive( -1 ); |
1821 if( internalMassStorageError == KErrNone ) |
1671 TInt massStorageError( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultMassStorage, drive ) ); |
1822 { |
1672 if( massStorageError == KErrNone ) |
1823 TVolumeInfo internalMassStorageVolumeInfo; |
|
1824 internalMassStorageError = iFs.Volume( internalMassStorageVolumeInfo, drive ); |
|
1825 if( internalMassStorageError == KErrNone ) |
|
1826 { |
1673 { |
1827 const TUint32 massStorageMediaId( internalMassStorageVolumeInfo.iUniqueID ); |
1674 TVolumeInfo massStorageVolumeInfo; |
1828 if( massStorageMediaId != 0 ) |
1675 iFs.Volume( massStorageVolumeInfo, drive ); |
|
1676 const TUint32 massStorageMediaId( massStorageVolumeInfo.iUniqueID ); |
|
1677 massStorageError = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage, drive ); |
|
1678 if( massStorageError == KErrNone ) |
1829 { |
1679 { |
1830 TUint32 mmcMediaId( 0 ); |
1680 iFs.Volume( massStorageVolumeInfo, drive ); |
1831 TInt mmcDrive( -1 ); |
1681 // Update mass storage media id if the mass storage is not memory card |
1832 TInt mmcError( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage, mmcDrive ) ); |
1682 if( massStorageVolumeInfo.iUniqueID != massStorageMediaId && massStorageMediaId != 0 ) |
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 ) |
|
1856 { |
1683 { |
1857 iMdEHarvesterSession->CheckMassStorageMediaId( massStorageMediaId ); |
1684 iMdEHarvesterSession->CheckMassStorageMediaId( massStorageMediaId ); |
1858 } |
1685 } |
1859 } |
1686 } |
1860 } |
1687 } |
1861 } |
1688 } |
1862 } |
1689 } |
1863 else |
1690 else |
1864 { |
1691 { |
1919 OstTrace0( TRACE_NORMAL, CHARVESTERAO_PAUSEHARVESTER, "CHarvesterAO::PauseHarvester" ); |
1746 OstTrace0( TRACE_NORMAL, CHARVESTERAO_PAUSEHARVESTER, "CHarvesterAO::PauseHarvester" ); |
1920 |
1747 |
1921 iHarvesterPluginFactory->PauseHarvester( ETrue ); |
1748 iHarvesterPluginFactory->PauseHarvester( ETrue ); |
1922 iServerPaused = ETrue; |
1749 iServerPaused = ETrue; |
1923 |
1750 |
|
1751 if( !iRamFull && !iDiskFull && !iUnmountDetected ) |
|
1752 { |
|
1753 iManualPauseEnabled = ETrue; |
|
1754 } |
|
1755 |
1924 // Everything is paused |
1756 // Everything is paused |
1925 WRITELOG( "CHarvesterAO::PauseHarvester() - Moving paused state paused" ); |
1757 WRITELOG( "CHarvesterAO::PauseHarvester() - Moving paused state paused" ); |
1926 OstTrace0( TRACE_NORMAL, DUP1_CHARVESTERAO_PAUSEHARVESTER, "CHarvesterAO::PauseHarvester - Moving paused state paused" ); |
1758 OstTrace0( TRACE_NORMAL, DUP1_CHARVESTERAO_PAUSEHARVESTER, "CHarvesterAO::PauseHarvester - Moving paused state paused" ); |
1927 |
1759 |
1928 return KErrNone; |
1760 return KErrNone; |
1934 // |
1766 // |
1935 void CHarvesterAO::ResumeHarvesterL() |
1767 void CHarvesterAO::ResumeHarvesterL() |
1936 { |
1768 { |
1937 WRITELOG( "CHarvesterAO::ResumeHarvesterL()" ); |
1769 WRITELOG( "CHarvesterAO::ResumeHarvesterL()" ); |
1938 OstTrace0( TRACE_NORMAL, CHARVESTERAO_RESUMEHARVESTERL, "CHarvesterAO::ResumeHarvesterL" ); |
1770 OstTrace0( TRACE_NORMAL, CHARVESTERAO_RESUMEHARVESTERL, "CHarvesterAO::ResumeHarvesterL" ); |
1939 |
|
1940 if( iRamFull || iDiskFull || iUnmountHandlingOngoing || iManualPauseEnabled ) |
|
1941 { |
|
1942 return; |
|
1943 } |
|
1944 |
1771 |
1945 iHarvesterPluginFactory->PauseHarvester( EFalse ); |
1772 iHarvesterPluginFactory->PauseHarvester( EFalse ); |
1946 iServerPaused = EFalse; |
1773 iServerPaused = EFalse; |
1947 |
1774 |
1948 if( iNextRequest == ERequestIdle ) |
1775 if( !iManualPauseEnabled && |
|
1776 iNextRequest == ERequestIdle ) |
1949 { |
1777 { |
1950 SetNextRequest( ERequestHarvest ); |
1778 SetNextRequest( ERequestHarvest ); |
1951 } |
1779 } |
|
1780 |
|
1781 iManualPauseEnabled = EFalse; |
1952 } |
1782 } |
1953 |
1783 |
1954 // --------------------------------------------------------------------------- |
1784 // --------------------------------------------------------------------------- |
1955 // RunL |
1785 // RunL |
1956 // --------------------------------------------------------------------------- |
1786 // --------------------------------------------------------------------------- |
1982 |
1812 |
1983 iReadyPHArray.Compress(); |
1813 iReadyPHArray.Compress(); |
1984 iContainerPHArray.Compress(); |
1814 iContainerPHArray.Compress(); |
1985 iPHArray.Compress(); |
1815 iPHArray.Compress(); |
1986 iTempReadyPHArray.Compress(); |
1816 iTempReadyPHArray.Compress(); |
1987 |
|
1988 if( iLocManipulatorConnected ) |
|
1989 { |
|
1990 iLocManipulator.Close(); |
|
1991 iLocManipulatorConnected = EFalse; |
|
1992 } |
|
1993 } |
1817 } |
1994 break; |
1818 break; |
1995 |
1819 |
1996 // data added to harvester queue |
1820 // data added to harvester queue |
1997 case ERequestHarvest: |
1821 case ERequestHarvest: |
1998 { |
1822 { |
1999 WRITELOG( "CHarvesterAO::RunL - ERequestHarvest" ); |
1823 WRITELOG( "CHarvesterAO::RunL - ERequestHarvest" ); |
2000 OstTrace0( TRACE_NORMAL, DUP2_CHARVESTERAO_RUNL, "CHarvesterAO::RunL - ERequestHarvest" ); |
1824 OstTrace0( TRACE_NORMAL, DUP2_CHARVESTERAO_RUNL, "CHarvesterAO::RunL - ERequestHarvest" ); |
2001 |
1825 |
2002 // harvest new items first |
1826 // harvest new items first... |
2003 if ( iQueue->ItemsInQueue() > 0 ) |
1827 if ( iQueue->ItemsInQueue() > 0 ) |
2004 { |
1828 { |
2005 WRITELOG( "CHarvesterAO::RunL - Items in queue - calling ReadItemFromQueueL()" ); |
1829 WRITELOG( "CHarvesterAO::RunL - Items in queue - calling ReadItemFromQueueL()" ); |
2006 ReadItemFromQueueL(); |
1830 ReadItemFromQueueL(); |
2007 SetNextRequest( ERequestHarvest ); |
1831 SetNextRequest( ERequestHarvest ); |
2010 |
1834 |
2011 // no more items to handle from main queue |
1835 // no more items to handle from main queue |
2012 else |
1836 else |
2013 { |
1837 { |
2014 WRITELOG( "CHarvesterAO::RunL - No items in main queue" ); |
1838 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 } |
|
2035 // All registered fast harvested items or placeholders handled at this point |
1839 // All registered fast harvested items or placeholders handled at this point |
2036 // if container files to harvest, handle those next |
1840 // if container files to harvest, handle those next |
2037 else if( iContainerPHArray.Count() > 0 ) |
1841 if( iContainerPHArray.Count() > 0 ) |
2038 { |
1842 { |
2039 WRITELOG( "CHarvesterAO::RunL - Items in iContainterPHArray - requesting ERequestContainerPlaceholder handling" ); |
1843 WRITELOG( "CHarvesterAO::RunL - Items in iContainterPHArray - requesting ERequestContainerPlaceholder handling" ); |
2040 iFastHarvestNeeded = EFalse; |
1844 iFastHarvestNeeded = EFalse; |
2041 iHarvestingPlaceholders = EFalse; |
1845 iHarvestingPlaceholders = EFalse; |
2042 SetPriority( KHarvesterPriorityHarvestingPlugin ); |
1846 SetPriority( KHarvesterPriorityHarvestingPlugin ); |
2063 { |
1867 { |
2064 #ifdef _DEBUG |
1868 #ifdef _DEBUG |
2065 WRITELOG1("CHarvesterAO::RunL - items in ready pharray: %d", arrayCount ); |
1869 WRITELOG1("CHarvesterAO::RunL - items in ready pharray: %d", arrayCount ); |
2066 OstTrace1( TRACE_NORMAL, DUP3_CHARVESTERAO_RUNL, "CHarvesterAO::RunL - items in ready pharray: %d", arrayCount ); |
1870 OstTrace1( TRACE_NORMAL, DUP3_CHARVESTERAO_RUNL, "CHarvesterAO::RunL - items in ready pharray: %d", arrayCount ); |
2067 #endif |
1871 #endif |
2068 TInt endIndex( KReadyPlaceholderQueueSize ); |
1872 TInt endIndex( KPlaceholderQueueSize ); |
2069 if( arrayCount < KReadyPlaceholderQueueSize ) |
1873 if( arrayCount < KPlaceholderQueueSize ) |
2070 { |
1874 { |
2071 endIndex = arrayCount; |
1875 endIndex = arrayCount; |
2072 } |
1876 } |
2073 for( TInt i = 0; i < endIndex; i++ ) |
1877 for( TInt i = 0; i < endIndex; i++ ) |
2074 { |
1878 { |
2106 TInt count = iContainerPHArray.Count() > KContainerPlaceholderQueueSize ? KContainerPlaceholderQueueSize : iContainerPHArray.Count(); |
1910 TInt count = iContainerPHArray.Count() > KContainerPlaceholderQueueSize ? KContainerPlaceholderQueueSize : iContainerPHArray.Count(); |
2107 TInt i = 0; |
1911 TInt i = 0; |
2108 while( i < count ) |
1912 while( i < count ) |
2109 { |
1913 { |
2110 CHarvesterData* hd = iContainerPHArray[0]; |
1914 CHarvesterData* hd = iContainerPHArray[0]; |
2111 if( iPHArray.Append( hd ) != KErrNone ) |
1915 iPHArray.Append( hd ); |
2112 { |
|
2113 delete hd; |
|
2114 hd = NULL; |
|
2115 } |
|
2116 iContainerPHArray.Remove( 0 ); |
1916 iContainerPHArray.Remove( 0 ); |
2117 i++; |
1917 i++; |
2118 } |
1918 } |
2119 TRAPD( err, HandlePlaceholdersL( EFalse ) ); |
1919 TRAPD( err, HandlePlaceholdersL( EFalse ) ); |
2120 |
1920 |
2121 // make sure that when HandlePlaceholdersL leaves unexpectedly, iPHArray is cleared |
1921 // make sure that when HandlePlaceholdersL leaves, iPHArray is cleared |
2122 if ( err != KErrNone ) |
1922 if ( err != KErrNone ) |
2123 { |
1923 { |
2124 if( err != KErrDiskFull ) |
1924 iContainerPHArray.ResetAndDestroy(); |
2125 { |
1925 iPHArray.ResetAndDestroy(); |
2126 iContainerPHArray.ResetAndDestroy(); |
1926 iTempReadyPHArray.ResetAndDestroy(); |
2127 iPHArray.ResetAndDestroy(); |
1927 User::Leave( err ); |
2128 iTempReadyPHArray.ResetAndDestroy(); |
1928 } |
2129 } |
|
2130 User::Leave( err ); |
|
2131 } |
|
2132 SetNextRequest( ERequestHarvest ); |
1929 SetNextRequest( ERequestHarvest ); |
2133 } |
1930 } |
2134 break; |
1931 break; |
2135 |
1932 |
2136 // pause request |
1933 // pause request |
2137 case ERequestPause: |
1934 case ERequestPause: |
2138 { |
1935 { |
2139 WRITELOG( "CHarvesterAO::RunL - ERequestPause" ); |
1936 WRITELOG( "CHarvesterAO::RunL - ERequestPause" ); |
2140 OstTrace0( TRACE_NORMAL, DUP6_CHARVESTERAO_RUNL, "CHarvesterAO::RunL - ERequestPause" ); |
1937 OstTrace0( TRACE_NORMAL, DUP6_CHARVESTERAO_RUNL, "CHarvesterAO::RunL - ERequestPause" ); |
2141 User::LeaveIfError( PauseHarvester() ); |
1938 User::LeaveIfError( PauseHarvester() ); |
2142 iManualPauseEnabled = ETrue; |
|
2143 iHarvesterEventManager->SendEventL( EHEObserverTypeOverall, EHEStatePaused ); |
1939 iHarvesterEventManager->SendEventL( EHEObserverTypeOverall, EHEStatePaused ); |
2144 if( iHarvesterStatusObserver ) |
1940 if( iHarvesterStatusObserver ) |
2145 { |
1941 { |
2146 iHarvesterStatusObserver->PauseReady( KErrNone ); |
1942 iHarvesterStatusObserver->PauseReady( KErrNone ); |
2147 } |
1943 } |
2151 // resume request |
1947 // resume request |
2152 case ERequestResume: |
1948 case ERequestResume: |
2153 { |
1949 { |
2154 WRITELOG( "CHarvesterAO::RunL - ERequestResume" ); |
1950 WRITELOG( "CHarvesterAO::RunL - ERequestResume" ); |
2155 OstTrace0( TRACE_NORMAL, DUP7_CHARVESTERAO_RUNL, "CHarvesterAO::RunL - ERequestResume" ); |
1951 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 } |
|
2169 ResumeHarvesterL(); |
1952 ResumeHarvesterL(); |
2170 iHarvesterEventManager->SendEventL( EHEObserverTypeOverall, EHEStateResumed ); |
1953 iHarvesterEventManager->SendEventL( EHEObserverTypeOverall, EHEStateResumed ); |
2171 if( iHarvesterStatusObserver ) |
1954 if( iHarvesterStatusObserver ) |
2172 { |
1955 { |
2173 iHarvesterStatusObserver->ResumeReady( KErrNone ); |
1956 iHarvesterStatusObserver->ResumeReady( KErrNone ); |
2200 // RunError |
1983 // RunError |
2201 // --------------------------------------------------------------------------- |
1984 // --------------------------------------------------------------------------- |
2202 // |
1985 // |
2203 TInt CHarvesterAO::RunError( TInt aError ) |
1986 TInt CHarvesterAO::RunError( TInt aError ) |
2204 { |
1987 { |
2205 WRITELOG1( "CHarvesterAO::RunError, error: %d", aError ); |
1988 WRITELOG( "CHarvesterAO::RunError" ); |
2206 OstTrace0( TRACE_NORMAL, CHARVESTERAO_RUNERROR, "CHarvesterAO::RunError" ); |
1989 OstTrace0( TRACE_NORMAL, CHARVESTERAO_RUNERROR, "CHarvesterAO::RunError" ); |
2207 |
1990 |
2208 switch( iNextRequest ) |
1991 switch( iNextRequest ) |
2209 { |
1992 { |
2210 case ERequestHarvest: |
1993 case ERequestHarvest: |
2211 { |
1994 { |
2212 WRITELOG( "CHarvesterAO::RunError - state ERequestHarvest" ); |
1995 WRITELOG( "CHarvesterAO::RunError - state ERequestHarvest" ); |
2213 OstTrace0( TRACE_NORMAL, DUP1_CHARVESTERAO_RUNERROR, "CHarvesterAO::RunError - state ERequestHarvest" ); |
1996 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 } |
|
2229 } |
1997 } |
2230 break; |
1998 break; |
2231 |
1999 |
2232 case ERequestPause: |
2000 case ERequestPause: |
2233 { |
2001 { |
2340 WRITELOG("CHarvesterAO::HandleDiskSpaceNotificationL()"); |
2108 WRITELOG("CHarvesterAO::HandleDiskSpaceNotificationL()"); |
2341 OstTrace0( TRACE_NORMAL, CHARVESTERAO_HANDLEDISKSPACENOTIFICATIONL, "CHarvesterAO::HandleDiskSpaceNotificationL" ); |
2109 OstTrace0( TRACE_NORMAL, CHARVESTERAO_HANDLEDISKSPACENOTIFICATIONL, "CHarvesterAO::HandleDiskSpaceNotificationL" ); |
2342 |
2110 |
2343 if( MMdSHarvesterDiskSpaceObserver::EMore == aDiskSpaceDirection ) |
2111 if( MMdSHarvesterDiskSpaceObserver::EMore == aDiskSpaceDirection ) |
2344 { |
2112 { |
|
2113 WRITELOG("CHarvesterAO::HandleDiskSpaceNotificationL() - disk full"); |
|
2114 OstTrace0( TRACE_NORMAL, DUP1_CHARVESTERAO_HANDLEDISKSPACENOTIFICATIONL, "CHarvesterAO::HandleDiskSpaceNotificationL - disk full" ); |
|
2115 iDiskFull = EFalse; |
|
2116 } |
|
2117 else |
|
2118 { |
2345 WRITELOG("CHarvesterAO::HandleDiskSpaceNotificationL() - disk space available"); |
2119 WRITELOG("CHarvesterAO::HandleDiskSpaceNotificationL() - disk space available"); |
2346 OstTrace0( TRACE_NORMAL, DUP2_CHARVESTERAO_HANDLEDISKSPACENOTIFICATIONL, "CHarvesterAO::HandleDiskSpaceNotificationL - disk space available" ); |
2120 OstTrace0( TRACE_NORMAL, DUP2_CHARVESTERAO_HANDLEDISKSPACENOTIFICATIONL, "CHarvesterAO::HandleDiskSpaceNotificationL - disk space available" ); |
2347 iDiskFull = EFalse; |
|
2348 } |
|
2349 else |
|
2350 { |
|
2351 WRITELOG("CHarvesterAO::HandleDiskSpaceNotificationL() - disk full"); |
|
2352 OstTrace0( TRACE_NORMAL, DUP1_CHARVESTERAO_HANDLEDISKSPACENOTIFICATIONL, "CHarvesterAO::HandleDiskSpaceNotificationL - disk full" ); |
|
2353 iDiskFull = ETrue; |
2121 iDiskFull = ETrue; |
2354 if( iServerPaused ) |
2122 if( iServerPaused ) |
2355 { |
2123 { |
2356 return; |
2124 return; |
2357 } |
2125 } |
3185 const RPointerArray<HBufC>& aIgnorePaths, |
2948 const RPointerArray<HBufC>& aIgnorePaths, |
3186 TBool aCheckDrive ) |
2949 TBool aCheckDrive ) |
3187 { |
2950 { |
3188 WRITELOG("CHarvesterAO::BootScanL() - begin"); |
2951 WRITELOG("CHarvesterAO::BootScanL() - begin"); |
3189 OstTrace0( TRACE_NORMAL, CHARVESTERAO_BOOTSCANL, "CHarvesterAO::BootScanL - begin" ); |
2952 OstTrace0( TRACE_NORMAL, CHARVESTERAO_BOOTSCANL, "CHarvesterAO::BootScanL - begin" ); |
|
2953 |
|
2954 TInt drive( -1 ); |
|
2955 TInt massStorageError( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultMassStorage, drive ) ); |
|
2956 if( massStorageError == KErrNone ) |
|
2957 { |
|
2958 TVolumeInfo massStorageVolumeInfo; |
|
2959 iFs.Volume( massStorageVolumeInfo, drive ); |
|
2960 const TUint32 massStorageMediaId( massStorageVolumeInfo.iUniqueID ); |
|
2961 massStorageError = DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage, drive ); |
|
2962 if( massStorageError == KErrNone ) |
|
2963 { |
|
2964 iFs.Volume( massStorageVolumeInfo, drive ); |
|
2965 // Update mass storage media id if the mass storage is not memory card |
|
2966 if( massStorageVolumeInfo.iUniqueID != massStorageMediaId && massStorageMediaId != 0 ) |
|
2967 { |
|
2968 iMdEHarvesterSession->CheckMassStorageMediaId( massStorageMediaId ); |
|
2969 } |
|
2970 } |
|
2971 } |
3190 |
2972 |
3191 TVolumeInfo volumeInfo; |
2973 TVolumeInfo volumeInfo; |
3192 iFs.Volume( volumeInfo, EDriveC ); |
2974 iFs.Volume( volumeInfo, EDriveC ); |
3193 |
2975 |
3194 iMdEHarvesterSession->SetFilesToNotPresent( volumeInfo.iUniqueID, ETrue ); |
2976 iMdEHarvesterSession->SetFilesToNotPresent( volumeInfo.iUniqueID, ETrue ); |
3266 if( !IsDescInArray( path, aIgnorePaths ) ) |
3048 if( !IsDescInArray( path, aIgnorePaths ) ) |
3267 { |
3049 { |
3268 WRITELOG("CHarvesterAO::BootScanL() - scanFolders.AppendL"); |
3050 WRITELOG("CHarvesterAO::BootScanL() - scanFolders.AppendL"); |
3269 OstTrace0( TRACE_NORMAL, DUP2_CHARVESTERAO_BOOTSCANL, "CHarvesterAO::BootScanL - scanFolders.AppendL" ); |
3051 OstTrace0( TRACE_NORMAL, DUP2_CHARVESTERAO_BOOTSCANL, "CHarvesterAO::BootScanL - scanFolders.AppendL" ); |
3270 TScanItem* item = new (ELeave) TScanItem(); |
3052 TScanItem* item = new (ELeave) TScanItem(); |
3271 CleanupStack::PushL( item ); |
|
3272 item->iPath = name->AllocL(); |
3053 item->iPath = name->AllocL(); |
3273 item->iPreinstalled = MdeConstants::MediaObject::ENotPreinstalled; |
3054 item->iPreinstalled = MdeConstants::MediaObject::ENotPreinstalled; |
3274 CleanupStack::Pop( item ); |
3055 aScanItems.AppendL( item ); |
3275 aScanItems.AppendL( item ); // ownership is transferred |
|
3276 } |
3056 } |
3277 } |
3057 } |
3278 else |
3058 else |
3279 { |
3059 { |
3280 TPtrC filename = *name; |
3060 TPtrC filename = *name; |
3330 hd->SetObjectType( EPlaceholder ); |
3110 hd->SetObjectType( EPlaceholder ); |
3331 hd->SetOrigin( MdeConstants::Object::EOther ); |
3111 hd->SetOrigin( MdeConstants::Object::EOther ); |
3332 hd->SetClientData( phData ); |
3112 hd->SetClientData( phData ); |
3333 |
3113 |
3334 CleanupStack::Pop( phData ); |
3114 CleanupStack::Pop( phData ); |
3335 |
3115 hdArray.Append( hd ); |
3336 if(hdArray.Append( hd ) != KErrNone ) |
|
3337 { |
|
3338 delete hd; |
|
3339 hd = NULL; |
|
3340 } |
|
3341 } |
3116 } |
3342 CleanupStack::PopAndDestroy( &results ); |
3117 CleanupStack::PopAndDestroy( &results ); |
3343 CleanupStack::PopAndDestroy( &fileInfos ); |
3118 CleanupStack::PopAndDestroy( &fileInfos ); |
3344 CleanupStack::PopAndDestroy( &uris ); |
3119 CleanupStack::PopAndDestroy( &uris ); |
3345 } |
3120 } |
3360 iQueue->MonitorEvent( hdArray ); |
3135 iQueue->MonitorEvent( hdArray ); |
3361 CleanupStack::PopAndDestroy( &hdArray ); |
3136 CleanupStack::PopAndDestroy( &hdArray ); |
3362 |
3137 |
3363 iMdEHarvesterSession->RemoveFilesNotPresent( volumeInfo.iUniqueID, ETrue ); |
3138 iMdEHarvesterSession->RemoveFilesNotPresent( volumeInfo.iUniqueID, ETrue ); |
3364 |
3139 |
|
3140 iMassMemoryIdChecked = ETrue; |
|
3141 |
3365 WRITELOG("CHarvesterAO::BootScanL() - end"); |
3142 WRITELOG("CHarvesterAO::BootScanL() - end"); |
3366 OstTrace0( TRACE_NORMAL, DUP5_CHARVESTERAO_BOOTSCANL, "CHarvesterAO::BootScanL - end" ); |
3143 OstTrace0( TRACE_NORMAL, DUP5_CHARVESTERAO_BOOTSCANL, "CHarvesterAO::BootScanL - end" ); |
3367 } |
3144 } |
3368 |
3145 |
3369 void CHarvesterAO::SetHarvesterStatusObserver( MHarvesterStatusObserver* aObserver ) |
3146 void CHarvesterAO::SetHarvesterStatusObserver( MHarvesterStatusObserver* aObserver ) |
3452 |
3229 |
3453 // cache monitored events |
3230 // cache monitored events |
3454 PauseMonitoring(); |
3231 PauseMonitoring(); |
3455 PauseHarvester(); |
3232 PauseHarvester(); |
3456 |
3233 |
3457 iReadyPHArray.Compress(); |
3234 iPHArray.Compress(); |
3458 iContainerPHArray.Compress(); |
3235 iReadyPHArray.Compress(); |
3459 iPHArray.Compress(); |
3236 iContainerPHArray.Compress(); |
3460 iTempReadyPHArray.Compress(); |
|
3461 } |
3237 } |
3462 |
3238 |
3463 void CHarvesterAO::MemoryGood() |
3239 void CHarvesterAO::MemoryGood() |
3464 { |
3240 { |
3465 WRITELOG("CHarvesterAO::MemoryGood()"); |
3241 WRITELOG("CHarvesterAO::MemoryGood()"); |
3466 OstTrace0( TRACE_NORMAL, CHARVESTERAO_MEMORYGOOD, "CHarvesterAO::MemoryGood" ); |
3242 OstTrace0( TRACE_NORMAL, CHARVESTERAO_MEMORYGOOD, "CHarvesterAO::MemoryGood" ); |
3467 |
3243 |
3468 iRamFull = EFalse; |
3244 iRamFull = EFalse; |
3469 |
3245 |
3470 if( iServerPaused ) |
3246 if( !iDiskFull && !iManualPauseEnabled && iServerPaused ) |
3471 { |
3247 { |
3472 // resume monitoring |
3248 // resume monitoring |
3473 ResumeMonitoring(); |
3249 ResumeMonitoring(); |
3474 |
3250 |
3475 TRAP_IGNORE( ResumeHarvesterL() ); |
3251 TRAP_IGNORE( ResumeHarvesterL() ); |