diff -r 000000000000 -r 96612d01cf9f videofeeds/vcnsuiengine/src/vcxnscontentsearchhandler.cpp --- /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 +#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( 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 ); + } + }