diff -r ecf06a08d4d9 -r 3ec52facab4d mpserviceplugins/mpxsqlitepodcastdbplugin/src/mpxdbpodcast.cpp --- a/mpserviceplugins/mpxsqlitepodcastdbplugin/src/mpxdbpodcast.cpp Mon May 03 12:29:20 2010 +0300 +++ b/mpserviceplugins/mpxsqlitepodcastdbplugin/src/mpxdbpodcast.cpp Fri May 14 15:49:53 2010 +0300 @@ -144,7 +144,16 @@ CMPXMessageArray* itemChangedMessages = CMPXMediaArray::NewL(); CleanupStack::PushL( itemChangedMessages ); - DeleteEpisodeL( episodeId, *fp, *itemChangedMessages, ETrue ); + //Isadd is passed as true as its called from AddEpisodeL + //IsAdd true means dont decrement the episode count from tables like + //Artist Genere, Album, and Composer , which is not needed when + //DeleteEpisodeL is called as part of Add operation + TRAPD( err, DeleteEpisodeL( episodeId, *fp, *itemChangedMessages, ETrue, ETrue ) ); + + if ( err != KErrNone ) // EpisodeExistL has found a record from a previously deleted episode, cleanup it now + { + iDbManager.ExecuteQueryL( aDrive, KQueryPodcastDelete(), episodeId ); + } CleanupStack::PopAndDestroy( itemChangedMessages ); CleanupStack::PopAndDestroy( fp ); @@ -187,7 +196,7 @@ void CMPXDbPodcast::DeleteEpisodeL( TUint32 aEpisodeId, CDesCArray& aUriArray, - CMPXMessageArray& aItemChangedMessages, + CMPXMessageArray& aItemChangedMessages, TBool IsAdd, TBool aDeleteRecord) { MPX_FUNC("CMPXDbPodcast::DeleteEpisodeL"); @@ -199,7 +208,7 @@ { User::Leave(KErrNotFound); } - DoDeleteEpisodeL(recordset, aUriArray, aItemChangedMessages, aDeleteRecord); + DoDeleteEpisodeL(recordset, aUriArray, aItemChangedMessages, IsAdd, aDeleteRecord); CleanupStack::PopAndDestroy(&recordset); } @@ -1224,7 +1233,7 @@ void CMPXDbPodcast::DoDeleteEpisodeL( RSqlStatement& aRecordset, CDesCArray& aUriArray, - CMPXMessageArray& aItemChangedMessages, + CMPXMessageArray& aItemChangedMessages, TBool IsAdd , TBool aDeleteRecord) { MPX_FUNC("CMPXDbPodcast::DoDeleteEpisodeL"); @@ -1235,22 +1244,28 @@ aUriArray.AppendL(*uri); TDriveUnit driveUnit(*uri); CleanupStack::PopAndDestroy(uri); - - // process the author - iObserver.DeleteEpisodeForCategoryL(EMPXArtist, aRecordset.ColumnInt64(EPodcastArtist), - driveUnit, &aItemChangedMessages); + + //if adding then dont delete episode category + if(!IsAdd) + { + // process the author + iObserver.DeleteEpisodeForCategoryL(EMPXArtist, aRecordset.ColumnInt64(EPodcastArtist), + driveUnit, &aItemChangedMessages ); + + // process the title + iObserver.DeleteEpisodeForCategoryL(EMPXAlbum, aRecordset.ColumnInt64(EPodcastAlbum), + driveUnit, &aItemChangedMessages); + + // process the genre + iObserver.DeleteEpisodeForCategoryL(EMPXGenre, aRecordset.ColumnInt64(EPodcastGenre), + driveUnit, &aItemChangedMessages); + + // process the composer + iObserver.DeleteEpisodeForCategoryL(EMPXComposer, aRecordset.ColumnInt64(EPodcastComposer), + driveUnit, &aItemChangedMessages); + } + - // process the title - iObserver.DeleteEpisodeForCategoryL(EMPXAlbum, aRecordset.ColumnInt64(EPodcastAlbum), - driveUnit, &aItemChangedMessages); - - // process the genre - iObserver.DeleteEpisodeForCategoryL(EMPXGenre, aRecordset.ColumnInt64(EPodcastGenre), - driveUnit, &aItemChangedMessages); - - // process the composer - iObserver.DeleteEpisodeForCategoryL(EMPXComposer, aRecordset.ColumnInt64(EPodcastComposer), - driveUnit, &aItemChangedMessages); // add a change event for removing the episode itself TUint32 episodeId(aRecordset.ColumnInt64(EPodcastUniqueId));