mtpfws/mtpfw/dataproviders/devdp/src/cmtpgetnumobjects.cpp
branchRCL_3
changeset 1 f8e15b44d440
parent 0 d0791faffa3f
child 3 8b094906a049
--- a/mtpfws/mtpfw/dataproviders/devdp/src/cmtpgetnumobjects.cpp	Tue Feb 02 01:11:40 2010 +0200
+++ b/mtpfws/mtpfw/dataproviders/devdp/src/cmtpgetnumobjects.cpp	Fri Feb 19 23:40:44 2010 +0200
@@ -18,6 +18,7 @@
 #include <mtp/mmtpobjectmgr.h>
 #include <mtp/mmtpdataprovider.h>
 #include <mtp/cmtpdataproviderplugin.h>
+#include <mtp/cmtpobjectmetadata.h>
 
 #include "cmtpdataprovidercontroller.h"
 #include "cmtpdataprovider.h"
@@ -26,6 +27,7 @@
 #include "mtpdevicedpconst.h"
 #include "mtpdevdppanic.h"
 
+
 /**
 Verification data for GetNumObjects request
 */
@@ -57,6 +59,7 @@
 */	
 CMTPGetNumObjects::~CMTPGetNumObjects()
 	{	
+	iDevDpSingletons.Close();
     iSingletons.Close();
 	}
 /**
@@ -74,19 +77,51 @@
 void CMTPGetNumObjects::ConstructL()
     {
     iSingletons.OpenL();
+    iDevDpSingletons.OpenL(iFramework);
     }
 
 TMTPResponseCode CMTPGetNumObjects::CheckRequestL()
 	{
 	TMTPResponseCode responseCode = CMTPRequestProcessor::CheckRequestL();
-	if(responseCode == EMTPRespCodeOK)
+	if(responseCode != EMTPRespCodeOK)
+		{
+		return responseCode;	
+		}
+	
+	TUint32 formatCode = Request().Uint32(TMTPTypeRequest::ERequestParameter2); 
+	if(formatCode != 0 && !IsSupportedFormatL(formatCode))
+		{
+		return EMTPRespCodeInvalidObjectFormatCode;
+		}
+	
+	if(iSingletons.DpController().EnumerateState() != CMTPDataProviderController::EEnumeratedFulllyCompleted)
 		{
-		TUint32 formatCode = Request().Uint32(TMTPTypeRequest::ERequestParameter2);
-		if(formatCode != 0 && !IsSupportedFormatL(formatCode))
+		TUint storageID = Request().Uint32(TMTPTypeRequest::ERequestParameter1);
+		TUint handle = Request().Uint32(TMTPTypeRequest::ERequestParameter3);
+		if(iDevDpSingletons.PendingStorages().FindInOrder(storageID) != KErrNotFound)
+			{
+			responseCode = EMTPRespCodeDeviceBusy;
+			}
+		else if( (handle != KMTPHandleNone) && (handle != KMTPHandleAll)  )
 			{
-			responseCode = EMTPRespCodeInvalidObjectFormatCode;
+			CMTPObjectMetaData* meta = iRequestChecker->GetObjectInfo(handle);
+			__ASSERT_DEBUG(meta, Panic(EMTPDevDpObjectNull));
+			
+			if( meta->Uint(CMTPObjectMetaData::EFormatCode) == EMTPFormatCodeAssociation )
+				{
+				responseCode = EMTPRespCodeDeviceBusy;
+				}
+			}
+		else if(EMTPFormatCodeUndefined == formatCode)
+			{
+			responseCode = EMTPRespCodeDeviceBusy;
 			}
 		}
+	else if(iDevDpSingletons.PendingStorages().Count() > 0)
+		{
+		iDevDpSingletons.PendingStorages().Close();
+		}
+	
 	return responseCode;	
 	}