diff -r 608f67c22514 -r 896e9dbc5f19 internetradio2.0/filerecognizersrc/irrecognizer.cpp --- a/internetradio2.0/filerecognizersrc/irrecognizer.cpp Tue Jul 06 14:07:20 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,263 +0,0 @@ -/* -* Copyright (c) 2006-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: ?Description -* -*/ - - -#include -#include - -#include "irdebug.h" -#include "irrecognizer.h" - -// CONSTANTS -//voilate PC Lint Warning 569: Loss of information (initialization) -//(32 bits to 31 bits) -// Uid of the recogniser -//const TUid KUidIRRecognizer={0x2000B499} - -// If the file name length > 4, the file extension might be valid -const TInt KPlsFileExtensionsMightBeValid = 4; -const TInt KM3uFileExtensionsMightBeValid = 4; - -//extension of File to be recognised. -_LIT(KPlsExtension, ".pls"); -//Mime type of the .pls file -_LIT8(KPlsMimeType,"audio/x-scpls"); - -_LIT(KM3uExtension, ".m3u"); - - -// ================= MEMBER FUNCTIONS ======================= - -// --------------------------------------------------------------------------- -// RecognizerEx::RecognizerEx() -// constructs the object -// --------------------------------------------------------------------------- -// -CApaRecognizerEx::CApaRecognizerEx():CApaDataRecognizerType(KIRRecognizerDllUid, - CApaDataRecognizerType::EHigh) - { - IRLOG_DEBUG( "CApaRecognizerEx::CApaRecognizerEx()" ); - // It only supports 1 mime type - iCountDataTypes = 1; - IRLOG_DEBUG( "CApaRecognizerEx::CApaRecognizerEx() - Exiting." ); - } - -// --------------------------------------------------------------------------- -// RecognizerEx::~RecognizerEx() -// Destroys the object -// --------------------------------------------------------------------------- -// -CApaRecognizerEx::~CApaRecognizerEx() - { - IRLOG_DEBUG( "CApaRecognizerEx::~CApaRecognizerEx" ); - // no implementation - } - - -// --------------------------------------------------------------------------- -// RecognizerEx::CreateRecognizerL() -// Returns pointer to the new object -// --------------------------------------------------------------------------- -// -CApaDataRecognizerType* CApaRecognizerEx::CreateRecognizerL() - { - IRLOG_DEBUG( "CApaRecognizerEx::CreateRecognizerL" ); - return new (ELeave) CApaRecognizerEx(); - } - - -// --------------------------------------------------------------------------- -// RecognizerEx::PreferredBufSize() -// Returns preferred buffer size -// --------------------------------------------------------------------------- -// -TUint CApaRecognizerEx::PreferredBufSize() - { - IRLOG_DEBUG( "CApaRecognizerEx::PreferredBufSize" ); - return 0; - } - -// --------------------------------------------------------------------------- -// RecognizerEx::SupportedDataTypeL() -// Returns supported mime type -// --------------------------------------------------------------------------- -// -TDataType CApaRecognizerEx::SupportedDataTypeL(TInt aIndex) const - { - IRLOG_DEBUG( "CApaRecognizerEx::SupportedDataTypeL" ); - if (0 == aIndex) - { - return TDataType(KPlsMimeType); - } - else - { - ASSERT(0); - return TDataType(KNullDesC8); - } - } - -// --------------------------------------------------------------------------- -// RecognizerEx::DoRecognizeL() -// Recognizes the file by name and/or head buffer -// --------------------------------------------------------------------------- -// -void CApaRecognizerEx::DoRecognizeL(const TDesC& aName, - const TDesC8& aBuffer) - { - IRLOG_DEBUG( "CApaRecognizerEx::DoRecognizeL" ); - // To keep code simple, we only check file name extension - TInt len = aBuffer.Length(); - if (aName.Length()>KPlsFileExtensionsMightBeValid) - { - //Compare the extension of the file to be recognised with .pls - if (aName.Right(KPlsFileExtensionsMightBeValid).CompareF( - KPlsExtension)==0) - { - iConfidence=ECertain; // is certainly something totally new - iDataType=TDataType(KPlsMimeType); - IRLOG_DEBUG( "CApaRecognizerEx::DoRecognizeL - Exiting (1)." ); - return; - } - else if (aName.Right(KM3uFileExtensionsMightBeValid).CompareF( - KM3uExtension)==0) - { - RecognizeM3uFileL(aName); - IRLOG_DEBUG( "CApaRecognizerEx::DoRecognizeL - Exiting (2)." ); - return; - } - IRLOG_DEBUG( "CApaRecognizerEx::DoRecognizeL - Exiting (3)." ); - } - } - -void CApaRecognizerEx::RecognizeM3uFileL(const TDesC& aFileName) -{ - _LIT8(KHttpProtocol, "http"); - _LIT8(KMmsProtocol, "mms"); - _LIT8(KRtspProtocol, "rtsp"); - - RFs fs; - User::LeaveIfError(fs.Connect()); - RFile file; - TInt ret = file.Open(fs, aFileName, EFileRead); - if (KErrNone != ret) - { - fs.Close(); - return; - } - - RBuf8 content; - TInt maxLen = 0; - file.Size(maxLen); - content.Create(maxLen); - file.Read(content); - - //try to use descriptor method to parse the buffer - if (CheckStreamingLinks(content, KHttpProtocol) || - CheckStreamingLinks(content, KMmsProtocol) || - CheckStreamingLinks(content, KRtspProtocol)) - { - iConfidence = ECertain; - iDataType = TDataType(KPlsMimeType); - } - - content.Close(); - file.Close(); - fs.Close(); -} - -TBool CApaRecognizerEx::CheckStreamingLinks(TDes8& aBuffer, const TDesC8& aProtocol) -{ - TBool ret = EFalse; - _LIT8(KNewLine, "\n"); - - //initially, remain points to aBuffer - TPtrC8 remain(aBuffer); - TInt newLinePos = remain.Find(KNewLine); - - while (KErrNotFound != newLinePos) - { - //copy a new line to RBuf8 - RBuf8 left; - left.Create(remain.Left(newLinePos)); - left.TrimLeft(); - left.LowerCase(); - - //after trim left, does this line start with aProtocol? - if (left.Left(aProtocol.Length()) == aProtocol) - { - ret = ETrue; - } - left.Close(); - - if (ret) - { - break; - } - else - { - //remain points to the right part - remain.Set(remain.Right(remain.Length() - newLinePos - 1)); - newLinePos = remain.Find(KNewLine); - } - } - - if (!ret && remain.Length() > 0) - { - //last line doesn't end with '\n' - RBuf8 last; - last.Create(remain); - last.TrimLeft(); - last.LowerCase(); - if (last.Left(aProtocol.Length()) == aProtocol) - { - ret = ETrue; - } - last.Close(); - } - - return ret; -} - -// ----------------------------------------------------------------------------- -// ImplementationTable -// violates PC lint error :: Warning 611: Suspicious cast -// required by the ECOM framework to correctly identify the instantiation -// method pointer to provide to a client's resolution request. -// ----------------------------------------------------------------------------- -// -const TImplementationProxy ImplementationTable[] = - { - IMPLEMENTATION_PROXY_ENTRY(KIRRecognizerImplementationUid, - CApaRecognizerEx::CreateRecognizerL) - }; - -// --------------------------------------------------------------------------- -// ImplementationGroupProxy -// Provides access to the implementationtable -// --------------------------------------------------------------------------- -// -EXPORT_C const TImplementationProxy* ImplementationGroupProxy( - TInt& aTableCount) - { - IRLOG_DEBUG( "ImplementationGroupProxy" ); - aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); - IRLOG_DEBUG( "ImplementationGroupProxy - Exiting." ); - return ImplementationTable; - } - - -