/*
 * DO NOT EDIT.  THIS FILE IS GENERATED FROM ../../../dist/idl/nsIMsgFolderNotificationService.idl
 */

#ifndef __gen_nsIMsgFolderNotificationService_h__
#define __gen_nsIMsgFolderNotificationService_h__


#ifndef __gen_nsISupports_h__
#include "nsISupports.h"
#endif

#ifndef __gen_MailNewsTypes2_h__
#include "MailNewsTypes2.h"
#endif

/* For IDL files that don't want to include root IDL files. */
#ifndef NS_NO_VTABLE
#define NS_NO_VTABLE
#endif
class nsIMsgDBHdr; /* forward declaration */

class nsIMsgFolder; /* forward declaration */

class nsIMsgFolderListener; /* forward declaration */

class nsIArray; /* forward declaration */

typedef uint32_t  msgFolderListenerFlag;


/* starting interface:    nsIMsgFolderNotificationService */
#define NS_IMSGFOLDERNOTIFICATIONSERVICE_IID_STR "e54a592c-2f23-4771-9670-bdb9d4f5dbbd"

#define NS_IMSGFOLDERNOTIFICATIONSERVICE_IID \
  {0xe54a592c, 0x2f23, 0x4771, \
    { 0x96, 0x70, 0xbd, 0xb9, 0xd4, 0xf5, 0xdb, 0xbd }}

class NS_NO_VTABLE nsIMsgFolderNotificationService : public nsISupports {
 public:

  NS_DECLARE_STATIC_IID_ACCESSOR(NS_IMSGFOLDERNOTIFICATIONSERVICE_IID)

  enum {
    msgAdded = 1U,
    msgsDeleted = 2U,
    msgsMoveCopyCompleted = 4U,
    msgsClassified = 8U,
    folderAdded = 32768U,
    folderDeleted = 4096U,
    folderMoveCopyCompleted = 8192U,
    folderRenamed = 16384U,
    itemEvent = 16777216U,
    msgKeyChanged = 33554432U
  };

  /* readonly attribute boolean hasListeners; */
  NS_IMETHOD GetHasListeners(bool *aHasListeners) = 0;

  /* void addListener (in nsIMsgFolderListener aListener, in msgFolderListenerFlag flags); */
  NS_IMETHOD AddListener(nsIMsgFolderListener *aListener, msgFolderListenerFlag flags) = 0;

  /* void removeListener (in nsIMsgFolderListener aListener); */
  NS_IMETHOD RemoveListener(nsIMsgFolderListener *aListener) = 0;

  /* void notifyMsgAdded (in nsIMsgDBHdr aMsg); */
  NS_IMETHOD NotifyMsgAdded(nsIMsgDBHdr *aMsg) = 0;

  /* void notifyMsgsClassified (in nsIArray aMsgs, in boolean aJunkProcessed, in boolean aTraitProcessed); */
  NS_IMETHOD NotifyMsgsClassified(nsIArray *aMsgs, bool aJunkProcessed, bool aTraitProcessed) = 0;

  /* void notifyMsgsDeleted (in nsIArray aMsgs); */
  NS_IMETHOD NotifyMsgsDeleted(nsIArray *aMsgs) = 0;

  /* void notifyMsgsMoveCopyCompleted (in boolean aMove, in nsIArray aSrcMsgs, in nsIMsgFolder aDestFolder, in nsIArray aDestMsgs); */
  NS_IMETHOD NotifyMsgsMoveCopyCompleted(bool aMove, nsIArray *aSrcMsgs, nsIMsgFolder *aDestFolder, nsIArray *aDestMsgs) = 0;

  /* void notifyMsgKeyChanged (in nsMsgKey aOldKey, in nsIMsgDBHdr aNewHdr); */
  NS_IMETHOD NotifyMsgKeyChanged(nsMsgKey aOldKey, nsIMsgDBHdr *aNewHdr) = 0;

  /* void notifyFolderAdded (in nsIMsgFolder aFolder); */
  NS_IMETHOD NotifyFolderAdded(nsIMsgFolder *aFolder) = 0;

  /* void notifyFolderDeleted (in nsIMsgFolder aFolder); */
  NS_IMETHOD NotifyFolderDeleted(nsIMsgFolder *aFolder) = 0;

  /* void notifyFolderMoveCopyCompleted (in boolean aMove, in nsIMsgFolder aSrcFolder, in nsIMsgFolder aDestFolder); */
  NS_IMETHOD NotifyFolderMoveCopyCompleted(bool aMove, nsIMsgFolder *aSrcFolder, nsIMsgFolder *aDestFolder) = 0;

