mmfenh/enhancedmediaclient/Plugins/ProgDLSource/src/ProgDLSource.cpp
branchRCL_3
changeset 18 a36789189b53
parent 17 60e492b28869
--- a/mmfenh/enhancedmediaclient/Plugins/ProgDLSource/src/ProgDLSource.cpp	Thu Jul 15 19:13:36 2010 +0300
+++ b/mmfenh/enhancedmediaclient/Plugins/ProgDLSource/src/ProgDLSource.cpp	Thu Aug 19 10:26:11 2010 +0300
@@ -767,7 +767,7 @@
   @return An error code indicating if the function call was successful. KErrNone on success, otherwise
   another of the system-wide error codes.
 */
-TInt CProgDLMultimediaSource::EvaluateIntent(ContentAccess::TIntent aIntent) const
+TInt CProgDLMultimediaSource::EvaluateIntent(ContentAccess::TIntent aIntent)
     {
     if (!iFile)
         {
@@ -1114,8 +1114,8 @@
             {
             TInt pos = 0;
             CancelRequests();
-			// we should not delete the iFile, it causes the CAF to delete the rights if they are expired.
-
+            if (iFile)
+                iFile->Seek(ESeekStart,0);
             // Since the requests will not be deleted if it is still inside RunL() (iState is EProcessing), 
             // iReadRequestPending should not be initialized to 0 always
             iReadRequestPending = iRequests.Count();
@@ -1225,6 +1225,20 @@
             if ( err == KErrNone )
                 {
                 iFullFileName = sizePckg();
+                if (iFile)
+                {
+                    delete iFile;
+                    iFile = NULL;
+                }
+                if (iFileHandle)
+                    {
+                    TRAPD(err,iFile = CContentFile::NewL(iHandle, UniqueId(), iCAFParameters->iEnableUI));
+                    }
+                else
+                    {
+                    // Open for read-only access
+                    TRAPD(err,iFile = CContentFile::NewL(iFsSession, iFullFileName, UniqueId(), EFileShareAny, iCAFParameters->iEnableUI));
+                    }
                 }
             aMessage.Complete(KErrNone);			            
             
@@ -1395,8 +1409,17 @@
             aMessage.WriteDataToClient(perBufPckg);
             aMessage.Complete(KErrNone);
             }
-            break;   
-                
+            break;
+        case ESetFileMoving:
+            {
+            if (iFile)
+                {
+                delete iFile;
+                iFile = NULL;
+                }
+            aMessage.Complete(KErrNone);
+            }
+            break;    
         default:
             err = KErrArgument;
             break;
@@ -1475,13 +1498,7 @@
             request->SetActive();
             
             //	iSnkBytes += requestSize;
-            
-            if ((iSnkBytes + request->Buffer()->RequestSize()) >= iDownloadSize && isDownloadComplete)
-                {
-    	              request->Buffer()->SetLastBuffer(ETrue);
-                      DEBPRN1(_L("CProgDLMultimediaSource::ServiceFillBuffer() LastBuffer$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"));
-                }
-            
+            request->Buffer()->SetLastBuffer(EFalse);
             iFile->Read(request->BufferDes(), requestSize, request->iStatus);
             
             }
@@ -1633,6 +1650,13 @@
         DEBPRN4(_L("CProgDLMultimediaSource::ReadRequestStatus Buffer[%x] BufferSize[%d] RequestSize[%d]"),aRequest->Buffer(),aRequest->Buffer()->BufferSize(),aRequest->Buffer()->RequestSize());
         DEBPRN3(_L("CProgDLMultimediaSource::ReadRequestStatus Buffer[%x] LastBuffer[%d]"),aRequest->Buffer(),aRequest->Buffer()->LastBuffer());
         
+        //Moved from CProgDLMultimediaSource::ServiceFillBuffer to handle deadlock situations
+        if ((iSnkBytes + aRequest->Buffer()->RequestSize()) >= iDownloadSize && isDownloadComplete)
+            {
+	              aRequest->Buffer()->SetLastBuffer(ETrue);
+                DEBPRN1(_L("CProgDLMultimediaSource::ReadRequestStatus() LastBuffer$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"));
+            }
+
         TBool lastBuffer = aRequest->Buffer()->LastBuffer();
         
         if((aRequest->Buffer()->BufferSize() != aRequest->Buffer()->RequestSize()) && !lastBuffer)
@@ -1697,7 +1721,7 @@
 TInt CProgDLMultimediaSource::ReOpenCAF()
     {
     TInt status(KErrNone);
-    DEBPRN2(_L("CProgDLMultimediaSource::StateChanged ReOpenCAF[%d]"),iSnkBytes);     
+    DEBPRN2(_L("CProgDLMultimediaSource::ReOpenCAF ReOpenCAF[%d]"),iSnkBytes);     
     delete iFile;
     iFile = NULL;
     
@@ -1741,7 +1765,7 @@
         }												
 
     iReOpenCAF = ETrue;
-    DEBPRN3(_L("CProgDLMultimediaSource::StateChanged Exit status[%d] iFileSize[%d]"),status,iFileSize);     
+    DEBPRN3(_L("CProgDLMultimediaSource::ReOpenCAF Exit status[%d] iFileSize[%d]"),status,iFileSize);     
     return status;    
     }