--- a/cbs/CbsServer/ServerInc/CCbsDbImpTopicMessages.h Mon Aug 23 15:50:31 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,576 +0,0 @@
-/*
-* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "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: This file contains the header file of the CCbsDbImpTopicMessages class.
-*
-* This class represents the topic messages stored in the database.
-*
-*/
-
-
-
-#ifndef CCBSDBIMPTOPICMESSAGES_H
-#define CCBSDBIMPTOPICMESSAGES_H
-
-// INCLUDES
-#include <e32std.h>
-#include <s32file.h>
-#include "CbsCommon.h"
-
-// FORWARD DECLARATIONS
-class CCbsDbImp;
-class CCbsDbImpTopicList;
-class CCbsRecEtel;
-
-// CLASS DECLARATION
-
-/**
-* CCbsDbImpTopicMessages represents CB messages stored in persistent memory.
-* CBS server has two files to accommodate messages: one for unsaved
-* and one for saved messages. "Topic messages"-stream contains information
-* on whether a message is saved or not, and what is message's stream id.
-* CCbsDbImpTopicMessages determines the correct data file depending on
-* message's save status.
-*
-* Changes are written to stores immediately after operations. Message cache
-* iMessageList contains header information of all messages in a single topic
-* at once. A call to LoadCacheL() is thus made prior to any operation to
-* make sure that the appropriate topic is being used.
-*/
-class CCbsDbImpTopicMessages : public CBase
- {
- public: // New functions
- /**
- * Creates an instance of the class.
- *
- * @param aTopicList Topic list database manager
- * @param aFs File server session
- * @return Pointer to the created instance
- */
- static CCbsDbImpTopicMessages* NewL( CCbsDbImpTopicList& aTopicList,
- RFs& aFs );
-
- /**
- * Destructor.
- */
- ~CCbsDbImpTopicMessages();
-
- public:
- /**
- * Invalidates the cache.
- */
- void InvalidateCache();
-
- /**
- * Invalidates the cache if the cache contains messages of the topic.
- *
- * @param aNumber Number of the topic that is
- * invalidated.
- */
- void InvalidateCacheIfTopic( const TCbsDbTopicNumber& aNumber );
-
- /**
- * Creates a default topic messages stream.
- *
- * @param aStore Store to which the stream is created.
- * @return Stream identifier to the created stream
- */
- static TStreamId CreateDefaultTopicMessagesStreamL(
- CStreamStore& aStore );
-
- /**
- * Delete all topics messages.
- *
- * @param aSavedStore Store which contains saved messages.
- * @param aUnsavedStore Store which contains unsaved messages.
- * @param aIn Stream for topic messages.
- */
- static void DeleteAllTopicMessagesL( CStreamStore& aSavedStore,
- CStreamStore& aUnsavedStore, RReadStream& aIn );
-
- /**
- * Determines whether or not there are any locked messages in
- * the topic.
- *
- * @param aNumber Number of the topic.
- * @return Boolean value indicating if there are
- * locked messages in topic.
- */
- TBool IsLockedMessagesInTopic( const TCbsDbTopicNumber& aNumber )
- const;
-
- /**
- * Determines whether there is at least one locked message.
- *
- * @return ETrue, if there's at least one locked
- * message.
- */
- TBool IsLockedMessages() const;
-
- /**
- * Returns the total amount of messages the topic contains.
- *
- * @param aNumber Number of the topic.
- * @param aCount Returns: number of messages in given
- * topic
- */
- void GetMessageCountL( const TCbsDbTopicNumber& aNumber,
- TInt& aCount );
-
- /**
- * Returns message information.
- *
- * @param aNumber Number of the topic.
- * @param aIndex Index to the message in topic.
- * @param aMessage Returns: message information.
- */
- void GetMessageL( const TCbsDbTopicNumber& aNumber,
- TInt aIndex, TCbsDbMessage& aMessage );
-
- /**
- * Finds the message for given handle and returns it.
- *
- * @param aHandle Handle to the message.
- * @param aMessage Returns: message information.
- */
- void FindMessageByHandleL( const TCbsDbMessageHandle& aHandle,
- TCbsDbMessage& aMessage );
-
- /**
- * Finds the message by message key.
- *
- * @param aNumber Number of the topic.
- * @param aKey Message key to be looked for.
- * @return Handle to the message, or KErrNotFound if no
- * such message was found.
- */
- TInt FindMessageByKeyL( TCbsDbTopicNumber aNumber,
- TCbsDbMessageKey aKey,
- TCbsDbMessage& aMessage );
-
- /**
- * Stores the contents of the message to the buffer aContents.
- * If aContents is too small to contain the whole message
- * body, the message body is truncated.
- *
- * @param aHandle Handle to the message.
- * @param aContents Returns: message body
- * @param aSize Number of bytes to read
- */
- void GetMessageContentsL( const TCbsDbMessageHandle& aHandle,
- TPtr& aContents, TUint aSize );
-
- /**
- * Deletes a message from the topic.
- *
- * @param aHandle Handle to the message to be deleted.
- * @param aReceiver Receiver.
- */
- void DeleteMessageL( const TCbsDbMessageHandle& aHandle,
- const CCbsRecEtel& aReceiver );
-
- /**
- * Creates a new message to the topic.
- *
- * FFS critical level check is made prior to operation.
- *
- * @param aNumber Number of the topic to which
- * the message is to be added.
- * @param aMessage Contains the message information
- * (i.e., header, not body).
- * @param aContents The contents of the message.
- */
- void AddMessageL( const TCbsDbTopicNumber& aNumber,
- TCbsDbMessage& aMessage, const TPtrC& aContents );
-
- /**
- * Saves the message.
- *
- * FFS critical level check is made prior to the operation.
- *
- * @param aHandle Handle to the message to be saved.
- * @param aReceiver Receiver.
- */
- void SaveMessageL( const TCbsDbMessageHandle& aHandle,
- const CCbsRecEtel& aReceiver );
-
- /**
- * Sets the message as read.
- *
- * @param aHandle Handle to the message to be set read.
- * @param aReceiver Receiver.
- */
- void ReadMessageL( const TCbsDbMessageHandle& aHandle,
- const CCbsRecEtel& aReceiver );
-
- /**
- * Updates handles of messages in the topic with the number given in
- * aOldTopicNumber to match new topic number.
- *
- * @param aOldTopicNumber Number of topic to be changed
- * @param aNewTopicNumber Change handles to match this number
- */
- void UpdateHandlesOfTopicMessagesL(
- const TCbsDbTopicNumber& aOldTopicNumber,
- const TCbsDbTopicNumber& aNewTopicNumber );
-
- /**
- * Unlocks one message and then locks another message.
- *
- * Message that is locked can not be removed. Topic that
- * contains a locked message can not be removed.
- *
- * Note that locking status is not persistent in the sense that
- * when the power is switched off and turned on, no messages
- * are automatically locked.
- *
- * @param aUnlock Handle to the message to be unlocked.
- * @param aLock Handle to the message to be locked.
- */
- void LockMessageL( const TCbsDbMessageHandle& aUnlock,
- const TCbsDbMessageHandle& aLock );
-
- /**
- * Retrieves handles of messages that precede and succeed the message
- * with handle aCurrentMsg.
- */
- void GetNextAndPrevMsgHandleL(
- const TCbsDbMessageHandle& aCurrentMsg,
- TCbsDbMessageHandle& aNextMsg,
- TCbsDbMessageHandle& aPrevMsg,
- TInt& aPosition);
-
- /**
- * Finds message position by message handle.
- *
- * The method leaves in case the message is not found.
- *
- * @param aHandle Handle to the message to be looked for.
- * @return The position of the message.
- */
- TInt FindMessagePositionByHandleL(
- const TCbsDbMessageHandle& aMessage );
-
- private:
-
- // The structure that represents the topic messages cache item.
- struct TCbsDbImpTopicMessagesCacheItem
- {
- // The stream identifier for the message information.
- TStreamId iId;
-
- // Whether this message is saved or not
- TBool iIsSaved;
-
- // Indicates whether iMessage and iContentsId are valid.
- TBool iIsMessage;
-
- // Message header - valid only if iIsMessage is true.
- TCbsDbMessage iMessage;
-
- // Stream identifier for message body-valid if iIsMessage is ETrue
- TStreamId iContentsId;
- };
-
- typedef CArrayFixFlat< TCbsDbImpTopicMessagesCacheItem >
- TCbsDbImpTopicMessagesCache;
-
- /**
- * Constructor.
- *
- * @param aTopicList Topic list database object
- * @param aFs File server session
- */
- CCbsDbImpTopicMessages( CCbsDbImpTopicList& aTopicList, RFs& aFs );
-
- /**
- * Finalizes the construction.
- */
- void ConstructL();
-
- /**
- * Adds a message.
- *
- * @param aMessage Contains the message information.
- * @param aContents Contains the message contents.
- */
- void DoAddMessageL( TCbsDbMessage& aMessage, const TDesC& aContents );
-
- /**
- * Deletes a message.
- *
- * @param aPosition Position in the internal array where
- * the message is.
- */
- void DoDeleteMessageL( TInt aPosition );
-
- /**
- * Updates message information.
- *
- * @param aId Stream id to which the information is
- * written.
- * @param aMessage Contains the message information.
- * @param aContentsId Contains the contents id.
- */
- void DoUpdateMessageL( const TStreamId& aId,
- const TCbsDbMessage& aMessage, const TStreamId& aContentsId ) const;
-
- /**
- * Sets the message read.
- *
- * @param aId Stream id to which the information is
- * written.
- * @param aMessage Contains the message information.
- * @param aContentsId Stream idenfitier to the contents.
- */
- void DoReadMessageL( const TStreamId& aId, const TCbsDbMessage& aMessage,
- const TStreamId& aContentsId );
-
- /**
- * Deletes messages that are not supposed to be in the topic.
- *
- * Because of message locking it is possible that there are more
- * received messages than there should be. This method tries to
- * delete this kind of message.
- */
- void DoDeleteL();
-
- /**
- * Loads the cache, if it is not already loaded with this topic
- * information.
- *
- * The method does not load any message information to the cache
- * - only what is really necessary.
- *
- * @param aNumber Number of the topic to be loaded
- * to the cache.
- */
- void LoadCacheL( const TCbsDbTopicNumber& aNumber );
-
- /**
- * Loads the message header to the cache.
- *
- * Note that it is assumed that the index is in proper range!
- * And the cache is already loaded!
- *
- * @param aIndex The index to the message in cache.
- * @param aMessage Returns: message information.
- */
- void LoadMessageL( TInt aIndex, TCbsDbMessage& aMessage );
-
- /**
- * Loads message contents (as much as it fits).
- *
- * Save status of message is required because saved and unsaved
- * messages are stored on separate files.
- *
- * @param aContentsId Stream identifier to the content.
- * @param aContents Returns: message body.
- * @param aIsSaved ETrue, if the message is saved.
- * @param aSize Size of the message.
- */
- void LoadMessageContentsL( const TStreamId& aContentsId, TPtr& aContents,
- TBool aIsSaved, TUint aSize ) const;
-
- /**
- * Generates a new message handle.
- *
- * @param aNumber Number of the topic which will contain
- * the message.
- * @return Returns the new message handle.
- */
- TCbsDbMessageHandle GenerateNewMessageHandle(
- const TCbsDbTopicNumber& aNumber );
-
- /**
- * Checks that if there are too many received messages in
- * the internal cache, then they will be deleted if they
- * are not locked.
- *
- * @return Boolean value indicating if some
- * changes was made.
- */
- TBool DeleteReceivedIfNecessaryL();
-
- /**
- * Deletes message by its position in the internal cache.
- *
- * Note that after the call the internal cache won't contain
- * the item.
- *
- * @param aPosition The position to the message.
- */
- void DeleteMessageByPositionL( TInt index );
-
- /**
- * Determines whether or not the message is locked.
- *
- * @param aHandle The handle to the message.
- * @return Boolean value indicating if
- * the message is locked.
- */
- TBool IsMessageLocked( const TCbsDbMessageHandle& aHandle ) const;
-
- /**
- * Deletes from the locked messages.
- *
- * @param aHandle Message to be unlocked.
- */
- void DeleteFromLocked( const TCbsDbMessageHandle& aHandle );
-
- /**
- * Adds a handle to the locked messages.
- *
- * @param aHandle Message to be locked.
- */
- void InsertToLockedL( const TCbsDbMessageHandle& aHandle );
-
- /**
- * Updates topic messages stream from the internal cache.
- *
- * @param aDeleting Whether the call is due to a deletion.
- */
- void UpdateTopicMessagesStreamL( TBool aDeleting );
-
- /**
- * Writes topic messages stream from the internal cache.
- *
- * @param aOut Stream to which data is written.
- */
- void WriteTopicMessagesStreamL( RWriteStream& aOut );
-
- /**
- * Saves the message.
- *
- * @param aMessage The message to be saved.
- * @param aItem The cache item to the previous instance of the
- * message.
- * @param aContentPtr The contents of the message.
- * @param aPosition The position of the message in the cache.
- */
- void DoSaveMessageL(
- TCbsDbMessage& aMessage,
- const TCbsDbImpTopicMessagesCacheItem& aItem,
- const TDesC& aContentPtr,
- TInt aPosition );
-
- /**
- * Reverts any not commited file operation in data files,
- * reloads cache and then leaves with aReason.
- *
- * @param aReason Leave code
- */
- void RevertFileOperationL( TInt aReason );
-
- /**
- * Creates a new message content stream.
- *
- * @param aStore Store to which the stream is created.
- * @param aContents Message content.
- */
- static TStreamId CreateMessageContentsStreamL( CStreamStore& aStore,
- const TDesC& aContents );
-
- /**
- * Creates a new message stream.
- *
- * @param aStore Store to which the stream is created.
- * @param aMessage Message information.
- * @param aContents Stream identifier to the contents.
- */
- static TStreamId CreateMessageStreamL( CStreamStore& aStore,
- TCbsDbMessage& aMessage, const TStreamId& aContents );
-
- /**
- * Reads all cache items for a topic.
- *
- * @param aStore Reference to the store.
- * @param aId Stream id to the topic messages stream.
- * @param aCache Empty cache where it is supposed that
- * these messages are put.
- * @param aSpace Contain the amount of space for
- * messages.
- */
- static void ReadTopicMessagesCacheItemsL( const CStreamStore& aStore,
- const TStreamId& aId,
- TCbsDbImpTopicMessagesCache& aCache,
- TInt& aSpace );
-
- /**
- * Reads necessary message information from the store.
- *
- * @param aStore Store that contains the information.
- * @param aId Stream identifier to the message
- * stream.
- * @param aMessage Contain message information.
- * @param aContentsId Contain the stream identifier to
- * the contents.
- */
- static void ReadMessageInformationL(
- const CStreamStore& aStore,
- const TStreamId& aId,
- TCbsDbMessage& aMessage,
- TStreamId& aContentsId );
-
- /**
- * Writes message information to the store.
- *
- * @param aOut Stream to which data is written.
- * @param aMessage Contains the message information to be
- * written.
- * @param aContentsId Stream identifier to the contents.
- */
- static void WriteMessageInformationL( RWriteStream& aOut,
- const TCbsDbMessage& aMessage, const TStreamId& aContentsId );
-
- /**
- * Updates the soft notification (dialog) when unread message
- * count changes.
- *
- * @param aHandle Handle to the message to be set as read
- * @param aReceiver Receiver.
- */
- void UpdateSoftNotificationL( const TCbsDbMessageHandle& aHandle,
- const CCbsRecEtel& aReceiver );
-
- private:
-
- // Topic list manager.
- CCbsDbImpTopicList& iTopicList;
-
- // Indicates whether the cache is valid or not.
- TBool iCacheValid;
-
- // If cache is valid, then it contains the topic handle of the
- // cached topic.
- TCbsDbTopicNumber iCachedTopicNumber;
-
- // If cache is valid, then it tells how many messages the stream
- // can hold.
- TInt iSpaceForMessages;
-
- // Own: If cache is valid, it contains some information of the
- // topic messages for fast access.
- TCbsDbImpTopicMessagesCache* iMessageList;
-
- // Own: handles of the locked messages.
- CArrayFixFlat< TCbsDbMessageHandle >* iLockedMessages;
-
- // Reference to a file server session of CCbsDbImp
- RFs& iFs;
-
- };
-
-#endif // CCBSDBIMPTOPICMESSAGES_H
-
-// End of File