/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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 "nsrootidl.idl" #include "nsISupports.idl" #include "nsIMsgFolder.idl" #include "nsIMsgCopyServiceListener.idl" interface nsIMsgDBHdr; interface nsIMsgWindow; interface nsIFile; /** * nsIMsgCopyService is a central point for kicking off message and folder * copy/move operations. * Each operation is queued up and executed in sequence. The actual work is * handled by folder code in an asynchronous fashion. The folder indicates * completion by calling notifyCompletion(). * * If the operation was initiated with a non-null nsIMsgCopyServiceListener, * its OnStartCopy() and OnStopCopy() methods will be called when the * operation begins/ends. Any errors are communicated via the result code * parameter passed to OnStopCopy(). */ [scriptable, uuid(f21e428b-73c5-4607-993b-d37325b33722)] interface nsIMsgCopyService : nsISupports { /** * Copies or moves existing messages from source folder to destination folder. * * @param srcFolder Source folder of an operation. * @param messages The array of nsIMsgHdrs in source folder which will be moved/copied. * @param dstFolder Destination folder of operation. * @param isMove false for copy operation, true for move operation. * @param listener Listener which receive operation notifications * @param msgWindow Window for notification callbacks, can be null. * @param allowUndo Specifies if this operation will be done as an transaction * that can be undone. */ void copyMessages(in nsIMsgFolder srcFolder, in Array messages, in nsIMsgFolder dstFolder, in boolean isMove, in nsIMsgCopyServiceListener listener, in nsIMsgWindow msgWindow, in boolean allowUndo); /** * Copies or moves a folder into an existing destination folder. * * @param srcFolder The nsIMsgFolder which will be moved/copied. * @param dstFolder The destination folder of operation. * @param isMove false for copy operation, true for move operation. * @param listener Listener which receive operation notifications. * @param msgWindow Window for notification callbacks, can be null. */ void copyFolder(in nsIMsgFolder srcFolder, in nsIMsgFolder dstFolder, in boolean isMove, in nsIMsgCopyServiceListener listener, in nsIMsgWindow msgWindow); /** * Copies message in rfc format from file to folder. * * @param aFile A file which contains message in rfc format which * will copied to destFolder. * @param dstFolder Destination folder where a message will be copied. * @param msgToReplace Header which identifies a message to use as a source * of message properties, or null. For example, when * deleting an attachment, the processed message is * stored in a file, but the metadata should be copied * from the original message. This method will NOT delete * the original message. * @param isDraftOrTemplate Specifies whether a message is a stored in draft * folder or not. If is true listener should * implement GetMessageId and return unique id for * message in destination folder. This is important * for IMAP servers which doesn't support uidplus. * If destination folder contains message with the * same message-id then it is possible that listener * get wrong message key in callback * nsIMsgCopyServiceListener::SetMessageKey. * @param aMsgFlags Message flags which will be set after message is * copied * @param aMsgKeywords Keywords which will be set for newly copied * message. * @param listener Listener which receive copy notifications. * @param msgWindow Window for notification callbacks, can be null. */ void copyFileMessage(in nsIFile aFile, in nsIMsgFolder dstFolder, in nsIMsgDBHdr msgToReplace, in boolean isDraftOrTemplate, in unsigned long aMsgFlags, in ACString aMsgKeywords, in nsIMsgCopyServiceListener listener, in nsIMsgWindow msgWindow); /** * Notify the message copy service that the destination folder has finished * it's messages copying operation so that the copy service can continue * copying the rest of the messages if there are more to copy with. * aSupport and dstFolder uniquely identify a copy service request. * * @param aSupport The originator of CopyMessages or copyFileMessage; it can * be either a nsIMsgFolder or a nsIFile * @param dstFolder The destination folder which performs the copy operation * @param result The result of the copy operation */ void notifyCompletion(in nsISupports aSupport, in nsIMsgFolder dstFolder, in nsresult result); };