diff -r 05b0d2323768 -r d240f0a77280 mmappcomponents/collectionhelper/src/mpxcollectionuihelperimp.cpp --- 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(KMPXCommandColAddRtnId); + + iInputMedia->SetTObjectValueL(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(KMPXMediaGeneralId); - iInputMedia->SetTObjectValueL(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(KMPXMediaGeneralId); media->SetTObjectValueL(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(KMPXMediaGeneralId); media->SetTObjectValueL(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); }