123 |
123 |
124 // --------------------------------------------------------------------------- |
124 // --------------------------------------------------------------------------- |
125 // CHarvesterAO |
125 // CHarvesterAO |
126 // --------------------------------------------------------------------------- |
126 // --------------------------------------------------------------------------- |
127 // |
127 // |
128 CHarvesterAO::CHarvesterAO() : CActive( KHarvesterCustomImportantPriority ) |
128 CHarvesterAO::CHarvesterAO() : CActive( KHarvesterPriorityHarvestingPlugin ) |
129 { |
129 { |
130 WRITELOG( "CHarvesterAO::CHarvesterAO() - begin" ); |
130 WRITELOG( "CHarvesterAO::CHarvesterAO() - begin" ); |
131 |
131 |
132 iServerPaused = ETrue; |
132 iServerPaused = ETrue; |
133 iNextRequest = ERequestIdle; |
133 iNextRequest = ERequestIdle; |
134 |
134 |
135 iContextEngineInitialized = EFalse; |
135 iContextEngineInitialized = EFalse; |
136 iMdeSessionInitialized = EFalse; |
136 iMdeSessionInitialized = EFalse; |
|
137 |
|
138 iRamFull = EFalse; |
|
139 iDiskFull = EFalse; |
|
140 iManualPauseEnabled = EFalse; |
|
141 iFastHarvestNeeded = EFalse; |
|
142 iHarvestingPlaceholders = EFalse; |
137 } |
143 } |
138 |
144 |
139 // --------------------------------------------------------------------------- |
145 // --------------------------------------------------------------------------- |
140 // ~CHarvesterAO |
146 // ~CHarvesterAO |
141 // --------------------------------------------------------------------------- |
147 // --------------------------------------------------------------------------- |
229 |
233 |
230 User::LeaveIfError( iFs.Connect() ); |
234 User::LeaveIfError( iFs.Connect() ); |
231 |
235 |
232 // Setting up MdE Session |
236 // Setting up MdE Session |
233 iMdESession = CMdESession::NewL( *this ); |
237 iMdESession = CMdESession::NewL( *this ); |
234 |
|
235 RProcess process; |
|
236 process.SetPriority( EPriorityBackground ); |
|
237 process.Close(); |
|
238 |
238 |
239 // Setting up context Engine (initialization is ready when ContextInitializationStatus -callback is called) |
239 // Setting up context Engine (initialization is ready when ContextInitializationStatus -callback is called) |
240 iCtxEngine = CContextEngine::GetInstanceL( this ); // Create the context engine |
240 iCtxEngine = CContextEngine::GetInstanceL( this ); // Create the context engine |
241 |
241 |
242 iBackupSubscriber = CBackupSubscriber::NewL( *this ); |
242 iBackupSubscriber = CBackupSubscriber::NewL( *this ); |
328 void CHarvesterAO::DeleteMonitorPlugins() |
328 void CHarvesterAO::DeleteMonitorPlugins() |
329 { |
329 { |
330 WRITELOG( "CHarvesterAO::DeleteMonitorPlugins()" ); |
330 WRITELOG( "CHarvesterAO::DeleteMonitorPlugins()" ); |
331 |
331 |
332 iMonitorPluginArray.ResetAndDestroy(); |
332 iMonitorPluginArray.ResetAndDestroy(); |
|
333 iMonitorPluginArray.Close(); |
|
334 WRITELOG( "CHarvesterAO::DeleteMonitorPlugins() - end" ); |
333 } |
335 } |
334 |
336 |
335 // --------------------------------------------------------------------------- |
337 // --------------------------------------------------------------------------- |
336 // StartMonitoring |
338 // StartMonitoring |
337 // --------------------------------------------------------------------------- |
339 // --------------------------------------------------------------------------- |
403 // HandleUnmount |
405 // HandleUnmount |
404 // --------------------------------------------------------------------------- |
406 // --------------------------------------------------------------------------- |
405 // |
407 // |
406 void CHarvesterAO::HandleUnmount( TUint32 aMediaId ) |
408 void CHarvesterAO::HandleUnmount( TUint32 aMediaId ) |
407 { |
409 { |
408 WRITELOG1( "CHarvesterAO::HandleUnmount(%d)", aMediaId ); |
410 WRITELOG1( "CHarvesterAO::HandleUnmount(%d)", aMediaId ); |
|
411 |
|
412 if( !iServerPaused ) |
|
413 { |
|
414 // Stop harvesting for unmount |
|
415 PauseMonitoring(); |
|
416 PauseHarvester(); |
|
417 } |
409 |
418 |
410 TUint32 mediaId( 0 ); |
419 TUint32 mediaId( 0 ); |
411 TUint removed( 0 ); |
420 TUint removed( 0 ); |
412 CHarvesterData* hd = NULL; |
421 CHarvesterData* hd = NULL; |
413 |
422 |
419 TInt arrayCount( iReadyPHArray.Count() ); |
428 TInt arrayCount( iReadyPHArray.Count() ); |
420 if( arrayCount > 0 ) |
429 if( arrayCount > 0 ) |
421 { |
430 { |
422 for( TInt i=arrayCount-1; i>= 0; i--) |
431 for( TInt i=arrayCount-1; i>= 0; i--) |
423 { |
432 { |
424 hd = iPHArray[i]; |
433 hd = iReadyPHArray[i]; |
425 err = iMediaIdUtil->GetMediaId( hd->Uri(), mediaId ); |
434 err = iMediaIdUtil->GetMediaId( hd->Uri(), mediaId ); |
426 |
435 |
427 if( err == KErrNone && mediaId == aMediaId ) |
436 if( err == KErrNone && mediaId == aMediaId ) |
428 { |
437 { |
429 WRITELOG1( "CHarvesterAO::HandleUnmount() remove iReadyPHArray %d", i); |
438 WRITELOG1( "CHarvesterAO::HandleUnmount() remove iReadyPHArray %d", i); |
431 hd = NULL; |
440 hd = NULL; |
432 iReadyPHArray.Remove( i ); |
441 iReadyPHArray.Remove( i ); |
433 removed++; |
442 removed++; |
434 arrayCount--; |
443 arrayCount--; |
435 } |
444 } |
|
445 } |
|
446 if( iReadyPHArray.Count() == 0 ) |
|
447 { |
|
448 iReadyPHArray.Compress(); |
436 } |
449 } |
437 WRITELOG1( "CHarvesterAO::HandleUnmount() DecreaseItemCountL iReadyPHArray %d", removed); |
450 WRITELOG1( "CHarvesterAO::HandleUnmount() DecreaseItemCountL iReadyPHArray %d", removed); |
438 TRAP_IGNORE( iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypePlaceholder, removed) ); |
451 TRAP_IGNORE( iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypePlaceholder, removed) ); |
439 } |
452 } |
440 |
453 |
459 iPHArray.Remove( i ); |
472 iPHArray.Remove( i ); |
460 removed++; |
473 removed++; |
461 arrayCount--; |
474 arrayCount--; |
462 } |
475 } |
463 } |
476 } |
|
477 if( iPHArray.Count() == 0 ) |
|
478 { |
|
479 iPHArray.Compress(); |
|
480 } |
464 WRITELOG1( "CHarvesterAO::HandleUnmount() DecreaseItemCountL iPHArray %d", removed); |
481 WRITELOG1( "CHarvesterAO::HandleUnmount() DecreaseItemCountL iPHArray %d", removed); |
465 TRAP_IGNORE( iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypePlaceholder, removed) ); |
482 TRAP_IGNORE( iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypePlaceholder, removed) ); |
466 } |
483 } |
467 |
484 |
468 removed = 0; |
485 removed = 0; |
486 iContainerPHArray.Remove( i ); |
503 iContainerPHArray.Remove( i ); |
487 removed++; |
504 removed++; |
488 arrayCount--; |
505 arrayCount--; |
489 } |
506 } |
490 } |
507 } |
|
508 if( iContainerPHArray.Count() == 0 ) |
|
509 { |
|
510 iContainerPHArray.Compress(); |
|
511 } |
491 WRITELOG1( "CHarvesterAO::HandleUnmount() DecreaseItemCountL iContainerPHArray %d", removed); |
512 WRITELOG1( "CHarvesterAO::HandleUnmount() DecreaseItemCountL iContainerPHArray %d", removed); |
492 TRAP_IGNORE( iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypePlaceholder, removed) ); |
513 TRAP_IGNORE( iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypePlaceholder, removed) ); |
493 } |
514 } |
494 |
515 |
495 removed = 0; |
516 removed = 0; |
511 |
532 |
512 RPointerArray<CHarvesterPluginInfo>& hpiArray = iHarvesterPluginFactory->GetPluginInfos(); |
533 RPointerArray<CHarvesterPluginInfo>& hpiArray = iHarvesterPluginFactory->GetPluginInfos(); |
513 const TInt hpiArrayCount( hpiArray.Count() ); |
534 const TInt hpiArrayCount( hpiArray.Count() ); |
514 if( hpiArrayCount > 0 ) |
535 if( hpiArrayCount > 0 ) |
515 { |
536 { |
516 RArray<TItemId> placeholders; |
|
517 |
|
518 TUint32 mediaId( 0 ); |
537 TUint32 mediaId( 0 ); |
519 TInt err( KErrNone ); |
538 TInt err( KErrNone ); |
520 |
539 |
521 for( TInt i = hpiArrayCount; --i >= 0; ) |
540 for( TInt i = hpiArrayCount; --i >= 0; ) |
522 { |
541 { |
526 CHarvesterData* hd = hpi->iQueue[j]; |
545 CHarvesterData* hd = hpi->iQueue[j]; |
527 CMdEObject& mdeobj = hd->MdeObject(); |
546 CMdEObject& mdeobj = hd->MdeObject(); |
528 |
547 |
529 err = iMediaIdUtil->GetMediaId( mdeobj.Uri(), mediaId ); |
548 err = iMediaIdUtil->GetMediaId( mdeobj.Uri(), mediaId ); |
530 |
549 |
531 if( mdeobj.Placeholder() && ( aMediaId == mediaId || err != KErrNone )) |
550 if( aMediaId == mediaId || err != KErrNone ) |
532 { |
551 { |
|
552 hpi->iQueue.Remove(j); |
533 removed++; |
553 removed++; |
534 |
554 |
535 TItemId id = mdeobj.Id(); |
|
536 placeholders.Append( id ); |
|
537 TRAP_IGNORE( iMdESession->CancelObjectL( mdeobj ) ); |
555 TRAP_IGNORE( iMdESession->CancelObjectL( mdeobj ) ); |
538 |
556 |
539 delete hd; |
557 delete hd; |
540 hd = NULL; |
558 hd = NULL; |
541 hpi->iQueue.Remove(j); |
|
542 |
|
543 if( hpi->iQueue.Count() == 0 ) |
|
544 { |
|
545 hpi->iQueue.Compress(); |
|
546 } |
|
547 } |
559 } |
548 } |
560 } |
|
561 |
|
562 if( hpi->iQueue.Count() == 0 ) |
|
563 { |
|
564 hpi->iQueue.Compress(); |
|
565 } |
549 } |
566 } |
550 |
567 |
551 if( removed ) |
568 if( removed ) |
552 { |
569 { |
553 WRITELOG1( "CHarvesterAO::HandleUnmount() remove from plugins = %d", removed); |
570 WRITELOG1( "CHarvesterAO::HandleUnmount() remove from plugins = %d", removed); |
554 TRAP_IGNORE( iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypePlaceholder, removed ) ); |
571 TRAP_IGNORE( iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypePlaceholder, removed ) ); |
555 TRAP_IGNORE( iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, removed ) ); |
572 TRAP_IGNORE( iHarvesterEventManager->DecreaseItemCountL( EHEObserverTypeMMC, removed ) ); |
556 } |
573 } |
557 |
|
558 RArray<TItemId> results; |
|
559 TRAP_IGNORE( iMdESession->RemoveObjectsL( placeholders, results, NULL ) ); |
|
560 results.Close(); |
|
561 placeholders.Close(); |
|
562 } |
574 } |
|
575 |
|
576 // resume harvesting from last state |
|
577 if( !iRamFull && !iDiskFull ) |
|
578 { |
|
579 // resume monitoring |
|
580 ResumeMonitoring(); |
|
581 TRAP_IGNORE( ResumeHarvesterL() ); |
|
582 } |
563 } |
583 } |
564 |
584 |
565 // --------------------------------------------------------------------------- |
585 // --------------------------------------------------------------------------- |
566 // StartComposersL |
586 // StartComposersL |
567 // --------------------------------------------------------------------------- |
587 // --------------------------------------------------------------------------- |
620 void CHarvesterAO::DeleteComposers() |
640 void CHarvesterAO::DeleteComposers() |
621 { |
641 { |
622 WRITELOG( "CHarvesterAO::DeleteComposers()" ); |
642 WRITELOG( "CHarvesterAO::DeleteComposers()" ); |
623 |
643 |
624 iComposerPluginArray.ResetAndDestroy(); |
644 iComposerPluginArray.ResetAndDestroy(); |
|
645 iComposerPluginArray.Close(); |
625 |
646 |
626 WRITELOG( "CHarvesterAO::DeleteComposers() - end" ); |
647 WRITELOG( "CHarvesterAO::DeleteComposers() - end" ); |
627 } |
648 } |
628 |
649 |
629 // --------------------------------------------------------------------------- |
650 // --------------------------------------------------------------------------- |
657 |
678 |
658 CHarvesterData* hd = iQueue->GetNextItem(); |
679 CHarvesterData* hd = iQueue->GetNextItem(); |
659 |
680 |
660 if ( hd->ObjectType() == EPlaceholder ) |
681 if ( hd->ObjectType() == EPlaceholder ) |
661 { |
682 { |
|
683 iHarvestingPlaceholders = ETrue; |
|
684 if( !iFastHarvestNeeded ) |
|
685 { |
|
686 SetPriority( KHarvesterCustomImportantPriority ); |
|
687 } |
662 while( hd != NULL && |
688 while( hd != NULL && |
663 iPHArray.Count() < KPlaceholderQueueSize && |
689 iPHArray.Count() < KPlaceholderQueueSize && |
664 hd->ObjectType() == EPlaceholder ) |
690 hd->ObjectType() == EPlaceholder ) |
665 { |
691 { |
666 iPHArray.Append( hd ); |
692 iPHArray.Append( hd ); |
|
693 if( hd->Origin() == MdeConstants::Object::ECamera || |
|
694 hd->ObjectType() == EFastHarvest ) |
|
695 { |
|
696 if( !iFastHarvestNeeded ) |
|
697 { |
|
698 iFastHarvestNeeded = ETrue; |
|
699 // Fast harvest event must be handled even if MMC handling would be ongoing |
|
700 SetPriority( KHarvesterPriorityMonitorPlugin ); |
|
701 } |
|
702 break; |
|
703 } |
|
704 else if( iFastHarvestNeeded ) |
|
705 { |
|
706 iFastHarvestNeeded = EFalse; |
|
707 SetPriority( KHarvesterCustomImportantPriority ); |
|
708 } |
667 hd = iQueue->GetNextItem(); |
709 hd = iQueue->GetNextItem(); |
668 } |
710 } |
|
711 |
|
712 if( iFastHarvestNeeded && iPHArray.Count() > 0 ) |
|
713 { |
|
714 TRAPD( err, HandlePlaceholdersL( ETrue ) ); |
|
715 |
|
716 // make sure that when HandlePlaceholdersL leaves, iPHArray is cleared |
|
717 if ( err != KErrNone ) |
|
718 { |
|
719 iPHArray.ResetAndDestroy(); |
|
720 User::Leave( err ); |
|
721 } |
|
722 |
|
723 TInt count( iReadyPHArray.Count() ); |
|
724 for( TInt i = 0; i < count; i++ ) |
|
725 { |
|
726 CheckFileExtensionAndHarvestL( iReadyPHArray[i] ); |
|
727 iReadyPHArray.Remove( i ); |
|
728 // correct the index so harvesting order remains ok |
|
729 i--; |
|
730 count--; |
|
731 } |
|
732 return; |
|
733 } |
669 |
734 |
670 if( hd ) |
735 if( hd ) |
671 { |
736 { |
672 if( hd->ObjectType() == EPlaceholder ) |
737 if( hd->ObjectType() == EPlaceholder ) |
673 { |
738 { |
1214 if ( errorTrap != KErrNone ) |
1284 if ( errorTrap != KErrNone ) |
1215 { |
1285 { |
1216 WRITELOG( "CHarvesterAO::HandleSessionOpened() - ObjectHandler creation failed" ); |
1286 WRITELOG( "CHarvesterAO::HandleSessionOpened() - ObjectHandler creation failed" ); |
1217 } |
1287 } |
1218 |
1288 |
1219 TRAP( errorTrap, PreallocateNamespaceL( aSession.GetDefaultNamespaceDefL() ) ); |
|
1220 if ( errorTrap != KErrNone ) |
|
1221 { |
|
1222 WRITELOG( "CHarvesterAO::HandleSessionOpened() - error loading default schema" ); |
|
1223 } |
|
1224 |
|
1225 // Setting up monitor plugins |
1289 // Setting up monitor plugins |
1226 TRAP( errorTrap, LoadMonitorPluginsL() ); |
1290 TRAP( errorTrap, LoadMonitorPluginsL() ); |
1227 if ( errorTrap != KErrNone ) |
1291 if ( errorTrap != KErrNone ) |
1228 { |
1292 { |
1229 WRITELOG( "CHarvesterAO::HandleSessionOpened() - error loading monitor plugins" ); |
1293 WRITELOG( "CHarvesterAO::HandleSessionOpened() - error loading monitor plugins" ); |
1230 } |
1294 } |
1231 |
1295 |
|
1296 // To check if the default namespace structure is in order |
|
1297 TRAP( errorTrap, PreallocateNamespaceL( aSession.GetDefaultNamespaceDefL() ) ); |
|
1298 if ( errorTrap != KErrNone ) |
|
1299 { |
|
1300 WRITELOG( "CHarvesterAO::HandleSessionOpened() - error loading default schema" ); |
|
1301 } |
|
1302 |
1232 TRAP( errorTrap, StartComposersL() ); |
1303 TRAP( errorTrap, StartComposersL() ); |
1233 if ( errorTrap != KErrNone ) |
1304 if ( errorTrap != KErrNone ) |
1234 { |
1305 { |
1235 WRITELOG( "CHarvesterAO::HandleSessionOpened() - couldn't start composer plugins" ); |
1306 WRITELOG( "CHarvesterAO::HandleSessionOpened() - couldn't start composer plugins" ); |
1236 } |
1307 } |
1248 iCtxEngine->SetMdeSession( iMdESession ); |
1319 iCtxEngine->SetMdeSession( iMdESession ); |
1249 } |
1320 } |
1250 |
1321 |
1251 // Starting monitor plugins |
1322 // Starting monitor plugins |
1252 StartMonitoring(); |
1323 StartMonitoring(); |
|
1324 |
|
1325 TRAP( errorTrap, iDiskFullNotifier = CMdSHarvesterDiskspaceObserverAO::NewL( *this, KDiskFullThreshold, KMdsSqlDbDefaultName ) ); |
|
1326 if ( errorTrap != KErrNone ) |
|
1327 { |
|
1328 WRITELOG( "CHarvesterAO::HandleSessionOpened() - couldn't start diskspace observer" ); |
|
1329 } |
1253 |
1330 |
1254 TRAP( errorTrap, iOnDemandAO = COnDemandAO::NewL( *iMdESession, *iQueue, |
1331 TRAP( errorTrap, iOnDemandAO = COnDemandAO::NewL( *iMdESession, *iQueue, |
1255 *iHarvesterPluginFactory, &iReadyPHArray ) ); |
1332 *iHarvesterPluginFactory, &iReadyPHArray ) ); |
1256 if ( errorTrap == KErrNone ) |
1333 if ( errorTrap == KErrNone ) |
1257 { |
1334 { |
1372 // |
1449 // |
1373 TInt CHarvesterAO::PauseHarvester() |
1450 TInt CHarvesterAO::PauseHarvester() |
1374 { |
1451 { |
1375 WRITELOG( "CHarvesterAO::PauseHarvester()" ); |
1452 WRITELOG( "CHarvesterAO::PauseHarvester()" ); |
1376 |
1453 |
|
1454 Cancel(); |
|
1455 |
|
1456 iHarvesterPluginFactory->PauseHarvester( ETrue ); |
1377 iServerPaused = ETrue; |
1457 iServerPaused = ETrue; |
|
1458 |
|
1459 if( !iRamFull && !iDiskFull ) |
|
1460 { |
|
1461 iManualPauseEnabled = ETrue; |
|
1462 } |
1378 |
1463 |
1379 // Everything is paused |
1464 // Everything is paused |
1380 WRITELOG( "CHarvesterAO::PauseHarvester() - Moving paused state paused" ); |
1465 WRITELOG( "CHarvesterAO::PauseHarvester() - Moving paused state paused" ); |
1381 |
1466 |
1382 return KErrNone; |
1467 return KErrNone; |
1388 // |
1473 // |
1389 void CHarvesterAO::ResumeHarvesterL() |
1474 void CHarvesterAO::ResumeHarvesterL() |
1390 { |
1475 { |
1391 WRITELOG( "CHarvesterAO::ResumeHarvesterL()" ); |
1476 WRITELOG( "CHarvesterAO::ResumeHarvesterL()" ); |
1392 |
1477 |
|
1478 iHarvesterPluginFactory->PauseHarvester( EFalse ); |
1393 iServerPaused = EFalse; |
1479 iServerPaused = EFalse; |
|
1480 iManualPauseEnabled = EFalse; |
1394 |
1481 |
1395 SetNextRequest( ERequestHarvest ); |
1482 SetNextRequest( ERequestHarvest ); |
1396 } |
1483 } |
1397 |
1484 |
1398 // --------------------------------------------------------------------------- |
1485 // --------------------------------------------------------------------------- |
1428 // harvest new items first... |
1515 // harvest new items first... |
1429 if ( iQueue->ItemsInQueue() > 0 ) |
1516 if ( iQueue->ItemsInQueue() > 0 ) |
1430 { |
1517 { |
1431 ReadItemFromQueueL(); |
1518 ReadItemFromQueueL(); |
1432 SetNextRequest( ERequestHarvest ); |
1519 SetNextRequest( ERequestHarvest ); |
|
1520 break; |
1433 } |
1521 } |
1434 |
1522 |
1435 // no more items to harvest |
1523 // no more items to handle from main queue |
1436 else |
1524 else |
1437 { |
1525 { |
1438 // if container files to harvest, handle those |
1526 // All registered fast harvested items or placeholders handled at this point |
|
1527 // if container files to harvest, handle those next |
1439 if( iContainerPHArray.Count() > 0 ) |
1528 if( iContainerPHArray.Count() > 0 ) |
1440 { |
1529 { |
|
1530 iFastHarvestNeeded = EFalse; |
|
1531 iHarvestingPlaceholders = EFalse; |
|
1532 SetPriority( KHarvesterPriorityHarvestingPlugin ); |
1441 SetNextRequest( ERequestContainerPlaceholder ); |
1533 SetNextRequest( ERequestContainerPlaceholder ); |
1442 break; |
1534 break; |
1443 } |
1535 } |
|
1536 else if( iHarvestingPlaceholders || iFastHarvestNeeded ) |
|
1537 { |
|
1538 // reset to default priority |
|
1539 iFastHarvestNeeded = EFalse; |
|
1540 iHarvestingPlaceholders = EFalse; |
|
1541 SetPriority( KHarvesterPriorityHarvestingPlugin ); |
|
1542 SetNextRequest( ERequestHarvest ); |
|
1543 break; |
|
1544 } |
1444 |
1545 |
1445 const TInt arrayCount( iReadyPHArray.Count() ); |
1546 const TInt arrayCount( iReadyPHArray.Count() ); |
1446 if( arrayCount > 0 ) |
1547 if( arrayCount > 0 ) |
1447 { |
1548 { |
1448 #ifdef _DEBUG |
1549 #ifdef _DEBUG |
1492 TRAPD( err, HandlePlaceholdersL( EFalse ) ); |
1593 TRAPD( err, HandlePlaceholdersL( EFalse ) ); |
1493 |
1594 |
1494 // make sure that when HandlePlaceholdersL leaves, iPHArray is cleared |
1595 // make sure that when HandlePlaceholdersL leaves, iPHArray is cleared |
1495 if ( err != KErrNone ) |
1596 if ( err != KErrNone ) |
1496 { |
1597 { |
|
1598 iContainerPHArray.ResetAndDestroy(); |
1497 iPHArray.ResetAndDestroy(); |
1599 iPHArray.ResetAndDestroy(); |
1498 User::Leave( err ); |
1600 User::Leave( err ); |
1499 } |
1601 } |
1500 SetNextRequest( ERequestHarvest ); |
1602 SetNextRequest( ERequestHarvest ); |
1501 } |
1603 } |
1645 void CHarvesterAO::BackupRestoreReady() |
1747 void CHarvesterAO::BackupRestoreReady() |
1646 { |
1748 { |
1647 // restart blacklist database connection |
1749 // restart blacklist database connection |
1648 WRITELOG( "CHarvesterAO::BackupRestoreReady" ); |
1750 WRITELOG( "CHarvesterAO::BackupRestoreReady" ); |
1649 iBlacklist->OpenDatabase(); |
1751 iBlacklist->OpenDatabase(); |
|
1752 } |
|
1753 |
|
1754 // --------------------------------------------------------------------------- |
|
1755 // From MMdSHarvesterDiskSpaceObserver. |
|
1756 // Called when change is disk space status occures |
|
1757 // --------------------------------------------------------------------------- |
|
1758 // |
|
1759 void CHarvesterAO::HandleDiskSpaceNotificationL( TDiskSpaceDirection aDiskSpaceDirection ) |
|
1760 { |
|
1761 WRITELOG("CHarvesterAO::HandleDiskSpaceNotificationL()"); |
|
1762 if( MMdSHarvesterDiskSpaceObserver::EMore == aDiskSpaceDirection ) |
|
1763 { |
|
1764 WRITELOG("CHarvesterAO::HandleDiskSpaceNotificationL() - disk full"); |
|
1765 iDiskFull = EFalse; |
|
1766 } |
|
1767 else |
|
1768 { |
|
1769 WRITELOG("CHarvesterAO::HandleDiskSpaceNotificationL() - disk space available"); |
|
1770 iDiskFull = ETrue; |
|
1771 if( iServerPaused ) |
|
1772 { |
|
1773 return; |
|
1774 } |
|
1775 } |
|
1776 |
|
1777 if( iDiskFull ) |
|
1778 { |
|
1779 // cache monitored events |
|
1780 PauseMonitoring(); |
|
1781 PauseHarvester(); |
|
1782 } |
|
1783 else if( !iRamFull && !iManualPauseEnabled && iServerPaused ) |
|
1784 { |
|
1785 // resume monitoring |
|
1786 ResumeMonitoring(); |
|
1787 TRAP_IGNORE( ResumeHarvesterL() ); |
|
1788 } |
1650 } |
1789 } |
1651 |
1790 |
1652 // --------------------------------------------------------------------------- |
1791 // --------------------------------------------------------------------------- |
1653 // HarvestFile |
1792 // HarvestFile |
1654 // --------------------------------------------------------------------------- |
1793 // --------------------------------------------------------------------------- |
2350 CleanupStack::PopAndDestroy( &scanItems ); |
2489 CleanupStack::PopAndDestroy( &scanItems ); |
2351 } |
2490 } |
2352 |
2491 |
2353 TBool CHarvesterAO::IsDescInArray(const TPtrC& aSearch, const RPointerArray<HBufC>& aArray) |
2492 TBool CHarvesterAO::IsDescInArray(const TPtrC& aSearch, const RPointerArray<HBufC>& aArray) |
2354 { |
2493 { |
2355 const TInt count = aArray.Count(); |
2494 for( TInt i = aArray.Count() - 1; i >=0; i-- ) |
2356 |
|
2357 for( TInt i = 0; i < count; i++ ) |
|
2358 { |
2495 { |
2359 const TDesC& ignorePath = aArray[i]->Des(); |
2496 const TDesC& ignorePath = aArray[i]->Des(); |
2360 |
2497 |
2361 TInt result = MdsUtils::Compare( aSearch, ignorePath ); |
2498 TInt result = MdsUtils::Compare( aSearch, ignorePath ); |
2362 |
2499 |
2582 return EFalse; |
2719 return EFalse; |
2583 } |
2720 } |
2584 |
2721 |
2585 void CHarvesterAO::PreallocateNamespaceL( CMdENamespaceDef& aNamespaceDef ) |
2722 void CHarvesterAO::PreallocateNamespaceL( CMdENamespaceDef& aNamespaceDef ) |
2586 { |
2723 { |
2587 const TInt objectDefCount = aNamespaceDef.ObjectDefCount(); |
2724 for( TInt i = aNamespaceDef.ObjectDefCount() - 1; i >=0; i-- ) |
2588 |
|
2589 for( TInt i = 0; i < objectDefCount; i++ ) |
|
2590 { |
2725 { |
2591 CMdEObjectDef& objectDef = aNamespaceDef.ObjectDefL( i ); |
2726 CMdEObjectDef& objectDef = aNamespaceDef.ObjectDefL( i ); |
2592 |
2727 |
2593 const TInt propertyDefCount = objectDef.PropertyDefCount(); |
2728 for( TInt j = objectDef.PropertyDefCount() - 1; j >=0; j-- ) |
2594 |
|
2595 for( TInt j = 0; j < propertyDefCount; j++ ) |
|
2596 { |
2729 { |
2597 CMdEPropertyDef& propertyDef = objectDef.PropertyDefL( j ); |
2730 // No need for a local copy of the returned pointer |
|
2731 objectDef.PropertyDefL( j ); |
2598 } |
2732 } |
2599 } |
2733 } |
2600 } |
2734 } |
2601 |
2735 |
2602 void CHarvesterAO::StartThumbAGDaemon() |
2736 void CHarvesterAO::StartThumbAGDaemon() |
2637 } |
2771 } |
2638 } |
2772 } |
2639 |
2773 |
2640 void CHarvesterAO::MemoryLow() |
2774 void CHarvesterAO::MemoryLow() |
2641 { |
2775 { |
2642 WRITELOG("CHarvesterAO::MemoryLow()"); |
2776 WRITELOG("CHarvesterAO::MemoryLow()"); |
|
2777 iRamFull = ETrue; |
|
2778 |
|
2779 if( iServerPaused ) |
|
2780 { |
|
2781 return; |
|
2782 } |
|
2783 |
2643 // cache monitored events |
2784 // cache monitored events |
2644 PauseMonitoring(); |
2785 PauseMonitoring(); |
2645 |
|
2646 PauseHarvester(); |
2786 PauseHarvester(); |
|
2787 |
|
2788 iPHArray.Compress(); |
|
2789 iReadyPHArray.Compress(); |
|
2790 iContainerPHArray.Compress(); |
2647 } |
2791 } |
2648 |
2792 |
2649 void CHarvesterAO::MemoryGood() |
2793 void CHarvesterAO::MemoryGood() |
2650 { |
2794 { |
2651 WRITELOG("CHarvesterAO::MemoryGood()"); |
2795 WRITELOG("CHarvesterAO::MemoryGood()"); |
2652 // resume monitoring |
2796 iRamFull = EFalse; |
2653 ResumeMonitoring(); |
2797 |
2654 |
2798 if( !iDiskFull && !iManualPauseEnabled && iServerPaused ) |
2655 TRAP_IGNORE( ResumeHarvesterL() ); |
2799 { |
|
2800 // resume monitoring |
|
2801 ResumeMonitoring(); |
|
2802 |
|
2803 TRAP_IGNORE( ResumeHarvesterL() ); |
|
2804 } |
2656 } |
2805 } |
2657 |
2806 |
2658 TBool CHarvesterAO::CheckForCameraItem( CHarvesterData* aHd, TDes& aObjectDef ) |
2807 TBool CHarvesterAO::CheckForCameraItem( CHarvesterData* aHd, TDes& aObjectDef ) |
2659 { |
2808 { |
2660 if( aHd->Origin() == MdeConstants::Object::ECamera ) |
2809 if( aHd->Origin() == MdeConstants::Object::ECamera ) |