Revision: 201023 RCL_3 PDK_3.0.1
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 21 Jun 2010 16:09:02 +0300
branchRCL_3
changeset 34 9422ed56ee45
parent 30 3e156c80c15d
child 46 63c982fb92f2
Revision: 201023 Kit: 2010125
harvester/client/src/harvesterclientao.cpp
harvester/common/inc/harvestermediaidutil.h
harvester/common/src/harvestereventmanager.cpp
harvester/server/inc/harvesterao.h
harvester/server/src/harvesterao.cpp
harvester/server/src/harvesterqueue.cpp
sis/mds/mds_stub.sis
sis/mds/package.pkg
sis/mds/package_separate.pkg
sis/mds/stub.pkg
--- a/harvester/client/src/harvesterclientao.cpp	Wed Jun 09 10:09:20 2010 +0300
+++ b/harvester/client/src/harvesterclientao.cpp	Mon Jun 21 16:09:02 2010 +0300
@@ -103,6 +103,7 @@
 void CHarvesterClientAO::DoCancel()
 	{
 	WRITELOG( "CHarvesterClientAO::DoCancel()" );
+	iHarvesterClient.UnregisterHarvestComplete();
 	}
 	
 // ---------------------------------------------------------------------------
--- a/harvester/common/inc/harvestermediaidutil.h	Wed Jun 09 10:09:20 2010 +0300
+++ b/harvester/common/inc/harvestermediaidutil.h	Mon Jun 21 16:09:02 2010 +0300
@@ -19,6 +19,7 @@
 
 #include <e32base.h>
 #include <f32file.h>
+#include <e32svr.h>
 
 const TInt KHarvesterMediaIdTLSKey = 0x200009FE;
 
--- a/harvester/common/src/harvestereventmanager.cpp	Wed Jun 09 10:09:20 2010 +0300
+++ b/harvester/common/src/harvestereventmanager.cpp	Mon Jun 21 16:09:02 2010 +0300
@@ -340,8 +340,6 @@
 
 	iRegisteredObservers.AppendL( observerInfo );
 
-	CleanupStack::Pop( observerInfo );
-	
 	// send event if register is coming in the middle of harvesting
 	for( TInt i = iEventStatuses.Count(); --i >= 0; )
 		{
@@ -349,13 +347,31 @@
 		if( CheckObserverType( observerInfo->iObserverType, 
 				eventStatus.iObserverType) )
 			{
-			if( eventStatus.iItemsLeft > 0 )
-				{
-				TRAP_IGNORE( SendEventL( eventStatus.iObserverType, 
-						eventStatus.iCurrentState, eventStatus.iItemsLeft ) );
-				}
+			TRAP_IGNORE( SendEventL( eventStatus.iObserverType, 
+					eventStatus.iCurrentState, eventStatus.iItemsLeft ) );
 			}
 		}
+	
+	//no events in queue, signal registered client anyways 
+	if( !iEventStatuses.Count() )
+	    {
+        if(observerInfo->iObserverType & EHEObserverTypeOverall)
+            {
+            SendSingleEvent(*observerInfo, EHEObserverTypeOverall, EHEStateUninitialized, 0);
+            }
+        
+        if(observerInfo->iObserverType & EHEObserverTypeMMC)
+            {
+            SendSingleEvent(*observerInfo, EHEObserverTypeMMC, EHEStateUninitialized, 0);
+            }
+        
+        if(observerInfo->iObserverType & EHEObserverTypePlaceholder)
+            {
+            SendSingleEvent(*observerInfo, EHEObserverTypePlaceholder, EHEStateUninitialized, 0);
+            }
+	    }
+	
+	CleanupStack::Pop( observerInfo );
 	}
 
 EXPORT_C TInt CHarvesterEventManager::UnregisterEventObserver( const RMessage2& aMessage )
--- a/harvester/server/inc/harvesterao.h	Wed Jun 09 10:09:20 2010 +0300
+++ b/harvester/server/inc/harvesterao.h	Mon Jun 21 16:09:02 2010 +0300
@@ -115,8 +115,6 @@
         	ERequestContainerPlaceholder
         	};
         	
