diff -r 6369bfd1b60d -r 08b5eae9f9ff homesync/contentmanager/mediaservant/src/msfillrulecontroller.cpp --- a/homesync/contentmanager/mediaservant/src/msfillrulecontroller.cpp Mon Nov 01 13:44:24 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,664 +0,0 @@ -/* -* 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: CMSFillRuleController class implementation -* -*/ - - -#include -#include -#include - -#include "cmfillrulecontainer.h" -#include "cmfillrule.h" -#include "msfillrulecontroller.h" -#include "msconstants.h" -#include "mediaservant.hrh" -#include "msengine.h" -#include "msdebug.h" - - -// -------------------------------------------------------------------------- -// CMSFillRuleController::NewL -// -------------------------------------------------------------------------- -// -CMSFillRuleController* CMSFillRuleController::NewL( CMSEngine& aMSEngine ) - { - LOG(_L("[MediaServant]\t CMSFillRuleController::NewL")); - - CMSFillRuleController* self = CMSFillRuleController::NewLC( aMSEngine ); - CleanupStack::Pop(self); - - return self; - } - -// -------------------------------------------------------------------------- -// CMSFillRuleController::NewLC -// -------------------------------------------------------------------------- -// -CMSFillRuleController* CMSFillRuleController::NewLC( CMSEngine& aMSEngine ) - { - LOG(_L("[MediaServant]\t CMSFillRuleController::NewLC")); - - CMSFillRuleController* self = new (ELeave) CMSFillRuleController( - aMSEngine ); - - CleanupStack::PushL(self); - self->ConstructL(); - - return self; - } - -// -------------------------------------------------------------------------- -// CMSFillRuleController::ConstructL -// -------------------------------------------------------------------------- -// -void CMSFillRuleController::ConstructL() - { - LOG(_L("[MediaServant]\t CMSFillRuleController::ConstructL")); - - if (iMSEngine) - { - InitializeRuleContainersL(); - } - } -// -------------------------------------------------------------------------- -// CMSFillRuleController::CMSFillRuleController() -// -------------------------------------------------------------------------- -// -CMSFillRuleController::CMSFillRuleController( CMSEngine& aMSEngine ) - { - LOG(_L("[MediaServant]\t CMSFillRuleController::CMSFillRuleController")); - - iMSEngine = &aMSEngine; - } - -// -------------------------------------------------------------------------- -// CMSFillRuleController::~CMSFillRuleController() -// -------------------------------------------------------------------------- -// -CMSFillRuleController::~CMSFillRuleController() - { - LOG(_L("[MediaServant]\t CMSFillRuleController::~CMSFillRuleController")); - - iFillListArray.ResetAndDestroy(); - iFillListArray.Close(); - - delete iRuleContainer; - } - -// -------------------------------------------------------------------------- -// CMSFillRuleController::FillListArray() -// Returns pointer to fill list array -// -------------------------------------------------------------------------- -// -RPointerArray* CMSFillRuleController::FillListArray() - { - LOG(_L("[MediaServant]\t CMSFillRuleController::FillListArray")); - - return &iFillListArray; - } - -// --------------------------------------------------------------------------- -// CMSFillRuleController::InitializeRuleContainersL -// initializes rule containers -// --------------------------------------------------------------------------- -// -void CMSFillRuleController::InitializeRuleContainersL() - { - LOG(_L("[MediaServant]\t CMSFillRuleController::\ - InitializeRuleContainersL")); - - TInt error( KErrNone ); - // Check if wizard has been executed - TBool runWizard = iMSEngine->GetAppWizardState( error ); - - if ( !runWizard ) - { - CreateFillRulesL(); - delete iRuleContainer; - iRuleContainer = NULL; - iRuleContainer = iMSEngine->FillRulesL(); - } - else - { - // FILL RULES - iRuleContainer = iMSEngine->FillRulesL(); - } - - // Creates pointer array to rules so we can change rule order at UI - // Operations done trough pointer array affects original rules - // in RuleContainer - if ( iRuleContainer ) - { - // Arrange rules by priority to pointer table - TInt rulecount = iRuleContainer->FillRuleCount(); - - for (TUint8 order = 0; order < rulecount; order++) - { - // search rule with desired priority - for (TInt index = 0; index < rulecount; index++) - { - - CCmFillRule* rule = iRuleContainer->FillRule(index); - TUint8 priority = rule->Priority(); - - if ( order == priority ) - { - CMSFillList* list = - CMSFillList::NewL( *iMSEngine, *rule ); - // add list to array - iFillListArray.AppendL( list ); - - // stop for loop - index = rulecount; - } - } - } - } - } - -// -------------------------------------------------------------------------- -// CMSFillRuleController::CreateFillRulesL() -// FOR TEST -// -------------------------------------------------------------------------- -// -void CMSFillRuleController::CreateFillRulesL() - { - CCmFillRuleContainer* fillRuleContainer = CCmFillRuleContainer::NewLC(); - - // default list 1 - CCmFillRule* defaultList1 = CCmFillRule::NewLC(); - - HBufC* temp = StringLoader::LoadLC( R_MS_DEFAULT_FILL_LIST_1 ); - HBufC8* listName = CnvUtfConverter::ConvertFromUnicodeToUtf8L( *temp ); - CleanupStack::PushL( listName ); - defaultList1->SetNameL( *listName ); - CleanupStack::PopAndDestroy( 2, temp ); - - defaultList1->SetMediaType( ECmImage ); - defaultList1->SetMethod( ECmLatest ); - defaultList1->SetSelected( ECmUnSelected ); - defaultList1->SetPriority( 0 ); - defaultList1->SetTemplateId( EMSDefaultImageList ); - defaultList1->SetStatus( ECmToBeFilled ); - defaultList1->SetLimitType( EMbits ); - defaultList1->SetAmount( KDefaultListSize50 ); - - fillRuleContainer->AddFillRuleL( defaultList1 ); - - // default list 2 - CCmFillRule* defaultList2 = CCmFillRule::NewLC(); - - temp = StringLoader::LoadLC( R_MS_DEFAULT_FILL_LIST_2 ); - listName = CnvUtfConverter::ConvertFromUnicodeToUtf8L( *temp ); - CleanupStack::PushL( listName ); - defaultList2->SetNameL( *listName ); - CleanupStack::PopAndDestroy( 2, temp ); - - defaultList2->SetMediaType( ECmVideo ); - defaultList2->SetMethod( ECmLatest ); - defaultList2->SetSelected( ECmUnSelected ); - defaultList2->SetPriority( 1 ); - defaultList2->SetTemplateId( EMSDefaultVideoList ); - defaultList2->SetStatus( ECmToBeFilled ); - defaultList2->SetLimitType( EMbits ); - defaultList2->SetAmount( KDefaultListSize50 ); - - fillRuleContainer->AddFillRuleL( defaultList2 ); - - // default list 3 - CCmFillRule* defaultList3 = CCmFillRule::NewLC(); - - temp = StringLoader::LoadLC( R_MS_DEFAULT_FILL_LIST_3 ); - listName = CnvUtfConverter::ConvertFromUnicodeToUtf8L( *temp ); - CleanupStack::PushL( listName ); - defaultList3->SetNameL( *listName ); - CleanupStack::PopAndDestroy( 2, temp ); - - defaultList3->SetMediaType( ECmAudio ); - defaultList3->SetMethod( ECmLatest ); - defaultList3->SetSelected( ECmUnSelected ); - defaultList3->SetPriority( 2 ); - defaultList3->SetTemplateId( EMSDefaultMusicList ); - defaultList3->SetStatus( ECmToBeFilled ); - defaultList3->SetLimitType( EMbits ); - defaultList3->SetAmount( KDefaultListSize200 ); - - fillRuleContainer->AddFillRuleL( defaultList3 ); - - iMSEngine->SetFillRulesL( fillRuleContainer ); - - CleanupStack::Pop( defaultList3 ); - CleanupStack::Pop( defaultList2 ); - CleanupStack::Pop( defaultList1 ); - CleanupStack::PopAndDestroy( fillRuleContainer ); - } - -// -------------------------------------------------------------------------- -// CMSFillRuleController::DeleteRuleL() -// Deletes current rule -// -------------------------------------------------------------------------- -// -void CMSFillRuleController::DeleteRuleL( TInt aCurrentIndex ) - { - LOG(_L("[MediaServant]\t CMSFillContainer::DeleteRuleL")); - - // get priority of selected rule - TInt currentPriority = - iFillListArray[ aCurrentIndex ]->List()->Priority(); - - // Rulecontainer must be scanned to find the index index of - // rule container. - // Priority can be used to compare because there can't be two rules - // with same priority. - for (TInt index = 0; index < iRuleContainer->FillRuleCount(); index++) - { - if (currentPriority == iRuleContainer->FillRule( index )->Priority()) - { - iFillListArray[ aCurrentIndex ]-> - List()->SetSelected( ECmDeleted ); - } - } - - // recalculate priorities - SetPriorities(); - - // store rules to server - iMSEngine->SetFillRulesL( iRuleContainer ); - - // update pointer array - UpdateArrayL(); - - } - -// -------------------------------------------------------------------------- -// CMSFillRuleController::AddRuleL() -// Adds new rule -// -------------------------------------------------------------------------- -// -void CMSFillRuleController::AddRuleL( CCmFillRule* aRule ) - { - LOG(_L("[MediaServant]\t CMSFillContainer::DeleteRuleL")); - - if ( aRule ) - { - TInt priority = iFillListArray.Count(); - aRule->SetPriority( priority ); - iRuleContainer->AddFillRuleL( aRule ); - - // store rules to server - iMSEngine->SetFillRulesL( iRuleContainer ); - - // update pointer array - UpdateArrayL(); - } - } - -// -------------------------------------------------------------------------- -// CMSFillRuleController::SetPriorities() -// Sets priorities of rule array -// -------------------------------------------------------------------------- -// -void CMSFillRuleController::SetPriorities() - { - TInt priority = 0; - - for ( TInt index = 0; index < iFillListArray.Count(); index++ ) - { - if ( iFillListArray[index]->List()->Selected() != ECmDeleted ) - { - iFillListArray[index]->List()->SetPriority( priority ); - priority++; // next list priority - } - } - } - -// -------------------------------------------------------------------------- -// CMSFillRuleController::compare() -// For sort. Sort is based on rule priority -// -------------------------------------------------------------------------- -// -TInt CMSFillRuleController::compare ( const CMSFillList& rule1, - const CMSFillList& rule2) - - { - LOG(_L("[MediaServant]\t CMSFillRuleController::compare")); - - TInt result = 0; - - if ( rule1.Priority() < rule2.Priority() ) - { - result = -1; - } - else if ( rule1.Priority() > rule2.Priority() ) - { - result = 1; - } - - return result; - } - -// -------------------------------------------------------------------------- -// CMSFillRuleController::ChangePriority() -// Change priorities of rules -// -------------------------------------------------------------------------- -// -void CMSFillRuleController::ChangePriority( TUint aTotalItem, - TUint aCurrentItem, - TInt aDirection ) - { - LOG(_L("[MediaServant]\t CMSFillRuleController::ChangePriority")); - - TLinearOrder key(CMSFillRuleController::compare); - - // up - if (aDirection == -1 && aCurrentItem) - { - // swap priotities of rules - iFillListArray[aCurrentItem]->List()->SetPriority(aCurrentItem-1); - iFillListArray[aCurrentItem-1]->List()->SetPriority(aCurrentItem); - - iFillListArray.Sort(key); - } - // down - else if ( aDirection == 1 && aCurrentItem < aTotalItem - 1 ) - { - // swap priotities of rules - iFillListArray[aCurrentItem]->List()->SetPriority(aCurrentItem+1); - iFillListArray[aCurrentItem+1]->List()->SetPriority(aCurrentItem); - - iFillListArray.Sort(key); - } - else - { - // Do nothing - } - } - -// -------------------------------------------------------------------------- -// CMSFillRuleController::UpdateArrayL() -// Resets old fill rule array and reads new rules from server -// -------------------------------------------------------------------------- -// -void CMSFillRuleController::UpdateArrayL() - { - LOG(_L("[MediaServant]\t CMSFillRuleController::UpdateArrayL")); - - // FILL RULES - delete iRuleContainer; - iRuleContainer = NULL; - iRuleContainer = iMSEngine->FillRulesL(); - - // Creates pointer array to rules so we can change rule order at UI - // Operations done trough pointer array affects original rules - // in RuleContainer - if ( iRuleContainer ) - { - iFillListArray.ResetAndDestroy(); - // Arrange rules by priority to pointer table - TInt rulecount = iRuleContainer->FillRuleCount(); - - for (TUint8 order = 0; order < rulecount; order++) - { - // search rule with desired priority - for (TInt index = 0; index < rulecount; index++) - { - - CCmFillRule* rule = iRuleContainer->FillRule(index); - TUint8 priority = rule->Priority(); - - if ( order == priority ) - { - // stop for loop - index = rulecount; - CMSFillList* list = - CMSFillList::NewLC( *iMSEngine, *rule ); - // add rule to array - iFillListArray.AppendL( list ); - CleanupStack::Pop( list ); - } - } - } - } - } - -// -------------------------------------------------------------------------- -// CMSFillRuleController::SaveRulesL() -// Sends fill rules to server -// -------------------------------------------------------------------------- -// -void CMSFillRuleController::SaveRulesL() - { - LOG(_L("[MediaServant]\t CMSFillRuleController::SaveRulesL")); - - iMSEngine->SetFillRulesL( iRuleContainer ); - } - - -// -------------------------------------------------------------------------- -// CMSFillRuleController::HasPriorityChangedL() -// Checks if list priorities has been changed -// -------------------------------------------------------------------------- -// -TBool CMSFillRuleController::HasPriorityChangedL() - { - LOG(_L("[MediaServant]\t CMSFillRuleController::\ - HasPriorityChangedL")); - - TBool status( EFalse ); - - CCmFillRuleContainer* fillLists = iMSEngine->FillRulesL(); - CleanupStack::PushL( fillLists ); - TInt listCount = fillLists->FillRuleCount(); - TInt arrayCount = iFillListArray.Count(); - - if ( listCount == arrayCount ) - { - for ( TInt index = 0; index < listCount; index++ ) - { - CCmFillRule* origList = fillLists->FillRule(index); - TInt origPriority = origList->Priority(); - - // lists are in priority order in iFillListArray - CCmFillRule* modList = iFillListArray[ origPriority ]->List(); - - // if list names are same we have the same lists - if ( origList->Name().Compare( modList->Name() ) ) - { - status = ETrue; - index = listCount; // break loop - } - } - } - else - { - status = ETrue; - } - - CleanupStack::PopAndDestroy( fillLists ); - return status; - } - -// -------------------------------------------------------------------------- -// CMSFillRuleController::HasSelectionsChanged() -// Checks if list activity has been changed -// -------------------------------------------------------------------------- -// -TBool CMSFillRuleController::HasSelectionsChanged( TCmFillRuleStatus aStatus ) - { - LOG(_L("[MediaServant]\t CMSFillRuleController::\ - HasSelectionsChanged")); - - TBool status( EFalse ); - - TInt listCount = iFillListArray.Count(); - - for ( TInt index = 0; index < listCount; index++ ) - { - if ( iFillListArray[ index ]->OriginalSelectionStatus() != - iFillListArray[ index ]->List()->Selected() && - iFillListArray[ index ]->OriginalSelectionStatus() != aStatus ) - { - // activity changed - status = ETrue; - index = listCount; - } - - } - return status; - } - -// -------------------------------------------------------------------------- -// CMSFillRuleController::RestoreOriginalSelections() -// -------------------------------------------------------------------------- -// -void CMSFillRuleController::RestoreOriginalSelections() - { - LOG(_L("[MediaServant]\t CMSFillRuleController::\ - RestoreOriginalSelections")); - TInt listCount = iFillListArray.Count(); - - for ( TInt index = 0; index < listCount; index++ ) - { - iFillListArray[index]->List()->SetSelected( - iFillListArray[index]->OriginalSelectionStatus() ); - } - } - - - - - -/***************** CMSFillList class implementation **********************/ - - -// -------------------------------------------------------------------------- -// CMSFillList::NewL -// -------------------------------------------------------------------------- -// -CMSFillList* CMSFillList::NewL( CMSEngine& aMSEngine, CCmFillRule& aFillList ) - { - LOG(_L("[MediaServant]\t CMSFillList::NewL")); - - CMSFillList* self = CMSFillList::NewLC( aMSEngine, aFillList ); - CleanupStack::Pop(self); - - return self; - } - -// -------------------------------------------------------------------------- -// CMSFillList::NewLC -// -------------------------------------------------------------------------- -// -CMSFillList* CMSFillList::NewLC( CMSEngine& aMSEngine, - CCmFillRule& aFillList ) - { - LOG(_L("[MediaServant]\t CMSFillList::NewLC")); - - CMSFillList* self = new (ELeave) CMSFillList( aMSEngine, aFillList ); - - CleanupStack::PushL(self); - self->ConstructL(); - - return self; - } - -// -------------------------------------------------------------------------- -// CMSFillList::ConstructL -// -------------------------------------------------------------------------- -// -void CMSFillList::ConstructL() - { - LOG(_L("[MediaServant]\t CMSFillList::ConstructL")); - - iListSize = iFillList->ListRealSizeInBytes(); - iItemCount = iFillList->ListRealCount(); - } -// -------------------------------------------------------------------------- -// CMSFillList::CMSFillList() -// -------------------------------------------------------------------------- -// -CMSFillList::CMSFillList( CMSEngine& aMSEngine, CCmFillRule& aFillList ) - { - LOG(_L("[MediaServant]\t CMSFillRuleController::CMSFillRuleController")); - iFillList = &aFillList; - iMSEngine = &aMSEngine; - - iSelected = iFillList->Selected(); - } - -// -------------------------------------------------------------------------- -// CMSFillList::~CMSFillList() -// -------------------------------------------------------------------------- -// -CMSFillList::~CMSFillList() - { - LOG(_L("[MediaServant]\t CMSFillList::~CMSFillList")); - } - -// -------------------------------------------------------------------------- -// CMSFillList::List() -// -------------------------------------------------------------------------- -// -CCmFillRule* CMSFillList::List() - { - LOG(_L("[MediaServant]\t CMSFillList::List")); - - return iFillList; - } - -// -------------------------------------------------------------------------- -// CMSFillList::List() -// -------------------------------------------------------------------------- -// -TUint32 CMSFillList::ListSize() - { - LOG(_L("[MediaServant]\t CMSFillList::ListSize")); - - return iListSize; - } - -// -------------------------------------------------------------------------- -// CMSFillList::List() -// -------------------------------------------------------------------------- -// -TUint32 CMSFillList::ItemCount() - { - LOG(_L("[MediaServant]\t CMSFillList::ItemCount")); - - return iItemCount; - } - -// -------------------------------------------------------------------------- -// CMSFillContainer::Priority -// Return list priority -// -------------------------------------------------------------------------- -// -TInt CMSFillList::Priority() const - { - return iFillList->Priority(); - } - -// -------------------------------------------------------------------------- -// CMSFillContainer::Priority -// Return list priority -// -------------------------------------------------------------------------- -// -TCmFillRuleStatus CMSFillList::OriginalSelectionStatus() - { - return iSelected; - } - -// End of File