gecko-dev/mailnews/compose/public/nsIMsgSend.idl
cbiesinger%web.de 4fd4322ac4 Bug 301084 Option to file replies in folder of original message (backend part)
patch by Emil Hesslow <hesslow@gmail.com> r=dmose sr=bienvenu
2005-08-13 18:50:38 +00:00

276 lines
12 KiB
Plaintext

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"),
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
/*
* The nsIMsgSend method will create an RFC822 message and send it all in one operation
* as well as providing the ability to save disk files for later use. The mode of delivery
* can also be specified for the "Send Later", "Drafts" and "Templates" operations. (NOTE:
* This method could easily be broken in to a few different calls. Currently, this method
* does several functions depending on the arguments passed in, but this could easily lead
* to confusion. This is something that very well may change as time allows).
*/
#include "nsISupports.idl"
#include "nsISupportsArray.idl"
#include "nsrootidl.idl"
#include "nsIMsgIdentity.idl"
#include "nsIMsgCompFields.idl"
#include "nsIMsgSendListener.idl"
#include "nsIMsgSendReport.idl"
#include "domstubs.idl"
#include "nsIPrompt.idl"
#include "MailNewsTypes2.idl"
#include "nsIMsgComposeParams.idl"
%{C++
#include "nsIURL.h"
#include "nsString.h"
class nsFileSpec;
class nsOutputFileStream;
%}
interface nsIMsgProgress;
interface nsIURI;
interface nsIRequest;
interface nsIMsgDBHdr;
interface nsIMsgHdr;
interface nsIDocShell;
interface nsIFileSpec;
interface nsIMsgComposeSecure;
interface nsIMsgStatusFeedback;
interface nsIEditor;
typedef long nsMsgDeliverMode;
%{ C++
//
// Callback declarations for message delivery
//
// For completion of send/message creation operations...
typedef nsresult (*nsMsgSendCompletionCallback) (nsresult aExitCode, void *tagData, nsFileSpec *returnFileSpec);
// For completion of sending unsent messages operations...
typedef nsresult (*nsMsgSendUnsentMessagesCallback) (nsresult aExitCode, PRUint32 totalSentCount,
PRUint32 totalSentSuccessfully, void *tagData);
%}
%{ C++
// Forward declaration
class nsMsgAttachmentHandler;
// Attachment file/URL structures
struct nsMsgAttachmentData
{
nsIURI* url; // The URL to attach. This should be 0 to signify "end of list".
char *desired_type; // The type to which this document should be
// converted. Legal values are NULL, TEXT_PLAIN
// and APPLICATION_POSTSCRIPT (which are macros
// defined in net.h); other values are ignored.
char *real_type; // The type of the URL if known, otherwise NULL. For example, if
// you were attaching a temp file which was known to contain HTML data,
// you would pass in TEXT_HTML as the real_type, to override whatever type
// the name of the tmp file might otherwise indicate.
char *real_encoding; // Goes along with real_type
char *real_name; // The original name of this document, which will eventually show up in the
// Content-Disposition header. For example, if you had copied a document to a
// tmp file, this would be the original, human-readable name of the document.
char *description; // If you put a string here, it will show up as the Content-Description header.
// This can be any explanatory text; it's not a file name.
char *x_mac_type, *x_mac_creator; // Mac-specific data that should show up as optional parameters
// to the content-type header.
PRBool isExternalAttachment; // Flag for determining if the attachment is external
};
//
// When we have downloaded a URL to a tmp file for attaching, this
// represents everything we learned about it (and did to it) in the
// process.
//
typedef struct nsMsgAttachedFile
{
nsCOMPtr<nsIURI> orig_url; // Where it came from on the network (or even elsewhere on the local disk.)
nsFileSpec *file_spec; // The tmp file in which the (possibly converted) data now resides.
char *type; // The type of the data in file_name (not necessarily the same as the type of orig_url.)
char *encoding; // Likewise, the encoding of the tmp file. This will be set only if the original
// document had an encoding already; we don't do base64 encoding and so forth until
// it's time to assemble a full MIME message of all parts.
char *description; // For Content-Description header
char *x_mac_type; // mac-specific info
char *x_mac_creator; // mac-specific info
char *real_name; // The real name of the file.
// Some statistics about the data that was written to the file, so that when
// it comes time to compose a MIME message, we can make an informed decision
// about what Content-Transfer-Encoding would be best for this attachment.
// (If it's encoded already, we ignore this information and ship it as-is.)
PRUint32 size;
PRUint32 unprintable_count;
PRUint32 highbit_count;
PRUint32 ctl_count;
PRUint32 null_count;
PRUint32 max_line_length;
} nsMsgAttachedFile;
%}
[ptr] native nsMsgAttachmentData(nsMsgAttachmentData);
[ptr] native nsMsgAttachedFile(nsMsgAttachedFile);
[ptr] native nsMsgAttachmentHandler(nsMsgAttachmentHandler);
[ptr] native nsOutputFileStream(nsOutputFileStream);
[ptr] native nsCString(nsCString);
[scriptable, uuid(39876de6-207f-43f4-99a7-d60f1c49ea48)]
interface nsIMsgSend : nsISupports
{
//
// This is the primary interface for creating and sending RFC822 messages
// in the new architecture. Currently, this method supports many arguments
// that change the behavior of the operation. This will change in time to
// be separate calls that will be more singluar in nature.
//
// NOTE: when aEditor is non-null, a multipart related MHTML message will
// be created
//
const nsMsgDeliverMode nsMsgDeliverNow = 0;
const nsMsgDeliverMode nsMsgQueueForLater = 1;
const nsMsgDeliverMode nsMsgSave = 2;
const nsMsgDeliverMode nsMsgSaveAs = 3;
const nsMsgDeliverMode nsMsgSaveAsDraft = 4;
const nsMsgDeliverMode nsMsgSaveAsTemplate = 5;
const nsMsgDeliverMode nsMsgSendUnsent = 6;
[noscript]
void createAndSendMessage(in nsIEditor aEditor,
in nsIMsgIdentity aUserIdentity,
in string aAccountKey,
in nsIMsgCompFields fields,
in PRBool digest_p,
in PRBool dont_deliver_p,
in nsMsgDeliverMode mode,
in nsIMsgDBHdr msgToReplace,
in string attachment1_type,
in string attachment1_body,
in PRUint32 attachment1_body_length,
[const] in nsMsgAttachmentData attachments,
[const] in nsMsgAttachedFile preloaded_attachments,
in voidPtr relatedPart,
in nsIDOMWindowInternal parentWindow,
in nsIMsgProgress progress,
in nsIMsgSendListener aListener,
in string password,
in AUTF8String aOriginalMsgURI,
in MSG_ComposeType aType
);
void sendMessageFile(in nsIMsgIdentity aUserIdentity,
in string aAccountKey,
in nsIMsgCompFields fields,
in nsIFileSpec sendIFileSpec,
in PRBool deleteSendFileOnCompletion,
in PRBool digest_p,
in nsMsgDeliverMode mode,
in nsIMsgDBHdr msgToReplace,
in nsIMsgSendListener aListener,
in nsIMsgStatusFeedback aStatusFeedback,
in string password
);
/* Abort current send/save operation */
void abort();
/* Report a send failure */
nsresult fail(in nsresult failure_code, in wstring error_msg);
/* Disable UI notification (alert message) */
void setGUINotificationState(in PRBool aEnableFlag);
/* Crypto */
void BeginCryptoEncapsulation();
/* retreive the last send process report*/
readonly attribute nsIMsgSendReport sendReport;
/* methods for send listener ... */
[noscript] void notifyListenerOnStartSending(in string aMsgID, in unsigned long aMsgSize);
[noscript] void notifyListenerOnProgress(in string aMsgID, in unsigned long aProgress, in unsigned long aProgressMax);
[noscript] void notifyListenerOnStatus(in string aMsgID, in wstring aMsg);
[noscript] void notifyListenerOnStopSending(in string aMsgID, in nsresult aStatus, in wstring aMsg, in nsIFileSpec returnFileSpec);
[noscript] void deliverAsMailExit(in nsIURI aUrl, in nsresult aExitCode);
[noscript] void deliverAsNewsExit(in nsIURI aUrl, in nsresult aExitCode);
/* methods for copy listener ... */
[noscript] void notifyListenerOnStartCopy();
[noscript] void notifyListenerOnProgressCopy(in unsigned long aProgress, in unsigned long aProgressMax);
[noscript] void notifyListenerOnStopCopy(in nsresult aStatus);
[noscript] void getMessageId(in nsCString messageID);
[noscript] attribute nsMsgKey messageKey;
[noscript] nsIPrompt getDefaultPrompt();
/* process attachment */
[noscript] void gatherMimeAttachments();
[noscript] boolean getProcessAttachmentsSynchronously();
[noscript] nsMsgAttachmentHandler getAttachmentHandlers();
[noscript] readonly attribute unsigned long attachmentCount;
[noscript] attribute unsigned long pendingAttachmentCount;
[noscript] readonly attribute nsMsgDeliverMode deliveryMode;
[noscript] nsIMsgProgress getProgress();
[noscript] nsOutputFileStream getOutputStream();
[noscript] attribute nsIRequest runningRequest;
[noscript] attribute nsresult status;
[noscript] attribute nsIMsgComposeSecure cryptoclosure;
};