calendarui/server/CalenSvr/src/CalenSvrBootManager.cpp
branchRCL_3
changeset 28 96907930389d
parent 0 f979ecb2b13e
--- a/calendarui/server/CalenSvr/src/CalenSvrBootManager.cpp	Thu Jul 15 18:37:27 2010 +0300
+++ b/calendarui/server/CalenSvr/src/CalenSvrBootManager.cpp	Thu Aug 19 09:53:43 2010 +0300
@@ -24,10 +24,15 @@
 
 #include "CalenServer.h"
 #include <calenglobaldata.h>
+#include <calcalendarinfo.h>
+#include <calcalendariterator.h>
 
 #include <featmgr.h>
 
 // LOCAL CONSTANTS AND MACROS
+const TInt KBuffLength = 8;
+
+_LIT( KCalendarDatabaseFilePath, "c:calendar" );
 
 enum TCalenSvrBootManagerPanic
     {
@@ -189,6 +194,13 @@
             CleanupReleasePushL( *gData );
             gData->CalSessionL();
             CleanupStack::PopAndDestroy( gData );
+            iState = EStateDeleteDeadCalendars;
+            CompleteSelf();
+            }
+            break;
+        case EStateDeleteDeadCalendars:
+            {
+            RemoveDeadCalendarsL();
             iState = EStateReady;
             CompleteSelf();
             }
@@ -263,4 +275,49 @@
     TRACE_EXIT_POINT;
     }
 
+// -----------------------------------------------------------------------------
+// CCalenSvrBootManager::RemoveDeadCalendarsL
+// Remove all the files which are marked as EMarkAsDelete from device's 
+// file system
+// -----------------------------------------------------------------------------
+//
+void CCalenSvrBootManager::RemoveDeadCalendarsL()
+    {
+    TRACE_ENTRY_POINT;
+	TBool softDelete;
+    TBuf8<KBuffLength> keyBuff;
+    
+    // Mark the meta property key as SoftDeleted
+    keyBuff.Zero();
+    keyBuff.AppendNum(EMarkAsDelete);
+    
+    CCalSession* session = CCalSession::NewL();
+    CleanupStack::PushL(session);
+    CCalCalendarIterator* calendarIterator = 
+                      CCalCalendarIterator::NewL(*session);
+    CleanupStack::PushL(calendarIterator);
+    
+    for( CCalCalendarInfo* calendarInfo = calendarIterator->FirstL();
+         calendarInfo!=NULL;calendarInfo = calendarIterator->NextL())
+        {
+        CleanupStack::PushL(calendarInfo);
+        softDelete = EFalse;
+        TPckgC<TBool> pkgSoftDelete( softDelete );
+        TRAPD(err,pkgSoftDelete.Set(calendarInfo->PropertyValueL(keyBuff)));
+        if( KErrNone == err )
+            {
+            softDelete = pkgSoftDelete();
+            }
+        if(softDelete && calendarInfo->FileNameL().CompareF(KCalendarDatabaseFilePath) )
+            {
+            //Delete the calendar except default calendar.
+            TRAP_IGNORE(session->DeleteCalFileL(calendarInfo->FileNameL()));
+            }
+        CleanupStack::PopAndDestroy(calendarInfo);
+        }
+    CleanupStack::PopAndDestroy(calendarIterator);
+    CleanupStack::PopAndDestroy( session );
+    TRACE_EXIT_POINT;
+    }
+
 // End of File