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