Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2804|回复: 2
打印 上一主题 下一主题

NotificationService

[复制链接]

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
跳转到指定楼层
楼主
发表于 2015-10-13 22:32:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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.     },
复制代码
回复

使用道具 举报

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
沙发
 楼主| 发表于 2015-11-3 17:53:17 | 只看该作者
对应通讯录导入完成后,更新通讯录人员列表的情况:



通讯录导入: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);
    }
  }
}
回复 支持 反对

使用道具 举报

388

主题

602

帖子

2218

积分

金牌会员

Rank: 6Rank: 6

积分
2218
板凳
 楼主| 发表于 2015-11-3 17:54:02 | 只看该作者
通知对象出去

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;
}

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-23 04:14 , Processed in 0.058922 second(s), 19 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表