mailnews/base/public/nsIMessenger.idl
author Elizabeth Mitchell <elizabeth@thunderbird.net>
Mon, 03 Oct 2022 14:19:25 +0000
changeset 36863 afd690ad68cf07f88b4760768e67b5e0e94da57e
parent 34563 e5077d2089c9c22851573cef068470761d16830b
permissions -rw-r--r--
Bug 1683865 - Replace app notifications icons. r=aleca Differential Revision: https://phabricator.services.mozilla.com/D158393

/* -*- Mode: IDL; 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 "nsrootidl.idl"
#include "nsIMsgWindow.idl"
#include "nsIMsgIdentity.idl"

interface nsIMsgDBHdr;
interface mozIDOMWindowProxy;
interface nsITransactionManager;
interface nsIMsgMessageService;
interface nsIFile;
interface nsIUrlListener;

[scriptable, uuid(01b967c8-b289-4e32-ad46-6eb7c89d4106)]
interface nsIMessenger : nsISupports {

    const long eUnknown = 0;
    const long eDeleteMsg = 1;
    const long eMoveMsg = 2;
    const long eCopyMsg = 3;
    const long eMarkAllMsg = 4;

    readonly attribute nsITransactionManager transactionManager;

    void setWindow(in mozIDOMWindowProxy ptr, in nsIMsgWindow msgWindow);

    void addMsgUrlToNavigateHistory(in AUTF8String aURL);

    /**
     * Prevent any pending message load from occurring.
     */
    void abortPendingOpenURL();
    /**
     * Changes the message pane to the parent process if necessary, and loads
     * a message (aURL) in it. This may not happen synchronously.
     */
    void openURL(in AUTF8String aURL);

    /**
     * Load a custom message by url, e.g load a attachment as a email
     */
    void loadURL(in mozIDOMWindowProxy ptr, in AUTF8String aURL);

    void launchExternalURL(in AUTF8String aURL);

    boolean canUndo();
    boolean canRedo();
    unsigned long getUndoTransactionType();
    unsigned long getRedoTransactionType();
    void undo(in nsIMsgWindow msgWindow);
    void redo(in nsIMsgWindow msgWindow);
    void forceDetectDocumentCharset();
    /**
     * Saves a given message to a file or template.
     *
     * @param aURI         The URI of the message to save
     * @param aAsFile      If true, save as file, otherwise save as a template
     * @param aIdentity    When saving as a template, this is used to determine
     *                     the location to save the template to.
     * @param aMsgFilename When saving as a file, the filename to save the
     *                     message as, or the default filename for the file
     *                     picker.
     * @param aBypassFilePicker
     *                     If not specified or false, this function will show
     *                     a file picker when saving as a file. If true, no
     *                     file picker will be shown.
     */
    void saveAs(in AUTF8String aURI, in boolean aAsFile,
                in nsIMsgIdentity aIdentity, in AString aMsgFilename,
                [optional] in boolean aBypassFilePicker);

    /**
     * Save the given messages as files in a folder - the user will be prompted
     * for which folder to use.
     * @param count message count
     * @param filenameArray the filenames to use
     * @param messageUriArray uris of the messages to save
     */
    void saveMessages(in Array<AString> filenameArray,
                      in Array<AUTF8String> messageUriArray);

    void openAttachment(in AUTF8String contentType,
                        in AUTF8String url,
                        in AUTF8String displayName,
                        in AUTF8String messageUri,
                        in boolean isExternalAttachment);
    void saveAttachment(in AUTF8String contentType,
                        in AUTF8String url,
                        in AUTF8String displayName,
                        in AUTF8String messageUri,
                        in boolean isExternalAttachment);
    void saveAllAttachments(in Array<AUTF8String> contentTypeArray,
                            in Array<AUTF8String> urlArray,
                            in Array<AUTF8String> displayNameArray,
                            in Array<AUTF8String> messageUriArray);

    void saveAttachmentToFile(in nsIFile aFile,
                              in AUTF8String aUrl,
                              in AUTF8String aMessageUri,
                              in AUTF8String aContentType,
                              in nsIUrlListener aListener);

    /**
     * For a single message and attachments, save these attachments to a file, and
     *  remove from the message. No warning windows will appear, so this is
     *  suitable for use in test and filtering.
     *
     * @param aDestFolder       Folder to save files in
     * @param aCount            Number of attachments to save
     * @param aContentTypeArray Content types of the attachments
     * @param aUrlArray         Urls for the attachments
     * @param aDisplayNameArray Files names to save attachments to. Unique
     *                           names will be created if needed.
     * @param aMessageUriArray  Uri for the source message
     * @param aListener         Listener to inform of start and stop of detach
     */
    void detachAttachmentsWOPrompts(in nsIFile aDestFolder,
                                    in Array<AUTF8String> aContentTypeArray,
                                    in Array<AUTF8String> aUrlArray,
                                    in Array<AUTF8String> aDisplayNameArray,
                                    in Array<AUTF8String> aMessageUriArray,
                                    in nsIUrlListener aListener);

    void detachAttachment(in AUTF8String contentType,
                          in AUTF8String url,
                          in AUTF8String displayName,
                          in AUTF8String messageUri,
                          in boolean saveFirst,
                          [optional] in boolean withoutWarning);
    void detachAllAttachments(in Array<AUTF8String> contentTypeArray,
                              in Array<AUTF8String> urlArray,
                              in Array<AUTF8String> displayNameArray,
                              in Array<AUTF8String> messageUriArray,
                              in boolean saveFirst,
                              [optional] in boolean withoutWarning);
    // saveAttachmentToFolder is used by the drag and drop code to drop an attachment to a destination folder
    // We need to return the actual file path (including the filename).
    nsIFile saveAttachmentToFolder(in AUTF8String contentType,
                                   in AUTF8String url,
                                   in AUTF8String displayName,
                                   in AUTF8String messageUri,
                                   in nsIFile aDestFolder);

    readonly attribute AUTF8String lastDisplayedMessageUri;

    nsIMsgMessageService messageServiceFromURI(in AUTF8String aUri);
    nsIMsgDBHdr msgHdrFromURI(in AUTF8String aUri);
    // For back forward history, we need a list of visited messages,
    // and where we are in the list.

    // aPos is relative to the current history cursor - 1 is forward, -1 is back.
    // Unfortunately, you must call this before navigating to this position,
    // because calling this has the side effect of making us adjust our current
    // history pos, and *not* adding the loaded message to the history queue.
    AUTF8String getMsgUriAtNavigatePos(in long aPos);
    AUTF8String getFolderUriAtNavigatePos(in long aPos);
    attribute long navigatePos;
    /**
     * Fetch the message navigation history.
     *
     * @returns An array containing two URIs for each history position.
     *          First msgURI, then folderURI. So the array will be
     *          twice as long as the number of history positions.
     */
    Array<AUTF8String> getNavigateHistory();
    AString formatFileSize(in unsigned long long aPos, [optional] in boolean aUseKB);
};