convergedcallengine/spsettings/backuphelper/src/spsbackuphelperperformer.cpp
changeset 0 ff3b6d0fd310
equal deleted inserted replaced
-1:000000000000 0:ff3b6d0fd310
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Service provider settings backup helper performer
       
    15 *
       
    16 */
       
    17 
       
    18 #include <e32base.h>
       
    19 #include <spsettings.h>
       
    20 #include <spentry.h>
       
    21 #include <centralrepository.h>
       
    22 
       
    23 #include "spsapilogger.h"
       
    24 #include "spsbackuphelperperformer.h"
       
    25 #include "spcrkeys.h"
       
    26 
       
    27 // Constants
       
    28 
       
    29 // ---------------------------------------------------------------------------
       
    30 // 
       
    31 // ---------------------------------------------------------------------------
       
    32 //
       
    33 CSpsBackupHelperPerformer* CSpsBackupHelperPerformer::NewL()
       
    34     {
       
    35     CSpsBackupHelperPerformer* self = new ( ELeave ) CSpsBackupHelperPerformer;
       
    36     CleanupStack::PushL( self );
       
    37     self->ConstructL();
       
    38     CleanupStack::Pop( self );
       
    39     return self;
       
    40     }
       
    41 
       
    42 // ---------------------------------------------------------------------------
       
    43 // 
       
    44 // ---------------------------------------------------------------------------
       
    45 //
       
    46 CSpsBackupHelperPerformer::~CSpsBackupHelperPerformer ()
       
    47     {
       
    48     delete iServiceProviderSettings;
       
    49     iEntries.ResetAndDestroy();
       
    50     }
       
    51 
       
    52 // ---------------------------------------------------------------------------
       
    53 // 
       
    54 // ---------------------------------------------------------------------------
       
    55 //
       
    56 CSpsBackupHelperPerformer::CSpsBackupHelperPerformer()
       
    57     {
       
    58 
       
    59     }
       
    60 
       
    61 // ---------------------------------------------------------------------------
       
    62 // 
       
    63 // ---------------------------------------------------------------------------
       
    64 //
       
    65 void CSpsBackupHelperPerformer::ConstructL()
       
    66     {
       
    67     XSPSLOGSTRING( "CSpsBackupHelperPerformer::ConstructL IN" );
       
    68     iServiceProviderSettings = CSPSettings::NewL();
       
    69     
       
    70     XSPSLOGSTRING( "CSpsBackupHelperPerformer::ConstructL OUT" );
       
    71     }
       
    72 
       
    73 // ---------------------------------------------------------------------------
       
    74 // 
       
    75 // ---------------------------------------------------------------------------
       
    76 //
       
    77 void CSpsBackupHelperPerformer::PerformL()
       
    78     {
       
    79     // Read restored settings
       
    80     ReadSettingsL();
       
    81     
       
    82     // Reset to factory settings
       
    83     ResetToFactorySettingsL();
       
    84     
       
    85     // Write extra service id's
       
    86     FinalizeRestoreL();
       
    87     }
       
    88 
       
    89 // ---------------------------------------------------------------------------
       
    90 // 
       
    91 // ---------------------------------------------------------------------------
       
    92 //
       
    93 void CSpsBackupHelperPerformer::ReadSettingsL()
       
    94     {
       
    95     XSPSLOGSTRING( "CSpsBackupHelperPerformer::ReadSettingsL IN" );
       
    96     RIdArray ids;
       
    97     CleanupClosePushL( ids );
       
    98     iServiceProviderSettings->FindServiceIdsL( ids );
       
    99     
       
   100     // Make sure that id's are in correct order!
       
   101     for( TInt i = 0; i < ids.Count(); i++ )
       
   102         {
       
   103         TRAP_IGNORE( 
       
   104             CSPEntry* entry = CSPEntry::NewLC();
       
   105             User::LeaveIfError( 
       
   106                 iServiceProviderSettings->FindEntryL( ids[i], *entry ) );
       
   107             
       
   108             // Make sure that all properties are loaded
       
   109             entry->GetAllProperties(); 
       
   110             iEntries.AppendL( entry );
       
   111             CleanupStack::Pop( entry );
       
   112             )
       
   113 
       
   114         }
       
   115     
       
   116     XSPSLOGSTRING2( 
       
   117         "CSpsBackupHelperPerformer::ReadSettingsL Service count=%i", 
       
   118         iEntries.Count() );
       
   119     
       
   120     CleanupStack::PopAndDestroy( &ids );
       
   121     XSPSLOGSTRING( "CSpsBackupHelperPerformer::ReadSettingsL OUT" );
       
   122     }
       
   123 
       
   124 // ---------------------------------------------------------------------------
       
   125 // 
       
   126 // ---------------------------------------------------------------------------
       
   127 //
       
   128 void CSpsBackupHelperPerformer::FinalizeRestoreL()
       
   129     {
       
   130     XSPSLOGSTRING( "CSpsBackupHelperPerformer::FinalizeRestoreL IN" );
       
   131     
       
   132     // Determine how many settings exists after factory settings
       
   133     TUint nextFreeServiceId = NextFreeServiceIdL();
       
   134     
       
   135     // Restore old settings
       
   136     // Make sure that id's are in correct order!
       
   137     for( TInt i = 0; i < iEntries.Count(); i++ )
       
   138         {
       
   139         // Start inputting restored settings from next free serviceid
       
   140         if( iEntries[i]->GetServiceId() == nextFreeServiceId )
       
   141             {
       
   142             // Service id to be inserver is same as next free serviceid
       
   143             nextFreeServiceId = iEntries[i]->GetServiceId();
       
   144             iServiceProviderSettings->AddEntryL( *iEntries[i] );
       
   145             nextFreeServiceId++; // Entry added
       
   146             }
       
   147         else if( iEntries[i]->GetServiceId() > nextFreeServiceId )
       
   148             {
       
   149             // Change inserted service id when service id is larger
       
   150             // than current service count.
       
   151             // This is done since backed up settings can be non linear
       
   152             SetNextFreeServiceIdL( iEntries[i]->GetServiceId() );
       
   153             nextFreeServiceId = iEntries[i]->GetServiceId();
       
   154             iServiceProviderSettings->AddEntryL( *iEntries[i] );
       
   155             nextFreeServiceId++; // Entry added
       
   156             }
       
   157         
       
   158         }
       
   159     
       
   160     XSPSLOGSTRING2( 
       
   161         "CSpsBackupHelperPerformer::FinalizeRestoreL Next free serviceid=%i", 
       
   162         nextFreeServiceId );
       
   163     
       
   164     XSPSLOGSTRING( "CSpsBackupHelperPerformer::FinalizeRestoreL OUT" );
       
   165     }
       
   166 
       
   167 // ---------------------------------------------------------------------------
       
   168 // 
       
   169 // ---------------------------------------------------------------------------
       
   170 //
       
   171 void CSpsBackupHelperPerformer::ResetToFactorySettingsL()
       
   172     {
       
   173     XSPSLOGSTRING( "CSpsBackupHelperPerformer::ResetToFactorySettingsL IN" );
       
   174     // Ok if leave ( No service provider settings )
       
   175     CRepository* cenrep = CRepository::NewLC( KCRUidSPSettings );
       
   176     User::LeaveIfError( cenrep->Reset() );
       
   177     CleanupStack::PopAndDestroy( cenrep );
       
   178     XSPSLOGSTRING( "CSpsBackupHelperPerformer::ResetToFactorySettingsL OUT" );
       
   179     }
       
   180 
       
   181 // ---------------------------------------------------------------------------
       
   182 // 
       
   183 // ---------------------------------------------------------------------------
       
   184 //
       
   185 TInt CSpsBackupHelperPerformer::NextFreeServiceIdL()
       
   186     {
       
   187     XSPSLOGSTRING( "CSpsBackupHelperPerformer::NextFreeServiceIdL IN" );
       
   188     TInt ret(0);
       
   189     CRepository* cenrep = CRepository::NewLC( KCRUidSPSettings );
       
   190     
       
   191     User::LeaveIfError( cenrep->Get( KServiceIdCounter, ret ) );
       
   192     
       
   193     CleanupStack::PopAndDestroy( cenrep );
       
   194     XSPSLOGSTRING2( "CSpsBackupHelperPerformer::NextFreeServiceIdL OUT, %i", ret );
       
   195     return ret;
       
   196     }
       
   197 
       
   198 // ---------------------------------------------------------------------------
       
   199 // 
       
   200 // ---------------------------------------------------------------------------
       
   201 //
       
   202 void CSpsBackupHelperPerformer::SetNextFreeServiceIdL( TInt aServiceId )
       
   203     {
       
   204     XSPSLOGSTRING2( "CSpsBackupHelperPerformer::SetNextFreeServiceIdL IN, %i", aServiceId );
       
   205     CRepository* cenrep = CRepository::NewLC( KCRUidSPSettings );
       
   206     
       
   207     User::LeaveIfError( cenrep->Set( KServiceIdCounter, aServiceId ) );
       
   208     
       
   209     CleanupStack::PopAndDestroy( cenrep );
       
   210     XSPSLOGSTRING( "CSpsBackupHelperPerformer::SetNextFreeServiceIdL OUT" );
       
   211     }
       
   212 
       
   213 
       
   214 // End of file