/* -*- 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"

interface nsIFile;

[scriptable, uuid(D34DC178-5E78-45E8-8658-A8F52D9CCF5F)]
interface nsIMsgSendListener : nsISupports {

    /**
     * Notify the observer that the message has started to be delivered. This method is
     * called only once, at the beginning of a message send operation.
     *
     * @return The return value is currently ignored.  In the future it may be
     * used to cancel the URL load..
     */
    void onStartSending(in string aMsgID, in PRUint32 aMsgSize);

    /**
     * Notify the observer that progress as occurred for the message send
     */
    void onProgress(in string aMsgID, in PRUint32 aProgress, in PRUint32 aProgressMax);

    /**
     * Notify the observer with a status message for the message send
     */
    void onStatus(in string aMsgID, in wstring aMsg);

    /**
     * Notify the observer that the message has been sent.  This method is 
     * called once when the networking library has finished processing the 
     * message.
     * 
     * This method is called regardless of whether the the operation was successful.
     * aMsgID   The message id for the mail message
     * status   Status code for the message send.
     * msg      A text string describing the error.
     * returnFileSpec The returned file spec for save to file operations.
     */
    void onStopSending(in string aMsgID, in nsresult aStatus, in wstring aMsg, 
					             in nsIFile aReturnFile);

    /**
     * Notify the observer with the folder uri before the draft is copied.
     */
    void onGetDraftFolderURI(in string aFolderURI);

    /**
     * Notify the observer when the user aborts the send without actually doing the send
     * eg : by closing the compose window without Send.
     */
    void onSendNotPerformed(in string aMsgID, in nsresult aStatus);

};
