wvuing/wvuieng/EngSrc/CCASearchData.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuieng/EngSrc/CCASearchData.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,223 @@
+/*
+* Copyright (c) 2002-2005 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:  Represents the searched data
+*
+*/
+
+
+// INCLUDE FILES
+#include    "CCASearchData.h"
+#include    "PrivateEngineDefinitions.h"
+
+#include    "ChatDebugPrint.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// Two-phased constructor.
+CCASearchData* CCASearchData::NewL()
+    {
+    CCASearchData* self = new ( ELeave ) CCASearchData;
+
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// Destructor
+CCASearchData::~CCASearchData()
+    {
+    delete iResults;
+    }
+
+// ---------------------------------------------------------
+// CCASearchData::NoMoreResultsAvailable
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CCASearchData::NoMoreResultsAvailable() const
+    {
+    return iCompleted;
+    }
+
+// ---------------------------------------------------------
+// CCASearchData::SearchResultType
+// ---------------------------------------------------------
+//
+EXPORT_C TImpsSearchResultType CCASearchData::SearchResultType() const
+    {
+    return iSearchResultType;
+    }
+
+// ---------------------------------------------------------
+// CCASearchData::SearchData
+// ---------------------------------------------------------
+//
+EXPORT_C TPtrC CCASearchData::SearchData( TInt aIndex ) const
+    {
+    CHAT_DP( D_CHAT_LIT( "CCASearchData::SearchData with index %d" ), aIndex );
+    CHAT_DP( D_CHAT_LIT( "SearchDataCount is %d" ), iResults->MdcaCount() );
+
+    return iResults->MdcaPoint( aIndex );
+    }
+
+// ---------------------------------------------------------
+// CCASearchData::SearchDataCount
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CCASearchData::SearchDataCount() const
+    {
+    CHAT_DP( D_CHAT_LIT( " CCASearchData::SearchDataCount is %d " ),
+             iResults->MdcaCount() );
+
+    return iResults->MdcaCount();
+    }
+
+// ---------------------------------------------------------
+// CCASearchData::HowManyResultsAvailable
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CCASearchData::HowManyResultsAvailable() const
+    {
+    CHAT_DP( D_CHAT_LIT( "CCASearchData::HowManyResultsAvailable is %d" ),
+             iMaximumResultsAvailable );
+
+    return iMaximumResultsAvailable;
+    }
+
+// ---------------------------------------------------------
+// CCASearchData::NextSearchIndex
+// ---------------------------------------------------------
+//
+TInt CCASearchData::NextSearchIndex() const
+    {
+    CHAT_DP( D_CHAT_LIT( "CCASearchData::NextSearchIndex is %d" ),
+             iServerNextIndex );
+
+    return iServerNextIndex;
+    }
+
+// ---------------------------------------------------------
+// CCASearchData::UpdateDataL
+// ---------------------------------------------------------
+//
+void CCASearchData::UpdateDataL( TInt                    aIndex,
+                                 TBool                   aCompleted,
+                                 TImpsSearchResultType   aType,
+                                 MDesCArray*             aResults,
+                                 TInt                    /*aSearchLimit*/ )
+    {
+    CHAT_DP( D_CHAT_LIT( "CCASearchData::UpdateDataL()" ) );
+
+    iServerNextIndex = aIndex;
+
+    iCompleted = aCompleted;
+
+    iSearchResultType = aType;
+
+    if ( aResults )
+        {
+        TInt count( aResults->MdcaCount() );
+
+        CHAT_DP( D_CHAT_LIT( "New results     %d" ), aResults->MdcaCount() );
+
+        for ( TInt arrayIndex( 0 ); arrayIndex < count; ++arrayIndex )
+            {
+            TPtrC searchData( aResults->MdcaPoint( arrayIndex ) );
+            // We don't care about index
+            TInt ignore;
+            // Don't add duplicates
+            if ( iResults->Find( searchData, ignore ) != 0 )
+                {
+                iResults->AppendL( searchData );
+                }
+            }
+
+        // Check iServerNextIndex against really received results
+        // If server for some reason gives wrong index it
+        // messes up our logic and causes crashes
+        TInt resultCount = iResults->MdcaCount();
+        if ( iServerNextIndex > resultCount && !iCompleted )
+            {
+            iServerNextIndex = resultCount;
+            }
+
+        CHAT_DP( D_CHAT_LIT( "We have results %d" ), resultCount );
+        }
+    else // Search was succesfull, but there were no results so clear the array
+        {
+        iResults->Reset();
+        }
+    }
+
+// ---------------------------------------------------------
+// CCASearchData::ClearResults
+// ---------------------------------------------------------
+//
+void CCASearchData::ClearResults()
+    {
+    CHAT_DP_TXT( "CCASearchData::ClearResults()...starts" );
+    iServerNextIndex = 0;
+
+    iMaximumResultsAvailable = 0;
+
+    iCompleted = EFalse;
+
+    iResults->Reset();
+
+    CHAT_DP_TXT( "CCASearchData::ClearResults()...over" );
+    }
+
+// ---------------------------------------------------------
+// CCASearchData::WeHaveData
+// ---------------------------------------------------------
+//
+TBool CCASearchData::WeHaveData( TInt aNextIndex  ) const
+    {
+    TBool haveData( aNextIndex < iServerNextIndex );
+    CHAT_DP( D_CHAT_LIT( "CCASearchData::WeHaveData()...Havedata: %d" ),
+             haveData );
+    return haveData;
+    }
+
+// ---------------------------------------------------------
+// CCASearchData::UpdateMaximumPossibleResults
+// ---------------------------------------------------------
+//
+void CCASearchData::UpdateMaximumPossibleResults( TInt aMaxResults )
+    {
+    iMaximumResultsAvailable = aMaxResults;
+    }
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CCASearchData::CCASearchData()
+        : iCompleted( EFalse ),
+        iServerNextIndex( 0 ),
+        iMaximumResultsAvailable( 0 )
+    {
+    }
+
+// Symbian OS default constructor can leave.
+void CCASearchData::ConstructL()
+    {
+    CHAT_DP_TXT( "CCASearchData::ConstructL()...starts" );
+
+    iResults = new ( ELeave )CDesCArrayFlat( KSearchDataGranularity );
+
+    CHAT_DP_TXT( "   ConstructL()...ends" );
+    }
+
+//  End of File