diff -r 000000000000 -r dd21522fd290 browserutilities/feedsengine/FeedsServer/Server/inc/FeedsDatabase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserutilities/feedsengine/FeedsServer/Server/inc/FeedsDatabase.h Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,1059 @@ +/* +* Copyright (c) 2005 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: The feeds server database. +* +*/ + + +#ifndef FEEDS_DATABASE_H +#define FEEDS_DATABASE_H + +// INCLUDES +#include +#include +#include + +#include "LeakTracker.h" + +// CONSTANTS +const TInt KUnassignedId = -1; +const TInt KMinFreebytes = 1024000; + +// DATA TYPES + +// FORWARD DECLARATIONS +class CDbKey; +class CDesC16ArraySeg; +class CPackedFeed; +class CPackedFolder; +class CFeedsServer; +struct TAttribute; + +// CLASS DECLARATION + + +/** +* The feeds server database. +* +* \b Library: FeedsEngine.lib +* +* @since 3.1 +*/ +NONSHARABLE_CLASS(CFeedsDatabase): public CBase + { + public: // Constructors and destructor + /** + * Two-phased constructor. + * + * @since 3.1 + * @param aDatabaseCreated To to ETrue by this method if the database + * was newly created. + * @return A new instance. + */ + static CFeedsDatabase* NewL(CFeedsServer* aFeedsServer, TBool &aDatabaseCreated); + + /** + * Destructor. + */ + ~CFeedsDatabase(); + + + public: // New methods + /** + * Returns the feed if of the feed with the given url. + * + * @since 3.1 + * @param aFeedUrl The feed's url + * @param aFeedId The resulting FeedsTable feed id. + * @return ETrue if the feed was resolved. + */ + TBool FeedIdFromUrlL(const TDesC& aFeedUrl, TInt aFolderListId, TInt& aFeedId); + + /** + * Return the folder list ID of the feed with the given feed-id. + * + * @since 3.2 + * @param aFeedId The FeedsTable feed's id + * @param aFolderListId The folder list ID of the feed + * @return void. + */ + void FolderListIdFromFeedIdL( TInt aFeedId, TInt& aFolderListId ); + + /** + * Return the feed-id of the given folder-item-id. + * + * @since 3.1 + * @param aFolderItemId The FolderListTable folder item's id + * @param aFeedId The feed's id + * @return ETrue if the feed was resolved. + */ + TBool FeedIdFromFolderItemIdL(TInt aFolderItemId, TInt& aFeedId); + + /** + * Gets the folder item properties like IsFolder, Title and FeedURL + * + * @since 3.2 + * @param aFolderItemId The Folder item's id + * @param aTitle Title of the folder item will be stored in this + * @param aFeedUrl Feed URL of the folder item will be stored in this + * @return void + */ + void FolderItemInfoL(TInt aFolderItemId, TBool &aIsFolder, HBufC*& aTitle, HBufC*& aFeedUrl); + + /** + * Return the url of the feed with the given feed-id. + * + * @since 3.1 + * @param aFeedId The FeedsTable feed's id + * @param aFeedUrl The feed's url + * @return ETrue if the feed was resolved. + */ + TBool UrlFromFeedIdL(TInt aFeedId, HBufC*& aFeedUrl); + + /** + * Finds the item with the given item-id-str and returns its id. + * + * @since 3.1 + * @param aFeedId The FeedsTable feed id. + * @param aItemIdStr The item's id string. + * @param aItemId The resulting ItemsTable item id. + * @return ETrue if the feed was resolved. + */ + TBool FindItemL(TInt aFeedId, const TDesC& aItemIdStr, TInt& aItemId); + + /** + * Finds the folder item with the given name. + * + * @since 3.1 + * @param aFolderListId The folder list id. + * @param aName The name. + * @param aFolderItemId The resulting folder-item-id, if found. + * @return ETrue if a folder item with this name was found. + */ + TBool CFeedsDatabase::FindFolderItemL(TInt& aFolderListId, const TDesC& aName, + TInt& aFolderItemId); + + /** + * Extract all of the feed-ids. + * + * @since 3.1 + * @param aFeedIds The resulting feed ids. + * @return Void. + */ + void AllFeedIdsL( RArray& aFeedIds, TInt aFolderListId = -1 ); + + /** + * Determines if the given feed is newly created (not ok to read from the database). + * + * @since 3.1 + * @param aFeedId The resulting feed id. + * @return ETrue if the feed is newly created. + */ + TBool IsNewlyCreatedL(TInt aFeedId); + + /** + * Extracts the feed from the database. + * + * @since 3.1 + * @param aFeedId The feed's id. Call ResolveFeedUrl to get the id. + * @param aFeed The resulting packed feed. + * @return void + */ + void ExtractFeedL(TInt aFeedId, CPackedFeed& aFeed); + + /** + * Extracts the folder from the database. + * + * @since 3.1 + * @param aFolderListId The folder list's id. + * @param aPackedFolder The resulting packed folder. + * @param aItemTitleNeed The flag indicates if the titles of items with new status will be returned. + * @return void + */ + void ExtractRootFolderL( TInt aFolderListId, CPackedFolder& aPackedFolder, TBool aItemTitleNeed = EFalse ); + + /** + * Update the database given the packed feed. + * + * @since 3.1 + * @param aFeed A packed feed. + * @param aFeedUrl The feed's url. + * @param aPurgeOldItems If ETrue all items in the db that are not in the + * packed feed are purged from the database. + * @return Void. + */ + void UpdateFeedL(const CPackedFeed& aPackedFeed, const TDesC& aFeedUrl,TInt aFeedId, TInt aFolderListId, + TBool aPurgeOldItems = ETrue); + + /** + * Update the database given the packed folder. + * + * @since 3.1 + * @param aFolderListId The folder list's id. + * @param aFeed A packed folder. + * @return Void. + */ + void ImportFolderL(TInt aFolderListId, const CPackedFolder& aPackedFolder); + + /** + * Add a new entry. + * + * @since 3.1 + * @param aFolderListId The folder-list id. + * @param aTitle The title. + * @param aUrl The url. + * @param aIsFolder ETrue if this is a folder. + * @param aParentEntryId The entry id of the parent. + * @param aFreq auto update frequency + * @return The entry-id of the new entry. + */ + TInt FolderItemAddL(TInt aFolderListId, const TDesC& aTitle, + const TDesC& aUrl, TBool aIsFolder, TInt aParentEntryId, TInt aFreq); + + /** + * Update an entry. + * + * @since 3.1 + * @param aFolderItemId The folder-item's id. + * @param aTitle The title. + * @param aUrl The url. + * @param aFreq auto update frequency + * @return void + */ + void FolderItemUpdateL(TInt aFolderItemId, const TDesC& aTitle, + const TDesC& aUrl, TInt aFreq); + + /** + * Delete the given folder items. + * + * @since 3.1 + * @param aFolderItemIds The id of the folder items. + * @param iSessionCalled This should be true if FeedServerSession calls this function + * @return void + */ + void FolderItemDeleteL(const RArray& aFolderItemIds, TBool iSessionCalled = EFalse); + + /** + * Delete anything under the folder list. + * + * @since 3.2 + * @param aFolderListId The folder list ID. + * @return void + */ + void FolderListDeleteL( TInt aFolderListId ); + + /** + * Move the folder items within their parent. + * + * @since 3.1 + * @param aFolderItemIds The id of the folder items. + * @param aNewIndex The target index. + * @return void. + */ + void FolderItemMoveL(const RArray& aFolderItemIds, + TInt aNewIndex); + + /** + * Move the entries to another parent. + * + * @since 3.1 + * @param aFolderItemIds The id of the folder items. + * @param aNewParent The id of the new parent. + * @return void. + */ + void FolderItemMoveToL(const RArray& aFolderItemIds, + TInt aNewParent); + + /** + * Update the status of each of the items in the given feed. + * + * @since 3.1 + * @param aFeedId The feed's id. + * @param aItemIds The Id's of the items to update. + * @param aItemStatus The corresponding status of items defined in aItemIdStr. + * @return void + */ + void FeedUpdateItemStatusL(TInt aFeedId, const RArray& aItemIds, + const RArray& aItemStatus, TInt aUnreadCount); + + /** + * Deletes the feed if the feedId isn't referenced in the folder-list table. + * + * @since 3.1 + * @param aFeedId The feed's id. + * @return void. + */ + void PurgeFeedIfNotReferencedL(TInt aFeedId); + + /** + * Removes the feed's items also deletes the feed if aDeleteFeed is ETrue. + * It is only safe to call this method with aDeleteFeed set to ETrue if + * aFeedId is not found in the FolderListTable. + * + * @since 3.1 + * @param aFeedId The feed's id. + * @param aDeleteFeed If ETrue the feed is also delete. + * @return void. + */ + void FeedPurgeL(TInt aFeedId, TBool aDeleteFeed = EFalse); + + /** + * Purge all old items in the given feed. + * + * @since 3.1 + * @param aFeedId The feed's id. + * @param aTimestamp The timestamp used to remove old items. + * @return void. + */ + void PurgeOldItemsL(TInt aFeedId, const TTime& aTimestamp); + + /** + * Purge the associated enclosures + * + * @since 3.1 + * @param aFeedId The feed's id. + * @param aItemId The item's id. + * @return void. + */ + void PurgeEnclosuresL(TInt aFeedId, TInt aItemId); + + /** + * Purge all items not found in the given array. + * + * @since 3.1 + * @param aFeedId The feed's id. + * @param aItemIds An array that holds the itemIds of the items to keep. + * @return purged unread count. + */ + TInt PurgeOtherItemsL(TInt aFeedId, const RArray& aItemIds); + + /** + * Get the settings from the database. + * + * @since 3.2 + * @param aFolderListIds The array holding folder list Ids in the settings table. + * @return void. + */ + void ExtractFolderListIdInSettingsL( RArray& aFolderListIds ); + + /** + * Get the settings from the database. + * + * @since 3.2 + * @param aFolderListId The client to whom the settings belong to. + * @param aAutoUpdate ETrue if auto update is enabled. + * @param aAutoUpdateFreq The freq of auto updates. + * @param aAutoUpdateAP The access point. + * @param aAutoUpdateWhileRoaming ETrue if auto update is enabled while roaming. + * @return void. + */ + void ExtractAutoUpdateSettingsL( TInt aFolderListId, TBool& aAutoUpdate, TInt& aAutoUpdateFreq, + TUint32& aAutoUpdateAP, TBool &autoUpdateWhileRoaming ); + + /** + * Commit the settings to the database + * + * @since 3.2 + * @param aFolderListId The client to whom the settings belong to. + * @param aAutoUpdate ETrue if auto update is enabled. + * @param aAutoUpdateFreq The freq of auto updates. + * @param aAutoUpdateAP The access point. + * @param aAutoUpdateWhileRoaming ETrue if auto update is enabled. + * @return Void. + */ + void CommitAutoUpdateSettingsL( TInt aFolderListId, TBool aAutoUpdate, TInt aAutoUpdateFreq, + TUint32 aAutoUpdateAP, TBool aAutoUpdateWhileRoaming ); + + /** + * Get the last auto update settings from the database. + * + * @since 3.2 + * @param aFolderListId The client to whom the settings belong to. + * @param aLastAutoUpdate The timestamp of the last auto update. + * @return void. + */ + void ExtractLastAutoUpdateSettingsL(TInt aFolderListId, TTime& aLastAutoUpdate); + + /** + * Commit the last auto update settings to the database + * + * @since 3.2 + * @param aFolderListId The client to whom the settings belong to. + * @param aLastAutoUpdate The timestamp of the last auto update. + * @return Void. + */ + void CommitLastAutoUpdateSettingsL(TInt aFolderListId, TTime aLastAutoUpdate); + + /** + * Compacts the database. + * + * @since 3.1 + * @return Void. + */ + void Compact(); + + /** + * Print the tables from the database. + * + * @since 3.2 + * @return Void. + */ + void DebugPrintTablesL(); + + /** + * Print the folder list table from the database. + * + * @since 3.2 + * @return Void. + */ + void DebugPrintFolderListTableL(); + + /** + * Print the item table from the database. + * + * @since 3.2 + * @return Void. + */ + void DebugPrintItemTableL(); + + /** + * Extract the folder-item-ids of the children of the given parent. + * + * @since 3.2 + * @param aFolderItemId The id of the parent folder item. + * @param aChildren The ids of the children. + * @return void. + */ + void FolderItemGetChildrenL(TInt aFolderItemId, RArray& aChildren); + + /** + * Check for the duplicate folder names and feed URLs and suggest the next title. + * + * @since 3.2 + * @param aFolderListId The folder list id. + * @param aParentEntryId The parent id + * @param aTitle Folder/Feed title to be checked for duplicates + * @param aIsFolder Flag which indicates folder/feed + * @param aNewFeedTitle The new feed/folder title generated + * @return TBool - ETrue if new folder/feed title is generated successfully and ready to add to the DB. + */ + TBool ValidateFeedFolderTitleL(const TInt &aFolderListId, const TInt &aParentEntryId, + const TDesC& aTitle, const TBool aIsFolder, TDes& aNewFeedTitle); + + /** + * Update Feed Status + * + * @since 5.0 + * @param aFeedId Feed Id. + * @param aFeedStatus Feed status + * @return void + */ + void UpdateFeedStatusL(TInt aFeedId, TInt aFeedStatus); + + /** + * Adds a new column AutoUpdateFreq to FeedTable in the case of versions less than 7.1. + * + * @since 7.1 + * @return void + */ + void AlterFeedTableWithAutoFequencyL(); + + /** + * Fetchs Freqs for all feeds. + * + * @since 7.1 + * @return bool + */ + TBool FreqFromFeedIdL(TInt aFeedId, TInt& aFreq); + + private: // New methods + /** + * C++ default constructor. + */ + CFeedsDatabase(CFeedsServer* aFeedsServer); + + /** + * Two-Phase constructor + */ + void ConstructL(TBool &aDatabaseCreated); + + /** + * Reset the database. + * + * @since 3.1 + * @return void. + */ + void ResetDatabaseL(); + + /** + * Creates the version table. + * + * @since 3.1 + * @return void. + */ + void CreateVersionTableL(); + + /** + * Creates the folder-list table. + * + * @since 3.1 + * @return void. + */ + void CreateFolderListTableL(); + + /** + * Creates the feed table. + * + * @since 3.1 + * @return void. + */ + void CreateFeedTableL(); + + /** + * Creates the feed-item table. + * + * @since 3.1 + * @return void. + */ + void CreateFeedItemTableL(); + + /** + * Creates the item-enclosure table. + * + * @since 3.1 + * @return void. + */ + void CreateItemEnclosureTableL(); + + /** + * Creates the settings table. + * + * @since 3.1 + * @return void. + */ + void CreateSettingsTableL(); + + /** + * Returns an available folder-item id + * + * @since 3.1 + * @return void. + */ + TInt NextFolderItemIdL(); + + /** + * Returns an available feed id + * + * @since 3.1 + * @return void. + */ + TInt NextFeedIdL(); + + /** + * Returns an available item id + * + * @since 3.1 + * @return void. + */ + TInt NextItemIdL(); + + /** + * Add a new entry. + * + * @since 3.1 + * @param aFolderListId The folder-list id. + * @param aTitle The title. + * @param aUrl The url. + * @param aIsFolder ETrue if this is a folder. + * @param aSiblingIndex The sibling index within the given parent. + * @param aParentEntryId The entry id of the parent. + * @param aOutFolderId The new id generated for the folder added + * @param aOutFeedId The new id generated for the feed added + * @param aFreq auto update frequency + * @return void. + */ + void FolderItemAddHelperL(TInt aFolderListId, const TDesC& aTitle, + const TDesC& aUrl, TBool aIsFolder, TInt aSiblingIndex, TInt aParentEntryId, + TInt& aOutFolderId, TInt& aOutFeedId, TInt aFreq); + + /** + * Delete the given folder items and store the feedIds in aFeedIds. aFeedIds + * can then be used to delete any newly unreferenced feeds. + * + * @since 3.1 + * @param aFolderItemIds The ids of the folder items to delete. + * @param aFeedIds The feed ids of the folder items deleted. + * @return void. + */ + void FolderItemDeleteHelperL(const RArray& aFolderItemIds, + RArray& aFeedIds); + + /** + * Reorders the sibling indexes. + * + * @since 3.1 + * @param aParentId The entry id of the parent. + * @return void. + */ + void AdjustSiblingIndexesL(TInt aParentId); + + /** + * Creates a hole in the sibling index. + * + * @since 3.1 + * @param aParentId The entry id of the parent. + * @param aNewIndex Where the hole will be made. + * @param aHoleSize The size of the hole. + * @return void. + */ + void CreateSiblingIndexHoleL(TInt aParentId, TInt aNewIndex, TInt aHoleSize); + + /** + * Commit the folder entry to the database. + * + * @since 3.1 + * @param aFolderListId The folder-list-id that this entry is added to. This id + * allows multiple lists of feeds and folders to be tracked by the database. + * @param aFolderItemId The folder item's id. + * @param aParentId The entry's parent folder. + * @param aSiblingIndex The sibling order of this entry. + * @param aIsFolder ETrue when the entry is an folder. + * @param aFeedId The feed's id or KUnassignedId if this is folder. + * @param aTitle The title. + * @return Void. + */ + void CommitFolderListL(TInt aFolderListId, TInt aFolderItemId, + TInt aParentId, TInt aSiblingIndex, TBool aIsFolder, TInt aFeedId, + const TDesC& aTitle); + + private: + /** + * Commit the feed to the database. + * + * @since 3.1 + * @param aFolderListId The folder list's id. + * @param aIsNewFeed If ETrue a new entry is added to the database, otherwise + * the existing entry is updated. + * @param aFeedId The feed's id. + * @param aAttributes The associated attributes. + * @param aDefaultTime The default timestamp if the feed doesn't provide a value. + * @param aUnreadCount number of unread articles + * @param aFreq auto update frequency + * @return Void. + */ + void CommitFeedL(TInt aFolderListId, TBool aIsNewFeed, TInt aFeedId, + const RArray& aAttributes, const TTime& aDefaultTime, TInt aUnreadCount, TInt aFreq); + + /** + * Commit the feed to the database. + * + * @since 3.1 + * @param aFolderListId The folder list's id. + * @param aIsNewFeed If ETrue a new entry is added to the database, otherwise + * the existing entry is updated. + * @param aFeedId The feed's id. + * @param aAttributes The associated attributes. + * @param aDefaultTime The default timestamp if the feed doesn't provide a value. + * @param aUnreadCount number of unread articles + * @return Void. + */ + void CommitFeedL(TInt aFolderListId, TBool aIsNewFeed, TInt aFeedId, + const RArray& aAttributes, const TTime& aDefaultTime, TInt aUnreadCount); + + /** + * Commit a new feed to the database. + * + * @since 3.1 + * @param aFolderListId The folder list's id. + * @param aTitle The title. + * @param aUrl The url. + * @param aFreq auto update frequency + * @return The feed's id. + */ + TInt CommitFeedL(TInt aFolderListId, const TDesC& aTitle, const TDesC& aUrl, TInt aFreq); + + /** + * Commit the item to the database. The itemIdStr is also appended to aItemIdStrs. + * + * @since 3.1 + * @param aItemId The item's id. + * @param aFeedId The feed's id. + * @param aAttributes The associated attributes. + * @param aItemIds An array that holds the itemId of the items in this feed. + * @return ETrue if this item was added to the database (i.e. it wasn't already there). + */ + TBool CommitItemL(TInt aItemId, TInt aFeedId, + const RArray& aAttributes, RArray& aItemIds); + + /** + * Commit the enclosure to the database + * + * @since 3.1 + * @param aEnclosureId The enclosure's id. + * @param aItemId The item's id. + * @param aFeedId The feed's id. + * @param aAttributes The associated attributes. + * @return Void. + */ + void CommitEnclosureL(TInt aEnclosureId, TInt aItemId, TInt aFeedId, + const RArray& aAttributes); + + /** + * Extracts and pack the folder. + * + * @since 3.1 + * @param aFolderListId The folder list's id. + * @param aFolderId The id of the folder to be packed. + * @param aPackedFolder The resulting packed folder. + * @param aItemTitleNeed Need items title or not. + * @return void + */ + void PackFolderL(TInt aFolderListId, TInt aFolderId, CPackedFolder& aPackedFolder, + TBool aItemTitleNeed ); + + /** + * Extracts and pack the feed. + * + * @since 3.1 + * @param aFeedId The feed's id + * @param aFeed The destination feed. + * @return Void. + */ + void PackFeedL(TInt aFeedId, CPackedFeed& aFeed); + + /** + * Extracts and pack the items. + * + * @since 3.1 + * @param aFeedId The feed's id + * @param aFeed The destination feed. + * @return Void. + */ + void PackItemsL(TInt aFeedId, CPackedFeed& aFeed); + + /** + * Extracts and pack the enclosures. + * + * @since 3.1 + * @param aFeedId The feed's id + * @param aItemId The item's id + * @param aFeed The destination feed. + * @return Void. + */ + void PackEnclosuresL(TInt aFeedId, TInt aItemId, CPackedFeed& aFeed); + + /** + * Extracts and pack the enclosures. + * + * @since 3.2 + * @param aFeedId The feed's id + * @param aStatus The desired status of items + * @param aPackedFolder The resulting packed folder. + * @return Void. + */ + void SelectMiniItemsL( TInt aFeedId, TInt aStatus, CPackedFolder& aFolder ); + + /** + * Writes "long" text to the database. + * + * @since 3.1 + * @param aTable The table. + * @param aColumnIndex The column index to write to. + * @param aValue The value. + * @return Void. + */ + void WriteLongTextL(RDbRowSet& aTable, TInt aColumnIndex, + const TDesC& aValue); + + /** + * Reads "long" text from the database. + * + * @since 3.1 + * @param aTable The table. + * @param aColumnIndex The column index to read from. + * @param aValue The resulting value. + * @return Void. + */ + void ReadLongTextL(RDbRowSet& aTable, TInt aColumnIndex, + HBufC*& aValue); + + /** + * Pushes the release table function onto cleanup stack + * and opens the FolderList table for use. + * + * @since 3.1 + * @param aAccess The access specification for the rowset. + * @return Void. + */ + void UseFolderListTableLC(RDbRowSet::TAccess aAccess); + + /** + * Opens the Folder List table for use. + * + * @since 3.2 + * @param aAccess The access specification for the rowset. + * @return Void. + */ + void OpenFolderListTableL(RDbRowSet::TAccess aAccess); + + /** + * Closes the Folder List table. + * + * @since 3.1 + * @param aPtr Pointer to self. + * @return Void. + */ + static void ReleaseFolderListTable(TAny *aPtr); + + /** + * Pushes the release table function onto cleanup stack + * and opens the Feed table for use. + * + * @since 3.1 + * @param aAccess The access specification for the rowset. + * @return Void. + */ + void UseFeedTableLC(RDbRowSet::TAccess aAccess); + + /** + * Opens the feed table for use. + * + * @since 3.2 + * @param aAccess The access specification for the rowset. + * @return Void. + */ + void OpenFeedTableL(RDbRowSet::TAccess aAccess); + + /** + * Closes the feed table. + * + * @since 3.1 + * @return Void. + */ + static void ReleaseFeedTable(TAny *aPtr); + + /** + * Opens the OPML import related tables (FeedTable and FolderListTable) and starts a transaction + * + * @since 3.2 + * @return Void. + */ + void PrepareImportTransationsL(); + + /** + * Closes the OPML import related tables (FeedTable and FolderListTable) + * + * @since 3.2 + * @return Void. + */ + void ReleaseImportTables(); + + /** + * Commits current database transaction + * + * @since 3.2 + * @return Void. + */ + void CommitImportTransaction(); + + /** + * Cancels/Rollbacks current database transaction + * + * @since 3.2 + * @return Void. + */ + void CancelImportTransaction(); + + /** + * Deletes records from a FeedTable + * + * @since 3.2 + * @param aFeedIds The array of FeedIds to be deleted + * @return Void. + */ + void DeleteFeedTableRecordsL(RArray& aFeedIds); + + /** + * Deletes records from a FolderListTable + * + * @since 3.2 + * @param aFolderItemIds The array of FolderItemIds to be deleted + * @return Void. + */ + void DeleteFolderListTableRecordsL(RArray& aFolderItemIds); + + /** + * Deletes records from a given table + * + * @since 3.2 + * @param aTableName The table from which records to be deleted + * @param aColumnName The column name whose values have been specified to be deleted + * @param aIds The Id valus for the columns to be deleted + * @return Void. + */ + void DeleteRecordsFromTableL(const TDesC& aTableName, const TDesC& aColumnName, RArray& aIds); + + /** + * Opens the item table for use. + * + * @since 3.1 + * @param aAccess The access specification for the rowset. + * @return Void. + */ + void UseItemTableLC(RDbRowSet::TAccess aAccess); + + /** + * Closes the Item table. + * + * @since 3.1 + * @param aPtr Pointer to self. + * @return Void. + */ + static void ReleaseItemTable(TAny *aPtr); + + /** + * Opens the Enclosure table for use. + * + * @since 3.1 + * @param aAccess The access specification for the rowset. + * @return Void. + */ + void UseEnclosureTableLC(RDbRowSet::TAccess aAccess); + + /** + * Closes the Enclosure table. + * + * @since 3.1 + * @param aPtr Pointer to self. + * @return Void. + */ + static void ReleaseEnclosureTable(TAny *aPtr); + + /** + * Opens the Settings table for use. + * + * @since 3.1 + * @param aAccess The access specification for the rowset. + * @return Void. + */ + void UseSettingsTableLC(RDbRowSet::TAccess aAccess); + + /** + * Closes the Settings table. + * + * @since 3.1 + * @param aPtr Pointer to self. + * @return Void. + */ + static void ReleaseSettingsTable(TAny *aPtr); + + /** + * Opens the Version table for use. + * + * @since 3.1 + * @param aAccess The access specification for the rowset. + * @return Void. + */ + void UseVersionTableLC(RDbRowSet::TAccess aAccess); + + /** + * Closes the Version table. + * + * @since 3.1 + * @param aPtr Pointer to self. + * @return Void. + */ + static void ReleaseVersionTable(TAny *aPtr); + + /** + * Parses the Folder/Feed name to get the counter for duplicated names (ex Folder, Folder (2), Folder (3) ...) + * + * @since 3.2 + * @param aFolderTitle is the input Folder/Feed title + * @param aCounterVal is the output postfix integer value + * @return TBool ETrue if its a valid duplicated folder name else EFalse + */ + TBool GetDuplicateFolderCounter(const TDesC& aFolderToBeAdded, const TDesC& aFolderTitle, TInt &aCounterVal); + + /** + * Checks for the FeedURL's existance + * + * @since 3.2 + * @param aFolderListId is the input folder list id + * @param aUrl is the feed-url needs to be checked + * @return TBool ETrue if the specified URL exists else EFalse + */ + TBool ValidateFeedURLL(const TInt &aFolderListId, const TDesC& aUrl); + + /** + * This will check for the duplicate folder names and suggest a new folder title if duplicated + * + * @since 3.2 + * @param aFolderListId is the input folder list id + * @param aParentEntryId is the parent id + * @param aTitle The Folder/Feed title to be checked for duplicate + * @param aNewFeedTitle The new Folder/Feed title generated + * @return void + */ + void GenerateNewFeedFolderTitleL( + const TInt &aFolderListId, + const TInt &aParentEntryId, + const TDesC& aTitle, + TDes& aNewFeedTitle + ); + + private: // Data + TLeakTracker iLeakTracker; + + RDbs iDBs; ///< DBMS session handle. Own + RDbNamedDatabase iDatabase; ///< Database handle. Own. + TBuf iDatabasePath; + + RDbTable iFolderListTable; + CDbColSet* iFolderListColSet; + TInt iFolderListTableRefCount; + + RDbTable iFeedTable; + CDbColSet* iFeedColSet; + TInt iFeedTableRefCount; + + RDbTable iItemTable; + CDbColSet* iItemColSet; + TInt iItemTableRefCount; + + RDbTable iEnclosureTable; + CDbColSet* iEnclosureColSet; + TInt iEnclosureTableRefCount; + + RDbTable iVersionTable; + CDbColSet* iVersionColSet; + TInt iVersionTableRefCount; + + RDbTable iSettingsTable; + CDbColSet* iSettingsColSet; + TInt iSettingsTableRefCount; + + TInt iNextAvailableFeedId; + + RArray iDeleteFolderArray; // This array will be populated when session calls delete + CFeedsServer* iFeedsServer; + + + friend class CImportFeedsTask; + friend class CFeedsServerSession; + }; + +#endif // FEEDS_DATABASE_H + +// End of File