homesync/contentmanager/homesyncwizard/src/cmsselectionstorage.cpp
author samhuttu
Mon, 01 Nov 2010 13:44:24 +0200
branchIOP_Improvements
changeset 39 6369bfd1b60d
parent 0 7f85d04be362
permissions -rw-r--r--
rename branch with a shorter name

/*
* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  Implementation of setup wizard selection storage
*
*/


// INCLUDE FILES
#include <commdb.h>
#include <WlanCdbCols.h>
#include <wlanmgmtclient.h>
#include <driveinfo.h>

#include "cmsettingsfactory.h"
#include "cmmediaserverfull.h"
#include "cmdriveinfo.h"
#include "cmsettings.h"
#include "cmsselectionstorage.h"
#include "msengine.h"
#include "cmstorerulecontainer.h"
#include "cmfillrulecontainer.h"
#include "cmstorerule.h"
#include "cmfillrule.h"
#include "msconstants.h"
#include "msdebug.h"

// --------------------------------------------------------------------------
// CMSSelectionStorage::NewL
// --------------------------------------------------------------------------
//
CMSSelectionStorage* CMSSelectionStorage::NewL(
                            CMSEngine& aMSEngine,
                            RPointerArray<CCmMediaServerFull>& aServers,
                            RFs& aFs )
    {
    LOG(_L("[MSAppWizard]\t CMSSelectionStorage::NewL"));
    
    CMSSelectionStorage* self = CMSSelectionStorage::NewLC( aMSEngine,
                                                            aServers,
                                                            aFs );
        
    CleanupStack::Pop(self);
    return self;
    }

// --------------------------------------------------------------------------
// CMSSelectionStorage::NewLC
// --------------------------------------------------------------------------
//
CMSSelectionStorage* CMSSelectionStorage::NewLC(
                            CMSEngine& aMSEngine,
                            RPointerArray<CCmMediaServerFull>& aServers,
                            RFs& aFs )
    {
    LOG(_L("[MSAppWizard]\t CMSSelectionStorage::NewLC"));
    
    CMSSelectionStorage* self = new (ELeave) CMSSelectionStorage( aMSEngine,
                                                                  aServers,
                                                                  aFs );
    CleanupStack::PushL(self);
    self->ConstructL(  );
    
    return self;
    }
    
// --------------------------------------------------------------------------
// CMSSelectionStorage::CMSSelectionStorage
// --------------------------------------------------------------------------
//
CMSSelectionStorage::CMSSelectionStorage(
                            CMSEngine& aMSEngine,
                            RPointerArray<CCmMediaServerFull>& aServers,
                            RFs& aFs ) :
    iMSEngine( aMSEngine ), iServers( aServers ), iFs( aFs )
    {
    LOG(_L("[MSAppWizard]\t CMSSelectionStorage::CMSSelectionStorage"));
    
    // remove fill & store usage flag from every server
    for ( TInt i = 0; i < iServers.Count(); i++ )
        {
        CCmMediaServerFull* server = iServers[i];
        server->SetStoreUsage( EFalse );
        server->SetStoreUsage( EFalse );
        server->SetIsActive( EFalse );
        }
    }

// --------------------------------------------------------------------------
// CMSSelectionStorage::ConstructL
// --------------------------------------------------------------------------
//
void CMSSelectionStorage::ConstructL()
    {
    LOG(_L("[MSAppWizard]\t CMSSelectionStorage::ConstructL"));
    
    iStoreRules = iMSEngine.StoreRulesL();
    iFillRules = iMSEngine.FillRulesL();
    iServiceState = ETrue; // default: manual sync   
    }

// --------------------------------------------------------------------------
// CMSSelectionStorage::~CMSSelectionStorage
// --------------------------------------------------------------------------
//
CMSSelectionStorage::~CMSSelectionStorage()
    {
    LOG(_L("[MSAppWizard]\t CMSSelectionStorage::~CMSSelectionStorage"));

    delete iSelectedFillLists;
    delete iSelectedStoreLists;
    delete iStoreRules;
    delete iFillRules;
    }