  /* void notifyFolderRenamed (in nsIMsgFolder aOrigFolder, in nsIMsgFolder aNewFolder); */
  NS_IMETHOD NotifyFolderRenamed(nsIMsgFolder *aOrigFolder, nsIMsgFolder *aNewFolder) = 0;

  /* void notifyItemEvent (in nsISupports aItem, in ACString aEvent, in nsISupports aData); */
  NS_IMETHOD NotifyItemEvent(nsISupports *aItem, const nsACString & aEvent, nsISupports *aData) = 0;

};

  NS_DEFINE_STATIC_IID_ACCESSOR(nsIMsgFolderNotificationService, NS_IMSGFOLDERNOTIFICATIONSERVICE_IID)

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSIMSGFOLDERNOTIFICATIONSERVICE \
  NS_IMETHOD GetHasListeners(bool *aHasListeners) override; \
  NS_IMETHOD AddListener(nsIMsgFolderListener *aListener, msgFolderListenerFlag flags) override; \
  NS_IMETHOD RemoveListener(nsIMsgFolderListener *aListener) override; \
  NS_IMETHOD NotifyMsgAdded(nsIMsgDBHdr *aMsg) override; \
  NS_IMETHOD NotifyMsgsClassified(nsIArray *aMsgs, bool aJunkProcessed, bool aTraitProcessed) override; \
  NS_IMETHOD NotifyMsgsDeleted(nsIArray *aMsgs) override; \
  NS_IMETHOD NotifyMsgsMoveCopyCompleted(bool aMove, nsIArray *aSrcMsgs, nsIMsgFolder *aDestFolder, nsIArray *aDestMsgs) override; \
  NS_IMETHOD NotifyMsgKeyChanged(nsMsgKey aOldKey, nsIMsgDBHdr *aNewHdr) override; \
  NS_IMETHOD NotifyFolderAdded(nsIMsgFolder *aFolder) override; \
  NS_IMETHOD NotifyFolderDeleted(nsIMsgFolder *aFolder) override; \
  NS_IMETHOD NotifyFolderMoveCopyCompleted(bool aMove, nsIMsgFolder *aSrcFolder, nsIMsgFolder *aDestFolder) override; \
  NS_IMETHOD NotifyFolderRenamed(nsIMsgFolder *aOrigFolder, nsIMsgFolder *aNewFolder) override; \
  NS_IMETHOD NotifyItemEvent(nsISupports *aItem, const nsACString & aEvent, nsISupports *aData) override; 

/* Use this macro when declaring the members of this interface when the
   class doesn't implement the interface. This is useful for forwarding. */