-
-
         /**
          * Constructs a new harvesting thread
          *
@@ -302,6 +300,8 @@
         void MemoryGood();
         
         void RemoveBlacklistedFile( CHarvesterData* aItem );
+        
+        CHarvesterAO::TRequest GetHarvesterAORunState();
 		
     private:
         
@@ -585,6 +585,7 @@
         HBufC* iMmcSoundsPath;
         
         TBool iUnmountDetected;
+        TBool iPriorityInterruptDetected;
 	};
 	
 #endif //__CHARVESTERAO_H__
--- a/harvester/server/src/harvesterao.cpp	Wed Jun 09 10:09:20 2010 +0300
+++ b/harvester/server/src/harvesterao.cpp	Mon Jun 21 16:09:02 2010 +0300
@@ -145,6 +145,7 @@
     iHarvestingPlaceholders = EFalse;
     
     iUnmountDetected = EFalse;
+    iPriorityInterruptDetected = EFalse;
     }
      
 // ---------------------------------------------------------------------------
@@ -913,6 +914,30 @@
 		    CleanupStack::PopAndDestroy( &mdeObjectArray );
 		    return;
 		    }
+	    // Check for priority interrupt
+	    // If priority interrupt occures, drop current operation to handle the priority item first,
+	    // and continue from current situation after that
+		else if( iPriorityInterruptDetected )
+		    {
+            WRITELOG( "CHarvesterAO::HandlePlaceholdersL() - Priority interrupt during execution!" );
+            const TInt currentPHArrayCount( iPHArray.Count() );
+            for( TInt y( iTempReadyPHArray.Count() -1 ); y >=0; y-- )
+                {
+                CHarvesterData* hd = iTempReadyPHArray[y];
+                if( currentPHArrayCount )
+                    {
+                    // Leave the first item in the array as it is the priority item
+                    iPHArray.Insert( hd, 1 );
+                    }
+                else
+                    {
+                    iPHArray.Insert( hd, 0 );
+                    }
+                }
+            iTempReadyPHArray.Reset();
+            CleanupStack::PopAndDestroy( &mdeObjectArray );
+            return;		
+		    }
 		
 		if( objDefStr.Length() == 0 ||
 		    ( objDefStr == KInUse ) )
@@ -1644,6 +1669,8 @@
     
     // Reset unmount flag, as unmount is handled before RunL is called again after aborted harvesting run
     iUnmountDetected = EFalse;
+    // Reset priority flag, as interrupt is handled automatically first when RunL is called again 
+    iPriorityInterruptDetected = EFalse;
     
     User::LeaveIfError( iStatus.Int() );
     switch( iNextRequest )
@@ -2108,8 +2135,10 @@
         {
         iQueue->Append( hd );
         
+        iPriorityInterruptDetected = ETrue;
+        
         // signal to start harvest if harvester idles
-        if ( !IsServerPaused() )
+        if ( !IsServerPaused() && iNextRequest == ERequestIdle )
             {
             SetNextRequest( CHarvesterAO::ERequestHarvest );
             }
@@ -2286,7 +2315,7 @@
     	iQueue->Append( hd );
 
     	// signal to start harvest if harvester idles
-    	if ( !IsServerPaused() )
+    	if ( !IsServerPaused() && iNextRequest == ERequestIdle )
     		{
     		SetNextRequest( CHarvesterAO::ERequestHarvest );
     		}
@@ -3058,3 +3087,9 @@
         aObject->AddBoolPropertyL( *iPropDefs->iDefaultFolderPropertyDef, inDefaultFolder );
         }
     }
+
+CHarvesterAO::TRequest CHarvesterAO::GetHarvesterAORunState()
+    {
+    return iNextRequest;
+    }
+
--- a/harvester/server/src/harvesterqueue.cpp	Wed Jun 09 10:09:20 2010 +0300
+++ b/harvester/server/src/harvesterqueue.cpp	Mon Jun 21 16:09:02 2010 +0300
@@ -252,7 +252,7 @@
    	Append( aHarvesterData );
 
     // signal to start harvest if harvester idles
-    if ( !iHarvesterAO->IsServerPaused() )
+    if ( !iHarvesterAO->IsServerPaused() && iHarvesterAO->GetHarvesterAORunState() == CHarvesterAO::ERequestIdle )
         {
         iHarvesterAO->SetNextRequest( CHarvesterAO::ERequestHarvest );
         }
Binary file sis/mds/mds_stub.sis has changed
--- a/sis/mds/package.pkg	Wed Jun 09 10:09:20 2010 +0300
+++ b/sis/mds/package.pkg	Mon Jun 21 16:09:02 2010 +0300
@@ -17,7 +17,7 @@
 &EN
 
 ;packet-header (name, uid, major, minor, build, type)
-#{"Metadata System Upgrade"},(0x200009F5), 9, 20, 17, TYPE=SA, RU
+#{"Metadata System Upgrade"},(0x200009F5), 9, 20, 19, TYPE=SA, RU
 
 ; Localised vendor name
 %{"Nokia"}
--- a/sis/mds/package_separate.pkg	Wed Jun 09 10:09:20 2010 +0300
+++ b/sis/mds/package_separate.pkg	Mon Jun 21 16:09:02 2010 +0300
@@ -17,7 +17,7 @@
 &EN
 
 ;packet-header (name, uid, major, minor, build, type)
-#{"Metadata System Upgrade"},(0x200009F5), 9, 20, 17, TYPE=SA, RU
+#{"Metadata System Upgrade"},(0x200009F5), 9, 20, 19, TYPE=SA, RU
 
 ; Localised vendor name
 %{"Nokia"}
--- a/sis/mds/stub.pkg	Wed Jun 09 10:09:20 2010 +0300
+++ b/sis/mds/stub.pkg	Mon Jun 21 16:09:02 2010 +0300
@@ -17,7 +17,7 @@
 &EN
 
 ; Header
-#{"Metadata System"}, (0x200009F5), 9, 20, 17, TYPE=SA
+#{"Metadata System"}, (0x200009F5), 9, 20, 19, TYPE=SA
 
 ; Localised Vendor name
 %{"Nokia"}