// --------------------------------------------------------------------------
// CMSSelectionStorage::StoreMSSettingsL
// --------------------------------------------------------------------------
//
void CMSSelectionStorage::StoreMSSettingsL()
    {
    LOG(_L("[MSAppWizard]\t CMSSelectionStorage::StoreMSSettingsL begins"));

    // Set store rules
    iMSEngine.SetStoreRulesL( iStoreRules );
    
    // Set fill rules
    iMSEngine.SetFillRulesL( iFillRules );
    
    // Set syncrhronization state

    // if ETrue -> MANUAL mode
    // if EFalse -> AUTOMATIC mode
    if( iServiceState )
        {
        iMSEngine.SetServiceState( ECmServiceContentManager,
                                   ECmServiceStateDisabled );
        }
    else
        {
        iMSEngine.SetServiceState( ECmServiceContentManager,
                                   ECmServiceStateAutomatic );
        // Set wlan scanning on if AUTOMATIC mode
        SetWlanScanL();
        }
    LOG(_L("[MSAppWizard]\t CMSSelectionStorage::StoreMSSettingsL ends"));
    }

// --------------------------------------------------------------------------
// CMSSelectionStorage::SetWlanScanL
// --------------------------------------------------------------------------
//
void CMSSelectionStorage::SetWlanScanL()
    {
    LOG(_L("[MSAppWizard]\t CMSSelectionStorage::SetWlanScanL"));

    // open commsdb
    CCommsDatabase* commsDb = CCommsDatabase::NewL();
    CleanupStack::PushL( commsDb );
#ifndef __WINS__
    // open wlan table
    CCommsDbTableView* view = commsDb->OpenViewMatchingUintLC
        (
        TPtrC( WLAN_DEVICE_SETTINGS ),
        TPtrC( WLAN_DEVICE_SETTINGS_TYPE ), KWlanUserSettings
        );

    User::LeaveIfError( view->GotoFirstRecord() );
    User::LeaveIfError( view->UpdateRecord() );

    // set scan interval
    view->WriteUintL( TPtrC( WLAN_BG_SCAN_INTERVAL ), 
                      KWlanScanNetworkInterval60 );
    User::LeaveIfError( view->PutRecordChanges() );

    CleanupStack::PopAndDestroy( view );
#endif
    CleanupStack::PopAndDestroy( commsDb );

#ifndef __WINS__
    CWlanMgmtClient* wlanMgmtClient = CWlanMgmtClient::NewL();
    CleanupStack::PushL( wlanMgmtClient );
    // notify about changes
    wlanMgmtClient->NotifyChangedSettings();
    CleanupStack::PopAndDestroy( wlanMgmtClient );
 #endif
    }

// --------------------------------------------------------------------------
// CMSSelectionStorage::SetServersForFillRulesL
// --------------------------------------------------------------------------
//
void CMSSelectionStorage::SetServersForFillRulesL( 
                                CArrayFix<TInt>& aSelectedIndexes)
    {
    LOG(_L("[MSAppWizard]\t CMSSelectionStorage::SetServersForFillRulesL "));

    // set server activity anyway
    for ( TInt idx = 0; idx < aSelectedIndexes.Count(); idx++ )
        {
        CCmMediaServerFull* server = iServers[aSelectedIndexes.At(idx)];
        server->SetFillUsage( ETrue );
        server->SetIsActive( ETrue );
        }

    // Get fill list count
    TInt fillrulecount = iFillRules->FillRuleCount();
    
    // remove all servers from store lists and set unselected
    for ( TInt index = 0; index < fillrulecount; index++ )
        {
        CCmFillRule* rule = iFillRules->FillRule( index );
        // remove list selection
        rule->SetSelected( ECmUnSelected );
        // remove servers
        RemoveServersFromFillRuleL( rule );
        }

    // set selected servers for selected lists
    for( TInt i=0; i<iSelectedFillLists->Count(); i++ )
        {
        TInt index = (*iSelectedFillLists)[i];
        CCmFillRule* rule = iFillRules->FillRule(index);
        rule->SetSelected( ECmSelected );
        
        SetServersForFillRuleL( rule, aSelectedIndexes );
        }
    }
    