#define NS_DECL_NON_VIRTUAL_NSIMSGFOLDERNOTIFICATIONSERVICE \
  NS_METHOD GetHasListeners(bool *aHasListeners); \
  NS_METHOD AddListener(nsIMsgFolderListener *aListener, msgFolderListenerFlag flags); \
  NS_METHOD RemoveListener(nsIMsgFolderListener *aListener); \
  NS_METHOD NotifyMsgAdded(nsIMsgDBHdr *aMsg); \
  NS_METHOD NotifyMsgsClassified(nsIArray *aMsgs, bool aJunkProcessed, bool aTraitProcessed); \
  NS_METHOD NotifyMsgsDeleted(nsIArray *aMsgs); \
  NS_METHOD NotifyMsgsMoveCopyCompleted(bool aMove, nsIArray *aSrcMsgs, nsIMsgFolder *aDestFolder, nsIArray *aDestMsgs); \
  NS_METHOD NotifyMsgKeyChanged(nsMsgKey aOldKey, nsIMsgDBHdr *aNewHdr); \
  NS_METHOD NotifyFolderAdded(nsIMsgFolder *aFolder); \
  NS_METHOD NotifyFolderDeleted(nsIMsgFolder *aFolder); \
  NS_METHOD NotifyFolderMoveCopyCompleted(bool aMove, nsIMsgFolder *aSrcFolder, nsIMsgFolder *aDestFolder); \
  NS_METHOD NotifyFolderRenamed(nsIMsgFolder *aOrigFolder, nsIMsgFolder *aNewFolder); \
  NS_METHOD NotifyItemEvent(nsISupports *aItem, const nsACString & aEvent, nsISupports *aData); 

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSIMSGFOLDERNOTIFICATIONSERVICE(_to) \
  NS_IMETHOD GetHasListeners(bool *aHasListeners) override { return _to GetHasListeners(aHasListeners); } \
  NS_IMETHOD AddListener(nsIMsgFolderListener *aListener, msgFolderListenerFlag flags) override { return _to AddListener(aListener, flags); } \
  NS_IMETHOD RemoveListener(nsIMsgFolderListener *aListener) override { return _to RemoveListener(aListener); } \
  NS_IMETHOD NotifyMsgAdded(nsIMsgDBHdr *aMsg) override { return _to NotifyMsgAdded(aMsg); } \
  NS_IMETHOD NotifyMsgsClassified(nsIArray *aMsgs, bool aJunkProcessed, bool aTraitProcessed) override { return _to NotifyMsgsClassified(aMsgs, aJunkProcessed, aTraitProcessed); } \
  NS_IMETHOD NotifyMsgsDeleted(nsIArray *aMsgs) override { return _to NotifyMsgsDeleted(aMsgs); } \
  NS_IMETHOD NotifyMsgsMoveCopyCompleted(bool aMove, nsIArray *aSrcMsgs, nsIMsgFolder *aDestFolder, nsIArray *aDestMsgs) override { return _to NotifyMsgsMoveCopyCompleted(aMove, aSrcMsgs, aDestFolder, aDestMsgs); } \
  NS_IMETHOD NotifyMsgKeyChanged(nsMsgKey aOldKey, nsIMsgDBHdr *aNewHdr) override { return _to NotifyMsgKeyChanged(aOldKey, aNewHdr); } \
  NS_IMETHOD NotifyFolderAdded(nsIMsgFolder *aFolder) override { return _to NotifyFolderAdded(aFolder); } \
  NS_IMETHOD NotifyFolderDeleted(nsIMsgFolder *aFolder) override { return _to NotifyFolderDeleted(aFolder); } \
  NS_IMETHOD NotifyFolderMoveCopyCompleted(bool aMove, nsIMsgFolder *aSrcFolder, nsIMsgFolder *aDestFolder) override { return _to NotifyFolderMoveCopyCompleted(aMove, aSrcFolder, aDestFolder); } \
  NS_IMETHOD NotifyFolderRenamed(nsIMsgFolder *aOrigFolder, nsIMsgFolder *aNewFolder) override { return _to NotifyFolderRenamed(aOrigFolder, aNewFolder); } \
  NS_IMETHOD NotifyItemEvent(nsISupports *aItem, const nsACString & aEvent, nsISupports *aData) override { return _to NotifyItemEvent(aItem, aEvent, aData); } 

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSIMSGFOLDERNOTIFICATIONSERVICE(_to) \
  NS_IMETHOD GetHasListeners(bool *aHasListeners) override { return !_to ? NS_ERROR_NULL_POINTER : _to->GetHasListeners(aHasListeners); } \
  NS_IMETHOD AddListener(nsIMsgFolderListener *aListener, msgFolderListenerFlag flags) override { return !_to ? NS_ERROR_NULL_POINTER : _to->AddListener(aListener, flags); } \
  NS_IMETHOD RemoveListener(nsIMsgFolderListener *aListener) override { return !_to ? NS_ERROR_NULL_POINTER : _to->RemoveListener(aListener); } \
  NS_IMETHOD NotifyMsgAdded(nsIMsgDBHdr *aMsg) override { return !_to ? NS_ERROR_NULL_POINTER : _to->NotifyMsgAdded(aMsg); } \
  NS_IMETHOD NotifyMsgsClassified(nsIArray *aMsgs, bool aJunkProcessed, bool aTraitProcessed) override { return !_to ? NS_ERROR_NULL_POINTER : _to->NotifyMsgsClassified(aMsgs, aJunkProcessed, aTraitProcessed); } \
  NS_IMETHOD NotifyMsgsDeleted(nsIArray *aMsgs) override { return !_to ? NS_ERROR_NULL_POINTER : _to->NotifyMsgsDeleted(aMsgs); } \
  NS_IMETHOD NotifyMsgsMoveCopyCompleted(bool aMove, nsIArray *aSrcMsgs, nsIMsgFolder *aDestFolder, nsIArray *aDestMsgs) override { return !_to ? NS_ERROR_NULL_POINTER : _to->NotifyMsgsMoveCopyCompleted(aMove, aSrcMsgs, aDestFolder, aDestMsgs); } \
  NS_IMETHOD NotifyMsgKeyChanged(nsMsgKey aOldKey, nsIMsgDBHdr *aNewHdr) override { return !_to ? NS_ERROR_NULL_POINTER : _to->NotifyMsgKeyChanged(aOldKey, aNewHdr); } \
  NS_IMETHOD NotifyFolderAdded(nsIMsgFolder *aFolder) override { return !_to ? NS_ERROR_NULL_POINTER : _to->NotifyFolderAdded(aFolder); } \
  NS_IMETHOD NotifyFolderDeleted(nsIMsgFolder *aFolder) override { return !_to ? NS_ERROR_NULL_POINTER : _to->NotifyFolderDeleted(aFolder); } \
  NS_IMETHOD NotifyFolderMoveCopyCompleted(bool aMove, nsIMsgFolder *aSrcFolder, nsIMsgFolder *aDestFolder) override { return !_to ? NS_ERROR_NULL_POINTER : _to->NotifyFolderMoveCopyCompleted(aMove, aSrcFolder, aDestFolder); } \
  NS_IMETHOD NotifyFolderRenamed(nsIMsgFolder *aOrigFolder, nsIMsgFolder *aNewFolder) override { return !_to ? NS_ERROR_NULL_POINTER : _to->NotifyFolderRenamed(aOrigFolder, aNewFolder); } \
  NS_IMETHOD NotifyItemEvent(nsISupports *aItem, const nsACString & aEvent, nsISupports *aData) override { return !_to ? NS_ERROR_NULL_POINTER : _to->NotifyItemEvent(aItem, aEvent, aData); } 

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class nsMsgFolderNotificationService : public nsIMsgFolderNotificationService
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIMSGFOLDERNOTIFICATIONSERVICE

  nsMsgFolderNotificationService();

