diff -r 9b022b1f357c -r e0aa398e6810 activityfw/storage/server/src/afstorage.cpp --- a/activityfw/storage/server/src/afstorage.cpp Tue Jul 06 14:37:10 2010 +0300 +++ b/activityfw/storage/server/src/afstorage.cpp Wed Aug 18 10:05:49 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