/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "nsISupports.idl" #include "MailNewsTypes2.idl" interface nsIDBChangeAnnouncer; interface nsIMsgDBHdr; interface nsIMsgDatabase; /** * These callbacks are provided to allow listeners to the message database * to update their status when changes occur. */ [scriptable, uuid(21c56d34-71b9-42bb-9606-331a6a5f8210)] interface nsIDBChangeListener : nsISupports { /** * Callback when message flags are changed. * * @param aHdrChanged The changed header. * @param aOldFlags Message flags prior to change. * @param aNewFlags Message flags after change. * @param aInstigator Object that initiated the change. */ void onHdrFlagsChanged(in nsIMsgDBHdr aHdrChanged, in unsigned long aOldFlags, in unsigned long aNewFlags, in nsIDBChangeListener aInstigator); /** * Callback when message is marked as deleted. * * @param aHdrChanged The message header that is going to be deleted. * @param aParentKey Key of parent. * @param aFlags Flags that message has before delete. * @param aInstigator Object that initiated the change. Can be null. */ void onHdrDeleted(in nsIMsgDBHdr aHdrChanged, in nsMsgKey aParentKey, in long aFlags, in nsIDBChangeListener aInstigator); /** * Callback when message is added. * * @param aHdrChanged The message header that is added. * @param aParentKey Parent key of message. * @param aFlags Flags that new message will have. * @param aInstigator Object that initiated the change. Can be null. */ void onHdrAdded(in nsIMsgDBHdr aHdrChanged, in nsMsgKey aParentKey, in long aFlags, in nsIDBChangeListener aInstigator); /** * Callback when message parent is changed. Parent is changed when message is deleted or moved. * * @param aKeyChanged The message key that parent key was changed. * @param oldParent Old parent key. * @param newParent New parent key. * @param aInstigator Object that initiated the change. Can be null. */ void onParentChanged(in nsMsgKey aKeyChanged, in nsMsgKey oldParent, in nsMsgKey newParent, in nsIDBChangeListener aInstigator); /** * Callback when announcer is going away. This is good place to release strong pointers to announcer. * * @param instigator Object that initiated the change. Can be null. */ void onAnnouncerGoingAway(in nsIDBChangeAnnouncer instigator); /** * Callback when read flag is changed. * * @param aInstigator Object that initiated the change. Can be null. */ void onReadChanged(in nsIDBChangeListener aInstigator); /** * Callback used in case when "junkscore" property is changed. * * @param aInstigator Object that initiated the change. Can be null. */ void onJunkScoreChanged(in nsIDBChangeListener aInstigator); /** * Callback used in the general case where any field may have changed. * OnHdrPropertyChanged is called twice per change. On the first call, aPreChange * is true, and aStatus is undefined. OnHdrPropertyChanged saves any required status in aStatus * (such as a filter match). The calling function stores the value of aStatus, changes the * header aHdrToChange, then calls OnHdrPropertyChanged again with aPreChange false. On this * second call, the stored value of aStatus is provided, so that any changes may be noted. * * @param aHdrToChange the message header that is changing. * @param aPreChange true on first call before change, false on second call after change * @param aStatus storage location provided by calling routine for status * @param aInstigator object that initiated the change */ void onHdrPropertyChanged(in nsIMsgDBHdr aHdrToChange, in AUTF8String property, in boolean aPreChange, inout uint32_t aStatus, in nsIDBChangeListener aInstigator); /** * Generic notification for extensibility. Common events should be documented * here so we have a hope of keeping the documentation up to date. * Current events are: * "DBOpened" - When a pending listener becomes real. This can happen when * the existing db is force closed and a new one opened. Only * registered pending listeners are notified. * * @param aDB the db for this event. * @param aEvent type of event. * */ void onEvent(in nsIMsgDatabase aDB, in string aEvent); };