EmailExampleEngine.h
上传用户:sempras
上传日期:2007-03-04
资源大小:821k
文件大小:4k
源码类别:

Symbian

开发平台:

C/C++

  1. #ifndef __EMAILEXAMPLEENGINE_H__
  2. #define __EMAILEXAMPLEENGINE_H__
  3. #include <e32base.h>
  4. #include <msvapi.h>
  5. #include <imapset.h>
  6. #include <pop3set.h>
  7. enum TProtocolType
  8. {
  9. EProtocolPop3,
  10. EProtocolImap4
  11. };
  12. enum TEmailExampleEngineEvent
  13. {
  14. ERemoteCountChanged,
  15. };
  16. /*
  17. * ============================================================================
  18. *  Name     : MEmailExampleEngineObserver from EmailExampleEngine.h
  19. *  Part of  : EmailExample
  20. *  Created  : 09/11/2003 by Forum Nokia
  21. *  Implementation notes:
  22. * Common observer to handle asynchronous events conserning engine
  23. *
  24. *  Version  : 1.0
  25. *  Copyright: Nokia Corporation
  26. * ============================================================================
  27. */
  28. class MEmailExampleEngineObserver
  29. {
  30. public:
  31. virtual void HandleEngineChangedEventL(TEmailExampleEngineEvent aEvent)=0;
  32. };
  33. class CBaseMtm;
  34. class CMtmStore;
  35. class CClientMtmRegistry;
  36. class CImap4Mail;
  37. class CPop3Mail;
  38. /*
  39. * ============================================================================
  40. *  Name     : CEmailExampleEngine from EmailExampleEngine.h
  41. *  Part of  : EmailExample
  42. *  Created  : 09/11/2003 by Forum Nokia
  43. *  Implementation notes:
  44. * Statemachine which handles events common for both
  45. * implemented protocols IMAP and POP.
  46. * Note for instructional purposes the structure is kept
  47. * so that most functions are implemented in 2 versions
  48. * one for imap one for pop. Leaving other protocol out
  49. * for advanced exercises is though trivial.
  50. *
  51. *  Version  : 1.0
  52. *  Copyright: Nokia Corporation
  53. * ============================================================================
  54. */
  55. class CEmailExampleEngine : public CActive, public MMsvSessionObserver
  56. {
  57. public:
  58. // creational
  59. static CEmailExampleEngine* NewL(MEmailExampleEngineObserver& aObserver);
  60. ~CEmailExampleEngine();
  61. // interface
  62.     /*
  63.     * HandleCmdRemoteFetchL()
  64.     *
  65.     * Calls remote mailbox download function of selected protocol type.
  66. *
  67.     * Returns:
  68.     * KErrNone if everything went like planned
  69.     *
  70.     */
  71. TInt  HandleCmdRemoteFetchL();
  72. /*
  73.     * RemoteOpenEmailL(TInt aIndex)
  74.     *
  75.     * Uses generic messaging architecture and opens selected message entry.
  76. * May generate dial-up connection to fetch message body.
  77.     *
  78.     * Params:
  79.     * (1) TInt aIndex index to message entry to be opened
  80.     *
  81.     */
  82. void  RemoteOpenEmailL(TInt aIndex);
  83. /*
  84.     * Settings()
  85.     *
  86.     * Initiates selection dialog which gives user the possibility
  87. * to change internet email protocol used.
  88.     *
  89.     */
  90. void Settings();
  91. TBool HandleAccountNotDefined();
  92. TPtrC RemoteEmailTextL(TInt aIndex);
  93. TPtrC RemoteEmailSenderL(TInt aIndex);
  94. TInt  RemoteEmailCount();
  95. // private functions
  96. private:
  97. CEmailExampleEngine(MEmailExampleEngineObserver& aObserver);
  98. void ConstructL();
  99. CMsvEntrySelection* UpdateEntriesL(const TMsvId& aServiceId);
  100. void OpenEmailL(TMsvId& aEntryId);
  101. //IMAP/POP common
  102. void UpdateRemoteCountL();
  103. //IMAP specific
  104. TBool Imap4AccountNotDefined();
  105. TInt SyncWithRemoteServerImap4L();
  106. void UpdateRemoteCountImap4L();
  107. //POP specific
  108. TBool Pop3AccountNotDefined();
  109. TInt  FetchRemoteMailPop3L();
  110. void UpdateRemoteCountPop3L();
  111. void SetProtocolType( TInt aProtocolType );
  112. // from CActive
  113. void RunL();
  114. void DoCancel();
  115. TInt RunError(TInt aError);
  116. // from MMsvSessionObserver
  117.     void HandleSessionEventL(TMsvSessionEvent aEvent,TAny* aArg1,TAny* aArg2,TAny* aArg3);
  118. // private types
  119. private:
  120. // internal state indication
  121. enum TInternalState
  122. {
  123. EInitialising,
  124. EReadyButNeedsUpdating,
  125. EReady,
  126. EEditing,
  127. EWaitingForImap4,
  128. ESyncImap4,
  129. EWaitingForPop3,
  130. EFetchingPop3,
  131. };
  132. // private data
  133. private:
  134. MEmailExampleEngineObserver& iObserver;
  135.     CMsvSession* iMsvSession;
  136. CClientMtmRegistry* iMtmReg;
  137. CMtmStore* iMtmStore;
  138. TInternalState iState;
  139. CMsvEntry* iEntry;
  140. CMsvEntrySelection* iRemoteEntries;
  141. TInt iRemoteCount;
  142. CImap4Mail* iImapMail;
  143. TBool iNoImap4defined;
  144. CPop3Mail* iPopMail;
  145. TBool iNoPop3defined;
  146. public:
  147. TInt iSettingProtocolType;
  148. TInt iProtocolType;
  149. };
  150. #endif // __EMAILEXAMPLEENGINE_H__