diff -r 839377eedc2b -r befca0ec475f videofeeds/server/IptvEpgDb/inc/CIptvEpgDb.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videofeeds/server/IptvEpgDb/inc/CIptvEpgDb.h Wed Sep 01 12:30:28 2010 +0100 @@ -0,0 +1,1034 @@ +/* +* Copyright (c) 2002-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: header file for CIptvEpgDb class. Engine version 1.1.* +*/ + + + + +#ifndef CIPTVEPGDB_H +#define CIPTVEPGDB_H + +#include +#include // CDesCArrayFlat (cannot be forward declarated) +#include // RDbStoreDatabase +#include // RFs +#include "CIptvUtil.h" +#include "MIptvEpgVodCallback.h" +#include + +const int KCustomSqlMaxLength( 256 ); +const TInt KIptvDbNameMaxLength( 50 ); + +// Category table +_LIT( KIptvEpgCategoryTable, "Cat" ); +_LIT( KIptvEpgCategoryDbKeyCol, "Key" ); +_LIT( KIptvEpgCategoryDbParentKeyCol, "PKey" ); +_LIT( KIptvEpgCategoryDbIdCol, "Id" ); +_LIT( KIptvEpgCategoryDbNameCol, "Name" ); +_LIT( KIptvEpgCategoryDbIconFileIdCol, "IconId" ); // Obsolete field +_LIT( KIptvEpgCategoryDbIsIconFilePathUrlCol, "IsIconPathUrl" ); // Obsolete +_LIT( KIptvEpgCategoryDbIconFilePathCol, "IconPath" ); +_LIT( KIptvEpgCategoryDbDescriptionCol, "Desc" ); +_LIT( KIptvEpgCategoryDbPubDateCol, "PD" ); // Obsolete field +_LIT( KIptvEpgCategoryDbContentCountCol, "ContentCount" ); + +// Content table +_LIT( KIptvEpgContentTable, "Con" ); +_LIT( KIptvEpgContentDbKeyCol, "Key" ); +_LIT( KIptvEpgContentDbIdCol, "Id" ); +_LIT( KIptvEpgContentDbNameCol, "Name" ); +_LIT( KIptvEpgContentDbFileIdCol, "FID" ); +_LIT( KIptvEpgContentDbDriveIdCol, "Dr" ); +_LIT( KIptvEpgContentDbPreviewFileIdCol, "PFID" ); +_LIT( KIptvEpgContentDbPreviewDriveIdCol, "PDr" ); +_LIT( KIptvEpgContentDbContentProtectionCol, "CP" ); +_LIT( KIptvEpgContentDbIconFileIdCol, "IconId" ); +_LIT( KIptvEpgContentDbIsIconFilePathUrlCol, "IsIconPathUrl" ); +_LIT( KIptvEpgContentDbIconFilePathCol, "IconPath" ); +_LIT( KIptvEpgContentDbContentFileIdCol, "ConId" ); +_LIT( KIptvEpgContentDbDescriptionCol, "Desc" ); +_LIT( KIptvEpgContentDbPubDateCol, "PD" ); +_LIT( KIptvEpgContentDbBrowserUrlCol, "BU" ); +_LIT( KIptvEpgContentDbOrderCol, "Ord" ); +_LIT( KIptvEpgContentDbAuthorCol, "Aut" ); +_LIT( KIptvEpgContentDbCopyrightCol, "Cop" ); +_LIT( KIptvEpgContentDbSizeCol, "Siz" ); +_LIT( KIptvEpgContentDbDurationCol, "Dur" ); +_LIT( KIptvEpgContentDbLanguageCol, "Lan" ); +_LIT( KIptvEpgContentDbRatingAgeCol, "RatingAge" ); + +// Category_Content table +_LIT( KIptvEpgCategoryContentTable, "CategoryContent" ); +_LIT( KIptvEpgCategoryContentCategoryKeyCol, "CategoryKey" ); +_LIT( KIptvEpgCategoryContentContentKeyCol, "ContentKey" ); + +// Service table +_LIT( KIptvEpgServiceTable, "Service" ); +_LIT( KIptvEpgServiceLastUpdate, "LastUpdate" ); +_LIT( KIptvEpgServiceNextUpdate, "NextUpdate" ); +_LIT( KIptvEpgServiceETag, "ETag" ); +_LIT( KIptvEpgServiceLastModifiedSince, "LastModifiedSince" ); +_LIT( KIptvEpgServiceXmlFileHash, "EXmlFileHash" ); +_LIT( KIptvEpgServiceVersion, "Version" ); + +// ContentAccess +_LIT( KIptvCATable, "ContentAccess" ); +_LIT( KIptvCAContentKey, "ContentKey" ); +_LIT( KIptvCAContentUrl, "ContentUrl" ); +_LIT( KIptvCADlType, "DlType" ); +_LIT( KIptvCALanguage, "Language" ); +_LIT( KIptvCAPrice, "Price" ); +_LIT( KIptvCAPurchaseType, "PurchaseType" ); +_LIT( KIptvCAPurchaseUrl, "PurchaseUrl" ); +_LIT( KIptvCALastPlayPosition, "LastPlayPosition" ); +_LIT( KIptvCAMimeType, "MimeType" ); +_LIT( KIptvCAFileSize, "FileSize" ); +_LIT( KIptvCADuration, "Duration" ); +_LIT( KIptvCAFileId, "FileId" ); +_LIT( KIptvCADriveId, "DriveId" ); +_LIT( KIptvCAIndex, "Index" ); +_LIT( KIptvCAExpression, "Expression" ); + +// Name of the category Key index +_LIT( KIptvEpgCategoryDbIndexName, "CategoryIndex" ); + +// Name of the content Key index +_LIT( KIptvEpgContentDbIndexName, "ContentIndex" ); + +// Name of the CategoryContent Key index +_LIT( KIptvEpgCategoryContentDbIndexName, "CatConIndex" ); + +class CIptvEpgCategory; +class CIptvEpgContent; +class CIptvVodContentCategoryBriefDetails; +class CIptvVodContentContentBriefDetails; +class CIptvVodContentContentFullDetails; +class CIptvMyVideosGlobalFileId; +class CIptvServer; +class CIptvEpgSession; + +/** + * + * An instance of class CIptvEpgDb provides Epg database access creating and + * manipulating Epg database files and database entries (categories and + * contents. + * + * Database definition: + * + * The Epg database contains one table as follows: + * + * Table name: Category + * Column: Type: Length (bytes): + * ------ ----- --------------- + * Key EDbColUint32 4 + * ParentKey EDbColUint32 4 + * Id EDbColText KIptvIdMaxLength * 2 + * Name EDbColText KIptvEpgCategoryNameMaxLength * 2 + * IconFileId EDbColUint32 4 + * IsIconFilePathUrl EDbColUint32 4 + * IconFilePath EDbColText KIptvEpgCategoryIconFilePathMaxLength * 2 + * PubDate EDbColDateTime 8 + * Description EDbColText KIptvEpgCategoryDescriptionMaxLength * 2 + * contentCount EDbColUint32 4 + * + * There is also index for Category table with name "CategoryIndex". It + * consists of Key column. + * + * Index provides quick find. + * + * + * Database definition: + * + * The Epg database contains one table as follows: + * + * Table name: Content + * Column: Type: Length (bytes): + * ------ ----- --------------- + * Key EDbColUint32 4 + * Id EDbColText KIptvIdMaxLength * 2 + * Name EDbColText KIptvEpgContentNameMaxLength * 2 + * FileId EDbColUint32 4 + * Drive EDbColUint32 4 + * PFileId EDbColUint32 4 + * PDrive EDbColUint32 4 + * ContentProtection EDbColUint32 4 (NOT USED) + * IconFileId EDbColUint32 4 + * IsIconFilePathUrl EDbColUint32 4 + * IconFilePath EDbColText KIptvEpgContentIconFilePathMaxLength * 2 + * ContentFileId EDbColUint32 4 + * Description EDbColText KIptvEpgContentDescriptionMaxLength * 2 + * PubDate EDbColDateTime 8 + * BrowserUrl EDbColText KIptvEpgContentBrowserUrlMaxLength * 2 + * Order EDbColUint32 4 + * Author EDbColText KIptvEpgContentAuthorLength * 2 + * Copyright EDbColText KIptvEpgContentCopyrightLength * 2 + * Size EDbColUint32 4 + * Duration EDbColUint32 4 + * Language EDbColText KIptvCALanguageLength * 2 + * RatingAge EDbColUint16 2 + * + * Missing from content table, not implemented in increment 1: + * + * - Next postponed download time + * - Next scheduled download time + * + * There is also index for Content table with name "ContentIndex". It + * consists of Key column. + * + * Index provides quick find. + * + * Database definition: + * + * The Epg database contains one table as follows: + * + * Table name: CategoryContent + * Column: Type: Length (bytes): + * ------ ----- -------------- + * CategoryKey EDbColUint32 4 + * ContentKey EDbColUint32 4 + * + * + * + * Database definition: + * + * The Epg database contains one table as follows: + * + * Table name: Service + * Column: Type: Length (bytes): + * ------ ----- --------------- + * LastUpdate EDbColDateTime 8 + * NextUpdate EDbColDateTime 8 + * ETag EDbColText 64 + * LastModifiedSince EDbColText 64 + * EXmlFileHash EDbColText 20 + * Version EDbColUint32 4 + * + * Database definition: + * + * The Epg database contains one table as follows: + * + * Table name: ContentAccess + * Column: Type: Length (bytes): + * ------ ----- --------------- + * ContentKey EDbColUint32 4 + * ContentUrl EDbColLongText KIptvCAContentUrlLength * 2 + * DlType EDbColUint32 4 + * Language EDbColText KIptvCALanguageLength * 2 + * Price EDbColText KIptvCAPriceLength * 2 + * PurchaseType EDbColUint32 4 + * PurchaseURL EDbColLongText KIptvCAPurchaseUrlLength * 2 + * LastPlayPosition EDbColUint32 4 + * MimeType EDbColText KIptvCAMimeTypeLength * 2 + * FileSize EDbColUint32 4 + * Duration EDbColUint32 4 + * FileId EDbColUint32 4 + * DriveId EDbColUint32 4 + * Index EDbColUint32 4 + * Expression EDbColUint32 4 + * + * @lib IptvServer.exe + * @since Engine 1.0 + */ +class CIptvEpgDb : public CBase, + public MCenRepNotifyHandlerCallback + { + +public: + + /** + * Two-phased constructor. + * + * @param aEpgFile Database file name. + * @param aServiceId Service id. + * @param aServer Server. + */ + static CIptvEpgDb* NewL( + const TFileName& aEpgFile, + const TUint32& aServiceId, + CIptvServer& aServer ); + + /** + * Destructor. + */ + ~CIptvEpgDb(); + + // Query methods for EpgMsgHandler from VodContentClient interface + + /** + * Get list of ECG categories. + * The ownership of the returned list is transferred to caller. + * The order of categories is defined by database originated from + * service provider. + * + * @param aParentCategoryId Points to category ID which sub-categories + * should be listed. If NULL, the root is + * referenced. + * @param aCategoryList Reference to a storage where pointer to + * created category list is returned. + * @return Error code, KErrNone if no errors, + * KErrCouldNotConnect if server is needs + * permission for connection, + * otherwise one of the system wide error codes. + */ + TInt GetEcgCategoryListL( + TIptvCategoryId aParentCategoryId, + RPointerArray& aCategoryList ); + + /** + * Get detais of one category item. + * + * @since Engine 1.1 + * @param aCategoryId Selected category ID identifier. + * @param aCategory Reference to a full details data returned. + * @return Error code, KErrNone if no errors. + */ + TInt GetCategoryDetailsL( + TIptvCategoryId aCategoryId, + CIptvVodContentCategoryBriefDetails& aCategory ); + + /** + * Get parent category ID identifier. + * This method allows application to browse toward root category, + * then two consecutive calls are needed. + * + * @param aCategoryId Points to category ID which parent category is + * requested. + * @param aParentId Reference to a storage where parent ID is returned. + * @return Error code, KErrNone if no errors, + * KErrCouldNotConnect if server is needs permission + * for connection, + * otherwise one of the system wide error codes. + */ + TInt GetParentCategoryL( + TIptvCategoryId aCategoryId, + TIptvCategoryId& aParentId ); + + /** + * Get list of ECG contents in the specified category in order defined + * by database originated from service provider. + * The ownership of the returned list is transferred to caller. + * + * @param aCategoryId Selected category ID identifier + * @param aSearchString A search string used to filter contents search. + * If NULL, no filtering issued. + * @param aFrom The start index for listed contents. If NULL, start from + * the first one. + * @param aAmount Amount of content elementes to be listes. If NULL, + * all starting from aFrom. + * @param aTotalAmount Pointer to a variable where total amount of + * content is returned. + * @param aEcgList Reference to returned ECG list items. + * @return Error code, KErrNone if no errors, + * KErrCouldNotConnect if server is needs permission + * for connection, + * otherwise one of the system wide error codes. + */ + TInt GetEcgListL( + TIptvCategoryId aCategoryId, + const TDesC& aSearchString, + TUint32 aFrom, + TUint32 aAmount, + TUint32& aTotalAmount, + RPointerArray& aEcgList ); + + /** + * Get list of all ECG contents in alphabetical order. + * The ownership of the returned list is transferred to caller. + * + * @param aSearchString A search string used to filter contents search. + * If NULL, no filtering issued. + * @param aFrom The start index for listed contents. + * If NULL, start from the first one. + * @param aAmount Amount of content elementes to be listes. + * If NULL, all starting from aFrom. + * @param aTotalAmount Pointer to a variable where total amount of + * content is returned. + * @param aEcgList Reference to returned ECG list items. + * @return Error code, KErrNone if no errors, + * KErrCouldNotConnect if server is needs permission + * for connection, + * otherwise one of the system wide error codes. + */ + TInt GetEcgAllListL( + const TDesC& aSearchString, + TUint32 aFrom, + TUint32 aAmount, + TUint32& aTotalAmount, + RPointerArray& aEcgList ); + + /** + * Get full detais of one content item. + * The ownership of the returned data is transferred to caller. + * + * @param aContentId Selected content ID identifier. + * @param aContentFullDetails Reference to returned full details data. + * @return Error code, KErrNone if no errors, + * KErrCouldNotConnect if server is needs permission + * for connection, + * otherwise one of the system wide error codes. + */ + TInt GetContentDetailsL( + TIptvContentId aContentId, + CIptvVodContentContentFullDetails& aContentFullDetails ); + + /** + * Marks the database files to be deleted after database has been closed. + * @param aDelete ETrue to delete the files (default value), EFalse to clear this flag. + */ + void DeleteDatabaseFiles( TBool aDelete = ETrue ); + +// from MIptvEpgPluginManager interface + + /** + * Add new category to database. + * + * @param aCategory Reference to CIptvEpgCategory object. + * @param aCategoryKey New category key value is inserted to + * aCategoryKey + * @return KErrNone if successful, otherwise another of the + * system-wide error codes. + */ + TInt AddCategoryL( + CIptvEpgCategory& aCategory, + TUint32& aCategoryKey ); + + /** + * Add relation between category and content. + * + * @param aCategoryKey Category key. + * @param aContentKey Content key. + */ + TInt AddRelationL( TUint32& aCategoryKey, TUint32& aContentKey ); + + /** + * Add new content to given category. + * + * @param aContent Reference to CIptvEpgContent object. + * @param aMediaContents Pointer array containing media content objects. + * There can be n media content's for one content. + * @param aContentKey New content key value is inserted to + * aContentKey + * @return KErrNone if successful, otherwise another of + * the system-wide error codes. + */ + TInt AddContentL( + CIptvEpgContent& aContent, + RPointerArray aMediaContents, + TUint32& aContentKey ); + + /** + * Update category icon. + * + * @param aCategoryKey Category key. + * @param aIconFileId Icon file id to search from the database. + * @param aIconFilePath Full path to icon file or URL + filename. + * @param aIsUrl If aIconFilePath is URL aIsUrl == ETrue, + * if aIconFilePath is path + * to local filesystem aIsUrl == EFalse. + * @return KErrNone if successful, otherwise another of + * the system-wide error codes. + */ + TInt UpdateCategoryIconL( + TUint32& aCategoryKey, + TUint32& aIconFileId, + const TDesC& aIconFilePath, + TBool aIsUrl ); + + /** + * Update content icon. + * + * @param aCategoryKey Content key. + * @param aIconFileId Icon file id to search from the database. + * @param aIconFilePath Full path to icon file or URL + filename. + * @param aIsUrl If aIconFilePath is URL aIsUrl == ETrue, + * if aIconFilePath is path + * to local filesystem aIsUrl == EFalse. + * @return KErrNone if successful, otherwise another of + * the system-wide error codes. + */ + TInt UpdateContentIconL( + TUint32& aContentKey, + TUint32& aIconFileId, + const TDesC& aIconFilePath, + TBool aIsUrl ); + + /** + * Get service update information. + * + * @param aLastUpdate Last update time. + * @param aInterval Update interval. + */ + TInt GetServiceInformationL( + TTime& aLastUpdate, + TTime& aInterval); + + /** + * Update service update information. + * + * @param aLastUpdate Last update time. + * @param aInterval Update interval. + */ + TInt UpdateServiceInformationL( + const TTime& aLastUpdate, + const TTime& aInterval ); + + /** + * Get service update information for HTTP headers. + * + * @param aETag ETag + * @param aLastModifiedSince LastModifiedSince + */ + TInt GetServiceETagAndLastmodifiedSinceL( + TDes& aETag, + TDes& aLastModifiedSince ); + + /** + * Update service update information for HTTP headers. + * + * @param aETag ETag + * @param aLastModifiedSince LastModifiedSince + */ + TInt UpdateServiceETagAndLastModifiedSinceL( + const TDesC& aETag, + const TDesC& aLastModifiedSince ); + + /** + * Get hash for service XML file. + * + * @param aHash Hash string + */ + TInt GetServiceXmlFileHashL( + TDes& aHash); + + /** + * Update hash for service XML file. + * + * @param aHash Hash string + */ + TInt UpdateServiceXmlFileHashL( + const TDesC& aHash); + + /** + * Reset global Id. + * + * @param aId Global file id to be reset. + */ + TInt ResetGlobalId( CIptvMyVideosGlobalFileId& aId ); + + /** + * Set global Id. + * + * @param aContentKey Key of content to be updated. + * @param aId Global file id to be set. + * @param aIndex Index of content to be updated. + * @return KErrNone if successful, otherwise another of the system-wide + * error codes. + */ + TInt SetGlobalId( + TUint32 aContentKey, + CIptvMyVideosGlobalFileId& aId, + TUint32 aIndex ); + +// Engine 1.1 + + /** + * Start to update database, firstly to a temporaty work version. + */ + void StartUpdateL(); + + /** + * Replace the database in use with the newly updated one. + * + * @param aSession Related EPG session. + */ + void EndUpdateL( CIptvEpgSession& aSession ); + + /** + * Finish database update and delete work database if still exists. + */ + void FinishUpdateL(); + + /** + * Fetch content access list from database. + * + * @param aContentId Id of required content access list. + * @param aContents Required content access list. + * @return Completion status. + */ + TInt GetContentAccessListL( + TUint32 aContentId, + RPointerArray& aContents ); + + /** + * Fetch content access from database. + * + * @param aContentId Id of required content access. + * @param aIndex Index of required content access. + * @return Required content access. + */ + CIptvMediaContent* GetContentAccessL( + TUint32 aContentId, + TUint32 aIndex ); + + /** + * Set last play position of the video. + * + * @param aContentId Id of position to be set. + * @param aIndex Index of position to be set. + * @param aPosition New position. + * @return Completion status. + */ + TInt SetLastPositionL( + TUint32 aContentId, + TUint32 aIndex, + TUint32 aPosition ); + + /** + * Set mpx id for content. + * + * @param aContentId Id of position to be set. + * @param aCaIndex Index of position to be set. + * @param aMpxId Mpx Id. + * @return Completion status. + */ + TInt SetMpxIdL( TUint32 aContentId, TUint32 aCaIndex, TUint32 aMpxId ); + + /** + * Set update time to service manager. + * + * @param aTime New update time. + */ + void SetUpdateTimeToServiceManagerL( const TTime& aTime ); + +// From MCenRepNotifyHandlerCallback + + /** + * CenRep callback. + * + * @param aId CenRep key id. + * @param aNewValue CenRep key new value. + */ + void HandleNotifyInt( TUint32 aId, TInt aNewValue ); + + /** + * CenRep callback. + * + * @param aId CenRep key id. + * @param error CenRep failure code. + * @param aHandler Handler. + */ + void HandleNotifyError( + TUint32 aId, + TInt error, + CCenRepNotifyHandler* aHandler ); + + /** + * CenRep callback. + * + * @param aId CenRep key id. + */ + void HandleNotifyGeneric( TUint32 aId ) ; + +private: + + /** + * Default constructor. + * + * @param aServiceId Service id. + * @param aServer Server. + */ + CIptvEpgDb( + const TUint32& aServiceId, + CIptvServer& aServer ); + + /** + * ConstructL + * @param aEpgFile Full path to DB file. + * @param aDbCreated Database was created. + */ + void ConstructL( const TFileName& aEpgFile ); + + /** + * Initialize DB. + */ + void InitDbL(); + + /** + * + * Create new Epg database if DB file is not found. + * + * @param aFile Database file name. + * @param aCreated Database was really created. + */ + void CreateDbL( const TDesC& aFile, TBool& aCreated ); + + /** + * Create category table to DB. + * + * @param aDatabase Handle to database. + * @return Completion status. + */ + TInt CreateCategoryTableL( RDbNamedDatabase& aDatabase ) const; + + /** + * Create index for category table. + * + * @param aDatabase Handle to database. + */ + void CreateCategoryIndexL( RDbNamedDatabase& aDatabase ) const; + + /** + * Create content table to DB. + * + * @param aDatabase Handle to database. + * @return Completion status. + */ + TInt CreateContentTableL( RDbNamedDatabase& aDatabase ) const; + + /** + * Create index for content table. + * + * @param aDatabase Handle to database. + */ + void CreateContentIndexL( RDbNamedDatabase& aDatabase ) const; + + /** + * Create CategoryContent table to DB. + * + * @param aDatabase Handle to database. + */ + void CreateCategoryContentTableL( RDbNamedDatabase& aDatabase ) const; + + /** + * Create index for CategoryContent table. + * + * @param aDatabase Handle to database. + */ + void CreateCategoryContentIndexL( RDbNamedDatabase& aDatabase ) const; + + /** + * Create Service table to DB. + * + * @param aDatabase Handle to database. + * @return Completion status. + */ + TInt CreateServiceTableL( RDbNamedDatabase& aDatabase ) const; + + /** + * Create ContentAccess table to DB. + * + * @param aDatabase Handle to database. + * @return Completion status. + */ + TInt CreateContentAccessTableL( RDbNamedDatabase& aDatabase ) const; + + /** + * This method combines two GetCategoryKeyL methods to one method + * (with parameters TDesC& aValue and TUint32& aValue). + * + * Get category key for given category defined by aField, aDesValue or + * aIntValue. Key is databases internal autoincrement which is unique + * for every category. If category is already in the database key value + * is inserted to aKey parameter and aUpdateCategory is set to ETrue. + * + * If category is not in the database, aUpdateCategory parameter is + * EFalse. + * + * @param aField TCategorySearchField enumeration defines the + * search field. + * @param aDesValue Value which is usedas a "search key" if it is + * type TDesC. + * @param aIntValue Value which is usedas a "search key" if it is + * type TUint32. + * @param aKey Category key if given category found from the + * database. + * @param aUpdateCategory ETrue if category can be updated, EFalse if + * new category must be created to database. + * @return KErrNone if successful, otherwise another of the + * system-wide error codes. + */ + TInt GetCategoryKeyL( + TCategorySearchField aField, + TDesC& aDesValue, + TUint32& aIntValue, + TUint32& aKey, + TBool& aUpdateCategory ); + + /** + * Set service update information. + * + * @param aLastUpdate Last update time. + * @param aInterval Update interval. + * @param aUpdateSet Update set. + * @return Completion status. + */ + TInt SetServiceInformationL( + RDbNamedDatabase& aDb, + const TTime& aLastUpdate, + const TTime& aInterval) const; + + /** + * Initialize common SQL command strings. + */ + void MakeSqlStrings(); + + /** + * Store category to database.. + * + * @param aView Predefined database view. + * @param aCategory Category descriptor. + */ + void WriteCategoryToDbL( + RDbView& aView, + CIptvEpgCategory& aCategory ) const; + + /** + * Store video content to database. + * + * @param aView Predefined database view. + * @param aContent Content descriptor. + * @param aLeave Disables global file id store. + */ + void WriteContentToDbL( + RDbView& aView, + CIptvEpgContent& aContent, + TBool aLeave ) const; + + /** + * Read category from database. + * + * @param aView Predefined database view. + * @param aCategory Category descriptor. + */ + void ReadCategoryFromDbL( + const RDbView& aView, + CIptvVodContentCategoryBriefDetails& aCategory ) const; + + /** + * Read videos short details from database. + * + * @param aView Predefined database view. + * @param aBriefDetails Content short descriptor + */ + void ReadContentBriefDetailsFromDbL( + const RDbView& aView, + CIptvVodContentContentBriefDetails& aBriefDetails ) const; + + /** + * Read videos full details from database. + * + * @param aView Predefined database view. + * @param aContentFullDetails Content full descriptor. + */ + void ReadContentFullDetailsFromDbL( + const RDbView& aView, + CIptvVodContentContentFullDetails& aContentFullDetails ) const; + + /** + * Fetch content access from database. + * + * @param aView Predefined database view. + * @return Required content access. + */ + CIptvMediaContent* ReadContentAccessFromDbL( + const RDbView& aView ) const; + + /** + * Create root category to database. + * + * @param aDb Handle to database. + */ + void CreateRootCategoryL( RDbNamedDatabase& aDb ) const; + + /** + * Check whether selected content has been downloaded. + * + * @param aView Predefined database view. + * @return True indicates download. + */ + TBool IsDownloadedL( const RDbView& aView ) const; + + /** + * Open existing database. + * + * @param aDb Handle to database. + * @param aFile database file. + */ + void OpenDatabaseL( RDbNamedDatabase& aDb, const TDesC& aFile ); + + /** + * Get database version. + * + * @return Required version. + */ + TInt GetVersionL(); + + /** + * Write content access to database. + * + * @param aView Predefined database view. + * @param aMediaContent Content descriptor. + * @param aContentKey Content key. + * @param aIndex Content index. + */ + void WriteContentAccessToDbL( + RDbView& aView, + const CIptvMediaContent* aMediaContent, + TUint32 aContentKey, + TUint32 aIndex ) const; + + /** + * Add category to database. + * + * @param aDb Handle to database. + * @param aCategory Category descriptor. + * @param aCategoryKey Category key. + * @return Completion status. + */ + TInt AddCategoryL( + RDbNamedDatabase& aDb, + CIptvEpgCategory& aCategory, + TUint32& aCategoryKey ) const; + + /** + * Get list of contents associated with global file id. + * + * @param aContents .Contents list. + */ + void GetGlobalFileIdsL( RPointerArray& aContents ); + + /** + * Copy content associated with global file Id. Also gathers a list of changed + * Content IDs so that clients having old information can be notified. + * + * @param aContent Content descriptor. + * @param aOldContentIds Array for old Content IDs. + * @param aNewContentIds Array for new Content IDs. + */ + void CopyGlobalFileIdToNewDbL( CIptvMediaContent* aContent, + RArray& aOldContentIds, + RArray& aNewContentIds ); + + /** + * Reads CenRep data to internal variables. + */ + void ReadCenRepData(); + + /** + * Reset global Id. + * + * @param aId Global file id to be reset. + * @param aError Completion status. + */ + void ResetGlobalIdL( + CIptvMyVideosGlobalFileId& aId, + TInt& aError ); + + /** + * Set global Id. + * + * @param aContentKey Key of content to be updated. + * @param aId Global file id to be set. + * @param aIndex Index of content to be updated. + * @param aError Completion status. + * @return KErrNone if successful, otherwise another of the system-wide + * error codes. + */ + void SetGlobalIdL( + TUint32 aContentKey, + CIptvMyVideosGlobalFileId& aId, + TUint32 aIndex, + TInt& aError ); + + /** + * Deletes EPG-database from file system. + */ + void DeleteDatabaseL(); + +private: // Data + + /** + * File system session. + */ + RFs iFsSession; + + /** + * Database file. + */ + TFileName iEpgFile; + + /** + * Database session. + */ + RDbNamedDatabase iEpgDb; + + /** + * Temporary database for update. + */ + RDbNamedDatabase iTmpDb; + + /** + * Temp database is open. + */ + TBool iTmpDbOpen; + + /** + * Category SQL-query. + */ + TBuf iSqlCategory; + + /** + * Content SQL-query. + */ + TBuf iSqlContent; + + /** + * Service id. + */ + TUint32 iServiceId; + + /** + * Temporary database name. + */ + TBuf iTmpDbName; + + /** + * Server. + */ + CIptvServer& iServer; + + /** + * User age to check rating age limit limit. + */ + TUint16 iParentalControl; + + /** + * Central Repository session. + */ + CRepository* iCenRepSession; + + /** + * Central Repository handler. + */ + CCenRepNotifyHandler* iCenRepNotifyHandler; + + /** + * Flag that tells if database is to be deleted from file system after close. + */ + TBool iDeleteDatabaseFiles; + + }; + +#endif // CIPTVEPGDB_H