--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ipsservices/ipssosplugin/inc/ipsplgsearch.h Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,529 @@
+/*
+* Copyright (c) 2007 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 defines classes CIpsPlgSearch, TSearchParams, TMsgContainer
+*
+*/
+
+
+#ifndef IPSPLGSEARCH_H
+#define IPSPLGSEARCH_H
+
+class CFSMailMessage;
+class CIpsPlgMsgIterator;
+class MFSMailBoxSearchObserver;
+class CIpsPlgSearchOp;
+class CIpsPlgMsgMapper;
+class CIpsPlgSosBasePlugin;
+class CCnvCharacterSetConverter;
+
+/**
+ * Class to handle searching from emails.
+ *
+ * @since FS v1.0
+ * @lib IpsSosSettings.lib
+ */
+NONSHARABLE_CLASS( CIpsPlgSearch ) :
+ public CBase
+ {
+
+public:
+
+ /**
+ * Symbian 2nd phase construcror
+ *
+ * @return None
+ */
+ static CIpsPlgSearch* NewL(
+ CMsvSession& aMsvSession,
+ CIpsPlgSosBasePlugin& aPlugin );
+
+ /**
+ * Symbian 2nd phase construcror
+ *
+ * @return None
+ */
+ static CIpsPlgSearch* NewLC(
+ CMsvSession& aMsvSession,
+ CIpsPlgSosBasePlugin& aPlugin );
+
+ /**
+ * Class destructor
+ *
+ * @return
+ */
+ virtual ~CIpsPlgSearch();
+
+ /**
+ * Cancels ongoing search operation.
+ *
+ * @return
+ */
+ void Cancel();
+
+ /**
+ * Clears the search result cache.
+ *
+ * @return
+ */
+ void ClearCache();
+
+ /**
+ * Searches specific string from the mails.
+ *
+ * @return
+ */
+ void SearchL(
+ const TFSMailMsgId& aMailBoxId,
+ const RArray<TFSMailMsgId>& aFolderIds,
+ const RPointerArray<TDesC>& aSearchStrings,
+ const TFSMailSortCriteria& aSortCriteria,
+ MFSMailBoxSearchObserver& aSearchObserver );
+
+
+ /**
+ * @return Message server session.
+ */
+ CMsvSession& Session();
+
+ /**
+ * @return Currently searched mailbox.
+ */
+ TMsvId MailboxId();
+
+ /**
+ * @return Currently searched folder.
+ */
+ TMsvId FolderId();
+
+ /**
+ * @return Currently searched mailbox id.
+ */
+ const TFSMailMsgId& CurrentMessage() const;
+
+ /**
+ * @return Search string in converted form for the mail.
+ */
+ const CDesC16Array& SearchStringsL();
+
+ /**
+ * @param aMessage Matching message.
+ */
+ void MatchFoundL();
+
+ /**
+ * Send note about search being finished.
+ */
+ void SearchFinishedL();
+
+ /**
+ * @return Next message on the line. Ownership to caller.
+ */
+ CImEmailMessage* NextMessageL();
+
+ /**
+ * @return NULL, when mail not fetched.
+ * @return Object with ownership, if the mail is fetched.
+ */
+ CImHeader* MessageHeaderL();
+
+ /**
+ * On return, parameter contains the subject of the message in the buffer.
+ * Method takes care of reserving the needed memory to the buffer,
+ * but caller is responsible for freeing it.
+ * @param aSubject Subject to be returned.
+ */
+ void GetSubjectL( RBuf& aSubject );
+
+ /**
+ * On return, parameter contains the sender of the message in the buffer.
+ * Method takes care of reserving the needed memory to the buffer,
+ * but caller is responsible for freeing it.
+ * @param aSender Sender to be returned.
+ */
+ void GetSenderL( RBuf& aSender );
+
+ /**
+ * Puts the items in the cache into a new order.
+ */
+ void Sort();
+
+ /**
+ * Collects id's of all messages in the mailbox.
+ */
+ void CollectMessagesL();
+
+
+protected:
+
+ /**
+ * Class constructor
+ *
+ * @return None
+ */
+ CIpsPlgSearch(
+ CMsvSession& aMsvSession,
+ CIpsPlgSosBasePlugin& aPlugin );
+
+private:
+
+ /**
+ * Symbian 2nd phase construct
+ */
+ void ConstructL();
+
+ class TSearchParams;
+ class TMsgContainer;
+
+ /**
+ * Finds all the folders from the mailbox excluding "deleted" folder.
+ *
+ * @param aParams Parameter object to be filled with folders.
+ */
+ void GetFoldersL( TSearchParams& aParams );
+
+private:
+
+ /**
+ * Adds provided folder to list and searches for subfolders.
+ *
+ * @param aFolderId Id of the folder to be searched.
+ * @param aFolders List of folders to be updated.
+ */
+ void GetFoldersL(
+ const TMsvId aFolderId,
+ RArray<TFSMailMsgId>& aFolders );
+
+ /**
+ * @return Next item in the list based on sorting order.
+ */
+ TMsgContainer& NextItem();
+
+ /**
+ * Recursive quicksort algorithm.
+ *
+ * @param aMessages List of messages to be sorted.
+ * @param aLeft Left index for list to be sorted.
+ * @param aRight Right index for list to be sorted.
+ */
+ void QuickSort(
+ RArray<TMsgContainer>& aMessages,
+ TInt aLeft,
+ TInt aRight );
+
+ /**
+ * Send current active message to observer.
+ *
+ * @return Id of the message sent.
+ */
+ TFSMailMsgId SendToObserverL();
+
+ /**
+ * Class to handle internal search parameters.
+ */
+ class TSearchParams
+ {
+
+ public:
+
+ // New functions
+
+ inline TSearchParams() {};
+
+ /**
+ * Constructor
+ */
+ inline TSearchParams(
+ const RPointerArray<TDesC>& aSearchStrings,
+ const TFSMailMsgId& aMailbox,
+ const RArray<TFSMailMsgId> aFolderIds,
+ const TFSMailSortCriteria& aSortCriteria );
+
+ /**
+ * Destructor
+ */
+ inline virtual ~TSearchParams();
+
+ /**
+ * Copies the content of the source parameter.
+ *
+ * @param aParams Parameters to be copied.
+ * @return New modified parameter
+ */
+ inline TSearchParams& operator=( const TSearchParams& aParams );
+
+ /**
+ * Adds more content to current search.
+ *
+ * @param aParams Parameters to be copied.
+ * @return New modified parameter
+ */
+ inline void operator+=( const TSearchParams& aParams );
+
+ /**
+ * Checks if the parameters contains same attributes.
+ * Note: This does not check, if the items are identical,
+ * but that there are no changes. For example, if
+ * original has less search folders than previous one
+ * but all the folders match with new one, the parameters
+ * are considered same.
+ *
+ * @param aParams Parameters to be compared.
+ * @return ETrue, when the content matches.
+ */
+ TBool operator==( const TSearchParams& aParams ) const;
+
+ /**
+ * Duplicates the items in the search array.
+ *
+ * @param aSearchStrings Strings to be duplicated.
+ * @leave For fun.
+ */
+ inline void SetSearchStringsL(
+ const RPointerArray<TDesC>& aSearchStrings );
+
+ /**
+ * Duplicates the items in the search array.
+ *
+ * @param aSearchStrings Strings to be duplicated.
+ * @leave For fun.
+ */
+ inline void SetSearchStringsL(
+ const CDesC16Array& aSearchStrings );
+
+ /**
+ * Duplicates the items in the folder id array.
+ *
+ * @param aFolderIds Ids to be duplicated.
+ */
+ inline void SetFolderIdsL(
+ const RArray<TFSMailMsgId>& aFolderIds );
+
+ /**
+ * Adds new folders to current search.
+ *
+ * @since FS v1.0
+ * @param aFolderIds List of folder ids.
+ */
+ inline void AddFolderIdsL(
+ const RArray<TFSMailMsgId>& aFolderIds );
+
+ /**
+ * @return ETrue, when folder exists in the array.
+ */
+ inline TBool FolderExists( const TFSMailMsgId& aFolderId );
+
+ /**
+ * Deletes items in the string array and the array itself.
+ */
+ inline void RemoveArray();
+
+ // Data
+
+ /**
+ * Container for character converted strings.
+ */
+ CDesC16Array* iSearchStrings;
+
+ /**
+ * Mailbox, which is being searched.
+ */
+ TFSMailMsgId iMailbox;
+
+ /**
+ * Folders to be searched.
+ */
+ RArray<TFSMailMsgId> iFolderIds;
+
+ /**
+ * Sorting rules.
+ */
+ TFSMailSortCriteria iSortCriteria;
+ };
+
+ /**
+ * Helper class for entry compare.
+ */
+ class TMsgContainer
+ {
+ public:
+
+ // New Functions
+
+ /**
+ * @param aCriteria Sorting criterias.
+ */
+ TMsgContainer(
+ const TMsvId& aId,
+ const TFSMailSortCriteria& aCriteria,
+ CMsvSession& aMsvSession );
+
+ /**
+ * @param aMsgContainer MsgContainer to be compared.
+ * @return ETrue, when content is greater than in parameter.
+ */
+ TBool operator>( const TMsgContainer& aMsgContainer ) const;
+
+ /**
+ * @param aMsgContainer MsgContainer to be compared.
+ * @return ETrue, when content is greater than or equal in parameter.
+ */
+ TBool operator>=( const TMsgContainer& aMsgContainer ) const;
+
+ /**
+ * @param aMsgContainer MsgContainer to be compared.
+ * @return ETrue, when content is greater than or equal in parameter.
+ */
+ TBool operator<=( const TMsgContainer& aMsgContainer ) const;
+
+ /**
+ * @param aMsgContainer MsgContainer to be compared.
+ * @return ETrue, when content is greater than in parameter.
+ */
+ TMsgContainer& operator=( const TMsgContainer& aMsgContainer );
+
+ /**
+ * @return Id of the entry.
+ */
+ inline TMsvId Id() const;
+
+ private:
+
+ // New Functions
+
+ /**
+ * @return
+ */
+ TMsvEntry Entry( const TMsvId aId ) const;
+
+ /**
+ *
+ */
+ static TMsvEntry Entry( CMsvSession& aMsvSession, const TMsvId aId );
+
+ /**
+ * Creates string objects and pushes them to cleanup stack
+ *
+ * @param aLeft First email
+ * @param aRight Second email
+ *
+ * @param aLeftSubject Subject for the first email
+ * @param aRightSubject Subject for the second email
+ *
+ * @param aLeftSender Sender for the first email
+ * @param aRightSender Sender for the second email
+ */
+ void GetSenderStringsCC(
+ const TMsvId aLeft,
+ const TMsvId aRight,
+ HBufC*& aLeftSender,
+ HBufC*& aRightSender ) const;
+
+ void GetSubjectStringsCC(
+ const TMsvId aLeft,
+ const TMsvId aRight,
+ HBufC*& aLeftSubject,
+ HBufC*& aRightSubject ) const;
+
+ private:
+
+ // Data
+
+ /**
+ * Entry to be used for compare operations.
+ */
+ TMsvId iId;
+
+ /**
+ * Reference to existing sort criteria.
+ */
+ const TFSMailSortCriteria& iCriteria;
+
+ /**
+ * Message server session.
+ */
+ CMsvSession& iMsvSession;
+ };
+
+ /**
+ * Parameters from previous search.
+ */
+ TSearchParams iPreviousSearch;
+
+ /**
+ * Parameters of currently ongoing search.
+ */
+ TSearchParams iCurrentSearch;
+
+ /**
+ * Cache to store the search result.
+ */
+ RArray<TFSMailMsgId> iCache;
+
+ /**
+ * Message server session.
+ */
+ CMsvSession& iMsvSession;
+
+ /**
+ * Entry to do all the message store access work.
+ * Pwned.
+ */
+ CMsvEntry* iActiveEntry;
+
+ /**
+ * Current message in search.
+ */
+ TFSMailMsgId iCurrentMessage;
+
+ /**
+ * Current search operation. NULL, when empty.
+ * Owned.
+ */
+ CIpsPlgSearchOp* iOperation;
+
+ /**
+ * The client observer for search events.
+ * Not owned.
+ */
+ MFSMailBoxSearchObserver* iObserver;
+
+ /**
+ * Owning plugin.
+ */
+ CIpsPlgSosBasePlugin& iPlugin;
+
+ /**
+ * The message converter.
+ * Owned.
+ */
+ CIpsPlgMsgMapper* iMapper;
+
+ /**
+ * Character converter.
+ * Owned.
+ */
+ //CCnvCharacterSetConverter* iCharConv;
+
+ /**
+ * Collection of Id's of all messages in the mailbox.
+ * Owned.
+ */
+ RArray<TMsgContainer> iEmailMessages;
+ };
+
+#include "ipsplgsearch.inl"
+
+#endif /* IPSPLGSEARCH_H */
+
+// End of File