activityfw/storage/server/src/afstorage.cpp
changeset 107 b34d53f6acdf
parent 99 7aaf39b772ac
child 112 dbfb5e38438b
--- a/activityfw/storage/server/src/afstorage.cpp	Fri Jul 23 14:03:00 2010 +0300
+++ b/activityfw/storage/server/src/afstorage.cpp	Fri Aug 06 13:40:46 2010 +0300
@@ -49,6 +49,8 @@
  */
 CAfStorage::~CAfStorage()
 {
+    mActDb.Close();
+    delete mFileStore;
 }
 
 // -----------------------------------------------------------------------------
@@ -113,12 +115,6 @@
                                             EFileRead|EFileWrite);
     mFileStore->SetTypeL(mFileStore->Layout()); /* Set file store type*/
     mActDb.OpenL(mFileStore,mFileStore->Root());
-    CDbTableNames* tables = mActDb.TableNamesL();
-    CleanupStack::PushL(tables);
-    if (0 == tables->Count()) {
-        CreateTableL();
-    }
-    CleanupStack::PopAndDestroy(tables);
 }
 
 // -----------------------------------------------------------------------------
@@ -233,10 +229,6 @@
     ExternalizeDataL(view, entry, colSet->ColNo(KDataColumnName));
 
     view.PutL();
-    if (KErrNone != errNo) {
-        view.Cancel();
-        User::Leave(errNo);
-    }
     CleanupStack::PopAndDestroy(colSet);)
 
     if (KErrNone != errNo) {
@@ -248,6 +240,64 @@
 
 // -----------------------------------------------------------------------------
 /**
+ * Save activity
+ * @param entry - activity data
+ */
+void CAfStorage::SaveActivityL(CAfEntry &entry)
+{
+    // @todo check if this can be tidied up
+    //verify if row already exists
+    TInt errNo(KErrNone);
+    RDbView view;
+    CleanupClosePushL(view);
+    TRAP(errNo, GetActivityForUpdateL(view, entry.ApplicationId(), entry.ActivityId()));
+    if (KErrNone == errNo) {
+        // update
+        view.UpdateL();
+        TRAPD(errNo,
+        CDbColSet* colSet = view.ColSetL();
+        CleanupStack::PushL(colSet);
+
+        view.SetColL(colSet->ColNo(KFlagsColumnName), entry.Flags());
+        ExternalizeDataL(view, entry, colSet->ColNo(KDataColumnName));
+
+        view.PutL();
+        CleanupStack::PopAndDestroy(colSet);)
+
+        if (KErrNone != errNo) {
+            view.Cancel();
+            User::Leave(errNo);
+        }
+    } else {
+        // insert
+
+        //write table
+        RDbTable table;
+        CleanupClosePushL(table);
+        User::LeaveIfError(table.Open(mActDb, KActivityTableName, table.EUpdatable));
+        CDbColSet *row = table.ColSetL();
+        CleanupStack::PushL(row);
+
+        table.InsertL();
+        TRAP(errNo,
+        table.SetColL(row->ColNo(KApplicationColumnName), TInt64(entry.ApplicationId()));
+        table.SetColL(row->ColNo(KActivityColumnName), entry.ActivityId());
+        table.SetColL(row->ColNo(KFlagsColumnName), entry.Flags());
+        ExternalizeDataL(table, entry, row->ColNo(KDataColumnName));
+        table.PutL();)
+        if (KErrNone != errNo) {
+            table.Cancel();
+            User::Leave(errNo);
+        }
+        CleanupStack::PopAndDestroy(row);
+        CleanupStack::PopAndDestroy(&table);
+    }
+            
+    CleanupStack::PopAndDestroy(&view);
+}
+
+// -----------------------------------------------------------------------------
+/**
  * Delete activity
  * @param appId - application id
  * @param actId - activity id