mpxplugins/serviceplugins/collectionplugins/mpxsqlitepodcastdbplugin/src/mpxdbpodcast.cpp
branchRCL_3
changeset 21 a1247965635c
parent 1 8118492f1bdf
--- a/mpxplugins/serviceplugins/collectionplugins/mpxsqlitepodcastdbplugin/src/mpxdbpodcast.cpp	Wed Apr 14 15:54:18 2010 +0300
+++ b/mpxplugins/serviceplugins/collectionplugins/mpxsqlitepodcastdbplugin/src/mpxdbpodcast.cpp	Tue Apr 27 16:34:37 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));