--- /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 <d32dbms.h>
+#include <e32base.h>
+#include <f32file.h>
+
+#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<TInt>& 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<TInt>& 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<TInt>& 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<TInt>& 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<TInt>& aItemIds,
+ const RArray<TInt>& 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<TInt>& 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<TInt>& 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<TInt>& 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<TInt>& aFolderItemIds,
+ RArray<TInt>& 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<TAttribute>& 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<TAttribute>& 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<TAttribute>& aAttributes, RArray<TInt>& 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<TAttribute>& 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<TInt>& aFeedIds);
+
+ /**
+ * Deletes records from a FolderListTable
+ *
+ * @since 3.2
+ * @param aFolderItemIds The array of FolderItemIds to be deleted
+ * @return Void.
+ */
+ void DeleteFolderListTableRecordsL(RArray<TInt>& 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<TInt>& 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<KMaxFileName> 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<TInt> 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