/*
* Copyright (c) 2007 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:  Inline finction definitions for class TSearchParams.
*
*/


#include <StringLoader.h>

const TInt KIpsPlgArrayGranularity = 3;
// <cmail> mirrored
//_LIT( KIpsPlgPattern, "*%0U*" );
_LIT( KIpsPlgPattern, "*" );
// </cmail> 


// ---------------------------------------------------------------------------
// CIpsPlgSearch::TSearchParams::TSearchParams()
// ---------------------------------------------------------------------------
//
CIpsPlgSearch::TSearchParams::TSearchParams(
    const RPointerArray<TDesC>& aSearchStrings,
    const TFSMailMsgId& aMailbox,
    const RArray<TFSMailMsgId> aFolderIds,
    const TFSMailSortCriteria& aSortCriteria )
    :
    iSearchStrings( NULL ),
    iMailbox( aMailbox ),
    iSortCriteria( aSortCriteria )
    {
    TRAP_IGNORE( SetSearchStringsL( aSearchStrings ) );
    TRAP_IGNORE( SetFolderIdsL( aFolderIds ) );
    }

// ---------------------------------------------------------------------------
// CIpsPlgSearch::TSearchParams::~TSearchParams()
// ---------------------------------------------------------------------------
//
CIpsPlgSearch::TSearchParams::~TSearchParams()
    {
    iFolderIds.Reset();
    RemoveArray();
    }

// ---------------------------------------------------------------------------
// CIpsPlgSearch::TSearchParams::operator=()
// ---------------------------------------------------------------------------
//
CIpsPlgSearch::TSearchParams& CIpsPlgSearch::TSearchParams::operator=(
    const TSearchParams& aParams )
    {
    // Make sure the lists are empty.
    iFolderIds.Reset();
    RemoveArray();

    TRAP_IGNORE( SetSearchStringsL( *aParams.iSearchStrings ) );
    iMailbox = aParams.iMailbox;
    TRAP_IGNORE( SetFolderIdsL( aParams.iFolderIds ) );
    iSortCriteria = aParams.iSortCriteria;

    return *this;
    }

// ---------------------------------------------------------------------------
// CIpsPlgSearch::TSearchParams::operator=()
// ---------------------------------------------------------------------------
//
void CIpsPlgSearch::TSearchParams::operator+=(
    const TSearchParams& aParams )
    {
    // Update folder list and sort criteria.
    TRAP_IGNORE( AddFolderIdsL( aParams.iFolderIds ) );
    iSortCriteria = aParams.iSortCriteria;
    }

// ---------------------------------------------------------------------------
// CIpsPlgSearch::TSearchParams::RemoveArray()
// ---------------------------------------------------------------------------
//
void CIpsPlgSearch::TSearchParams::RemoveArray()
    {
    if ( iSearchStrings )
        {
        iSearchStrings->Reset();
        }

    delete iSearchStrings;
    iSearchStrings = NULL;
    }

// ---------------------------------------------------------------------------
// CIpsPlgSearch::TSearchParams::SetSearchStringsL()
// ---------------------------------------------------------------------------
//
void CIpsPlgSearch::TSearchParams::SetSearchStringsL(
    const RPointerArray<TDesC>& aSearchStrings )
    {
    RemoveArray();

    iSearchStrings =
        new( ELeave ) CDesC16ArrayFlat( KIpsPlgArrayGranularity );

    for ( TInt item = 0; item < aSearchStrings.Count(); item++ )
        {
        // <cmail> mirrored

        // Add the wildcards here.
        //TBuf<5> pattern( KIpsPlgPattern );
        RBuf destroyThisHackStringNow;
        destroyThisHackStringNow.CreateL(
            aSearchStrings[item]->Length() + 2 );
        CleanupClosePushL( destroyThisHackStringNow );

        destroyThisHackStringNow.Insert(0, KIpsPlgPattern);
        destroyThisHackStringNow.Append(*aSearchStrings[item]);
        destroyThisHackStringNow.Append(KIpsPlgPattern);
        /*
        StringLoader::Format(
            destroyThisHackStringNow, pattern, 0, *aSearchStrings[item] );
        */

        // </cmail> 

        
        iSearchStrings->AppendL( destroyThisHackStringNow ); //<cmail>

        CleanupStack::PopAndDestroy( &destroyThisHackStringNow );
        }
    }

// ---------------------------------------------------------------------------
// CIpsPlgSearch::TSearchParams::SetSearchStringsL()
// ---------------------------------------------------------------------------
//
void CIpsPlgSearch::TSearchParams::SetSearchStringsL(
    const CDesC16Array& aSearchStrings )
    {
    RemoveArray();

    iSearchStrings =
        new( ELeave ) CDesC16ArrayFlat( KIpsPlgArrayGranularity );

    for ( TInt item = 0; item < aSearchStrings.Count(); item++ )
        {
        iSearchStrings->AppendL( aSearchStrings[item] ); //<cmail>
        }
    }

// ---------------------------------------------------------------------------
// CIpsPlgSearch::TSearchParams::SetFolderIdsL()
// ---------------------------------------------------------------------------
//
void CIpsPlgSearch::TSearchParams::SetFolderIdsL(
    const RArray<TFSMailMsgId>& aFolderIds )
    {
    for ( TInt item = 0; item < aFolderIds.Count(); item++ )
        {
        iFolderIds.AppendL( aFolderIds[item] );
        }
    }

// ---------------------------------------------------------------------------
// CIpsPlgSearch::TSearchParams::FolderExists()
// ---------------------------------------------------------------------------
//
TBool CIpsPlgSearch::TSearchParams::FolderExists( const TFSMailMsgId& aFolderId )
    {
    for ( TInt existing = 0; existing < iFolderIds.Count(); existing++ )
        {
        if ( aFolderId == iFolderIds[existing] )
            {
            return ETrue;
            }
        }

    return EFalse;
    }

// ---------------------------------------------------------------------------
// CIpsPlgSearch::TSearchParams::AddFolderIdsL()
// ---------------------------------------------------------------------------
//
void CIpsPlgSearch::TSearchParams::AddFolderIdsL(
    const RArray<TFSMailMsgId>& aFolderIds )
    {
    for ( TInt item = 0; item < aFolderIds.Count(); item++ )
        {
        if ( !FolderExists( aFolderIds[item] ) )
            {
            iFolderIds.AppendL( aFolderIds[item] );
            }
        }
    }

// ---------------------------------------------------------------------------
// CIpsPlgSearch::TMsgContainer::SetFolderIdsL()
// ---------------------------------------------------------------------------
//
TMsvId CIpsPlgSearch::TMsgContainer::Id() const
    {
    return iId;
    }

// End of File
