cmmanager/cmmgr/cmmserver/src/cmmdestinationstruct.cpp
changeset 53 4af712113915
parent 46 95d45f234cf3
--- a/cmmanager/cmmgr/cmmserver/src/cmmdestinationstruct.cpp	Tue Jul 06 14:42:41 2010 +0300
+++ b/cmmanager/cmmgr/cmmserver/src/cmmdestinationstruct.cpp	Wed Aug 18 10:10:23 2010 +0300
@@ -406,10 +406,57 @@
     }
 
 // ---------------------------------------------------------------------------
+// Notify about a possible change in database on specified record table.
+// ---------------------------------------------------------------------------
+//
+void CCmmDestinationStruct::NotifyRecordChange( const TCmmDbRecords aRecordType )
+    {
+    OstTraceFunctionEntry0( CCMMDESTINATIONSTRUCT_NOTIFYRECORDCHANGE_ENTRY );
+
+    // Only change status if it is currently ECmmRecordStatusLoaded.
+    switch ( aRecordType )
+        {
+        case ECmmDestNetworkRecord:
+            {
+            if ( iNetworkRecordStatus == ECmmRecordStatusLoaded )
+                {
+                iNetworkRecordStatus = ECmmRecordStatusExpired;
+                }
+            }
+            break;
+        case ECmmDestApRecord:
+            {
+            if ( iDestApRecordStatus == ECmmRecordStatusLoaded )
+                {
+                iDestApRecordStatus = ECmmRecordStatusExpired;
+                }
+            }
+            break;
+        case ECmmDestMetadataRecord:
+            {
+            if ( iMetadataRecordStatus == ECmmRecordStatusLoaded )
+                {
+                iMetadataRecordStatus = ECmmRecordStatusExpired;
+                }
+            }
+            break;
+        case ECmmDbSnapRecord:
+        case ECmmDbBearerPriorityRecord:
+        case ECmmDbDefConnRecord:
+        // Fallthrough intended.
+        default:
+            // The record table doesn't affect destinations, just ignore it.
+            break;
+        }
+
+    OstTraceFunctionExit0( CCMMDESTINATIONSTRUCT_NOTIFYRECORDCHANGE_EXIT );
+    }
+
+// ---------------------------------------------------------------------------
 // Set the record status for all records.
 // ---------------------------------------------------------------------------
 //
-void CCmmDestinationStruct::SetStatusForAllRecords( const TCmmRecordStatus& aStatus )
+void CCmmDestinationStruct::SetStatusForAllRecords( const TCmmRecordStatus aStatus )
     {
     OstTraceFunctionEntry0( CCMMDESTINATIONSTRUCT_SETSTATUSFORALLRECORDS_ENTRY );
 
@@ -527,7 +574,7 @@
     }
 
 // ---------------------------------------------------------------------------
-// Re-loads a destination record if needed and copies the latest version to
+// Reloads a destination record if needed and copies the latest version to
 // the session instance given as parameter.
 // ---------------------------------------------------------------------------
 //
@@ -551,23 +598,6 @@
     // ECmmRecordStatusModified  Error, session side only status
     // ECmmRecordStatusUnsaved   Skip load, not in database
 
-    //TODO, temporary block start
-    // Remove this codeblock after database change listeners are in place. This
-    // will force a database reload.
-    if ( iNetworkRecordStatus == ECmmRecordStatusLoaded )
-        {
-        iNetworkRecordStatus = ECmmRecordStatusExpired;
-        }
-    if ( iDestApRecordStatus == ECmmRecordStatusLoaded )
-        {
-        iDestApRecordStatus = ECmmRecordStatusExpired;
-        }
-    if ( iMetadataRecordStatus == ECmmRecordStatusLoaded )
-        {
-        iMetadataRecordStatus = ECmmRecordStatusExpired;
-        }
-    //TODO, temporary block end
-
     CommsDat::CCDRecordBase* aRecordPointer;
 
     switch ( aRecordType )
@@ -661,7 +691,7 @@
         {
         case ECmmDestinationStatusValid:
             {
-            if ( iStatus != ECmmDestinationStatusValid ) //TODO, how will external db changes affect this?
+            if ( iStatus != ECmmDestinationStatusValid )
                 {
                 // Error, a 'valid'-status on session side implies a 'valid'-status on cache side.
                 User::Leave( KErrCorrupt );