// --------------------------------------------------------------------------
// CMSSelectionStorage::SetServersForFillRuleL
// --------------------------------------------------------------------------
//
void CMSSelectionStorage::SetServersForFillRuleL( CCmFillRule* aRule,
                                        CArrayFix<TInt>& aSelectedIndexes )
    {
    LOG(_L("[MSAppWizard]\t SetServersForFillRuleL"));
    TInt ruleServerCount = aRule->MediaServerCount();

    for ( TInt iy = 0; iy < aSelectedIndexes.Count(); iy++ )
        {
        CCmMediaServerFull* server = iServers[aSelectedIndexes.At(iy)];

        TPtrC8 serverUDN = server->MediaServer();
        aRule->AddMediaServerL( serverUDN );        
        server->SetIsActive( KServerActive );
        }    
    }

// --------------------------------------------------------------------------
// CMSSelectionStorage::SetServersForStoreRulesL
// --------------------------------------------------------------------------
//
void CMSSelectionStorage::SetServersForStoreRulesL(
                                CArrayFix<TInt>& aSelectedIndexes,
                                RPointerArray<CCmMediaServerFull>& aServers )
    {

    // set server activity anyway
    for ( TInt idx = 0; idx < aSelectedIndexes.Count(); idx++ )
        {
        CCmMediaServerFull* server = aServers[aSelectedIndexes.At(idx)];
        server->SetStoreUsage( ETrue );
        server->SetIsActive( ETrue );
        }

    // remove all servers from store lists and set unselected
    for ( TInt index = 0; index < iStoreRules->StoreRuleCount(); index++ )
        {
        CCmStoreRule* rule = iStoreRules->StoreRule( index );
        // remove list selection
        rule->SetSelected( ECmUnSelected );
        RemoveServersFromStoreRuleL( rule );
        }       

    // set selected servers for selected lists
    for ( TInt i = 0; i < iSelectedStoreLists->Count(); i++ )
        {
        TInt selectionValue = iSelectedStoreLists->At( i );

        CCmStoreRule* rule = iStoreRules->StoreRule( selectionValue );
        rule->SetSelected( ECmSelected );
        //...and set selected servers to list
        SetServersForStoreRuleL( rule, aSelectedIndexes, aServers );
        }    
    }
    
// --------------------------------------------------------------------------
// CMSSelectionStorage::SetServersForStoreRuleL
// --------------------------------------------------------------------------
//
void CMSSelectionStorage::SetServersForStoreRuleL(
                                CCmStoreRule* aRule,
                                CArrayFix<TInt>& aSelectedIndexes,
                                RPointerArray<CCmMediaServerFull>& aServers )
    {
    LOG(_L("[MSAppWizard]\t SetServersForStoreRuleL"));            

    for ( TInt iy = 0; iy < aSelectedIndexes.Count(); iy++ )
        {
        CCmMediaServerFull* server = aServers[aSelectedIndexes.At(iy)];
        TPtrC8 serverUDN = server->MediaServer();
        aRule->AddMediaServerL( serverUDN );
        server->SetIsActive( KServerActive );
        }
    }

// --------------------------------------------------------------------------
// CMSSelectionStorage::RemoveServersFromFillRuleL
// --------------------------------------------------------------------------
//
void CMSSelectionStorage::RemoveServersFromFillRuleL( CCmFillRule* aRule )
    {
    //Remove old servers from the rule
    LOG(_L("[MSAppWizard]\t RemoveServersFromFillRuleL"));
    TInt ruleServerCount = aRule->MediaServerCount();
    for ( TInt index = ruleServerCount-1; index >= 0; index-- )
        {
        const TDesC8& ruleServerUDN = aRule->MediaServerL( index );
        aRule->DeleteMediaServer( ruleServerUDN );
        }
    }

