1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
/* -*- 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"
#include "MailNewsTypes2.idl"
#include "nsIImapUrl.idl"
interface nsIFile;
[scriptable, uuid(6ffb6a92-e43a-405f-92ea-92cf81a5e17b)]
/**
* nsIImapMessageSink provides a way for the IMAP system to exchange
* message-related information with the local folder representation.
*
* The IMAP system could poke folders directly, but going through this
* interface has a couple of benefits:
*
* 1. It better defines the public coupling between the two systems.
* 2. It's easier to wrap with a proxy class so the IMAP system can safely
* call the methods across thread boundaries (see ImapMessageSinkProxy).
*/
interface nsIImapMessageSink : nsISupports {
// set up message download output stream
void setupMsgWriteStream(in nsIFile aFile, in boolean aAppendDummyEnvelope);
/**
* Used by the imap protocol code to notify the core backend code about
* downloaded imap messages.
*
* @param aAdoptedMsgLine a string with a lot of message lines,
* separated by native line terminators.
* @param aUidOfMsg IMAP UID of the fetched message.
* @param aImapUrl IMAP Url used to fetch the message.
*/
void parseAdoptedMsgLine(in string aAdoptedMsgLine, in nsMsgKey aUidOfMsg,
in nsIImapUrl aImapUrl);
/**
* Notify the backend that the imap protocol is done downloading a message
*
* @param aUidOfMsg IMAP UID of the fetched message.
* @param aMarkMsgRead Set the SEEN flag on the message.
* @param aImapUrl IMAP Url used to fetch the message.
* @param aUpdatedMessageSize if this parameter is not -1, the stored size of the message
* should be set to this value to reflect the actual size of
* the downloaded message.
*/
void normalEndMsgWriteStream(in nsMsgKey aUidOfMessage,
in boolean aMarkMsgRead, in nsIImapUrl aImapUrl,
in long aUpdatedMessageSize);
void abortMsgWriteStream();
void beginMessageUpload();
/**
* Notify the message sink that one or more flags have changed
* For Condstore servers, also update the highestMod Sequence
* @param aFlags - The new flags for the message
* @param aKeywords keywords for the message
* @param aMessageKey - The UID of the message that changed
* @param aHighestModSeq - The highest mod seq the parser has seen
* for this folder
**/
void notifyMessageFlags(in unsigned long aFlags, in ACString aKeywords,
in nsMsgKey aMessageKey,
in unsigned long long aHighestModSeq);
void notifyMessageDeleted(in string aOnlineFolderName,in boolean aDeleteAllMsgs,in string aMsgIdString);
void getMessageSizeFromDB(in string aId, out unsigned long aSize);
/**
* For a message stored in a file, get the message metadata needed to copy
* that message to an imap folder
*
* @param aRunningUrl message URL
* @param aDate message date
* @param aKeywords message custom keywords (if supported by the server),
* including messages tags and junk status
*
* @return message flags
*/
unsigned long getCurMoveCopyMessageInfo(in nsIImapUrl aRunningUrl,
out PRTime aDate, out ACString aKeywords);
};
|