--- 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);
}