diff -r 000000000000 -r 96612d01cf9f videofeeds/mrssplugin/inc/CIptv3XmlContentHandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videofeeds/mrssplugin/inc/CIptv3XmlContentHandler.h Mon Jan 18 20:21:12 2010 +0200 @@ -0,0 +1,558 @@ +/* +* Copyright (c) 2007-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: XML Parser handler* +*/ + + + + +#ifndef CIPTV3XMLCONTENTHANDLER_H +#define CIPTV3XMLCONTENTHANDLER_H + +#include +#include + +class MIptvEpgVodCallback; +class CIptvEpgCategory; +class CIptvEpgContent; +class CIptvRssPlugin; +class CIptvMediaContent; +class CIptvTerminalVideoSupport; + +// This is for MContentHandler XML parser. +using namespace Xml; + +/** + * XML Parser handler + * + * Implements parser callbacks and support functions. + * Stores interpreted XML content using given callback (SetVodCallback). + * + * @lib IptvRssPlugin.dll + * @since S60 v3.1 rel3 + */ +class CIptvXmlContentHandler : public CBase, + public MContentHandler + { + +public: + + /** + * RSS Parser states. + */ + enum TParserState + { + EIptvRssIdleState, + EIptvRssState, + EIptvRssChannelState, + EIptvRssChannelDescriptionState, + EIptvRssChannelLinkState, + EIptvRssChannelTitleState, + EIptvRssChannelImageState, + EIptvRssChannelImageUrlState, + EIptvRssItemState, + EIptvRssItemDescriptionState, + EIptvRssItemLinkState, + EIptvRssItemTitleState, + EIptvRssItemGuidState, + EIptvRssItemEnclosureState, + EIptvRssItemPubDate, + EIptvRssItemMediaGroupState, + EIptvRssItemMediaContentState, + EIptvRssItemMediaThumbnailState, + EIptvRssItemAuthorState, + EIptvRssItemMediaCopyrightState, + EIptvRssItemRatingState, + EIptvRssItemMediaCategoryState, + EIptvRssItemMediaCategoryEnclosureState + }; + + /** + * Parent rating interpretation scheme. + */ + enum TMediaRatingScheme + { + EMediaRatingNotSet, + EMediaRatingSimple, + EMediaRatingNum, + EMediaRatingIcra, + EMediaRatingMpaa, + EMediaRatingVChip + }; + + /** + * Control interpretation of categories and channels. + */ + enum TCategoryState + { + ENoChannel, // Initial value + EChannelNoItem, // Inside first channel, no items found yet + EItemsWithCategory, // Inside first channel, all items found + // contains a category + EItemsNoCategory, // Inside first channel, all items found do + // not contain a category + EItemsBoth, // Inside channel, both itmes with and + // without category found + ESkipFurtherChannels, // A channel with categories processed. + // No more channels will be accepted. + ESkipFurtherCategories // A channel without categories processed. + // No categories inside further channels + // will be accepted. + }; + + /** + * Category state transition events. + */ + enum TCategoryStateEvent + { + EChannelFound, + EChannelCompleted, + EItemFound, + ECategoryFound, + EItemCompleted + }; + + static CIptvXmlContentHandler* NewL(CIptvRssPlugin& aPlugin); + + ~CIptvXmlContentHandler(); + + /** + * Set callback for storing XML parse results. + * + * @param aVodCallback Pointer to callback interface. + */ + void SetVodCallback( MIptvEpgVodCallback* aVodCallback ); + +// From base class MContentHandler + + /** + * Callback to indicate the start of the document. + * + * @param aDocParam Specifies the various parameters of the document. + * @param aErrorCode Parser error code. + */ + void OnStartDocumentL( + const RDocumentParameters& aDocParam, + TInt aErrorCode ); + + /** + * Callback to indicate the end of the document. + * + * @param aErrorCode Parser error code. + */ + void OnEndDocumentL( TInt aErrorCode ); + + /** + * Callback to indicate an element parsing start. + * + * @param aElement Handle to the element's details. + * @param aAttributes Contains the attributes for the element. + * @param aErrorCode Parser error code. + */ + void OnStartElementL( const RTagInfo& aElement, + const RAttributeArray& aAttributes, + TInt aErrorCode ); + + /** + * Callback to indicate the element parsing completion. + * + * @param aElement Handle to the element's details. + * @param aErrorCode Parser error code. + */ + void OnEndElementL( const RTagInfo& aElement, TInt aErrorCode ); + + /** + * Callback that sends the content of the element. + * Not all the content may be returned in one go. The data may be sent in + * chunks. When an OnEndElementL is received this means there is no more + * content to be sent. + * + * @param aBytes Raw content data for the element. + * The client is responsible for converting the data + * to the required character set if necessary. + * In some instances the content may be binary and + * must not be converted. + * @param aErrorCode Parser error code. + */ + void OnContentL( const TDesC8& aBytes, TInt aErrorCode ); + + /** + * Notification of the beginning of the scope of a prefix-URI Namespace + * mapping. + * This method is always called before the corresponding OnStartElementL + * method. + * + * @param aPrefix Namespace prefix being declared. + * @param aUri Namespace URI the prefix is mapped to. + * @param aErrorCode Parser error code. + */ + void OnStartPrefixMappingL( const RString& aPrefix, + const RString& aUri, + TInt aErrorCode ); + + /** + * Notification of the end of the scope of a prefix-URI mapping. + * This method is called after the corresponding DoEndElementL method. + * + * @param aPrefix Namespace prefix that was mapped. + * @param aErrorCode Parser error code. + */ + void OnEndPrefixMappingL( const RString& aPrefix, TInt aErrorCode ); + + /** + * Notification of ignorable whitespace in element content. + * + * @param aBytes Ignored bytes from the document being parsed. + * @param aErrorCode Parser error code. + */ + void OnIgnorableWhiteSpaceL( const TDesC8& aBytes, TInt aErrorCode ); + + /** + * Notification of a skipped entity. If the parser encounters an + * external entity it does not need to expand it - it can return the + * entity as aName for the client to deal with. + * + * @param aName Name of the skipped entity. + * @param aErrorCode Parser error code. + */ + void OnSkippedEntityL( const RString& aName, TInt aErrorCode ); + + /** + * Notification of a processing instruction. + * + * @param aTarget Processing instruction target. + * @param aData Processing instruction data. If empty none was + * supplied. + * @param aErrorCode Parser error code. + */ + void OnProcessingInstructionL( const TDesC8& aTarget, + const TDesC8& aData, + TInt aErrorCode ); + + /** + * Notification of XML file parsing is failure. + * + * @param aErrorCode Parser error code. + */ + void OnError( TInt aErrorCode ); + + /** + * Obtains the interface matching the specified uid. + * + * @param aUid Uid identifying the required interface. + * @return 0 if no interface matching the uid is found. + * Otherwise, the this pointer cast to that + * interface. + */ + TAny* GetExtendedInterface( const TInt32 aUid ); + +private: + + CIptvXmlContentHandler( CIptvRssPlugin& aPlugin ); + + void ConstructL(); + + /** + * Handles item copyright value. + */ + void CompleteCopyright(); + + /** + * Handles parent rating value. + */ + void CompleteRating(); + + /** + * Handles item category value. + */ + void CompleteCategoryL(); + + /** + * Handles item category value. + * @param aName Name canditate for this category. + */ + void CompleteCategoryL( const HBufC* aName ); + + /** + * Handles item author value. + */ + void CompleteAuthor(); + + /** + * Handles item and category description value. + */ + void CompleteDescription(); + + /** + * Handles item and category title value. + */ + void CompleteTitle(); + + /** + * Handles item url link value. + */ + void CompleteLink(); + + /** + * Handles item publish time value. + */ + void CompletePubDate(); + + /** + * Handles item guid value. + */ + void CompleteGuid(); + + /** + * Handles element attributes. + * + * @param aAttributeList Parses element attributes.. + */ + void HandleEnclosureL( + const RAttributeArray& aAttributeList ); + + /** + * Create a new category descriptor. + * + * @return New empty category descriptor. + */ + CIptvEpgCategory* CreateCategoryL() const; + + /** + * Set a category for current item. + * When category has been used for some other item it already exists and + * is restored, Otherwise a new one is created and a key value given. + * + * @param aName Name canditate to new category. + */ + void SetItemCategoryL( const HBufC* aName ); + + /** + * Set channel as default category for current Item. + * When channel category has already been used, restore it, + * Otherwise save it and give a key value. + */ + void SetChannelCategoryL(); + + /** + * Stores all categories used by current itam to database. + */ + void AddCategories(); + + /** + * Add current content to dabase and link it to categories. + */ + void AddContentL(); + + /** + * Create a new itme content descriptor. + */ + void CreateContentL(); + + /** + * Adjust download type according to Mime type. + * + * @param aContent Item descriptor. + */ + void SetDownloadTypeFromMimeType( + CIptvMediaContent& aContent ) const; + + /** + * Item containing thumbnails is added to download queue. + * + * @param contentKey Item identifier in database. + * @param aThumbnailUrl Url to download thumbnail images. + */ + void AddContentToDlQueueL( + TUint32 contentKey, + const TDesC& aThumbnailUrl ); + + /** + * Service thumbnail is added to download queue. + * + * @param aThumbnailUrl Url to download thumbnail images. + */ + void AddServiceToDlQueueL( + const TDesC& aThumbnailUrl ); + + /** + * Priorize item by type. + */ + void PriorizeL(); + + /** + * Advances category state according to given event and decides whether + * current object should be processed. + * + * @param aEvent State transition event. + * @return Process or skip current object. + */ + TBool SetCategoryState( TCategoryStateEvent aEvent ); + +private: // Data members + + /** + * Calling class. + */ + CIptvRssPlugin& iPlugin; + + /** + * Callback for storing XML parse results. + * Not own. + */ + MIptvEpgVodCallback* iVodCallback; + + /** + * Descriptor of current channel. + * Own. + */ + CIptvEpgCategory* iChannelCategory; + + /** + * Category index key of current channel descriptor. + * Value 0 means that channel has not been associated to any item + * as category. + */ + TUint32 iChannelCategoryKey; + + /** + * Category index keys for current content. + */ + RArray iCurrentCategoryKeys; + + /** + * Descriptor of current item content. + * Own. + */ + CIptvEpgContent* iContent; + + /** + * Xml parsing state. + */ + TParserState iState; + + /** + * Current xml content. + * Own. + */ + HBufC* iBuffer; + + /** + * Indicates that we have accepted a channel thumbnail image as + * service image to be downloaded. + */ + TBool iServiceThumbnailAdded; + + /** + * Indicates that we have found rss content from current feed. + */ + TBool iRSSContentFound; + + /** + * Total number of categories handled from xml. + */ + TInt iCategoryCount; + + /** + * Total number of content items handled from xml. + */ + TInt iContentCount; + + /** + * Media group descriptor found and we are prosessing group. + */ + TBool iMediaGroup; + + /** + * Current element name has media prefix. + */ + TBool iMediaPrefix; + + /** + * Description has been set with Media group or prefix value. + * This shall not be overwritten by other values. + */ + TBool iMediaDescriptionFixed; + + /** + * Title has been set with Media group or prefix value. + * This shall not be overwritten by other values. + */ + TBool iMediaTitleFixed; + + /** + * Rating has been set with Media group or prefix value. + * This shall not be overwritten by other values. + */ + TBool iMediaRatingFixed; + + /** + * Copyrigth has been set with Media group or prefix value. + * This shall not be overwritten by other values. + */ + TBool iMediaCopyrightFixed; + + /** + * Rating has been set with Media group or prefix value. + * This shall not be overwritten by other values. + */ + TBool iMediaThumbnailFixed; + + /** + * Yahoo service is used. + */ + TBool iYahoo; + + /** + * Attribute set of current item. + * Own. + */ + RPointerArray iMediaContents; + + /** + * Priorized content set. + * Not own. + */ + RPointerArray iMediaContentSet; + + /** + * CIptvTerminalVideoSupport. + * Own + */ + CIptvTerminalVideoSupport* iTerminalVideoSupport; + + /** + * Scheme to interpret current parent rating descriptor. + */ + TMediaRatingScheme iMediaRatingScheme; + + /** + * State to control handling of channel and item specific categories. + */ + TCategoryState iCategoryState; + + /** + * There is a specific category descriptor in current item. + */ + TBool iCategoryFound; + + /** + * Table to hold all valid categories. + * Own. + */ + RPointerArray iCategoryTable; + + }; + +#endif // CIPTV3XMLCONTENTHANDLER_H