--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/vcnsuiengine/src/vcxnscontentsearchhandler.cpp Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,351 @@
+/*
+* 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 the License "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: Content search functionality*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <bldvariant.hrh>
+#include "IptvDebug.h"
+#include "TIptvRssSearchQuery.h"
+
+#include "CIptvVodContentClient.h"
+#include "vcxnscontentsearchobserver.h"
+#include "vcxnscontentclienthandler.h"
+#include "vcxnscontentsearchhandler.h"
+#include "vcxnsuiengine.h"
+#include "vcxnscategory.h"
+#include "vcxnscategoryprovider.h"
+#include "vcxnscontentprovider.h"
+#include "vcxnsserviceprovider.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CVcxNsContentSearchHandler::CVcxNsContentSearchHandler()
+// -----------------------------------------------------------------------------
+//
+CVcxNsContentSearchHandler::CVcxNsContentSearchHandler(
+ CVcxNsUiEngine& aUiEngine )
+: iUiEngine( aUiEngine )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxNsContentSearchHandler::NewL()
+// -----------------------------------------------------------------------------
+//
+CVcxNsContentSearchHandler* CVcxNsContentSearchHandler::NewL(
+ CVcxNsUiEngine& aUiEngine )
+ {
+ IPTVLOGSTRING_HIGH_LEVEL("UI Engine ## CVcxNsContentSearchHandler::NewL()");
+
+ return new (ELeave) CVcxNsContentSearchHandler( aUiEngine );
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxNsContentSearchHandler::~CVcxNsContentSearchHandler()
+// -----------------------------------------------------------------------------
+//
+CVcxNsContentSearchHandler::~CVcxNsContentSearchHandler()
+ {
+ iSearchObservers.Reset();
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxNsContentSearchHandler::StartNewSearchL()
+// -----------------------------------------------------------------------------
+//
+void CVcxNsContentSearchHandler::StartNewSearchL()
+ {
+ for (TInt i = 0; i < iSearchObservers.Count(); i++ )
+ {
+ iSearchObservers[i]->StartSearchL( EFalse );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxNsContentSearchHandler::SearchL()
+// -----------------------------------------------------------------------------
+//
+void CVcxNsContentSearchHandler::SearchL( const TDesC& aSearchString )
+ {
+ CIptvVodContentClient* contentClient (
+ iUiEngine.GetContentClientHandlerL()->GetVodContentClientL(
+ iUiEngine.ActiveService()));
+ if ( contentClient )
+ {
+ TIptvRssSearchQuery query;
+ // Set search string does not really change the given descriptor.
+ query.SetSearchString( const_cast<TDesC&>( aSearchString ) );
+ contentClient->Search( query );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxNsContentSearchHandler::CancelSearchL()
+// -----------------------------------------------------------------------------
+//
+void CVcxNsContentSearchHandler::CancelSearchL()
+ {
+ CIptvVodContentClient* contentClient (
+ iUiEngine.GetContentClientHandlerL()->GetVodContentClientL(
+ iUiEngine.ActiveService()));
+ if ( contentClient )
+ {
+ contentClient->CancelSearch( );
+ }
+
+ UpdateCategoryVideoCountL();
+ SearchCancelled();
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxNsContentSearchHandler::HandleSearchMsgL()
+// -----------------------------------------------------------------------------
+//
+void CVcxNsContentSearchHandler::HandleSearchMsgL( TInt aStatus, TInt aInfo )
+ {
+ IPTVLOGSTRING_HIGH_LEVEL("UI Engine ## CVcxNsContentSearchHandler::HandleSearchMsgL()");
+
+ TVcxNsAppState appState = iUiEngine.VcAppState();
+
+ switch ( aStatus )
+ {
+ case KIptvErrorRssSearchNoIap:
+ {
+ //KIptvErrorRssSearchNoIap was handled earlier, and if status comes
+ //to this point, start search again.
+ IPTVLOGSTRING_HIGH_LEVEL("UI Engine ## IAP selected, start search again");
+ for (TInt i = 0; i < iSearchObservers.Count(); i++ )
+ {
+ iSearchObservers[i]->StartSearchL( ETrue );
+ }
+ }
+ break;
+ case KIptvErrorRssSearchStarted:
+ {
+ IPTVLOGSTRING_HIGH_LEVEL("UI Engine ## Search Started ");
+ ShowInfoPopupL( EFalse );
+
+ for (TInt i = 0; i < iSearchObservers.Count(); i++ )
+ {
+ iSearchObservers[i]->SearchStartedL();
+ }
+
+ //When new search has started, empty existing search result list.
+ if ( iUiEngine.ContentProvider() )
+ {
+ iUiEngine.ContentProvider()->RemoveCategoryData(
+ iUiEngine.ActiveService(), KIptvRssSearchCategoryId );
+ }
+
+ if ( appState == EStateContentView &&
+ iUiEngine.ContentProvider() &&
+ iUiEngine.ActiveCategory() == KIptvRssSearchCategoryId )
+ {
+ iUiEngine.ContentProvider()->RefreshView();
+ }
+ }
+ break;
+
+ case KIptvErrorRssSearchFailed:
+ {
+ IPTVLOGSTRING_HIGH_LEVEL("UI Engine ## Search Failed ");
+ ShowInfoPopupL( EFalse );
+
+ for (TInt i = 0; i < iSearchObservers.Count(); i++ )
+ {
+ iSearchObservers[i]->HandleSearchResultL( EFalse );
+ }
+ }
+ break;
+
+ case KIptvErrorRssSearchSucceed:
+ {
+ IPTVLOGSTRING_HIGH_LEVEL("UI Engine ## Search Succeeded ");
+ ShowInfoPopupL( EFalse );
+
+ if ( appState == EStateContentView &&
+ iUiEngine.ContentProvider() &&
+ iUiEngine.ActiveCategory() == KIptvRssSearchCategoryId )
+ {
+ iUiEngine.ContentProvider()->UpdateIconsPathL();
+ iUiEngine.ContentProvider()->RefreshView();
+ }
+ }
+ break;
+
+ case KIptvRssSearchContentUpdateCompleted:
+ {
+ IPTVLOGSTRING_HIGH_LEVEL("UI Engine ## Search content update completed ");
+
+ //Remove category data again to make sure that we have valid cache for search results
+ if ( iUiEngine.ContentProvider() )
+ {
+ iUiEngine.ContentProvider()->RemoveCategoryData( iUiEngine.ActiveService(),
+ KIptvRssSearchCategoryId );
+ }
+
+ //Category state: Switch to content state, set search category as active category
+ //Content state: List contents (refresh view) with search results
+
+ for (TInt i = 0; i < iSearchObservers.Count(); i++ )
+ {
+ iSearchObservers[i]->HandleSearchResultL( ETrue );
+ }
+
+ if ( appState == EStateCategoryView )
+ {
+ iUiEngine.SetActiveCategory ( KIptvRssSearchCategoryId );
+ iUiEngine.SetVcAppState( EStateContentView );
+ iUiEngine.CategoryProvider()->HandleAppStateChangedL();
+ }
+ else if ( appState == EStateCustomView )
+ {
+ iUiEngine.SetActiveCategory ( KIptvRssSearchCategoryId );
+ iUiEngine.SetVcAppState( EStateContentView );
+ iUiEngine.ServiceProvider()->HandleAppStateChangedL();
+ }
+ else if ( appState == EStateContentView )
+ {
+ iUiEngine.ContentProvider()->RefreshView();
+ }
+
+ UpdateCategoryVideoCountL();
+ }
+ break;
+
+ case KIptvRssSearchThumbnailCount:
+ {
+ IPTVLOGSTRING2_HIGH_LEVEL("UI Engine ## Search thumbnail count %d", aInfo);
+ iThumbnailCount = aInfo;
+ ShowInfoPopupL( ETrue );
+ }
+ break;
+
+ case KIptvRssSearchContentThumbnailDownloaded:
+ {
+ iThumbnailsDownloaded++;
+ IPTVLOGSTRING2_HIGH_LEVEL("UI Engine ## Search thumbnail %d downloaded", iThumbnailsDownloaded);
+ ShowInfoPopupL( ETrue );
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxNsContentSearchHandler::RegisterObserver()
+// -----------------------------------------------------------------------------
+//
+void CVcxNsContentSearchHandler::RegisterObserver( MVcxNsContentSearchObserver* aObserver )
+ {
+ // should use find instead of loop
+ for ( TInt i = 0; i < iSearchObservers.Count(); i++ )
+ {
+ if( iSearchObservers[i] == aObserver )
+ {
+ return;
+ }
+ }
+
+ iSearchObservers.Append( aObserver );
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxNsContentSearchHandler::DeRegisterObserver()
+// -----------------------------------------------------------------------------
+//
+void CVcxNsContentSearchHandler::DeRegisterObserver( MVcxNsContentSearchObserver* aObserver )
+ {
+ // should use find instead of loop
+ for ( TInt i = 0; i < iSearchObservers.Count(); i++ )
+ {
+ if( iSearchObservers[i] == aObserver )
+ {
+ iSearchObservers.Remove( i );
+ iSearchObservers.Compress();
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CVcxNsContentSearchHandler::UpdateCategoryVideoCountL()
+// -----------------------------------------------------------------------------
+//
+void CVcxNsContentSearchHandler::UpdateCategoryVideoCountL( )
+ {
+ //Category's video count needs to be updated to keep search
+ //category's video count in UI up to date.
+ //Other categories are updated during normal content update.
+ CVcxNsCategory* activeCategory =
+ iUiEngine.GetCategoryProviderL()->GetActiveCategoryDataL();
+
+ if ( activeCategory )
+ {
+ TInt videoCount = iUiEngine.GetContentProviderL()->GetContentsL().Count();
+ activeCategory->SetVideoCount( videoCount );
+ iUiEngine.CategoryProvider()->UpdateActiveCategoryDataL( *activeCategory );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// Shows thumbnail loading pop-up
+// -----------------------------------------------------------------------------
+//
+void CVcxNsContentSearchHandler::ShowInfoPopupL( TBool aVisible )
+ {
+ IPTVLOGSTRING_LOW_LEVEL("CVcxNsContentSearchHandler::ShowInfoPopupL");
+ if ( !aVisible )
+ {
+ // Hiding pop-up, so reset the values
+ iThumbnailCount = 0;
+ iThumbnailsDownloaded = 0;
+ }
+
+ if ( iUiEngine.VcAppState() == EStateContentView &&
+ iUiEngine.ActiveCategory() == KIptvRssSearchCategoryId )
+ {
+ if ( iUiEngine.ContentProvider() &&
+ ( !iUiEngine.ServiceProvider() ||
+ !iUiEngine.ServiceProvider()->GetActiveServiceData() ||
+ iUiEngine.ServiceProvider()->GetActiveServiceData()->GetUpdateStatus()
+ != CVcxNsService::EUpdateOngoing ) )
+ {
+ iUiEngine.ContentProvider()->ShowUpdatingNoteL(
+ aVisible, iThumbnailCount, iThumbnailsDownloaded );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// Search cancelled by user
+// -----------------------------------------------------------------------------
+//
+void CVcxNsContentSearchHandler::SearchCancelled( )
+ {
+ IPTVLOGSTRING_LOW_LEVEL("CVcxNsContentSearchHandler::SearchCancelled()");
+ if ( iUiEngine.VcAppState() == EStateCustomView &&
+ iUiEngine.ActiveCategory() == KIptvRssSearchCategoryId )
+ {
+ iUiEngine.SetActiveService( iUiEngine.ActiveServiceGroup() );
+ iUiEngine.SetActiveServiceGroup( KMaxTUint );
+ }
+ }