videofeeds/server/IptvEpgDb/inc/CIptvEpgDb.h
changeset 0 96612d01cf9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videofeeds/server/IptvEpgDb/inc/CIptvEpgDb.h	Mon Jan 18 20:21:12 2010 +0200
@@ -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 <e32std.h>
+#include <badesca.h>    // CDesCArrayFlat (cannot be forward declarated)
+#include <d32dbms.h>    // RDbStoreDatabase
+#include <f32file.h>    // RFs
+#include "CIptvUtil.h"
+#include "MIptvEpgVodCallback.h"
+#include <cenrepnotifyhandler.h>
+
+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<CIptvVodContentCategoryBriefDetails>& 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<CIptvVodContentContentBriefDetails>& 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<CIptvVodContentContentBriefDetails>& 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<CIptvMediaContent> 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<CIptvMediaContent>& 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<CIptvMediaContent>& 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<TUint32>& aOldContentIds,
+                                   RArray<TUint32>& 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<KCustomSqlMaxLength> iSqlCategory;
+
+    /**
+     * Content SQL-query.
+     */
+    TBuf<KCustomSqlMaxLength> iSqlContent;
+
+    /**
+     * Service id.
+     */
+    TUint32 iServiceId;
+
+    /**
+     * Temporary database name.
+     */
+    TBuf<KIptvDbNameMaxLength> 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