omads/omadsextensions/adapters/sms/inc/smsadaptermsvapi.h
changeset 40 b63e67867dcd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omads/omadsextensions/adapters/sms/inc/smsadaptermsvapi.h	Tue Jul 13 03:39:25 2010 +0530
@@ -0,0 +1,326 @@
+/*
+* Copyright (c) 2005-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:  CSmsAdapterMsvApi header
+*
+*/
+
+
+
+#ifndef SMSADAPTERMSVAPI_H
+#define SMSADAPTERMSVAPI_H
+
+//  INCLUDES
+#include <e32base.h>        // CActive
+#include <msvstd.h>         // TMsvId
+#include <msvapi.h>         // CMsvOperation
+#include <mtclreg.h>		//CClientMtmRegistry
+#include <msvids.h>
+#include <mtclbase.h>
+#include <msvuids.h>
+#include <smut.h>
+ 
+// FORWARD DECLARATIONS
+class CSmsClientMtm;
+class CVMessageParser;
+class CContactDatabase;
+
+// CONSTANTS
+const TInt KMsvMyFoldersEntryIdValue = 0x1008;
+const TInt KMsvMyFoldersTemplatesFolderId = 0x1009;
+
+// CLASS DECLARATION
+
+/**
+* Class CSmsAdapterMsvApi
+* Internal class that provides access to SMS message store.
+*/
+class CSmsAdapterMsvApi : public CBase, public MMsvSessionObserver 
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+         static CSmsAdapterMsvApi* NewL();
+                
+        /**
+        * Destructor.
+        */
+        virtual ~CSmsAdapterMsvApi();
+        
+    private: // Private constructor functions
+        
+        /**
+        * C++ default constructor.
+        * C++ default constructor can NOT contain any code, that
+        * might leave.
+        */
+        CSmsAdapterMsvApi();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();        
+
+    public: // New functions
+	    
+        /**
+        * Add a SMS message. The given SMS message is stored to the target folder. 
+        * 
+        * @param aSm       IN: Contains SMS message in decoded format
+        * @param aFolder   IN: The folder in which the SM will be stored 
+        * @param aSmId     OUT: The index created for the added SM.
+        */
+		 void AddSML( 
+			CVMessageParser& aSm,
+            TMsvId aFolder,                                                                                                                                                                                                          
+            TMsvId& aSmId );
+
+        /**
+        * Replace existing SMS message
+        * 
+        * @param aSmId      IN: the index to the replaceable SM  
+        * @param aSm        IN: Contains data of the new SM        
+        */
+         void ReplaceSML (
+            TMsvId aSmId, 
+			CVMessageParser& aSm ); 
+
+        /**
+        * Delete a SMS message. 
+        * 
+        * @param aSmId   IN: the index to the SM, which will be deleted                             
+        */
+        void DeleteSML( TMsvId aSmId );
+         
+        /**
+        * Delete a SMS message. 
+        * 
+        * @param aUid   IN: the index to the SM, which will be deleted
+        *
+        * @return   KErrNone in success. KErrInUse if folder was not deleted because it was not empty.                             
+        */         
+        TInt CSmsAdapterMsvApi::DeleteUserFolderL( TMsvId aUid );
+
+        /**
+        * Retriveve SMS message from the message store.
+        * 
+        * @param aSmId      IN: Index to the SM, which will be retrieved    
+        * @param aParent    OUT: Index of parent folder        
+        * @param aSm        OUT: The SM data is stored into this object.
+        * @param aUnread    OUT: Whether the SM is unread or not 
+        */
+         void RetrieveSML(
+            TMsvId aSmId,
+            TMsvId& aParent,
+            CVMessageParser& aSM,                  
+            TBool& aUnread );
+
+        /**
+        * Sends the specified SM.
+        *  
+        * @param aSmId     IN: Index to the SM, which will be sent.
+        */
+         void SendSML( TMsvId aSmId );
+
+        /**
+        * This function can be used when client needs direct access to CMsvSession.
+        * @return	 ponter to opened message server session.
+        */
+		 CMsvSession* MsvSessionL();
+
+       /**
+        * Empties folder from SMS messages.
+        *
+        * @param    aFolderId   IN: TMsvId of the folder
+        */
+        void CleanFolderL( TMsvId aFolderId);
+        
+       /**
+        * Empties user folders under My Folders from SMS messages
+        */       
+        void CSmsAdapterMsvApi::CleanUserFoldersL(); 
+        
+       /**
+        * Empties folder from SMS messages and returns list of deleted messages
+        * Caller is responsible of deleting returned list.
+        *
+        * @param    aFolderId   IN: TMsvId of the folder
+        *
+        * @return   List of identifiers of deleted messages
+        */       
+        CMsvEntrySelection* CleanFolderGetMsvIdsL(TMsvId aFolderId);
+
+       /**
+        * Checks whether disk space is below critical level.
+        *
+        * @param    aDataSize	Size of data to be added to disk.
+        */
+		TBool DiskSpaceBelowCriticalLevelL( TInt aDataSize );
+
+        /**
+        * Updates SM status in inbox
+        * 
+        * @param aSmId      IN: the index to the SM  
+        * @param aSm        IN: Contains status of the new SM        
+        */
+		void UpdateSMStatusL( TMsvId aSmId, CVMessageParser& aSm );
+	
+        /**
+        * Moves SM to another folder
+        * 
+        * @param aSmId      IN: the index to the SM  
+        * @param aParentId  IN: Contains the target folder 
+        */		
+		void MoveSML( TMsvId aSmId, TMsvId aParentId );
+		
+       /**
+        * Valid folder checks if the folder is valid.
+        * The caller of the function can set, if Outbox folder is valid or not.
+        * 
+        * @param aFolder   folder
+        * @param aOutboxValid if the MM is outbox is valid folder or not
+        * 
+        * @return ETrue when the folder is valid.
+        * @return EFalse when the folder is not valid.
+        */
+        TBool ValidFolderL( TMsvId aFolder , TBool aOutboxValid = ETrue );		
+		
+       /**
+        * Creates new user defined folder
+        * 
+        * @param aFolder    OUT: index of the new folder
+        * @param aName      IN: name of the new folder
+        *
+        * @return     KErrNone or error
+        */				
+		TInt AddUserFolderL( TMsvId& aFolder, const TDesC& aName );
+		
+       /**
+        * Updates name of user defined folder
+        * 
+        * @param aFolder    IN: index of the folder
+        * @param aName      IN: new name of the folder
+        *
+        * @return     KErrNone or error
+        */					
+		TInt UpdateUserFolderL( TMsvId aFolder, const TDesC& aName );
+		
+        /**
+        * Searches user folder with given UID
+        * 
+        * @param aFolder     IN: Folder UID
+        * @param aFound      OUT: name of found user folder
+        * @param aDate       OUT: time stamp of found user folder 
+        *
+        * @return	Return value indicates whether folder was found or not
+        */	        
+        TBool FindUserFolderL(TMsvId aFolder, TPtrC& aName, TTime& aDate);	
+        
+        /**
+        * Searches user folder with given UID
+        * 
+        * @param aFolder     IN: Folder UID
+        *
+        * @return	Return value indicates whether folder was found or not
+        */	        
+        TBool FindUserFolderL(TMsvId aFolder);	
+        
+    protected:  // Functions from base classes
+        
+        /**
+        * From MMsvSessionObserver. Message server event handler function.
+        * 
+        * @param aEvent    the caller of the method sets the value.
+        * @param aArg1     depends on the aEvent value
+        * @param aArg2     depends on the aEvent value
+        * @param aArg3     depends on the aEvent value
+        * 
+        */
+        virtual void HandleSessionEventL( TMsvSessionEvent aEvent, TAny* aArg1, TAny* aArg2, TAny* aArg3 );
+
+    private:	// Internal functions
+
+        /**
+        * Updates existing SMS message with given values.
+		* Used internally by AddSML and ReplaceSML
+        * 
+        * @param aSmId      IN: the index to the SM  
+        * @param aSm        IN: contains data of the SM        
+		* @param aNewSm		IN: indicates whether this SM is a new one 
+        */
+		void DoUpdateSML( TMsvId aSmId, CVMessageParser& aSm, TBool aNewSm );
+         
+        /**
+        * Check whether folder with given name exists
+        * 
+        * @param aName     IN: Folder name
+        * @parem aFolder   OUT: Folder UID if matching folder was found. 
+        *
+        * @return	ETrue or EFalse 
+        */	       
+        TBool FindUserFolderL(const TDesC& aName, TMsvId& aFolder);
+
+        /**
+        * Test whether given character needs unicode coding when constructing
+		* a SMS message. 
+		* 7-bit coding is used if there are no unicoder characters in the message.
+        * 
+        * @param aValue     IN: Given character value   
+        *         
+		* @return	ETrue if unicode coding is needed, EFalse otherwise
+        */
+		TBool IsUnicode( const TUint16 aValue );
+
+        /**
+        * Convert given home time to universal time.
+        * 
+        * @param aTime     IN: Home time 
+        *
+        * @return	Universal time   
+        */		
+		TTime UniversalTimeFromHomeTime( TTime aTime );
+
+        /**
+        * Convert given universal time to home time.
+        * 
+        * @param aTime     IN: Universal time
+        *
+        * @return 	Home time   
+        */				
+		TTime HomeTimeFromUniversalTime( TTime aTime );
+		
+        /**
+        * Find contact name from address book for given number
+        * 
+        * @param aTime     IN: Phone number
+        * @param aName     OUT: Contact name, empty if suitable contact not found
+        */			
+		void FetchNameFromContactsL(const TDesC& aNumber, TDes& aName);
+		
+    
+    private:    // Data
+        
+        CMsvSession* 			iSession;
+        CClientMtmRegistry* 	iMtmReg;
+		CSmsClientMtm* 			iMtm;
+
+		RFs		iFs;
+		TInt	iMessageDrive;
+		
+		CContactDatabase* 	iContactsDb;
+		
+    };
+
+#endif      //SMSADAPTERMSVAPI_H