private:
  ~nsMsgFolderNotificationService();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS(nsMsgFolderNotificationService, nsIMsgFolderNotificationService)

nsMsgFolderNotificationService::nsMsgFolderNotificationService()
{
  /* member initializers and constructor code */
}

nsMsgFolderNotificationService::~nsMsgFolderNotificationService()
{
  /* destructor code */
}

/* readonly attribute boolean hasListeners; */
NS_IMETHODIMP nsMsgFolderNotificationService::GetHasListeners(bool *aHasListeners)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void addListener (in nsIMsgFolderListener aListener, in msgFolderListenerFlag flags); */
NS_IMETHODIMP nsMsgFolderNotificationService::AddListener(nsIMsgFolderListener *aListener, msgFolderListenerFlag flags)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void removeListener (in nsIMsgFolderListener aListener); */
NS_IMETHODIMP nsMsgFolderNotificationService::RemoveListener(nsIMsgFolderListener *aListener)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void notifyMsgAdded (in nsIMsgDBHdr aMsg); */
NS_IMETHODIMP nsMsgFolderNotificationService::NotifyMsgAdded(nsIMsgDBHdr *aMsg)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void notifyMsgsClassified (in nsIArray aMsgs, in boolean aJunkProcessed, in boolean aTraitProcessed); */
NS_IMETHODIMP nsMsgFolderNotificationService::NotifyMsgsClassified(nsIArray *aMsgs, bool aJunkProcessed, bool aTraitProcessed)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void notifyMsgsDeleted (in nsIArray aMsgs); */
NS_IMETHODIMP nsMsgFolderNotificationService::NotifyMsgsDeleted(nsIArray *aMsgs)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void notifyMsgsMoveCopyCompleted (in boolean aMove, in nsIArray aSrcMsgs, in nsIMsgFolder aDestFolder, in nsIArray aDestMsgs); */
NS_IMETHODIMP nsMsgFolderNotificationService::NotifyMsgsMoveCopyCompleted(bool aMove, nsIArray *aSrcMsgs, nsIMsgFolder *aDestFolder, nsIArray *aDestMsgs)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void notifyMsgKeyChanged (in nsMsgKey aOldKey, in nsIMsgDBHdr aNewHdr); */
NS_IMETHODIMP nsMsgFolderNotificationService::NotifyMsgKeyChanged(nsMsgKey aOldKey, nsIMsgDBHdr *aNewHdr)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void notifyFolderAdded (in nsIMsgFolder aFolder); */
NS_IMETHODIMP nsMsgFolderNotificationService::NotifyFolderAdded(nsIMsgFolder *aFolder)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void notifyFolderDeleted (in nsIMsgFolder aFolder); */
NS_IMETHODIMP nsMsgFolderNotificationService::NotifyFolderDeleted(nsIMsgFolder *aFolder)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void notifyFolderMoveCopyCompleted (in boolean aMove, in nsIMsgFolder aSrcFolder, in nsIMsgFolder aDestFolder); */
NS_IMETHODIMP nsMsgFolderNotificationService::NotifyFolderMoveCopyCompleted(bool aMove, nsIMsgFolder *aSrcFolder, nsIMsgFolder *aDestFolder)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void notifyFolderRenamed (in nsIMsgFolder aOrigFolder, in nsIMsgFolder aNewFolder); */
NS_IMETHODIMP nsMsgFolderNotificationService::NotifyFolderRenamed(nsIMsgFolder *aOrigFolder, nsIMsgFolder *aNewFolder)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void notifyItemEvent (in nsISupports aItem, in ACString aEvent, in nsISupports aData); */
NS_IMETHODIMP nsMsgFolderNotificationService::NotifyItemEvent(nsISupports *aItem, const nsACString & aEvent, nsISupports *aData)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif


#endif /* __gen_nsIMsgFolderNotificationService_h__ */
