diff -r 000000000000 -r 96612d01cf9f videofeeds/server/IptvSearchManager/src/CIptvSearchManager.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videofeeds/server/IptvSearchManager/src/CIptvSearchManager.cpp Mon Jan 18 20:21:12 2010 +0200 @@ -0,0 +1,1005 @@ +/* +* 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 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: +* +*/ + + + + +#include "TIptvRssSearchQuery.h" +#include "CIptvEpgCategory.h" +#include "CIptvEpgPluginInterface.h" +#include "IptvDebug.h" +#include "CIptvEpgContent.h" +#include "CIptvMediaContent.h" +#include +#include +#include +#include +#include + +#include "CIptvMyVideosGlobalFileId.h" +#include "CIptvService.h" +#include "CIptvSearchManager.h" +#include "CIptvServer.h" +#include "CIptvServiceManager.h" +#include "CIptvVodContentContentBriefDetails.h" +#include "CIptvVodContentCategoryBriefDetails.h" +#include "CIptvVodContentContentFullDetails.h" +#include "CIptvEpgVodMsqQueue.h" +#include "CIptvContentIdMediaContentItem.h" +#include "CIptvEpgSession.h" + +_LIT( KIptvSearchStringKeyword, "#search#" ); + +const TInt KParentalRatingOff = 0; + +// --------------------------------------------------------- +// CIptvSearchManager::NewL +// +// --------------------------------------------------------- +CIptvSearchManager* CIptvSearchManager::NewL( CIptvServer& aServer, + CIptvEpgSession& aParent, + CIptvEpgVodMsqQueue* aVodMsgQueue ) + { + CIptvSearchManager* self = new (ELeave) CIptvSearchManager( aServer, aParent ); + CleanupStack::PushL( self ); + self->ConstructL( aVodMsgQueue ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------- +// CIptvSearchManager::~CIptvSearchManager +// +// --------------------------------------------------------- +CIptvSearchManager::~CIptvSearchManager() + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::~CIptvSearchManager()"); + + iUsedContentKeys.Reset(); + + ClearAllResults(); + delete iFileMan; + + iVodMsgQueues.Reset(); + delete iUpdater; + delete iSearchCategory; + delete iCurrentService; + iAllContentFullDetails.ResetAndDestroy(); + iMediaContents.ResetAndDestroy(); + iFs.Close(); + + delete iRssPlugin; + + if ( iCenRepNotifyHandler ) + { + iCenRepNotifyHandler->StopListening(); + delete iCenRepNotifyHandler; + } + + delete iCenRepSession; + + delete iSearchUrlTemplate; + } + +// --------------------------------------------------------- +// CIptvSearchManager::CIptvSearchManager +// +// --------------------------------------------------------- +CIptvSearchManager::CIptvSearchManager( CIptvServer& aServer, + CIptvEpgSession& aParent ) : + iServer( aServer ), + iParent( aParent ), + iParentalControl( KParentalRatingOff ) + { + ResetContentKey(); + } + +// --------------------------------------------------------- +// CIptvSearchManager::ConstructL +// +// --------------------------------------------------------- +void CIptvSearchManager::ConstructL( CIptvEpgVodMsqQueue* aVodMsgQueue ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::ConstructL()"); + + User::LeaveIfError( iFs.Connect() ); + + iFileMan = CFileMan::NewL( iFs ); + + iVodMsgQueues.InsertInAddressOrder( aVodMsgQueue ); + + iUpdater = CIptvEpgManagerUpdater::NewL(*this); + + iSearchCategory = CIptvVodContentCategoryBriefDetails::NewL(); + iSearchCategory->iCategoryId = KIptvVodContentCategoryRootId; + iSearchCategory->iIsSearchCategory = ETrue; + + TRAPD( ret, iCenRepSession = CRepository::NewL( KIptvCenRepUid ) ); + + if ( ret == KErrNone && iCenRepSession ) + { + // Register CenRep change notifier. + iCenRepNotifyHandler = CCenRepNotifyHandler::NewL( + *this, + *iCenRepSession, + CCenRepNotifyHandler::EIntKey, + KIptvCenRepParentControlKey ); + iCenRepNotifyHandler->StartListeningL(); + + // Read settings from CenRep. + ReadCenRepData(); + } + + // Just to make sure we dont have null pointer available + iSearchUrlTemplate = HBufC::NewL( 0 ); + } + +// ----------------------------------------------------------------------------- +// CIptvSearchManager::ReadCenRepData() +// CenRep +// ----------------------------------------------------------------------------- +// +void CIptvSearchManager::ReadCenRepData() + { + IPTVLOGSTRING_LOW_LEVEL( "Search Mgr ## CIptvSearchManager::ReadCenRepData" ); + + if ( iCenRepSession ) + { + TInt age; + if ( iCenRepSession->Get( KIptvCenRepParentControlKey, age ) != KErrNone ) + { + age = KIptvCenRepParentControlKeyDefault; + } + iParentalControl = age; + } + IPTVLOGSTRING2_LOW_LEVEL("Search Mgr ## Currently used parental rating = %d", iParentalControl ); + } + +// --------------------------------------------------------- +// CIptvSearchManager::HandleNotifyInt +// +// --------------------------------------------------------- +void CIptvSearchManager::HandleNotifyInt( TUint32 aId, TInt aNewValue ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::HandleNotifyInt"); + if ( aId == KIptvCenRepParentControlKey ) + { + IPTVLOGSTRING2_LOW_LEVEL( "Search Mgr ## Parental control key changed. New value = %d", aNewValue ); + iParentalControl = aNewValue; + } + } + +// --------------------------------------------------------- +// CIptvSearchManager::AddEpgVodMsgQueue +// +// --------------------------------------------------------- +void CIptvSearchManager::AddEpgVodMsgQueue( CIptvEpgVodMsqQueue* aVodMsgQueue ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::UpdateEpgVodMsgQueue()"); + + if ( aVodMsgQueue ) + { + iVodMsgQueues.InsertInAddressOrder( aVodMsgQueue ); + } + } + +// --------------------------------------------------------- +// CIptvSearchManager::RemoveEpgVodMsgQueue +// +// --------------------------------------------------------- +void CIptvSearchManager::RemoveEpgVodMsgQueue( CIptvEpgVodMsqQueue* aVodMsgQueue ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::RemoveEpgVodMsgQueue()"); + + for ( TInt i = 0; i < iVodMsgQueues.Count(); i++ ) + { + if ( iVodMsgQueues[i] == aVodMsgQueue ) + { + iVodMsgQueues.Remove( i ); + return; + } + } + } + +// --------------------------------------------------------- +// CIptvSearchManager::ParseSearchAddressL +// +// --------------------------------------------------------- +void CIptvSearchManager::ParseSearchAddressL( TIptvRssSearchQuery& aQuery ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::ParseSearchAddressL()"); + + TInt newTotalLength = aQuery.SearchString().Length() + + iSearchUrlTemplate->Length(); + + HBufC* parsedSearchUrl = HBufC::NewL( newTotalLength ); + CleanupStack::PushL( parsedSearchUrl ); + parsedSearchUrl->Des().Copy( *iSearchUrlTemplate ); + + // Try searching the 'search=' string from the template + TInt queryLocation = parsedSearchUrl->Find( KIptvSearchStringKeyword ); + if( queryLocation != KErrNotFound ) + { + // Replace KIptvSearchStringKeyword with given search string + parsedSearchUrl->Des().Replace( queryLocation, + KIptvSearchStringKeyword().Length(), + aQuery.SearchString() ); + } + + CUri8* inetUri = UriUtils::CreateUriL( *parsedSearchUrl ); + CleanupStack::PushL( inetUri ); + + HBufC8* parameter = HBufC8::NewLC( inetUri->Uri().UriDes().Length() ); + _LIT8( KStringFormat, "%S"); + parameter->Des().Format( KStringFormat, + &inetUri->Uri().UriDes() ); + + HBufC* actualSearchUrl = HBufC::NewLC( parameter->Length() ); + actualSearchUrl->Des().Copy( *parameter ); + + iCurrentService->SetSearchUrlL( *actualSearchUrl ); + CleanupStack::PopAndDestroy( actualSearchUrl ); + CleanupStack::PopAndDestroy( parameter ); + CleanupStack::PopAndDestroy( inetUri ); + CleanupStack::PopAndDestroy( parsedSearchUrl ); + } + +// --------------------------------------------------------- +// CIptvSearchManager::UpdateUsedContentIdsListL +// +// --------------------------------------------------------- +void CIptvSearchManager::UpdateUsedContentIdsListL( RArray& aUsedIdArray ) + { + iUsedContentKeys.Reset(); + for ( TInt i = 0; i < aUsedIdArray.Count(); i++ ) + { + IPTVLOGSTRING2_LOW_LEVEL("Search Mgr ## CIptvSearchManager::UpdateUsedContentIdsListL() adding Content ID %d to used list.", aUsedIdArray[i]); + + iUsedContentKeys.AppendL( aUsedIdArray[i] ); + } + } + +// --------------------------------------------------------- +// CIptvSearchManager::Search +// +// --------------------------------------------------------- +TInt CIptvSearchManager::Search( TIptvRssSearchQuery& aQuery ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::Search()"); + + TInt retVal = KErrNone; + ClearAllResults(); + + if( IsSearchPossible() && !iPluginIsRunning ) + { + TInt err = KErrNone; + TRAP( err, HandleSearchL( aQuery ) ); + retVal = err; + } + else + { + retVal = KErrNotReady; + } + return retVal; + } + +// --------------------------------------------------------- +// CIptvSearchManager::CancelSearch +// +// --------------------------------------------------------- +TInt CIptvSearchManager::CancelSearch() + { + iUpdater->Stop(); + iPluginIsRunning = EFalse; + delete iRssPlugin; + iRssPlugin = NULL; + // If vod update aint running, close ecom session + if ( ! iParent.IsPluginRunning() ) + { + REComSession::FinalClose(); + } + + ClearAllResults(); + return KErrNone; + } + +// --------------------------------------------------------- +// CIptvSearchManager::HandleSearchL +// +// --------------------------------------------------------- +void CIptvSearchManager::HandleSearchL( TIptvRssSearchQuery& aQuery ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::HandleSearchL()"); + + ParseSearchAddressL( aQuery ); + if( iRssPlugin ) + { + delete iRssPlugin; + iRssPlugin = NULL; + } + + iUpdater->Start(); + + iRssPlugin = CIptvEpgPluginInterface::NewL( iCurrentService->iUid ); + iRssPlugin->SetVodCallback( this ); + iRssPlugin->SetServiceInformation( iCurrentService, ETrue ); + iPluginIsRunning = ETrue; + iRssPlugin->RunPlugin(); + } + +// --------------------------------------------------------- +// CIptvSearchManager::SearchCategoryBriefDetailsL +// +// --------------------------------------------------------- +CIptvVodContentCategoryBriefDetails* CIptvSearchManager::SearchCategoryContentBriefDetailsL() + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::SearchCategoryContentBriefDetailsL()"); + + CIptvVodContentCategoryBriefDetails* searchCat = NULL; + if( IsSearchPossible() ) + { + searchCat = CIptvVodContentCategoryBriefDetails::NewL(); + searchCat->iCategoryId = KIptvRssSearchCategoryId; + searchCat->iIsSearchCategory = ETrue; + searchCat->iContentCount = iSearchCategory->iContentCount; + IPTVLOGSTRING2_LOW_LEVEL( "Content count for search category = %u", searchCat->iContentCount ); + } + return searchCat; + } + +// --------------------------------------------------------- +// CIptvSearchManager::GetSearchContentBriefDetailsL +// +// --------------------------------------------------------- +void CIptvSearchManager::GetSearchContentBriefDetailsL( TIptvCategoryId aContentId, + TDesC& /*aSearchString*/, + TUint32 /*aFrom*/, + TUint32 /*aAmount*/, + TUint32& aTotalAmount, + RPointerArray& aEcgList ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::GetSearchContentBriefDetailsL()"); + + TInt contentsAdded = 0; + if( aContentId == KIptvRssSearchCategoryId ) + { + for( TInt i = 0; i < iAllContentFullDetails.Count(); i++ ) + { + CIptvVodContentContentFullDetails* fullDetails = iAllContentFullDetails[i]; // Owned by the array + // Check the parental control + if( iParentalControl == KParentalRatingOff || + fullDetails->iRatingAge < iParentalControl ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## Parental rating check passed"); + CIptvVodContentContentBriefDetails* bd = CIptvVodContentContentBriefDetails::NewL(); + CleanupStack::PushL( bd ); + bd->iContentId = fullDetails->iContentId; + bd->iName.Copy( fullDetails->iName ); + bd->iThumbnailPath.Copy( fullDetails->iThumbnailPath ); + bd->iPlaytime = fullDetails->iPlaytime; + bd->iSize = fullDetails->iSize; + bd->iFileId->iDrive = fullDetails->iFileId->iDrive; + bd->iFileId->iFileId = fullDetails->iFileId->iFileId; + bd->iPreviewGlobalFileId->iDrive = fullDetails->iPreviewGlobalFileId->iDrive; + bd->iPreviewGlobalFileId->iFileId = fullDetails->iPreviewGlobalFileId->iFileId; + bd->iPubDate= fullDetails->iPubDate; + bd->iLanguage.Copy( fullDetails->iLanguage ); + bd->iRatingAge = fullDetails->iRatingAge; + bd->SetBrowserUrlL( fullDetails->GetBrowserUrlL() ); + aEcgList.AppendL( bd ); + CleanupStack::Pop( bd ); + contentsAdded++; + } + else + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## Content skipped. Reason: Parental Rating"); + IPTVLOGSTRING2_LOW_LEVEL("Search Mgr ## Device parental rating = %d", iParentalControl ); + IPTVLOGSTRING2_LOW_LEVEL("Search Mgr ## Contents parental rating = %d", fullDetails->iRatingAge ); + } + } + } + aTotalAmount = contentsAdded; + } + +// --------------------------------------------------------- +// CIptvSearchManager::GetParentCategory +// +// --------------------------------------------------------- +TInt CIptvSearchManager::GetParentCategory( TIptvCategoryId aCategoryId, + TIptvCategoryId& aParentCategoryId ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::GetParentCategory()"); + + TInt retVal = KErrNotSupported; + if( aCategoryId == KIptvRssSearchCategoryId ) + { + aParentCategoryId = KIptvVodContentCategoryRootId; + retVal = KErrNone; + } + return retVal; + } + +// --------------------------------------------------------- +// CIptvSearchManager::SetServiceId +// +// --------------------------------------------------------- +TInt CIptvSearchManager::SetServiceId( TUint32 aServiceId ) + { + IPTVLOGSTRING2_LOW_LEVEL("Search Mgr ## CIptvSearchManager::SetServiceId(%d)", aServiceId); + iServiceId = aServiceId; + return KErrNone; + } + +// --------------------------------------------------------- +// CIptvSearchManager::SetServiceL +// +// --------------------------------------------------------- +void CIptvSearchManager::SetServiceL( CIptvEpgService* aService ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::SetServiceL()"); + + if( iCurrentService ) + { + delete iCurrentService; + iCurrentService = NULL; + } + iCurrentService = CIptvEpgService::NewL(); + + iCurrentService->iAddress.Copy( aService->iAddress); + iCurrentService->SetSearchUrlL( aService->SearchUrl() ); + iCurrentService->iIap = aService->iIap; + iCurrentService->iUserName.Copy( aService->iUserName ); + iCurrentService->iPassword.Copy( aService->iPassword ); + iCurrentService->iUid = aService->iUid; + iCurrentService->iUpdateSet = aService->iUpdateSet; + iCurrentService->iServiceType = aService->iServiceType; + iCurrentService->iServiceId = aService->iServiceId; + iCurrentService->iLastUpdated = aService->iLastUpdated; + + iServiceId = iCurrentService->iServiceId; + + if( iSearchUrlTemplate ) + { + delete iSearchUrlTemplate; + iSearchUrlTemplate = NULL; + } + iSearchUrlTemplate = aService->SearchUrl().AllocL(); + + ResolveThumbnailDirectory(); + } + +// --------------------------------------------------------- +// CIptvSearchManager::ResolveThumbnailDirectory +// +// --------------------------------------------------------- +void CIptvSearchManager::ResolveThumbnailDirectory() + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::ResolveThumbnailDirectory"); + iThumbnailDirectory.Zero(); + TRAPD( error, CIptvUtil::GetPathL( iFs, + EIptvPathRssSearchThumbnail, + iServiceId, + iThumbnailDirectory, + EFalse ) ); + if( error != KErrNone ) + { + IPTVLOGSTRING2_LOW_LEVEL("CIptvUtil::GetPathL failed with error %d", error ); + } + } + +// --------------------------------------------------------- +// CIptvSearchManager::SetIap +// +// --------------------------------------------------------- +void CIptvSearchManager::SetIap( TUint32 aIap ) + { + IPTVLOGSTRING2_LOW_LEVEL("Search Mgr ## CIptvSearchManager::SetIap(%d)", aIap); + + iIap = aIap; + } + +// --------------------------------------------------------- +// CIptvSearchManager::StartedL +// +// --------------------------------------------------------- +void CIptvSearchManager::StartedL() + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::StartedL() -- RSS Plugin STARTED!"); + } + +// --------------------------------------------------------- +// CIptvSearchManager::ContentUpdateCompletedL +// +// --------------------------------------------------------- +void CIptvSearchManager::ContentUpdateCompletedL() + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::ContentUpdateCompletedL()"); + // Service id = 0 because we dont have to bring this information + // over IPC. Service ID is already on the client side. + for ( TInt i = 0; i < iVodMsgQueues.Count(); i++ ) + { + if ( iVodMsgQueues[i] ) + { + iVodMsgQueues[i]->SendMessageToClientL( KIptvRssSearchContentUpdateCompleted, 0 ); + } + } + } + +// --------------------------------------------------------- +// CIptvSearchManager::FinishedL +// +// --------------------------------------------------------- +TInt CIptvSearchManager::FinishedL( TTime& /*aUpdateInterval*/ ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::FinishedL() -- RSS Plugin FINISHED!"); + + iPluginIsRunning = EFalse; + + return KErrNone; + } + +// --------------------------------------------------------- +// CIptvSearchManager::AddCategoryL +// +// --------------------------------------------------------- +TInt CIptvSearchManager::AddCategoryL( CIptvEpgCategory& /*aCategory*/, + TUint32& /*aCategoryKey*/ ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::AddCategoryL()"); + + return KErrNone; + } + +// --------------------------------------------------------- +// CIptvSearchManager::AddContentL +// +// --------------------------------------------------------- +TInt CIptvSearchManager::AddContentL( CIptvEpgContent& aContent, + RPointerArray aMediaContents, + TUint32& aContentKey ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::AddContentL()"); + + IncrementContentKey(); + aContentKey = GetContentKey(); + CIptvVodContentContentFullDetails* details = CreateContentFullDetailsFromEpgDataL( aContent ); + CleanupStack::PushL( details ); + details->iContentId = GetContentKey(); + iAllContentFullDetails.AppendL( details ); // Ownership in an array + CleanupStack::Pop( details ); + + CIptvContentIdMediaContentItem* item = CIptvContentIdMediaContentItem::NewL(); + CleanupStack::PushL( item ); + item->SetContentId( GetContentKey() ); + item->SetMediaContentArrayL( aMediaContents ); + + iMediaContents.AppendL( item ); // item variable's ownership now in iMediaContents + CleanupStack::Pop( item ); + + iSearchCategory->iContentCount++; + IPTVLOGSTRING2_LOW_LEVEL( "iSearchCategory->iContentCount = %u", iSearchCategory->iContentCount ); + + return KErrNone; + } + +// --------------------------------------------------------- +// CIptvSearchManager::UpdateServiceThumbnailL +// +// --------------------------------------------------------- +TInt CIptvSearchManager::UpdateServiceThumbnailL( + TDesC& /*aIconFilePath*/, + const TBool /*aGrouped*/ ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::UpdateServiceThumbnailL()"); + + return KErrNone; + } + +// --------------------------------------------------------- +// CIptvSearchManager::AddRelationL +// +// --------------------------------------------------------- +TInt CIptvSearchManager::AddRelationL( TUint32& /*aCategoryKey*/, + TUint32& /*aContentKey*/ ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::AddRelationL()"); + + return KErrNone; + } + +// --------------------------------------------------------- +// CIptvSearchManager::ErrorL +// +// --------------------------------------------------------- +void CIptvSearchManager::ErrorL(TInt aError, TInt aInfo ) + { + IPTVLOGSTRING3_LOW_LEVEL("Search Mgr ## CIptvSearchManager::ErrorL(%d, %d)", aError, aInfo); + + for ( TInt i = 0; i < iVodMsgQueues.Count(); i++ ) + { + if ( iVodMsgQueues[i] ) + { + iVodMsgQueues[i]->SendMessageToClientL(aError, aInfo); + } + } + } + +// --------------------------------------------------------- +// CIptvSearchManager::UpdateCategoryIconL +// +// --------------------------------------------------------- +TInt CIptvSearchManager::UpdateCategoryIconL( + TUint32& /*aCategoryKey*/, + TUint32& /*aIconFileId*/, + TDesC& aIconFilePath, + TBool aIsUrl ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::UpdateCategoryIconL()"); + + if( !aIsUrl ) + { + iSearchCategory->iThumbnailPath.Copy( aIconFilePath ); + } + + return KErrNone; + } + +// --------------------------------------------------------- +// CIptvSearchManager::UpdateContentIconL +// +// --------------------------------------------------------- +TInt CIptvSearchManager::UpdateContentIconL( + TUint32& aContentKey, + TUint32& /*aIconFileId*/, + TDesC& aIconFilePath, + TBool aIsUrl ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::UpdateContentIconL()"); + + if( !aIsUrl ) + { + // Find the content + for( TInt i = 0; i < iAllContentFullDetails.Count(); i++ ) + { + CIptvVodContentContentFullDetails* fd = iAllContentFullDetails[i]; + if( fd->iContentId == aContentKey ) + { + fd->iThumbnailPath.Copy( aIconFilePath ); + } + } + } + + return KErrNone; + } + +// --------------------------------------------------------- +// CIptvSearchManager::IsSearchPossible +// +// --------------------------------------------------------- +TBool CIptvSearchManager::IsSearchPossible() const + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::IsSearchPossible()"); + + TBool isPossible = EFalse; + // Here we check if there is + if( iCurrentService && + iSearchUrlTemplate && + iSearchUrlTemplate->Length() > 0 ) + { + IPTVLOGSTRING_LOW_LEVEL("CIptvSearchManager::IsSearchPossible: Search is possible"); + isPossible = ETrue; + } + else + { + IPTVLOGSTRING_LOW_LEVEL("CIptvSearchManager::IsSearchPossible: Search is NOT possible"); + } + return isPossible; + } + +// --------------------------------------------------------- +// CIptvSearchManager::PrepareForNewSearch +// +// --------------------------------------------------------- +void CIptvSearchManager::ClearAllResults() + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::ClearAllResults()"); + + iAllContentFullDetails.ResetAndDestroy(); + iMediaContents.ResetAndDestroy(); + ResetContentKey(); + // Remove contents of iThumbnailDirectory + if( iThumbnailDirectory.Length() > 0 && + BaflUtils::PathExists( iFs, iThumbnailDirectory ) ) + { + TInt error = iFileMan->Delete( iThumbnailDirectory, CFileMan::ERecurse ); + if( error != KErrNone ) + { + IPTVLOGSTRING2_LOW_LEVEL("Failed to remove directory %S", &iThumbnailDirectory ); + } + } + + iSearchCategory->iContentCount = 0; + } + +// --------------------------------------------------------- +// CIptvSearchManager::GetContentAccessListL +// +// --------------------------------------------------------- +void CIptvSearchManager::GetContentAccessListL( + TUint32 aContentId, + RPointerArray& aContents ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::GetContentAccessListL()"); + + for( TInt i = 0; i < iMediaContents.Count(); i++ ) + { + if( iMediaContents[i]->ContentId() == aContentId ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::GetContentAccessListL() FOUND MATCH!"); + iMediaContents[i]->GetMediaContentsL( aContents ); + i = iMediaContents.Count(); // Get out of here. break; would work as well + } + } + } + +// --------------------------------------------------------- +// CIptvSearchManager::GetContentAccessL +// +// --------------------------------------------------------- +CIptvMediaContent* CIptvSearchManager::GetContentAccessL( TUint32 aContentId, TUint32 aIndex ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::GetContentAccessL()"); + + CIptvMediaContent* returnContent = NULL; + + for( TInt i = 0; i < iMediaContents.Count(); i++ ) + { + CIptvContentIdMediaContentItem* contentItem = iMediaContents[i]; + if( contentItem->ContentId() == aContentId ) + { + returnContent = contentItem->MediaContentByIndexL( aIndex ); + i = iMediaContents.Count(); + } + } + return returnContent; + } + +// --------------------------------------------------------- +// CIptvSearchManager::GetContentDetailsL +// +// --------------------------------------------------------- +TInt CIptvSearchManager::GetContentDetailsL( TIptvContentId aContentId, + CIptvVodContentContentFullDetails& aContentFullDetails ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::GetContentDetailsL()"); + + for( TInt i = 0; i < iAllContentFullDetails.Count(); i++ ) + { + CIptvVodContentContentFullDetails* content = iAllContentFullDetails[i]; + if( content->iContentId == aContentId ) + { + aContentFullDetails.iContentId = content->iContentId; + aContentFullDetails.iName.Copy( content->iName ); + aContentFullDetails.iThumbnailPath.Copy( content->iThumbnailPath ); + aContentFullDetails.iPlaytime = content->iPlaytime; + aContentFullDetails.iSize = content->iSize; + aContentFullDetails.iFileId->iDrive = content->iFileId->iDrive; + aContentFullDetails.iFileId->iFileId = content->iFileId->iFileId; + aContentFullDetails.iPreviewGlobalFileId->iDrive = content->iPreviewGlobalFileId->iDrive; + aContentFullDetails.iPreviewGlobalFileId->iFileId = content->iPreviewGlobalFileId->iFileId; + aContentFullDetails.iPubDate = content->iPubDate; + aContentFullDetails.iLanguage.Copy( content->iLanguage ); + aContentFullDetails.iRatingAge = content->iRatingAge; + aContentFullDetails.iDescription.Copy( content->iDescription ); + aContentFullDetails.iContentProtection = content->iContentProtection; + aContentFullDetails.iAuthor.Copy( content->iAuthor ); + aContentFullDetails.iCopyright.Copy( content->iCopyright ); + } + } + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CIptvSearchManager::ResetGlobalId +// +// ----------------------------------------------------------------------------- +TInt CIptvSearchManager::ResetGlobalId( CIptvMyVideosGlobalFileId& aId ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::ResetGlobalId()"); + + TInt error = KErrNone; + TUint32 contentIdForMatch = 0; + TInt i = 0; + for( ; i < iMediaContents.Count(); i++ ) + { + CIptvContentIdMediaContentItem* contentItem = iMediaContents[i]; + error = contentItem->ResetGlobalId( aId ); + if( error == KErrNone ) + { + // Store the content id of the item we found the match to + // be used to update parent details as well + contentIdForMatch = contentItem->ContentId(); + i = iMediaContents.Count(); // break; would've done the same + } + } + + // Update the parent's file id details as well + if( error == KErrNone ) + { + for( i = 0; i < iAllContentFullDetails.Count(); i++ ) + { + CIptvVodContentContentFullDetails* bd = iAllContentFullDetails[i]; + if( bd->iContentId == contentIdForMatch ) + { + bd->iFileId->iFileId = 0; + bd->iFileId->iDrive = 0; + i = iAllContentFullDetails.Count(); // break; would've done the same + } + } + } + return error; + } + +// ----------------------------------------------------------------------------- +// CIptvSearchManager::SetGlobalId +// +// ----------------------------------------------------------------------------- +TInt CIptvSearchManager::SetGlobalId( TUint32 aContentKey, + CIptvMyVideosGlobalFileId& aId, + TUint32 aIndex ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::SetGlobalId()"); + + TInt error = KErrNotFound; + TUint32 contentIdForMatch = 0; + TInt i = 0; + for( ; i < iMediaContents.Count(); i++ ) + { + CIptvContentIdMediaContentItem* contentItem = iMediaContents[i]; + error = contentItem->SetGlobalId( aContentKey, aId, aIndex ); + if( error == KErrNone ) + { + contentIdForMatch = contentItem->ContentId(); + i = iMediaContents.Count(); // break; would've done the same thing + } + } + + // Update parent's file id details + if( error == KErrNone ) + { + for( i = 0; i < iAllContentFullDetails.Count(); i++ ) + { + CIptvVodContentContentFullDetails* bd = iAllContentFullDetails[i]; + if( bd->iContentId == contentIdForMatch ) + { + bd->iFileId->iFileId = aId.iFileId; + bd->iFileId->iDrive = aId.iDrive; + i = iAllContentFullDetails.Count(); // break; would've done the same + } + } + } + return error; + } + +// ----------------------------------------------------------------------------- +// CIptvSearchManager::CheckIsPluginRunning +// +// ----------------------------------------------------------------------------- +void CIptvSearchManager::CheckIsPluginRunning() + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::CheckIsPluginRunning"); + + if ( ! iPluginIsRunning ) + { + iUpdater->Stop(); + delete iRssPlugin; + iRssPlugin = NULL; + if ( ! iParent.IsPluginRunning() ) + { + REComSession::FinalClose(); + } + } + } + +// ----------------------------------------------------------------------------- +// CIptvSearchManager::CreateContentFullDetailsFromEpgDataL +// +// ----------------------------------------------------------------------------- +CIptvVodContentContentFullDetails* CIptvSearchManager::CreateContentFullDetailsFromEpgDataL( + CIptvEpgContent& aContent ) + { + IPTVLOGSTRING_LOW_LEVEL("Search Mgr ## CIptvSearchManager::CreateContentFullDetailsFromEpgDataL()"); + + CIptvVodContentContentFullDetails* details = CIptvVodContentContentFullDetails::NewL(); + CleanupStack::PushL( details ); + details->iContentId = aContent.iKey; + details->iName.Copy( aContent.iName ); + details->iThumbnailPath.Copy( aContent.iIconFilePath ); + details->iPlaytime = aContent.iDuration; + details->iSize = aContent.iSize; + details->iPubDate = aContent.iPubDate; + details->iLanguage.Copy( aContent.iLanguage ); + details->iRatingAge = aContent.iRatingAge; + details->iDescription.Copy( aContent.iDescription ); + details->iContentProtection = aContent.iContentProtection; + details->iAuthor.Copy( aContent.iAuthor ); + details->iCopyright.Copy( aContent.iCopyright ); + details->SetBrowserUrlL( aContent.iBrowserUrl ); + CleanupStack::Pop( details ); + return details; + } + +// ----------------------------------------------------------------------------- +// CIptvSearchManager::ResetContentKey +// +// ----------------------------------------------------------------------------- +void CIptvSearchManager::ResetContentKey() + { + SetToNextAvailableContentKey( KIptvRssSearchInitialContentId ); + + IPTVLOGSTRING2_LOW_LEVEL("Search Mgr ## CIptvSearchManager::ResetContentKey() resetted to value %d.", iContentKey); + } + +// ----------------------------------------------------------------------------- +// CIptvSearchManager::IncrementContentKey +// +// ----------------------------------------------------------------------------- +void CIptvSearchManager::IncrementContentKey() + { + SetToNextAvailableContentKey( iContentKey + 1 ); + + IPTVLOGSTRING2_LOW_LEVEL("Search Mgr ## CIptvSearchManager::IncrementContentKey() incremented to value %d.", iContentKey); + } + +// ----------------------------------------------------------------------------- +// CIptvSearchManager::GetContentKey +// +// ----------------------------------------------------------------------------- +TUint32 CIptvSearchManager::GetContentKey() + { + return iContentKey; + } + +// ----------------------------------------------------------------------------- +// CIptvSearchManager::SetToNextAvailableContentKey +// +// ----------------------------------------------------------------------------- +void CIptvSearchManager::SetToNextAvailableContentKey( TUint32 aBase ) + { + TBool found = EFalse; + iContentKey = aBase; + + while ( ! found ) + { + found = ETrue; + for ( TInt i = 0; i < iUsedContentKeys.Count(); i++ ) + { + if ( iContentKey == iUsedContentKeys[i] ) + { + found = EFalse; + break; + } + } + + if ( ! found ) + { + iContentKey++; + } + } + } + +// End of file.