firemail

标题: NotificationService [打印本页]

作者: hechengjin    时间: 2015-10-13 22:32
标题: NotificationService
1.nsIMsgFolderNotificationService移动复制或删除邮件后通知界面更新
  1. nsresult nsImapMailFolder::CopyMessagesOffline(nsIMsgFolder* srcFolder,
  2.                                 nsIArray* messages,
  3.                                 bool isMove,
  4.                                 nsIMsgWindow *msgWindow,
  5.                                 nsIMsgCopyServiceListener* listener)
  6. {
  7.            uint32_t numHdrs;
  8.            msgHdrsCopied->GetLength(&numHdrs);
  9.            if (numHdrs)
  10.            {
  11.              nsCOMPtr<nsIMsgFolderNotificationService> notifier(do_GetService(NS_MSGNOTIFICATIONSERVICE_CONTRACTID));
  12.              if (notifier)
  13.                notifier->NotifyMsgsMoveCopyCompleted(isMove, msgHdrsCopied, this, destMsgHdrs);
  14.            }
  15. }


  16. NS_IMETHODIMP nsMsgFolderNotificationService::NotifyMsgsMoveCopyCompleted(
  17.   bool aMove, nsIArray *aSrcMsgs, nsIMsgFolder *aDestFolder,
  18.   nsIArray *aDestMsgs)
  19. {

  20.    NOTIFY_MSGFOLDER_LISTENERS(msgsMoveCopyCompleted, MsgsMoveCopyCompleted,
  21.                               (isReallyMove, aSrcMsgs, aDestFolder, aDestMsgs));
  22.    return NS_OK;
  23. }
  24.                 //对所有观察都对象中含有指定标记的观察者调用指定方法
  25. #define NOTIFY_MSGFOLDER_LISTENERS(propertyflag_, propertyfunc_, params_) \
  26.   PR_BEGIN_MACRO                                                          \
  27.   nsTObserverArray<MsgFolderListener>::ForwardIterator iter(mListeners);  \
  28.   while (iter.HasMore()) {                                                \
  29.     const MsgFolderListener &listener = iter.GetNext();                   \
  30.     if (listener.mFlags & propertyflag_)                                  \
  31.       listener.mListener->propertyfunc_ params_;                          \
  32.   }                                                                       \
复制代码
邮件列表只要注册上面监听,就可获取到删除邮件的通知
  1. // 监听邮件通知
  2.         var notificationService =
  3.             Components.classes["@mozilla.org/messenger/msgnotificationservice;1"].
  4.                 getService(Components.interfaces.nsIMsgFolderNotificationService);
  5.         notificationService.addListener(this,
  6.             Components.interfaces.nsIMsgFolderNotificationService.msgAdded |
  7.                 Components.interfaces.nsIMsgFolderNotificationService.msgsClassified |
  8.                 Components.interfaces.nsIMsgFolderNotificationService.msgsDeleted |
  9.                 Components.interfaces.nsIMsgFolderNotificationService.msgsMoveCopyCompleted |
  10.                 Components.interfaces.nsIMsgFolderNotificationService.msgKeyChanged |
  11.                 Components.interfaces.nsIMsgFolderNotificationService.folderAdded |
  12.                 Components.interfaces.nsIMsgFolderNotificationService.folderDeleted |
  13.                 Components.interfaces.nsIMsgFolderNotificationService.folderMoveCopyCompleted |
  14.                 Components.interfaces.nsIMsgFolderNotificationService.folderRenamed |
  15.                 Components.interfaces.nsIMsgFolderNotificationService.itemEvent);
  16.     },

  17. msgsMoveCopyCompleted: function(isMove, srcMsgHdrArray, destFolder, destMsgHdrArray) {
  18.         if (isMove) {
  19.             this.removeMsgItemsForMsgHdrArray(srcMsgHdrArray);
  20.         }
  21.     },
复制代码

作者: hechengjin    时间: 2015-11-3 17:53
对应通讯录导入完成后,更新通讯录人员列表的情况:



通讯录导入:code
// 通知通讯录更新
          var observerService = Components.classes["@mozilla.org/observer-service;1"]
                .getService(Components.interfaces.nsIObserverService);
          observerService.notifyObservers(null, "addContact", null);


邮件列表观察者:
function OnLoadAddressBook()
{
.....
  // 接受从主界面传来的添加联系人消息,更新通讯录页面
  revAddContact();

....
}

function revAddContact(){
    var observerService = Components.classes["@mozilla.org/observer-service;1"]
        .getService(Components.interfaces.nsIObserverService);
    observerService.addObserver(addContactListener, "addContact", false);
}


var addContactListener = {
  observe: function(subject, topic, data) {
    // 如果在读信页添加联系人和自动保存通讯录中没有的联系人的时候,更新通讯录
    if (topic == "addContact") {
      let index = gAddressbookDirectoryList.getCurSelectedIndex();
      let item = gAddressbookDirectoryList.getItemByIndex(index);
      let list = GetDirectoryFromURI(item.listURI);
      gAddressbookContactsList.reset();
      gAddressbookContactsList.build(list);
    }
  }
}

作者: hechengjin    时间: 2015-11-3 17:54
通知对象出去

var jsonObj = {};
var observerService = Components.classes["@mozilla.org/observer-service;1"]
                .getService(Components.interfaces.nsIObserverService);

jsonObj.wrappedJSObject = jsonObj;
observerService.notifyObservers(jsonObj, "JsonObjNotify", "");
                                                                        
接收时:
observerService.addObserver(observer, "JsonObjNotify", false);
observe: function(subject, topic, data) {
        var jsonReceived = subject.wrappedJSObject;
}






欢迎光临 firemail (http://firemail.wang:8088/) Powered by Discuz! X3