// --------------------------------------------------------------------------
// CMSSelectionStorage::RemoveServersFromStoreRuleL
// --------------------------------------------------------------------------
//
void CMSSelectionStorage::RemoveServersFromStoreRuleL( CCmStoreRule* aRule )
    {
    //Remove old servers from the rule
    LOG(_L("[MSAppWizard]\t RemoveServersFromStoreRuleL"));
    TInt ruleServerCount = aRule->MediaServerCount();
    for ( TInt index = ruleServerCount-1; index >= 0; index-- )
        {
        const TDesC8& ruleServerUDN = aRule->MediaServerL( index );
        aRule->DeleteMediaServer( ruleServerUDN );
        }
    }

// --------------------------------------------------------------------------
// CMSSelectionStorage::SetStoreListSelections
// --------------------------------------------------------------------------
//
void CMSSelectionStorage::SetStoreListSelections( CArrayFix<TInt>& aSelections )
    {
    if ( iSelectedStoreLists )
        {
        delete iSelectedStoreLists;
        iSelectedStoreLists = NULL;
        }

    iSelectedStoreLists = &aSelections;
    }

// --------------------------------------------------------------------------
// CMSSelectionStorage::ClearStoreListSelections
// --------------------------------------------------------------------------
//
void CMSSelectionStorage::ClearStoreListSelections()
    {
    iSelectedStoreLists->Reset();
    }
    
// --------------------------------------------------------------------------
// CMSSelectionStorage::SetFillListSelections
// --------------------------------------------------------------------------
//
void CMSSelectionStorage::SetFillListSelections(
                                    CArrayFix<TInt>& aSelections )
    {
    if ( iSelectedFillLists )
        {
        delete iSelectedFillLists;
        iSelectedFillLists = NULL;
        }

    iSelectedFillLists = &aSelections;
    }

// --------------------------------------------------------------------------
// CMSSelectionStorage::SetAutoManualSelection
// --------------------------------------------------------------------------
//
void CMSSelectionStorage::SetAutoManualSelection( TBool aSelection )
    {
    iServiceState = aSelection;
    }

// --------------------------------------------------------------------------
// CMSSelectionStorage::AutoManualSelection
// --------------------------------------------------------------------------
//
TBool CMSSelectionStorage::AutoManualSelection()
    {
    return iServiceState;
    }

// --------------------------------------------------------------------------
// CMSSelectionStorage::SetDriveInformationL
// --------------------------------------------------------------------------
//
void CMSSelectionStorage::SetDriveInformationL()
    {
    LOG(_L("[MSAppWizard]\t SetDriveInformationL"));

    MCmSettings* settings = CCmSettingsFactory::NewCmSettingsEngineLC();
    RPointerArray<CCmDriveInfo> driveArray;
    CleanupClosePushL( driveArray );
    
    settings->DriveListL( iFs, driveArray );

    TInt64 quota(0);

    for ( TInt i = 0; i < driveArray.Count(); i++ )
        {        
        if ( driveArray[i]->DriveType() == DriveInfo::EDriveRemovable )
            {
            // mmc
            quota = ( driveArray[i]->DriveSize() * KMMCDefaultQuota ) / 100;
            LOG(_L("[MSAppWizard]\t CMSSelectionStorage::\
            SetDriveInformationL memory card quota set"));
            }
        else
            {
            // internal hd
            quota = ( driveArray[i]->DriveSize() * KHDDefaultQuota ) / 100;
            LOG(_L("[MSAppWizard]\t CMSSelectionStorage::\
            SetDriveInformationL mass memory quota set"));                      
            }

        // set quota
        driveArray[i]->SetDriveQuota( quota );
        }


    iMSEngine.SetDrivesL( driveArray );
    driveArray.ResetAndDestroy();
    CleanupStack::PopAndDestroy( &driveArray );
	settings->Close();
    CleanupStack::Pop(); // settings
    }
    
// End of File