mmappcomponents/collectionhelper/src/mpxcollectionuihelperimp.cpp
branchRCL_3
changeset 15 d240f0a77280
parent 2 7a9a8e73f54b
child 30 6f9f6e99a23e
--- a/mmappcomponents/collectionhelper/src/mpxcollectionuihelperimp.cpp	Fri Mar 12 15:44:36 2010 +0200
+++ b/mmappcomponents/collectionhelper/src/mpxcollectionuihelperimp.cpp	Mon Mar 15 12:42:31 2010 +0200
@@ -1027,6 +1027,12 @@
         // currently only used by incremental add
         iTaskQueue->CancelRequests();
         
+        if( iTask == ETaskIncAddMedia || iTask == ETaskIncAppendMedia )
+            {
+            // complete task from scheduler
+            iTaskQueue->CompleteTask();
+            }
+        
         // clean up iInputMedia
         if( iInputMedia )
             {
@@ -1253,6 +1259,62 @@
     ASSERT(0);
     }
 
+// ---------------------------------------------------------------------------
+// From MMPXCollectionObserver
+// ---------------------------------------------------------------------------
+//
+void CMPXCollectionUiHelperImp::HandleCommandComplete(CMPXCommand* aCommandResult, TInt aError)
+    {
+    MPX_DEBUG3("CMPXCollectionUiHelperImp::HandleCommandComplete iTask=%d, aError=%d", 
+        iTask, aError);
+
+    if( iTask == ETaskIncAddMedia && iInputMedia )
+        {
+        if ( iChunkNumber == 0 )
+            {
+            // save playlistId in input media & use it for subsequent appending operations
+            if( aCommandResult )
+                {
+                TMPXItemId playlistId = 
+                    aCommandResult->ValueTObjectL<TMPXItemId>(KMPXCommandColAddRtnId);
+                    
+                iInputMedia->SetTObjectValueL<TMPXItemId>(KMPXMediaGeneralId, playlistId);
+                }
+            
+            iChunkNumber++;  // move on to next chunk
+            
+            CompleteTask(iTask, aError);
+            }
+        else if ( iChunkNumber == iTotalChunkNumber-1 )  // last chunk
+            {
+            CompleteTask(ETaskIncFinish, aError);  // finish inc task
+            }
+        else // intermedia chunks
+            {
+            iChunkNumber++;  // move on to next chunk
+            
+            CompleteTask(iTask, aError);
+            }
+        }
+    else if( iTask == ETaskIncAppendMedia && iInputMedia )
+        {
+        // last chunk
+        // for the case that there is only one chunk (first & last chunk at the same 
+        // time), Inc Add is not used
+        if( iChunkNumber == iTotalChunkNumber-1 )
+            {
+            // update input media as well
+            FillInPlaylistDetailsL(*iInputMedia);
+            CompleteTask(ETaskIncFinish, aError);        
+            }
+        else // intermediate chunks, including first chunk
+            {       
+            iChunkNumber++;
+            CompleteTask(iTask, aError);
+            }
+        }
+    }
+
 // ----------------------------------------------------------------------------
 // Handles completion of moving an object, just a proxy
 // ----------------------------------------------------------------------------
@@ -1681,7 +1743,8 @@
 void CMPXCollectionUiHelperImp::DoIncAddMediaL()
     {
     /***** include only aSize/iChunkSize number of songs *****/
-    
+    MPX_DEBUG5("CMPXCollectionUiHelperImp::DoIncAddMediaL (%d, %d, %d, %d)", 
+        iChunkNumber, iChunkSize, iTotalChunkNumber, iRemainder);
     // copy media
     CMPXMedia* media = CMPXMedia::CopyL(*iInputMedia);
     CleanupStack::PushL(media);
@@ -1739,15 +1802,7 @@
         
         CleanupStack::PopAndDestroy(playlistExtension); 
 
-        iMediator->AddItemL( media );  // this creates the new playlist
-        
-        // save playlistId in input media & use it for subsequent appending operations
-        TMPXItemId playlistId = media->ValueTObjectL<TMPXItemId>(KMPXMediaGeneralId);
-        iInputMedia->SetTObjectValueL<TMPXItemId>(KMPXMediaGeneralId, playlistId);
-        
-        iChunkNumber++;  // move on to next chunk
-        
-        CompleteTask(iTask, KErrNone);
+        iMediator->AddItemAsyncL( media );  // this creates the new playlist
         }
     else if ( iChunkNumber == iTotalChunkNumber-1 )  // last chunk
         {
@@ -1759,9 +1814,7 @@
         TMPXItemId playlistId = iInputMedia->ValueTObjectL<TMPXItemId>(KMPXMediaGeneralId);
         media->SetTObjectValueL<TMPXItemId>(KMPXMediaGeneralId, playlistId);
         
-        iMediator->AddItemL( media );
-        
-        CompleteTask(ETaskIncFinish, KErrNone);  // finish inc task
+        iMediator->AddItemAsyncL( media );
         }
     else // intermedia chunks
         {
@@ -1773,11 +1826,7 @@
         TMPXItemId playlistId = iInputMedia->ValueTObjectL<TMPXItemId>(KMPXMediaGeneralId);
         media->SetTObjectValueL<TMPXItemId>(KMPXMediaGeneralId, playlistId);
 
-        iMediator->AddItemL( media );
-        
-        iChunkNumber++;  // move on to next chunk
-        
-        CompleteTask(iTask, KErrNone);
+        iMediator->AddItemAsyncL( media );
         }
     
     CleanupStack::PopAndDestroy(cArray);
@@ -1830,23 +1879,8 @@
 
     // update media then append to playlist
     FillInPlaylistDetailsL(*media);
-    iMediator->AddItemL( media );
+    iMediator->AddItemAsyncL( media );
 
-    // last chunk
-    // for the case that there is only one chunk (first & last chunk at the same 
-    // time), Inc Add is not used
-    if( iChunkNumber == iTotalChunkNumber-1 )
-        {
-        // update input media as well
-        FillInPlaylistDetailsL(*iInputMedia);
-        CompleteTask(ETaskIncFinish, KErrNone);        
-        }
-    else // intermediate chunks, including first chunk
-        {       
-        iChunkNumber++;
-        CompleteTask(iTask, KErrNone);
-        }
-   
     CleanupStack::PopAndDestroy(cArray);
     CleanupStack::PopAndDestroy(media);
     }