home *** CD-ROM | disk | FTP | other *** search
- /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.0 (the "NPL"); you may not use this file except in
- * compliance with the NPL. You may obtain a copy of the NPL at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the NPL is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
- * for the specific language governing rights and limitations under the
- * NPL.
- *
- * The Initial Developer of this code under the NPL is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998 Netscape Communications Corporation. All Rights
- * Reserved.
- */
-
- /* msgcom.h --- prototypes for the mail/news reader module.
- Created: Jamie Zawinski <jwz@netscape.com>, 10-May-95.
- */
-
- #ifndef _MSGCOM_H_
- #define _MSGCOM_H_
-
- #include "libmime.h"
-
- #define SUBSCRIBE_USE_OLD_API
-
- /* ===========================================================================
- This file defines all of the types and prototypes for communication
- between the msg library, which implements the mail and news applications,
- and the various front ends.
-
- Functions beginning with MSG_ are defined in the library, and are invoked
- by the front ends in response to user activity.
-
- Functions beginning with FE_ are defined by the front end, and are invoked
- by the message library to get things to happen on the screen.
-
- The main parts of this file are listed below:
-
- COMMAND NUMBERS
- CONSTANTS AND ENUMS
- FLAGS AND MASKS
- TYPES AND STRUCTS
-
- INIT/CREATE
- RANDOM CORE FUNCTIONS (to sort)
- PREFERENCES
- LIST CALLBACKS
- HOSTS
- SUBSCRIBE WINDOW
- OFFLINE NEWS
- OFFLINE IMAP
- QUERIES
- BIFF
- OTHER INTERFACES
- SECURE MAIL
- COMPOSE WINDOW
-
- ===========================================================================
- */
-
-
- #include "xp_mcom.h"
- #include "xp_core.h"
- #include "ntypes.h"
- #include "msgtypes.h"
-
-
-
-
-
- /* ===========================================================================
- COMMAND NUMBERS
- ===========================================================================
- */
-
- /* This enumerates all of the mail/news-specific commands (those which are
- not shared with the web browsers. The front ends should invoke each of
- these menu items through the MSG_Command() function like so:
-
- MSG_Command (context, MSG_PostReply);
-
- This interface is used for selections of normal menu items, toolbar
- buttons, and keyboard equivalents. Clicks in the scrolling list windows,
- drag-and-drop, and the "folders" menus are handled differently.
-
- Different items are meaningful in different sets of panes. The comments
- indicate which:
-
- f: Usable in folder panes (either mail or news)
- fn: Usable only in news folderpanes
- fm: Usable only in mail folderpanes
- t: Usable in thread panes
- tn: Usable only in news threadpanes
- tm: Usable only in mail threadpanes
- m: Usable in message panes
- mn: Usable only in news messagepanes
- mm: Usable only in mail messagepanes
- c: Usable in composition panes
- sub: Usable in the subscribe pane
-
- In general, an item which works on folders can either be called on
- the folder pane (in which case it effects the specified folders),
- or on a threadpane (in which case it effects the folder being
- displayed in the threadpane). Similarly, items which work on
- messages can be either called on a threadpane or on a messagepane.
-
- Also, in general, commands useable in news folder pane work in the
- category pane as well.
- */
-
- typedef enum
- {
- /* FILE MENU
- =========
- */
- MSG_GetNewMail, /* fm: Gets new mail messages, and appends them
- to the appropriate folders. This is an
- asynchronous operation; it will eventually
- cause FE_ListChangeStarting and
- FE_ListChangeFinished to be called on any
- threadpanes displaying a folder which is
- modified. */
- MSG_GetNextChunkMessages, /* f,t Get the next N news messages, based on chunk
- size. */
- MSG_UpdateMessageCount, /* f,t,m News only - Update the message counts */
-
- MSG_DeliverQueuedMessages, /* f,t,m: Deliver messages waiting to be
- delivered in the queued folder. */
-
- MSG_OpenFolder, /* fm: Prompt the user for the full pathname of
- a mail file, and creates an entry for it
- (i.e., calls MSG_CreateFolder). */
-
- MSG_NewFolder, /* f,t,m: Prompt the user for a new folder or
- subfolder name, and creates it (i.e., calls
- MSG_CreateFolder) */
-
- MSG_CompressFolder, /* fm: Causes the given folders to be
- compressed. */
-
- MSG_CompressAllFolders, /* fm: Causes all the folders to be
- compressed. */
-
- MSG_DoRenameFolder, /* fm: Prompt the user for a new folder or
- subfolder name, and renames the selected
- folder to have that name (i.e., calls
- MSG_RenameFolder()). */
-
- MSG_AddNewsGroup, /* fn: Prompts the user for a newsgroup name,
- and adds it to the list of newsgroups (i.e.,
- subscribes the user). */
-
- MSG_EmptyTrash, /* fm: Causes the trash folder to be emptied,
- and all the folders to be compressed. */
-
- MSG_Unsubscribe, /* f, Unsubscribe to the selected newsgroup(s)
- Delete currently does this as well. */
-
- MSG_ManageMailAccount, /* f: Prompts the user for mail account password
- if needed and brings up the GURL web page */
-
- MSG_Print, /* not a command - used for selectability only */
-
- MSG_NewNewsgroup, /* ft: Prompts the user for a new newsgroup name */
- /* and brings up the NGURL web page */
-
- MSG_ModerateNewsgroup, /* ft: brings up the MODURL web page for the */
- /* selected group */
-
- MSG_NewCategory, /* ft: Prompts the user for a new category name */
- /* and brings up the NGURL web page */
-
- /* VIEW/SORT MENUS
- ===============
- */
- MSG_ReSort, /* t: Re-apply the current sort. */
- MSG_SortBackward, /* t: Reverse the order of the sort. */
- MSG_SortByDate, /* t: Sort in chronological order. */
- MSG_SortBySubject, /* t: Sort alphabetized by subject. */
- MSG_SortBySender, /* t: Sort alphabetized by sender. */
- MSG_SortByMessageNumber, /* t: Sort in order stored in mail folder, or
- in numerical article number if news. */
- MSG_SortByThread, /* t: Sort in threads. */
- MSG_SortByPriority, /* t: Sort by priority - highest first. */
- MSG_SortByStatus, /* t: Sort by message status - new first. */
- MSG_SortBySize, /* t: Sort by size */
- MSG_SortByFlagged, /* t: Sort by flag state */
- MSG_SortByUnread, /* t: Sort by unread state */
-
- MSG_ViewAllThreads, /* t: (except for killed threads) -default */
- MSG_ViewKilledThreads, /* t: Show all incl. killed threads */
- MSG_ViewThreadsWithNew, /* t: Show only threads with new messages */
- MSG_ViewWatchedThreadsWithNew,/* t: Show only watched thrds with new msgs */
- MSG_ViewNewOnly, /* t: Show only new messages */
-
- MSG_Rot13Message, /* m: Apply fancy rot13 encryption. */
-
- MSG_AttachmentsInline, /* m: Display attachments in line. */
- MSG_AttachmentsAsLinks, /* m: Display attachments as links */
-
- MSG_WrapLongLines,
-
- /* EDIT MENU
- =========
- */
- MSG_Undo, /* ftm: Undoes the last operation. */
-
- MSG_Redo, /* ftm: Redoes the last undone operation. */
-
- MSG_DeleteMessage, /* tm, mm: Causes the given messages to be
- deleted. */
-
- MSG_DeleteFolder, /* fm, tm: Causes the given folders to be
- deleted. */
-
- MSG_CancelMessage, /* tn, mn: Causes the given messages to be
- cancelled, if possible. */
-
- MSG_DeleteMessageNoTrash, /* tm, mm: Causes the given messages to be
- deleted w/o getting copied to trash. */
-
- /* MESSAGE MENU
- ============
- */
- MSG_EditAddressBook, /* f,t,m,c: Bring up the address book. */
- MSG_EditAddress, /* m: Bring up the address book entry for the
- sender of this message. */
- MSG_AddSender, /* t,m: Add the sender of this message.
- to the address book */
- MSG_AddAll, /* t,m: Add all recipients of this message.
- to the address book */
- MSG_PostNew, /* fn,tn: Post a new message to this
- newsgroup. */
- MSG_PostReply, /* tn,mn: Post a followup message to this
- article. */
- MSG_PostAndMailReply, /* tn,mn: Post a followup message to this
- article, mailing a copy to the author. */
- MSG_MailNew, /* f,t,m,c: Create a new mail composition. */
- MSG_ReplyToSender, /* t,m: E-mail a reply to the sender of this
- message. */
- MSG_ReplyToAll, /* t,m: E-mail (& possibly post) a reply to
- everyone who saw this message. */
- MSG_ForwardMessage, /* t,m: Forward these messages to someone. */
- MSG_ForwardMessageQuoted, /* t,m: Forward this message, quoting it
- inline. */
- MSG_MarkMessagesRead, /* t,m: Mark the message as read. */
- MSG_MarkMessagesUnread, /* t,m: Mark the message as unread. */
- MSG_ToggleMessageRead, /* t,m: Toggle whether the message has been
- read. */
- MSG_MarkMessages, /* tn: flag the passed messages,either for
- retrieval or just to mark them */
- MSG_UnmarkMessages, /* tn: unflag passed messages */
- MSG_ToggleThreadKilled, /* t: toggle the killed status of the message's
- thread */
- MSG_ToggleThreadWatched, /* t: toggle the watched status of the message's
- thread */
- MSG_SaveMessagesAs, /* t,m: Prompt the user for a filename, and
- save the given messages into it. */
- MSG_SaveMessagesAsAndDelete, /* t,m: Prompt the user for a filename, and
- save the given messages into it, and then
- delete the messages. */
- MSG_RetrieveMarkedMessages, /* fn, tn Retrieve the messages marked for
- retrieval */
- MSG_RetrieveSelectedMessages, /* fn, tn Retrieve the selected messages for
- offline use. */
- MSG_OpenMessageAsDraft, /* t,m: Open the selected message as a draft
- message. Ready to send or further editing. */
-
- /* GO MENU
- =======
- */
- MSG_MarkThreadRead, /* t,m: Mark all messages in the same thread
- as these as read.*/
- MSG_MarkAllRead, /* t: Mark all messages in this folder as
- read. */
-
-
- /* OPTIONS MENU
- ============
- */
- MSG_ShowAllMessages, /* t: Change the view to show all messages. */
- MSG_ShowOnlyUnreadMessages, /* t: Change the view to show only unread
- messages. */
- MSG_ShowMicroHeaders, /* m: Change to show very compact headers. */
- MSG_ShowSomeHeaders, /* m: Change to show interesting headers. */
- MSG_ShowAllHeaders, /* m: Change to show all headers. */
-
-
- /* COMPOSITION FILE MENU
- =====================
- */
- MSG_SendMessage, /* c: Send the composition. */
- MSG_SendMessageLater, /* c: Queue the composition to be sent
- later. */
- MSG_Attach, /* c: Bring up the attachment dialogs. */
- MSG_SaveDraft, /* c: Save draft */
- MSG_SaveDraftThenClose, /* c: Save draft and then close the compose pane */
- MSG_SaveTemplate, /* c: Save as template */
-
- /* COMPOSITION VIEW MENU
- =====================
- */
- MSG_ShowFrom, /* c: Toggle showing the From header. */
- MSG_ShowReplyTo, /* c: Toggle showing the ReplyTo header. */
- MSG_ShowTo, /* c: Toggle showing the To header. */
- MSG_ShowCC, /* c: Toggle showing the Const Char header. */
- MSG_ShowBCC, /* c: Toggle showing the BCC header. */
- MSG_ShowFCC, /* c: Toggle showing the FCC header. */
- MSG_ShowPostTo, /* c: Toggle showing the PostTo header. */
- MSG_ShowFollowupTo, /* c: Toggle showing the FollowupTo header. */
- MSG_ShowSubject, /* c: Toggle showing the Subject header. */
- MSG_ShowAttachments, /* c: Toggle showing the Attachments header. */
-
- /* COMPOSITION OPTIONS MENU
- ========================
- */
- MSG_SendFormattedText, /* c: Toggle HTML mode. */
- MSG_AttachAsText, /* c: ??? ###tw */
-
- MSG_SendEncrypted,
- MSG_SendSigned,
-
-
- /* SUBSCRIBE PANE
- ==============
- */
- MSG_ToggleSubscribed, /* sub: Changes the subscribed state of the
- given newsgroups. */
- MSG_SetSubscribed, /* sub: Sets the subscribed state of given
- newsgroups / IMAP folders to Subscribed */
- MSG_ClearSubscribed, /* sub: Sets the subscribed state of given
- newsgroups / IMAP folders to Unsubscribed */
- MSG_FetchGroupList, /* sub: Causes us to go to the newsserver and
- re-fetch the entire list of newsgroups. */
- MSG_ExpandAll, /* sub: Expands everything under the given
- lines. */
- MSG_CollapseAll, /* sub: Collapses everything under the given
- lines. */
- MSG_ClearNew, /* sub: Clears the list of new newsgroups. */
- MSG_CheckForNew, /* sub: Checks the server for new
- newsgroups. */
- /* CATEGORY PANE
- =============
- */
- MSG_MarkCategoryRead, /* cat: Mark the passed categories read */
- MSG_MarkCategoryUnRead, /* cat: Mark the passed categories unread */
- MSG_KillCategory /* cat: kill/ignore/unsubscribe the category */
-
- } MSG_CommandType;
-
-
-
-
- /* ===========================================================================
- CONSTANTS AND ENUMS
- ===========================================================================
- */
-
- /* Several things want to know this (including libnet/mknews.c) */
- #define NEWS_PORT 119
- #define SECURE_NEWS_PORT 563
-
-
- #define MSG_MAXSUBJECTLENGTH 160
- #define MSG_MAXAUTHORLENGTH 60
- #define MSG_MAXGROUPNAMELENGTH 128
-
- typedef enum
- {
- MSG_Pop3 = 0,
- MSG_Imap4 = 1,
- MSG_MoveMail = 2,
- MSG_Inbox = 3
- } MSG_SERVER_TYPE;
-
- /* The font type which should be used for presentation of cited text. The
- values are the same numeric values that are stored in the prefs db.
- */
- typedef enum
- {
- MSG_PlainFont = 0,
- MSG_BoldFont = 1,
- MSG_ItalicFont = 2,
- MSG_BoldItalicFont = 3
- } MSG_FONT;
-
- /* The font size which should be used for presentation of cited text.
- */
- typedef enum
- {
- MSG_NormalSize,
- MSG_Bigger,
- MSG_Smaller
- } MSG_CITATION_SIZE;
-
- typedef enum
- {
- MSG_NotUsed,
- MSG_Checked,
- MSG_Unchecked
- } MSG_COMMAND_CHECK_STATE;
-
- /* UndoStatus is returned by Undo and Redo to indicate whether the undo/redo
- action is complete (i.e., operation is synchronous and was successful), or
- in progress (undo action kicked off a url), or it failed.
- */
- typedef enum
- {
- UndoError, /* Should we remove the undo obj (?) Hmmm ...*/
- UndoComplete, /* Synchronous undo status*/
- UndoInProgress, /* Asynchronous undo status*/
- UndoFailed, /* Should we remove the undo obj (?) Hmmm...*/
- UndoInterrupted
- } UndoStatus;
-
- typedef enum
- {
- UndoIdle, /* Normal situation */
- UndoUndoing, /* We are Undoing ...*/
- UndoRedoing /* We are Redoing ...*/
- } UndoMgrState;
-
- /* Message priorities as determined by X-Priority hdr, or Priority header? */
- typedef enum
- {
- MSG_PriorityNotSet = 0,
- MSG_NoPriority = 1,
- MSG_LowestPriority,
- MSG_LowPriority,
- MSG_NormalPriority,
- MSG_HighPriority,
- MSG_HighestPriority
- } MSG_PRIORITY;
-
- /* Message Compose Editor Type */
- typedef enum
- {
- MSG_DEFAULT = 0,
- MSG_PLAINTEXT_EDITOR,
- MSG_HTML_EDITOR
- } MSG_EditorType;
-
- /* What kind of change was made to a list. Used in calls to
- FE_ListChangeStarting and FE_ListChangeFinished. */
-
- typedef enum
- {
- MSG_NotifyNone, /* No change; this call is just being used
- to potentially nest other sets of calls
- inside it. The "where" and "num" parameters
- are unused. */
- MSG_NotifyInsertOrDelete, /* Some lines have been inserted or deleted.
- The "where" parameter will indicate
- the first line that has been added or
- removed; the "num" parameter will indicate
- how many lines, and will be positive on
- an insertion and negative on a deletion. */
- MSG_NotifyChanged, /* Some lines have had their contents changed
- (e.g., messages have been marked read
- or something.) "where" indicates the
- first line with a change; "num" indicates
- how many chaged. */
- MSG_NotifyScramble, /* Everything changed. Probably means we
- resorted the folder. We are still working
- with the same set of items, or at least
- have some overlap, but all the indices are
- invalid. The "where" and "num" parameters
- are unused. */
- MSG_NotifyAll /* Everything changed. We're now not
- displaying anything like what we were; we
- probably opened a new folder or something.
- The FE needs to forget anything it ever knew
- about what was being displayed, and start
- over. The "where" and "num" parameters are
- unused. */
- } MSG_NOTIFY_CODE;
-
- /* How has a pane changed? Used in calls to FE_PaneChanged. If the
- value passed to FE_PaneChanged becomes meaningful, it should
- be documented here.
- */
- typedef enum
- {
- MSG_PaneDirectoriesChanged, /* The list of directories has changed. The
- user has edited them by either reordering
- or deleting or changing the name. The
- address book window will need to rebuild
- its directory list. */
- MSG_PaneNotifyMessageLoaded, /* a new message has started to be loaded
- into a message pane. */
- MSG_PaneNotifyFolderInfoChanged, /* the folder info for a thread pane has
- changed. */
- MSG_PaneNotifyFolderLoaded, /* a folder has finished loading into a
- thread pane */
- MSG_PaneNotifyFolderLoadedSync, /* a folder has finished loading synchronously
- into athread pane */
- MSG_PaneNotifyLastMessageDeleted,/* User has deleted the last message in
- a folder. Some FE's may want to close
- the message window. */
- MSG_PaneNotifyFolderDeleted, /* User has deleted a folder. If it is
- open in a thread window, the FE
- should close the window */
- MSG_PaneNotifyMessageDeleted, /* User has deleted a message. If it is
- open in a standalone msg window, the
- FE should close the window */
- MSG_PanePastPasswordCheck, /* Get New mail is past password check. Might
- be a good time to show progress window. */
- MSG_PaneProgressDone, /* Send this when you are a libmsg API that
- usually runs a url in a progress pane but
- you don't start a url. FE's, do something
- reasonable (like take down progress pane)*/
- MSG_PaneNotifySelectNewFolder, /* Sent when a new folder is created, and is
- supposed to be selected by the FE */
-
- MSG_PaneNotifyNewFolderFailed, /* Sent when a new folder creation attempt
- fails */
- MSG_PaneNotifyIMAPClosed, /* Sent to a folder or message pane when
- the IMAP connection with which it is
- associated is closing. */
- MSG_PaneNotifyCopyFinished, /* Tell the FE that a message copy operation
- has completed. They may have disabled
- selection in order to prevent interruption */
- MSG_PaneChanged, /* Introduced for the 2 pane Address Book. Contents have changed through
- another pane. This pane's data is no longer up to date */
- MSG_PaneClose /* Introduced for the 2 pane AB. This pane needs to be closed */
- } MSG_PANE_CHANGED_NOTIFY_CODE;
-
-
-
-
-
- /* ===========================================================================
- FLAGS AND MASKS
- ===========================================================================
- */
-
- /* Flags about a single message. These values are used in the MSG_MessageLine
- struct and in a folder's mozilla-status line. The summary file database
- uses a different internal set of flags.
- */
-
- #define MSG_FLAG_READ 0x0001 /* has been read */
- #define MSG_FLAG_REPLIED 0x0002 /* a reply has been successfully sent */
- #define MSG_FLAG_MARKED 0x0004 /* the user-provided mark */
- #define MSG_FLAG_EXPUNGED 0x0008 /* already gone (when folder not
- compacted.) Since actually
- removing a message from a
- folder is a semi-expensive
- operation, we tend to delay it;
- messages with this bit set will
- be removed the next time folder
- compaction is done. Once this
- bit is set, it never gets
- un-set. */
- #define MSG_FLAG_HAS_RE 0x0010 /* whether subject has "Re:" on
- the front. The folder summary
- uniquifies all of the strings
- in it, and to help this, any
- string which begins with "Re:"
- has that stripped first. This
- bit is then set, so that when
- presenting the message, we know
- to put it back (since the "Re:"
- is not itself stored in the
- file.) */
- #define MSG_FLAG_ELIDED 0x0020 /* Whether the children of this
- sub-thread are folded in the
- display. */
- #define MSG_FLAG_EXPIRED 0x0040 /* If this flag is set, then this
- is not a "real" message, but is
- a dummy container representing
- an expired parent in a thread. */
- #define MSG_FLAG_OFFLINE 0x0080 /* db has offline news or imap article
- */
- #define MSG_FLAG_WATCHED 0x0100 /* If set, then this thread is watched (in
- 3.0, this was MSG_FLAG_UPDATING).*/
- #define MSG_FLAG_SENDER_AUTHED 0x0200 /* If set, then this message's sender
- has been authenticated when sending this msg. */
- #define MSG_FLAG_PARTIAL 0x0400 /* If set, then this message's body is
- only the first ten lines or so of the
- message, and we need to add a link to
- let the user download the rest of it
- from the POP server. */
- #define MSG_FLAG_QUEUED 0x0800 /* If set, this message is queued for
- delivery. This only ever gets set on
- messages in the queue folder, but is
- used to protect against the case of
- other messages having made their way
- in there somehow -- if some other
- program put a message in the queue, we
- don't want to later deliver it! */
- #define MSG_FLAG_FORWARDED 0x1000 /* this message has been forwarded */
- #define MSG_FLAG_PRIORITIES 0xE000 /* These are used to remember the message
- priority in the mozilla status flags
- so we can regenerate a priority after a
- rule (or user) has changed it. They are
- not returned in MSG_MessageLine.flags,
- just in mozilla-status, so if you need
- more non-persistent flags, you could
- share these bits. But it would be wrong.
- . */
-
- #define MSG_FLAG_NEW 0x10000 /* This msg is new since the last time
- the folder was closed.
- */
- #define MSG_FLAG_IGNORED 0x40000 /* the thread is ignored */
-
-
- #define MSG_FLAG_IMAP_DELETED 0x200000 /* message is marked deleted on the server */
-
- #define MSG_FLAG_MDN_REPORT_NEEDED 0x400000 /* This msg required to send an MDN
- * to the sender of the message
- */
- #define MSG_FLAG_MDN_REPORT_SENT 0x800000 /* An MDN report message has been
- * sent for this message. No more
- * MDN report should be sent to the
- * sender
- */
- #define MSG_FLAG_TEMPLATE 0x1000000 /* this message is a template */
- #define MSG_FLAG_ATTACHMENT 0x10000000 /* this message has files attached to it */
-
- /* Flags about a folder or a newsgroup. Used in the MSG_FolderLine struct;
- also used internally in libmsg (the `flags' slot in MSG_Folder). Note that
- these don't have anything to do with the above MSG_FLAG flags; they belong
- to different objects entirely. */
-
- /* These flags say what kind of folder this is:
- mail or news, directory or leaf.
- */
- #define MSG_FOLDER_FLAG_NEWSGROUP 0x0001 /* The type of this folder. */
- #define MSG_FOLDER_FLAG_NEWS_HOST 0x0002 /* Exactly one of these three */
- #define MSG_FOLDER_FLAG_MAIL 0x0004 /* flags will be set. */
-
- #define MSG_FOLDER_FLAG_DIRECTORY 0x0008 /* Whether this is a directory:
- NEWS_HOSTs are always
- directories; NEWS_GROUPs can be
- directories if we are in ``show
- all groups'' mode; MAIL folders
- will have this bit if they are
- really directories, not files.
- (Note that directories may have
- zero children.) */
-
- #define MSG_FOLDER_FLAG_ELIDED 0x0010 /* Whether the children of this
- folder are currently hidden in
- the listing. This will only
- be present if the DIRECTORY
- bit is on. */
-
- /* These flags only occur in folders which have
- the MSG_FOLDER_FLAG_NEWSGROUP bit set, and do
- not have the MSG_FOLDER_FLAG_DIRECTORY or
- MSG_FOLDER_FLAG_ELIDED bits set.
- */
-
- #define MSG_FOLDER_FLAG_MODERATED 0x0020 /* Whether this folder represents
- a moderated newsgroup. */
- #define MSG_FOLDER_FLAG_SUBSCRIBED 0x0040 /* Whether this folder represents
- a subscribed newsgroup. */
- #define MSG_FOLDER_FLAG_NEW_GROUP 0x0080 /* A newsgroup which has just
- been added by the `Check
- New Groups' command. */
-
-
- /* These flags only occur in folders which have
- the MSG_FOLDER_FLAG_MAIL bit set, and do
- not have the MSG_FOLDER_FLAG_DIRECTORY or
- MSG_FOLDER_FLAG_ELIDED bits set.
-
- The numeric order of these flags is important;
- folders with these flags on get displayed first,
- in reverse numeric order, before folders that have
- none of these flags on. (Note that if a folder is,
- say, *both* inbox and sentmail, then its numeric value
- will be even bigger, and so will bubble up to where the
- inbox generally is. What a hack!)
- */
-
- #define MSG_FOLDER_FLAG_TRASH 0x0100 /* Whether this is the trash
- folder. */
- #define MSG_FOLDER_FLAG_SENTMAIL 0x0200 /* Whether this is a folder that
- sent mail gets delivered to.
- This particular magic flag is
- used only during sorting of
- folders; we generally don't care
- otherwise. */
- #define MSG_FOLDER_FLAG_DRAFTS 0x0400 /* Whether this is the folder in
- which unfinised, unsent messages
- are saved for later editing. */
- #define MSG_FOLDER_FLAG_QUEUE 0x0800 /* Whether this is the folder in
- which messages are queued for
- later delivery. */
- #define MSG_FOLDER_FLAG_INBOX 0x1000 /* Whether this is the primary
- inbox folder. */
- #define MSG_FOLDER_FLAG_IMAPBOX 0x2000 /* Whether this folder on online
- IMAP */
-
- #define MSG_FOLDER_FLAG_CAT_CONTAINER 0x4000 /* This group contains categories */
-
- #define MSG_FOLDER_FLAG_PROFILE_GROUP 0x8000 /* This is a virtual newsgroup */
-
- #define MSG_FOLDER_FLAG_CATEGORY 0x10000 /* this is a category */
-
- #define MSG_FOLDER_FLAG_GOT_NEW 0x20000 /* folder got new msgs */
-
- #define MSG_FOLDER_FLAG_IMAP_SERVER 0x40000 /* folder is an IMAP server */
-
- #define MSG_FOLDER_FLAG_IMAP_PERSONAL 0x80000 /* folder is an IMAP personal folder */
-
- #define MSG_FOLDER_FLAG_IMAP_PUBLIC 0x100000 /* folder is an IMAP public folder */
-
- #define MSG_FOLDER_FLAG_IMAP_OTHER_USER 0x200000 /* folder is another user's IMAP folder */
- /* Think of it like a folder that someone would share. */
- #define MSG_FOLDER_FLAG_TEMPLATES 0x400000 /* Whether this is the template folder */
-
- #define MSG_FOLDER_FLAG_PERSONAL_SHARED 0x800000 /* This folder is one of your personal folders that
- ` is shared with other users */
-
- /* Flags in the subscribe pane (used inside of MSG_GroupNameLine). Where
- the flags overlap with the MSG_FOLDER_FLAG_* flags, it has the same value,
- to reduce the chance of someone using the wrong constant. */
-
- #define MSG_GROUPNAME_FLAG_ELIDED 0x0010 /* Whether the children of this
- group are currently hidden
- in the listing. This will
- only be present if it has
- any children. */
-
- #define MSG_GROUPNAME_FLAG_MODERATED 0x0020 /* Whether this folder
- represents a moderated
- newsgroup. */
- #define MSG_GROUPNAME_FLAG_SUBSCRIBED 0x0040 /* Whether this folder
- represents a subscribed
- newsgroup. */
- #define MSG_GROUPNAME_FLAG_NEW_GROUP 0x0080 /* A newsgroup which has just
- been added by the `Check
- New Groups' command. */
- #define MSG_GROUPNAME_FLAG_HASCHILDREN 0x40000 /* Whether there are children
- of this group. Whether those
- chilren are visible in this
- list is determined by the
- above "ELIDED" flag.
- Setting this to the same value
- as a MSG_FOLDER_FLAG_* IMAP server,
- since an IMAP _server_ will never
- appear in the subscribe pane. */
- #define MSG_GROUPNAME_FLAG_IMAP_PERSONAL 0x80000 /* folder is an IMAP personal folder */
-
- #define MSG_GROUPNAME_FLAG_IMAP_PUBLIC 0x100000 /* folder is an IMAP public folder */
-
- #define MSG_GROUPNAME_FLAG_IMAP_OTHER_USER 0x200000 /* folder is another user's IMAP folder */
-
- #define MSG_GROUPNAME_FLAG_IMAP_NOSELECT 0x400000 /* A \NoSelect IMAP folder */
-
- #define MSG_GROUPNAME_FLAG_PERSONAL_SHARED 0x800000 /* whether or not this folder is one of your personal folders that
- ` is shared with other users */
-
-
- /* This set enumerates the header fields which may be displayed in the
- message composition window.
- */
- typedef uint32 MSG_HEADER_SET;
- #define MSG_FROM_HEADER_MASK 0x00000001
- #define MSG_REPLY_TO_HEADER_MASK 0x00000002
- #define MSG_TO_HEADER_MASK 0x00000004
- #define MSG_CC_HEADER_MASK 0x00000008
- #define MSG_BCC_HEADER_MASK 0x00000010
- #define MSG_FCC_HEADER_MASK 0x00000020
- #define MSG_NEWSGROUPS_HEADER_MASK 0x00000040
- #define MSG_FOLLOWUP_TO_HEADER_MASK 0x00000080
- #define MSG_SUBJECT_HEADER_MASK 0x00000100
- #define MSG_ATTACHMENTS_HEADER_MASK 0x00000200
-
- /* These next four are typically not ever displayed in the UI, but are still
- stored and used internally. */
- #define MSG_ORGANIZATION_HEADER_MASK 0x00000400
- #define MSG_REFERENCES_HEADER_MASK 0x00000800
- #define MSG_OTHERRANDOMHEADERS_HEADER_MASK 0x00001000
- #define MSG_NEWSPOSTURL_HEADER_MASK 0x00002000
-
- #define MSG_PRIORITY_HEADER_MASK 0x00004000
- #define MSG_NEWS_FCC_HEADER_MASK 0x00008000
- #define MSG_MESSAGE_ENCODING_HEADER_MASK 0x00010000
- #define MSG_CHARACTER_SET_HEADER_MASK 0x00020000
- #define MSG_MESSAGE_ID_HEADER_MASK 0x00040000
- #define MSG_NEWS_BCC_HEADER_MASK 0x00080000
-
- /* This is also not exposed to the UI; it's used internally to help remember
- whether the original message had an HTML portion that we can quote. */
- #define MSG_HTML_PART_HEADER_MASK 0x00100000
-
- /* The "body=" pseudo-header (as in "mailto:me?body=hi+there") */
- #define MSG_DEFAULTBODY_HEADER_MASK 0x00200000
-
- #define MSG_X_TEMPLATE_HEADER_MASK 0x00400000
-
- /* IMAP folders for posting */
- #define MSG_IMAP_FOLDER_HEADER_MASK 0x02000000
-
- typedef enum {
- MSG_RETURN_RECEIPT_BOOL_HEADER_MASK = 0,
- MSG_ENCRYPTED_BOOL_HEADER_MASK,
- MSG_SIGNED_BOOL_HEADER_MASK,
- MSG_UUENCODE_BINARY_BOOL_HEADER_MASK,
- MSG_ATTACH_VCARD_BOOL_HEADER_MASK,
- MSG_LAST_BOOL_HEADER_MASK /* last boolean header mask; must be the last one
- * DON'T remove.
- */
- } MSG_BOOL_HEADER_SET;
-
-
-
-
- /* ===========================================================================
- TYPES AND STRUCTS
- ===========================================================================
- */
-
-
- /*
- These can be passed to MSG_Navigate and MSG_NavigateStatus
- */
- typedef enum MSG_MotionType {
- MSG_FirstMessage,
- MSG_NextMessage,
- MSG_PreviousMessage,
- MSG_LastMessage,
- MSG_FirstUnreadMessage,
- MSG_NextUnreadMessage,
- MSG_PreviousUnreadMessage,
- MSG_LastUnreadMessage,
- MSG_NextUnreadThread,
- MSG_NextCategory,
- MSG_NextUnreadCategory,
- MSG_NextUnreadGroup,
- MSG_NextFolder,
- MSG_ReadMore,
- MSG_LaterMessage,
- MSG_Back, /* t,m: Go back to theprevious visited message */
- MSG_Forward, /* t,m: Go forward to the previous visited message. */
- MSG_FirstFlagged,
- MSG_NextFlagged,
- MSG_PreviousFlagged,
- MSG_FirstNew,
- MSG_EditUndo,
- MSG_EditRedo
- } MSG_MotionType;
-
-
- /* The different views a subscribepane supports. */
- typedef enum MSG_SubscribeMode {
- MSG_SubscribeAll,
- MSG_SubscribeSearch,
- MSG_SubscribeNew
- } MSG_SubscribeMode;
-
-
- /* Backtrack state */
- typedef enum MSG_BacktrackState {
- MSG_BacktrackIdle,
- MSG_BacktrackBackward,
- MSG_BacktrackForward
- } MSG_BacktrackState;
-
-
- /* INSTANCES of MSG_Prefs are used to communicate to the msglib what the values
- of various preferences are. It's really a temporary hack; I hope a more
- general XP method of preferences evolves instead. */
-
- #ifdef XP_CPLUSPLUS
- class MSG_Prefs;
- #else
- typedef struct MSG_Prefs MSG_Prefs;
- #endif
-
-
- /* Instances of MSG_Master represent the entire universe of either mail or
- news. */
-
- #ifdef XP_CPLUSPLUS
- class MSG_Master;
- #else
- typedef struct MSG_Master MSG_Master;
- #endif
-
-
-
-
- /* The various types of panes available. */
-
- typedef enum {
- MSG_ANYPANE,
- MSG_PANE, /* vanilla MSG_Pane, probably just a placeholder
- for MSG_ProgressPane */
-
- MSG_MAILINGLISTPANE,
- MSG_ADDRPANE,
- MSG_FOLDERPANE,
- MSG_THREADPANE,
- MSG_MESSAGEPANE,
- MSG_COMPOSITIONPANE,
- MSG_SEARCHPANE,
- MSG_SUBSCRIBEPANE,
- AB_CONTAINERPANE,
- AB_ABPANE,
- AB_MAILINGLISTPANE,
- AB_PERSONENTRYPANE
- } MSG_PaneType;
-
-
-
-
- /* MSG_ViewIndex is an index into the list of messages or folders or groups,
- where zero is the first one to show, one is the second, etc... */
- typedef uint32 MSG_ViewIndex;
- typedef MSG_ViewIndex MsgViewIndex;
-
- /* MSG_VIEWINDEXNONE is used to indicate an invalid or non-existent index. */
- #ifdef XP_CPLUSPLUS
- const MSG_ViewIndex MSG_VIEWINDEXNONE = 0xffffffff;
- #else
- #define MSG_VIEWINDEXNONE 0xffffffff
- #endif
-
- /* imap message flags */
- typedef uint16 imapMessageFlagsType;
-
-
- /* MessageKey is a unique ID for a particular message in a folder. If you want
- a handle to a message that will remain valid even after resorting the folder
- or otherwise changing their indices, you want one of these rather than a
- MSG_ViewIndex. */
- typedef uint32 MessageKey;
- /* in the process of removing because of confusion with message-id string */
- typedef uint32 MessageId;
-
- /* MSG_MESSAGEKEYNONE is used to indicate an invalid or non-existant message. */
- #ifdef XP_CPLUSPLUS
- const MessageId MSG_MESSAGEIDNONE = 0xffffffff;
- const MessageKey MSG_MESSAGEKEYNONE = 0xffffffff;
- #else
- #define MSG_MESSAGEIDNONE 0xffffffff
- #define MSG_MESSAGEKEYNONE 0xffffffff
- #endif
-
-
- /* Similarly, MSG_FolderInfo* is a unique ID for a particular folder. */
-
- #ifdef XP_CPLUSPLUS
- class MSG_FolderInfo;
- #else
- typedef struct MSG_FolderInfo *MSG_FolderInfo;
- #endif
-
-
- /* And MSG_GroupName is a unique ID for a group name in the subscribe pane. */
-
- #ifdef XP_CPLUSPLUS
- class MSG_GroupName;
- #else
- typedef struct MSG_GroupName *MSG_GroupName;
- #endif
-
-
- /* MSG_NewsHost represents a newsserver that we know about. */
-
- #ifdef XP_CPLUSPLUS
- class MSG_NewsHost;
- #else
- typedef struct MSG_NewsHost *MSG_NewsHost;
- #endif
-
-
- /* MSG_IMAPHost represents an imap server that we know about. */
-
- #ifdef XP_CPLUSPLUS
- class MSG_IMAPHost;
- #else
- typedef struct MSG_IMAPHost *MSG_IMAPHost;
- #endif
-
-
- /* MSG_Host represents a news or imap server that we know about. */
-
- /* SUBSCRIBE_USE_OLD_API: REVISIT */
- #ifdef XP_CPLUSPLUS
- class MSG_Host;
- #else
- typedef struct MSG_Host *MSG_Host;
- #endif /* XP_CPLUSPLUS */
-
-
- /* used in MWContext to communicate IMAP stuff between libmsg and libnet */
-
- #ifdef XP_CPLUSPLUS
- class MSG_IMAPFolderInfoMail;
- class TImapServerState;
- class TNavigatorImapConnection;
- #else
- typedef struct MSG_IMAPFolderInfoMail *MSG_IMAPFolderInfoMail;
- typedef struct TImapServerState *TImapServerState;
- typedef struct TNavigatorImapConnection TNavigatorImapConnection;
- #endif
-
- struct MSG_AttachmentData
- {
- char *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.
- */
- };
-
-
- /* This structure is the interface between compose.c and composew.c.
- 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.
- */
- /* Used by libmime -- mimedrft.c
- * Front end shouldn't use this structure.
- */
- typedef struct MSG_AttachedFile
- {
- char *orig_url; /* Where it came from on the network (or even elsewhere
- on the local disk.)
- */
- char *file_name; /* 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.
- */
-
- /* #### I'm not entirely sure where this data is going to come from...
- */
- char *description; /* For Content-Description header */
- char *x_mac_type, *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.)
- */
- uint32 size;
- uint32 unprintable_count;
- uint32 highbit_count;
- uint32 ctl_count;
- uint32 null_count;
- uint32 max_line_length;
-
- XP_Bool decrypted_p; /* S/MIME -- when attaching a message that was
- encrypted, it's necessary to decrypt it first
- (since nobody but the original recipient can read
- it -- if you forward it to someone in the raw, it
- will be useless to them.) This flag indicates
- whether decryption occurred, so that libmsg can
- issue appropriate warnings about doing a cleartext
- forward of a message that was originally encrypted.
- */
- } MSG_AttachedFile;
-
-
-
- /* This structure represents a single line in the folder pane.
- */
- typedef struct MSG_FolderLine
- {
- MSG_FolderInfo* id;
- const char* name; /* The name of the folder to display. */
- const char* prettyName; /* The pretty name to display */
- uint8 level; /* How many parent folders we have. */
- uint32 flags;
- uint32 prefFlags;
-
- /* The below are used only if the icon type is MSG_NewsgroupIcon or
- MSG_FolderIcon. */
- int32 unseen; /* Number of unseen articles. (If negative,
- then we don't know yet; display question
- marks or something.*/
- int32 total; /* Total number of articles. */
- uint16 numChildren; /* How many immediate children of this folder
- exist. */
- int32 deepUnseen; /* Totals for this and child folders */
- int32 deepTotal;
- int32 deletedBytes; /* mail only - total size of deleted messages */
- } MSG_FolderLine;
-
-
- /* This structure represents a single line in the thread pane.
- */
- typedef struct MSG_MessageLine
- {
- MessageKey threadId; /* (article # of thread - article could be
- expired) */
- MessageKey messageKey; /* news: article num, mail: mbox offset */
- char subject[MSG_MAXSUBJECTLENGTH];
- char author[MSG_MAXAUTHORLENGTH];
- time_t date;
-
- uint32 messageLines; /* Number of lines in this message. */
- uint32 flags;
- MSG_PRIORITY priority; /* message priority (mail only?) */
- uint16 numChildren; /* for top-level threads */
- uint16 numNewChildren; /* for top-level threads */
- int8 level; /* indentation level */
- } MSG_MessageLine;
-
- /* This structure represents a single line in the subscribe pane.
- */
-
- typedef struct MSG_GroupNameLine
- {
- char name[MSG_MAXGROUPNAMELENGTH];
- int8 level;
- uint32 flags;
- int32 total;
- } MSG_GroupNameLine;
-
- /* This structure is used as an annotation about the font and size information
- included in a text string passed to us by the front end after the user has
- edited their message.
- */
- typedef struct MSG_FontCode
- {
- uint32 pos;
- uint32 length;
- MSG_FONT font;
- uint8 font_size;
- XP_Bool fixed_width_p;
- } MSG_FontCode;
-
-
-
- /* MSG_CompositionFields represents the desired initial state of the various
- fields in a composition. */
-
-
- #ifdef XP_CPLUSPLUS
- class MSG_CompositionFields;
- #else
- typedef struct MSG_CompositionFields MSG_CompositionFields;
- #endif
-
-
- /* MSG_HTMLComposeAction lists what action to take with a message composed
- with HTML. */
-
- typedef enum {
- MSG_HTMLAskUser,
- MSG_HTMLUseMultipartAlternative,
- MSG_HTMLConvertToPlaintext,
- MSG_HTMLSendAsHTML
- } MSG_HTMLComposeAction;
-
- /* MSG_RecipientList specifies a list of recipients to be displayed in the
- recipients dialog box. It is terminated by an entry which has name set to
- NULL and value set to something negative. */
- typedef struct {
- int32 value;
- const char* name;
- } MSG_RecipientList;
-
-
-
-
- /* Secure mail related
- */
- typedef enum {
- certNone,
- certValid,
- certExpired,
- certRevoked
- } MSG_CertStatus;
-
- typedef struct {
- char *PrettyName;
- char *EmailAddress;
- MSG_CertStatus CertStatus;
- } MSG_CertInfo;
-
- typedef enum
- {
- msgNoRecipients = 0,
- msgNoCerts = 1,
- msgHasCerts = 2,
- msgSomeCerts = 4
- } MSG_SecurityLevel;
-
- typedef enum
- {
- crypto_RC4_40bit,
- crypto_RC4_128bit
- } MSG_CryptoGrade;
-
-
- typedef struct {
- /* DoFetchGroups() requests the front end do a
- MSG_Command(MSG_FetchGroupList) on the subscribe pane, also doing
- whatever side effects the front end usually does on such a request. */
- void (*DoFetchGroups)(MSG_Pane* pane, void* closure);
-
- /* FetchCompleted() tells the FE that a MSG_FetchGroupList or
- MSG_CheckForNew command has completed. */
- void (*FetchCompleted)(MSG_Pane* pane, void* closure);
- } MSG_SubscribeCallbacks;
-
-
- typedef struct {
- /* AttachmentCount() tells the FE the number of attachments currently
- known for the message being displayed in the given messagepane.
- finishedloading is TRUE iff we have finished loading the message.
- If finishedloading is FALSE, then the FE must be prepared to have this
- callback fire again soon, as more attachments may be found as
- downloading proceeds. */
- void (*AttachmentCount)(MSG_Pane* messagepane, void* closure,
- int32 numattachments, XP_Bool finishedloading);
-
-
- /* UserWantsToSeeAttachments() gets called when the user clicks on the
- little "show me attachment info" at the top of a mail message. */
- void (*UserWantsToSeeAttachments)(MSG_Pane* messagepane, void* closure);
- } MSG_MessagePaneCallbacks;
-
-
- typedef struct {
- /* CreateAskHTMLDialog() tells the FE to bring up the dialog that lets the
- user choose the disposition of this HTML composition. If the user
- chooses a format for HTML and clicks "Send", then the FE must call
- MSG_SetHTMLAction() and return 0. If the FE returns > 0, then
- the message send is cancelled. If the user presses the "Recipients"
- button, then the the FE must call MSG_PutUpRecipientsDialog(). If the
- FE does not provide this CreateAskHTMLDialog() callback, or if this
- routine returns a negative number, then the back end will implement
- it using HTML dialogs. */
- int (*CreateAskHTMLDialog)(MSG_Pane* composepane, void* closure);
-
-
- /* CreateRecipientsDialog() tells the FE to bring up the dialog that lets
- the user choose whether the recipients of a message can deal with HTML.
- The FE must notify the back end of the results by calling
- MSG_ResultsRecipients(). If the FE does not provide this callback, or
- if this routine returns a negative number, then the back end will
- implement it using HTML dialogs.
-
- The last two arguments specify the initial contents of the two scrolling
- lists. The given strings are to be displayed; the given ID's are to be
- used in the call to MSG_ResultsRecipients(). (These ID's are also to be
- used as a sort key so that the recipient list is always displayed sorted
- in the right order.) These structures are only valid for the length of
- this call; the FE must copy any data it needs out of them before the
- call returns. The void* pWnd parameter is used to pass the in parent window
- of the RecipientsDialog.*/
- int (*CreateRecipientsDialog)(MSG_Pane* composepane, void* closure,
- MSG_RecipientList* nohtml,
- MSG_RecipientList* htmlok,void* pWnd);
-
-
- } MSG_CompositionPaneCallbacks;
-
-
-
-
-
- /* ===========================================================================
- INIT / CREATE
- ===========================================================================
- */
-
-
- XP_BEGIN_PROTOS
-
- void MSG_InitMsgLib(void); /* one-time initialization of libmsg */
- void MSG_ShutdownMsgLib(void); /* shut down LibMsg part of app. */
-
- /* launch a url to compress mail folders and purge news dbs. */
- XP_Bool MSG_CleanupNeeded(MSG_Master *master);
- void MSG_CleanupFolders(MSG_Pane *pane);
-
- /* currently just to give db time to clean up */
- void MSG_OnIdle(void);
-
-
- int32 MSG_SetLibNeoCacheSize(int32 newCacheSize);
-
- /* Initialize the mail/news universe. A MSG_Master* object must be created
- before anything else can be done. Only one MSG_Master* object can exist at
- any time. */
-
- extern MSG_Master* MSG_InitializeMail(MSG_Prefs* prefs);
-
- /* Routines to create the various panes. Those panes that require a true
- MWContext* take it as a parameter. Any given thread pane is always
- associated with a particular folder pane; any given message pane is always
- associated with a particular thread pane.
-
- The entire creation process goes like this:
-
- - The FE decides to create a new pane.
-
- - The FE creates any necessary contexts and maybe some windows and stuff
- that it will associate with the pane.
-
- - The FE calls MSG_Create*Pane() to create the pane object itself. When
- creating a folderpane, the FE must also provide a pointer to a MSG_Prefs
- object that contains the preferences to be used for the folderpane. The FE
- must be sure not to destroy that MSG_Prefs object as long as the folderpane
- exists. Any later change made to the MSG_Prefs will automatically be
- reflected in the folderpane and all related panes. (Also note that when
- creating a folderpane, msglib uses the context type to determine whether
- this is for mail or news.)
-
- - The FE puts the resulting pane structure into its datastructures
- somewhere, and probably calls MSG_SetFEData() to assocatiate that
- datastructure with the pane.
-
- */
-
- extern MSG_Pane* MSG_CreateFolderPane(MWContext* context,
- MSG_Master* master);
-
-
- extern MSG_Pane* MSG_CreateThreadPane(MWContext* context,
- MSG_Master* master);
-
- extern MSG_Pane* MSG_CreateMessagePane(MWContext* context,
- MSG_Master* master);
-
- extern int MSG_SetMessagePaneCallbacks(MSG_Pane* messagepane,
- MSG_MessagePaneCallbacks* callbacks,
- void* closure);
-
- extern MSG_MessagePaneCallbacks*
- MSG_GetMessagePaneCallbacks(MSG_Pane* messagepane, void** closure);
-
-
- extern MSG_Pane* MSG_CreateCompositionPane(MWContext* context,
- MWContext* old_context,
- MSG_Prefs* prefs,
- MSG_CompositionFields* fields,
- MSG_Master* master);
-
- extern int
- MSG_SetCompositionPaneCallbacks(MSG_Pane* composepane,
- MSG_CompositionPaneCallbacks* callbacks,
- void* closure);
-
- /* Typically, progress panes come down when you receive all connections complete,
- or you get a FE_PaneChanged MSG_PaneProgressDone, which gets sent when a
- command runs in a progress pane which doesn't launch a url.
- */
- extern MSG_Pane* MSG_CreateProgressPane (MWContext *context,
- MSG_Master *master,
- MSG_Pane *parentPane);
-
- /* WinFE (at least) has found that creating the composition pane in one swell
- foop is too much to handle. They really want to create the pane pointer,
- but not start its initializing until some later point. (The reason this is
- nasty is that composition pane initialization can sometimes happen in the
- background as we download attachments.) So, if you don't want to call
- MSG_CreateCompositionPane(), you can instead call
- MSG_CreateCompositionPaneNoInit() and then soon call
- MSG_InitializeCompositionPane(). What fun. */
-
- extern MSG_Pane* MSG_CreateCompositionPaneNoInit(MWContext* context,
- MSG_Prefs* prefs,
- MSG_Master* master);
-
- extern int MSG_InitializeCompositionPane(MSG_Pane* comppane,
- MWContext* old_context,
- MSG_CompositionFields* fields);
-
-
-
-
- extern MSG_Pane* MSG_CreateSearchPane (MWContext *context,
- MSG_Master *master);
-
- #ifdef SUBSCRIBE_USE_OLD_API
- /* This routine is obsoleted; instead, use MSG_CreateSubscribePaneOnHost(). */
- extern MSG_Pane* MSG_CreateSubscribePane(MWContext* context,
- MSG_Master* master);
-
- /* Bring up the subscribe UI on the given newshost. If host is NULL,
- uses the default newshost. */
- extern MSG_Pane* MSG_CreateSubscribePaneOnHost(MWContext* context,
- MSG_Master* master,
- MSG_NewsHost* host);
- #endif /* SUBSCRIBE_USE_OLD_API */
-
- /* Bring up the subscribe UI on the given news or imap host.
- If host is NULL, uses the default newshost. */
- extern MSG_Pane* MSG_CreateSubscribePaneForHost(MWContext* context,
- MSG_Master* master,
- MSG_Host* host);
-
-
- /* Tells the FEs to bring up the subscribe UI on the given news
- or imap host. */
- extern XP_Bool FE_CreateSubscribePaneOnHost(MSG_Master* master,
- MWContext* parentContext,
- MSG_Host* host);
-
- /* Message compositions sometimes (usually) get kicked off by the backend
- (like, the user clicks on a "mailto" link). So, this call requests the FE
- to create a new context, and call MSG_CreateCompositionPane and bring up a
- composition window. The given context and MSG_CompositionFields* are to be
- passed on to MSG_CreateCompositionPane(), and lets the backend know what the
- initial values of all the fields are to be. The FE should then query the
- pane (using MSG_GetCompHeader() and MSG_GetCompBody()) so that it can find
- out what to display in the UI.
-
- The FE should bring up either the plaintext composition or the html
- composition window, depending on the user's preference. One exception,
- though: the FE must first check MSG_GetForcePlainText(). If TRUE, then
- we are replying to a plaintext message, and the FE *must* bring up the
- plaintext composition window.
-
- */
-
-
- extern MSG_Pane* FE_CreateCompositionPane(MWContext* old_context,
- MSG_CompositionFields* fields,
- const char* initialText,
- MSG_EditorType editorType);
-
-
-
-
- /* ===========================================================================
- RANDOM CORE FUNCTIONS (to sort)
- ===========================================================================
- */
-
-
- /* Due to addition of Java/JavaScript MailNews API, other things in addition
- to composition can be kicked off by the backend, so we provide the
- following FE functions to handle those cases.
- */
-
- /* Ask the FE for the current master. FE should create one if it doesn't exist */
- extern MSG_Master* FE_GetMaster();
-
- /* Routines to associate or get arbitrary FE-specific data from a pane. */
-
- extern void MSG_SetFEData(MSG_Pane* pane, void* data);
- extern void* MSG_GetFEData(MSG_Pane* pane);
-
- /* Routines to to special things when Netscape mail is not being used */
-
- extern XP_Bool FE_IsAltMailUsed(MWContext * context);
-
- /* Routine to bring up the IMAP Subscription Upgrade dialog box */
- /* Return value based on selection: Automatic = 0, Custom = 1 */
-
- extern int FE_PromptIMAPSubscriptionUpgrade (MWContext * context);
-
-
- /* This function is called by the backend to notify the frontend details about
- new mail state so that the FE can notify the stand-alone biff that something
- has changed.
- */
-
- #ifdef XP_WIN32 /* only supported on Win32 now */
- typedef enum {
- MSG_IMAPHighWaterMark, /* data is the IMAP UID highwater mark for the inbox */
- } MSG_BiffInfoType;
-
- #define FE_SetBiffInfoDefined /* this symbol used in the back-end to
- know if FE_SetBiffInfo is defined */
- extern uint32 FE_SetBiffInfo(MSG_BiffInfoType type, uint32 data);
- #endif
-
- /* run the url in the given pane. This will set the msg_pane member
- in url, interrupt the context, and then call FE_GetURL */
- extern int MSG_GetURL(MSG_Pane *pane, URL_Struct* url);
-
- /* routines to set and get the text type, setting true indicates that the
- text is HTML */
-
- extern XP_Bool MSG_GetHTMLMarkup(MSG_Pane * composepane);
- extern void MSG_SetHTMLMarkup(MSG_Pane * composepane,XP_Bool flag);
-
- /* Returns the type of the given pane. */
-
- extern MSG_PaneType MSG_GetPaneType(MSG_Pane* pane);
-
-
- /* Finds a pane with the given type. First, it looks for a pane which has the
- given context associated with it; failing that, it returns any pane it can
- find.
- */
- extern MSG_Pane* MSG_FindPane(MWContext* context, MSG_PaneType type);
-
- /* really find the pane of passed type with given context, NULL otherwise */
- extern MSG_Pane *MSG_FindPaneOfContext (MWContext *context, MSG_PaneType type);
-
- extern MSG_Pane *MSG_FindPaneOfType(MSG_Master *master, MSG_FolderInfo *id, MSG_PaneType type);
-
- extern MSG_Pane *MSG_FindPaneFromUrl (MSG_Pane *pane, const char *url, MSG_PaneType type);
-
- /* Returns the context associated with a given pane. If this pane doesn't have
- a context (i.e., it's a threadpane), then it will return NULL. */
-
- extern MWContext* MSG_GetContext(MSG_Pane* pane);
-
-
- /* Returns the MSG_Prefs* object that is being used to determine the
- preferences for this pane. */
-
- extern MSG_Prefs* MSG_GetPrefs(MSG_Pane* pane);
-
-
- /* Returns the MSG_Prefs* object that is being used to determine the
- preferences for this master object. */
-
- extern MSG_Prefs* MSG_GetPrefsForMaster(MSG_Master* master);
-
-
- /* Returns the MSG_Master* object for the given pane. */
-
- extern MSG_Master* MSG_GetMaster(MSG_Pane* pane);
-
- extern XP_Bool MSG_DeliveryInProgress(MSG_Pane * composepane);
-
-
- /* This is the front end's single interface to executing mail/news menu
- and toolbar commands. See the comment above the definition of the
- MSG_CommandType enum.
-
- The indices and numindices arguments indicates which folders or threads are
- to be affected by this command. For many commands, they'll be ignored.
- They should always be NULL if not specifying a folderpane or a threadpane.
- */
- extern void MSG_Command (MSG_Pane* pane, MSG_CommandType command,
- MSG_ViewIndex* indices, int32 numindices);
-
-
- /* Before the front end displays any menu (each time), it should call this
- function for each command on that menu to determine how it should be
- displayed.
-
- selectable_p: whether the user should be allowed to select this item;
- if this is FALSE, the item should be grayed out.
-
- selected_p: if this command is a toggle or multiple-choice menu item,
- this will be MSG_Checked if the item should be `checked',
- MSG_Unchecked if it should not be, and MSG_NotUsed if the
- item is a `normal' menu item that never has a checkmark.
-
- display_string: the string to put in the menu. l10n handwave handwave.
-
- plural_p: if it happens that you're not using display_string, then
- this tells you whether the string you display in the menu
- should be singular or plural ("Delete Message" versus
- "Delete Selected Messages".) If you're using
- display_string, you don't need to look at this value.
-
- Returned value is negative if something went wrong.
- */
- extern int MSG_CommandStatus (MSG_Pane* pane,
- MSG_CommandType command,
- MSG_ViewIndex* indices, int32 numindices,
- XP_Bool *selectable_p,
- MSG_COMMAND_CHECK_STATE *selected_p,
- const char **display_string,
- XP_Bool *plural_p);
-
-
- /* Set the value of a toggle-style command to the given value. Returns
- negative if something went wrong (like, you gave it a non-toggling
- command, or you passed in MSG_NotUsed for the check state.) */
- extern int MSG_SetToggleStatus(MSG_Pane* pane, MSG_CommandType command,
- MSG_ViewIndex* indices, int32 numindices,
- MSG_COMMAND_CHECK_STATE value);
-
- /* Queries whether the given toggle-style command is on or off. */
- extern MSG_COMMAND_CHECK_STATE MSG_GetToggleStatus(MSG_Pane* pane,
- MSG_CommandType command,
- MSG_ViewIndex* indices,
- int32 numindices);
-
-
- /* Navigation commands */
- extern int MSG_DataNavigate(MSG_Pane* pane, MSG_MotionType motion,
- MessageKey startId, MessageKey *resultId,
- MessageKey *resultThreadId);
-
- /* This routine will automatically expand the destination thread, if needs be. */
- extern int MSG_ViewNavigate(MSG_Pane* pane, MSG_MotionType motion,
- MSG_ViewIndex startIndex,
- MessageKey *resultId, MSG_ViewIndex *resultIndex,
- MSG_ViewIndex *pThreadIndex,
- MSG_FolderInfo **folderInfo);
-
- /* Indicates if navigation of the passed motion type is valid. */
- extern int MSG_NavigateStatus (MSG_Pane* pane,
- MSG_MotionType command,
- MSG_ViewIndex index,
- XP_Bool *selectable_p,
- const char **display_string);
-
- extern int MSG_MarkReadByDate (MSG_Pane* pane, time_t startDate, time_t endDate);
-
- /* notification from Server Admin page via JavaScript that an imap folder has changed */
- extern void MSG_IMAPFolderChangedNotification(const char *folder_url);
-
- /* record the imap connection in the move state of the current context */
- extern void MSG_StoreNavigatorIMAPConnectionInMoveState(MWContext *context,
- TNavigatorImapConnection *connection);
-
- /* Determines whether we are currently actually showing the recipients
- in the "Sender" column of the display (because we are in the "sent"
- folder). FE's should call this in their FE_UpdateToolbar to change
- the title of this column.*/
-
- extern XP_Bool MSG_DisplayingRecipients(MSG_Pane* threadpane);
-
-
-
-
- /* The msg library calls FE_ListChangeStarting() to tell the front end that the
- contents of the message or folder list are about to change. It means that
- any MSG_ViewIndex values that the FE may be keeping around might become
- invalid. The FE should adjust them, throw them out, or convert them into
- MessageKey or MSG_FolderInfo* values, instead.
-
- This call will be quickly followed by a matching call to
- FE_ListChangeFinished().
-
- The "asynchronous" flag will be TRUE if this change happened due to some
- completely asynchronous event, and FALSE if we are in the middle of a call
- to MSG_Command() or other calls from the FE that directly manipulate the
- msglib. Some FE's (Mac) will choose to ignore these calls if asynchronous
- is FALSE, while other FE's (XFE) will likely ignore the parameter.
-
- The notify parameter describes what changed, along with the where and num
- parameters. See the documentation in the declaration of MSG_NOTIFY_CODE,
- above. */
-
- extern void FE_ListChangeStarting(MSG_Pane* pane, XP_Bool asynchronous,
- MSG_NOTIFY_CODE notify, MSG_ViewIndex where,
- int32 num);
-
-
- /* FE_ListChangeFinished() gets called only after a call to
- FE_ListChangeStarting(). It means that it is safe for the FE to convert
- back from MessageKey or MSG_FolderInfo* into MSG_ViewIndex. It's also a good
- clue that the FE ought to redisplay the list. If the folderpane is given,
- then the FE probably will want to regenerate any list of folders presented
- in menus. */
-
- extern void FE_ListChangeFinished(MSG_Pane* pane, XP_Bool asynchronous,
- MSG_NOTIFY_CODE notify, MSG_ViewIndex where,
- int32 num);
-
- /* The backend calls this when something changed about the pane other than the
- list. For example, if we load a different message into a message pane,
- we call FE_PaneChanged with a notify code of MSG_PaneNotifyMessageLoaded. Or, if
- the folder info for a folder displayed in a thread pane changes,
- we call FE_PaneChanged with a notify code of MSG_PaneNotifyFolderInfoChanged.
- */
- extern void FE_PaneChanged(MSG_Pane *pane, XP_Bool asynchronous,
- MSG_PANE_CHANGED_NOTIFY_CODE, int32 value);
-
- /* The front end calls this *after* it has handled the FE_PaneChanged notification.
- This function handles callbacks set up by back-end code to detect changes in the
- mail system. Currently, it is used by the netscape.messaging.* classes
- to allow callbacks in the java classes when stuff in the mail backend changes.
- */
- extern void MSG_HandlePaneChangedNotifications(MSG_Pane *pane, XP_Bool asynchronous,
- MSG_PANE_CHANGED_NOTIFY_CODE, int32 value);
-
- /* Declaration for backend pane change callback */
- typedef void (*MSG_PANE_CHANGED_CALLBACK)(MSG_Pane *pane, XP_Bool asynchronous,
- MSG_PANE_CHANGED_NOTIFY_CODE, int32 value);
-
- /* Registration function to register call backs. Currently allows only one, but should
- be expanded to allow multiple observers */
- extern void MSG_RegisterPaneChangedCallback(MSG_PANE_CHANGED_CALLBACK cb);
-
- /* The front end can use this call to determine what the indentation depth is
- needed to display all the icons in the folder list. The XFE uses this to
- dynamically resize the icon column. In true C style, the number returned is
- actually one bigger than the biggest depth the FE will ever get. */
- extern int MSG_GetFolderMaxDepth(MSG_Pane* folderpane);
-
-
- /* The front end uses these calls to determine what to display on particular
- lines in the outline lists. They return TRUE on success, FALSE if the given
- line doesn't exist or if there are less than numlines worth of data to get.
- The given data pointer must point to an array of at least numlines
- elements. */
-
- extern XP_Bool MSG_GetFolderLineByIndex(MSG_Pane* folderpane,
- MSG_ViewIndex firstline,
- int32 numlines,
- MSG_FolderLine* data);
-
- /* get the flags for a folder w/o the whole MSG_FolderLine */
- extern uint32 MSG_GetFolderFlags(MSG_FolderInfo *folder);
-
- extern int32 MSG_GetFolderSizeOnDisk (MSG_FolderInfo *folder);
- extern XP_Bool MSG_GetThreadLineByIndex(MSG_Pane* threadpane,
- MSG_ViewIndex firstline,
- int32 numlines,
- MSG_MessageLine* data);
-
- extern int MSG_GetFolderLevelByIndex( MSG_Pane *folderpane,
- MSG_ViewIndex line );
-
- extern int MSG_GetThreadLevelByIndex( MSG_Pane *threadpane,
- MSG_ViewIndex line );
-
- /* If the FE wants to find out info about a particular folder or thread by its
- id rather than by its index, it can use these calls. */
-
- extern XP_Bool MSG_GetFolderLineById(MSG_Master* master,
- MSG_FolderInfo* info,
- MSG_FolderLine* data);
- extern XP_Bool MSG_GetThreadLineById(MSG_Pane* pane, /* thread or message */
- MessageKey id,
- MSG_MessageLine* data);
-
- /* returns the view index of the first message in the thread containing key */
- extern MSG_ViewIndex MSG_ThreadIndexOfMsg(MSG_Pane* pane, MessageKey key);
-
- /* Takes a time (most likely, the one returned in the MSG_MessageLine
- structure by MSG_GetThreadLine()) and formats it into a compact textual
- representation (like "Thursday" or "09:53:17" or "10/3 16:15"), based on
- how that date relates to the current time. This is returned in a
- statically allocated buffer; the caller should copy it somewhere. */
- extern const char* MSG_FormatDate(MSG_Pane* pane, time_t date);
-
- /* If you don't have a pane and need to format a date ... */
- extern const char* MSG_FormatDateFromContext(MWContext *context, time_t date);
-
- /* Change the priority on a mail message */
- extern XP_Bool MSG_SetPriority(MSG_Pane *pane, /* thread or message */
- MessageKey key,
- MSG_PRIORITY priority);
-
- /* The msg library calls this to get a temporary filename and type (suitable
- for passing to XP_FileOpen, etc) to be used for storing a temporary working
- copy of the given filename and type. The returned file will usually be
- renamed back onto the given filename, using XP_FileRename().
-
- The returned filename will be freed using XP_FREE(). */
-
- /* #### this should be replaced with a backup-version-hacking XP_FileOpen */
- extern char* FE_GetTempFileFor(MWContext* context, const char* fname,
- XP_FileType ftype, XP_FileType* rettype);
-
-
-
-
- /* Delete the master object, meaning that we're all done with mail or news.
- It's not legal to do this unless all associated panes have already been
- destroyed. */
-
- extern void MSG_DestroyMaster(MSG_Master* master);
-
-
- /* A pane is going away. */
-
- extern void MSG_DestroyPane(MSG_Pane* pane);
-
-
-
- /* Load the given folder into the given threadpane. */
-
- extern int MSG_LoadFolder(MSG_Pane* threadpane, MSG_FolderInfo* folder);
-
- /* Load the given message into the given messagepane. Also have to specify
- the folder that the pane is in. */
-
- extern int MSG_LoadMessage(MSG_Pane* messagepane, MSG_FolderInfo* folder,
- MessageKey id);
-
- /* Open Draft Message into a compose window */
- extern int MSG_OpenDraft (MSG_Pane* threadpane, MSG_FolderInfo* folder,
- MessageKey id);
- /* Draft -- backend helper function; FE don't use it */
- extern void MSG_SetLineWidth(MSG_Pane* composepane, int width);
-
- extern void MSG_AddBacktrackMessage(MSG_Pane* pane, MSG_FolderInfo* folder,
- MessageKey id);
-
- extern void MSG_SetBacktrackState (MSG_Pane* pane, MSG_BacktrackState state);
-
- extern MSG_BacktrackState MSG_GetBacktrackState (MSG_Pane* pane);
-
-
- /* Set what action to take when the user sends an HTML message. This
- is set by a pull-down in the compose window, or as a result of the
- AskHTMLDialog. */
- extern int MSG_SetHTMLAction(MSG_Pane* composepane,
- MSG_HTMLComposeAction action);
-
- /* Gets the value set above. */
- extern MSG_HTMLComposeAction MSG_GetHTMLAction(MSG_Pane* composepane);
-
- /* Asks that the recipients dialog appear. This should only happen as a
- result of the user pressing the "Recipients" button on the AskHTMLDialog.
- the void* parameter is used to pass in the parent window for the dialog */
- extern int MSG_PutUpRecipientsDialog(MSG_Pane* composepane,void *pWnd);
-
- /* For more details on this routine, see comments for
- MSG_CompositionPaneCallbacks. */
- extern int MSG_ResultsRecipients(MSG_Pane* composepane,
- XP_Bool cancelled,
- int32* nohtml, /* List of IDs, terminated
- with a negative entry. */
- int32* htmlok /* Another list of IDs. */
- );
-
- extern void MSG_SetPostDeliveryActionInfo (MSG_Pane* pane,
- void *actionInfo);
-
- /* Setting the preloaded attachments to a compose window. Drafts only */
- extern int MSG_SetPreloadedAttachments ( MSG_Pane *composepane,
- MWContext *context,
- void *attachmentData,
- void *attachments,
- int attachments_count );
-
- #ifdef XP_UNIX
- /* This is how the XFE implements non-POP message delivery. The given donefunc
- will be called when the incorporate actually finishes, which may be before
- or after this function returns. The boolean passed to the donefunc will be
- TRUE if the incorporate succeeds, and FALSE if it fails for any reason. */
- extern void MSG_IncorporateFromFile(MSG_Pane* pane, XP_File infid,
- void (*donefunc)(void*, XP_Bool),
- void* doneclosure);
- #endif /* XP_UNIX */
-
- /* ===========================================================================
- PREFERENCES
- ===========================================================================
- */
-
-
- /* Create a new place to store mail/news preferences. */
-
- extern MSG_Prefs* MSG_CreatePrefs(void);
-
- /* Destroy a previously created MSG_Prefs* object. it is illegal to call this
- unless any MSG_Master* or compositionpane objects associated with this prefs
- object have already been destroyed.*/
-
- extern void MSG_DestroyPrefs(MSG_Prefs*);
-
-
-
- /* This is the directory where mail folders are stored. */
-
- extern void MSG_SetFolderDirectory(MSG_Prefs* prefs, const char* directory);
- extern const char* MSG_GetFolderDirectory(MSG_Prefs* prefs);
-
-
- extern void MSG_GetCitationStyle(MSG_Prefs* prefs,
- MSG_FONT* font,
- MSG_CITATION_SIZE* size,
- const char** color);
-
- /* Gets/Sets the current Queue Folder name, i.e. "Outbox" or "Unsent Messages."
- Don't free the return result. */
- extern const char * MSG_GetQueueFolderName();
- /* Should be called with a #define'd string, i.e. QUEUE_FOLDER_NAME or QUEUE_FOLDER_NAME_OLD */
- extern const char * MSG_SetQueueFolderName(const char *newName);
- /* Variation on XP_GetString for special folders, except this function
- returns safer, longer-duration strings */
- extern const char * MSG_GetSpecialFolderName(int whichOne);
- #ifdef XP_OS2
- extern const char * MSG_GetSpecialFolderPrettyName(int whichOne);
- #endif
-
- /* Whether to automatically quote original message when replying. */
- extern XP_Bool MSG_GetAutoQuoteReply(MSG_Prefs* prefs);
-
- /* Whether to show attachments as links instead of inline. */
- extern XP_Bool MSG_GetNoInlineAttachments(MSG_Prefs* prefs);
-
- /* there are going to be a set of per-folder preferences, including
- 1 pane or 2
- Configured for off-line use
- I think these can be represented with bits. If wrong, we'll have
- to change this. They should be stored in the database, NeoFolderInfo obj,
- and cached in MSG_FolderInfo.
- */
- #define MSG_FOLDER_PREF_OFFLINE 0x00000001
- #define MSG_FOLDER_PREF_ONEPANE 0x00000002
- #define MSG_FOLDER_PREF_SHOWIGNORED 0x00000004
- #define MSG_FOLDER_PREF_IMAPMARKED 0x00000008 /* server says this folder is 'special' */
- #define MSG_FOLDER_PREF_IMAPUNMARKED 0x00000010 /* different from !marked? RFC says yes */
- #define MSG_FOLDER_PREF_IMAPNOINFERIORS 0x00000020 /* cannot have children folders, pity */
- #define MSG_FOLDER_PREF_IMAPNOSELECT 0x00000040 /* cannot hold messages, only other folders */
- #define MSG_FOLDER_PREF_OFFLINEEVENTS 0x00000080 /* this folder has offline events to play back */
- #define MSG_FOLDER_PREF_LSUB_DISCOVERED 0x00000100 /* this folder was discovered using LSUB */
- #define MSG_FOLDER_PREF_CREATED_OFFLINE 0x00000200 /* this folder created offline, so don't delete it */
- #define MSG_FOLDER_PREF_NAMESPACE_STRIPPED 0x00000400 /* this folder has had its personal namespace stripped off */
- #define MSG_FOLDER_PREF_IMAP_ACL_READ 0x00000800 /* SELECT, CHECK, FETCH, PARTIAL, SEARCH, COPY from folder */
- #define MSG_FOLDER_PREF_IMAP_ACL_STORE_SEEN 0x00001000 /* STORE SEEN flag */
- #define MSG_FOLDER_PREF_IMAP_ACL_WRITE 0x00002000 /* STORE flags other than SEEN and DELETED */
- #define MSG_FOLDER_PREF_IMAP_ACL_INSERT 0x00004000 /* APPEND, COPY into folder */
- #define MSG_FOLDER_PREF_IMAP_ACL_POST 0x00008000 /* Can I send mail to the submission address for folder? */
- #define MSG_FOLDER_PREF_IMAP_ACL_CREATE_SUBFOLDER 0x00010000 /* Can I CREATE a subfolder of this folder? */
- #define MSG_FOLDER_PREF_IMAP_ACL_DELETE 0x00020000 /* STORE DELETED flag, perform EXPUNGE */
- #define MSG_FOLDER_PREF_IMAP_ACL_ADMINISTER 0x00040000 /* perform SETACL */
- #define MSG_FOLDER_PREF_IMAP_ACL_RETRIEVED 0x00080000 /* ACL info for this folder has been initialized */
- #define MSG_FOLDER_PREF_FEVALID 0x40000000 /* prefs have actually been set */
- #define MSG_FOLDER_PREF_CACHED 0x80000000 /* we've retrieved prefs from db */
-
- extern void MSG_SetFolderPrefFlags(MSG_FolderInfo *info, int32 flag);
- extern int32 MSG_GetFolderPrefFlags(MSG_FolderInfo *info);
-
- /* allow FE's to remember default CSID's on a per-folder basis. It would be nice
- if there were a type other than int16 for csid's!
- */
- extern void MSG_SetFolderCSID(MSG_FolderInfo *info, int16 csid);
- extern int16 MSG_GetFolderCSID(MSG_FolderInfo *info);
-
- typedef enum MSG_AdminURLType
- {
- MSG_AdminServer,
- MSG_AdminServerSideFilters,
- MSG_AdminFolder,
- MSG_AdminServerLists
- } MSG_AdminURLType;
-
- /* use this to run the url */
- extern XP_Bool MSG_GetAdminUrlForFolder(MWContext *context, MSG_FolderInfo *folder, MSG_AdminURLType type);
- /* use this to decide to show buttons and/or menut items */
- extern XP_Bool MSG_HaveAdminUrlForFolder(MSG_FolderInfo *folder, MSG_AdminURLType type);
-
- /* ===========================================================================
- LIST CALLBACKS
- ===========================================================================
- */
-
-
- /* The FE calls these in response to mouse gestures on the scrolling lists.
- Note that folderpanes, threadpanes, and subscribepanes all have scrolling
- lists; most of these calls are valid in any of them. */
-
-
- /* Change the flippy state on this thread line, if possible. The numchanged
- returns how many lines that were added to the view (if positive), or how
- many were removed (if negative). If you don't care, pass in NULL. */
- extern void MSG_ToggleExpansion (MSG_Pane* pane, MSG_ViewIndex line,
- int32* numchanged);
-
-
-
- /* Returns how many lines would get added or removed from the message pane if
- MSG_ToggleExpansion were to be called. Returns positive if lines will be
- added; negative if lines will be removed. */
- extern int32 MSG_ExpansionDelta(MSG_Pane* pane, MSG_ViewIndex line);
-
-
-
- /* These are invoked by the items on the `Copy/Move Message Into' cascading
- menus, and by drag-and-drop. The folder name should be the full pathname of
- the folder in URL (Unix) file name syntax. This does not have to be an
- existing folder; it can be any file on the system. It doesn't even have to
- exist yet. (If you do want to use an existing folder, you can get the right
- string to pass using MSG_GetFolderName().) */
-
- typedef enum
- { MSG_Drag_Not_Allowed = 0x00000000
- , MSG_Require_Copy = 0x00000001
- , MSG_Require_Move = 0x00000002
- , MSG_Default_Drag = 0xFFFFFFFF
- } MSG_DragEffect;
-
- /* Status calls.
- Caller passes in requested action. If it's a required action, the returned value
- will be the request value, or MSG_Drag_Not_Allowed. If it's a default drag request,
- the returned value will show whether the drag should be interpreted as a move or copy. */
- extern MSG_DragEffect MSG_DragMessagesStatus(MSG_Pane* pane, const MSG_ViewIndex* indices,
- int32 numindices, const char *folder, MSG_DragEffect request);
- extern MSG_DragEffect MSG_DragMessagesIntoFolderStatus(MSG_Pane* pane,
- const MSG_ViewIndex* indices, int32 numindices,
- MSG_FolderInfo *folder, MSG_DragEffect request);
- extern MSG_DragEffect MSG_DragFoldersIntoStatus(MSG_Pane *folderPane,
- const MSG_ViewIndex *indices, int32 numIndices,
- MSG_FolderInfo *destFolder, MSG_DragEffect request);
-
- extern int MSG_CopyMessagesInto(MSG_Pane* pane, const MSG_ViewIndex* indices,
- int32 numindices, const char *folder);
- extern int MSG_MoveMessagesInto(MSG_Pane* pane, const MSG_ViewIndex* indices,
- int32 numindices, const char *folder);
-
- extern int MSG_CopyMessagesIntoFolder(MSG_Pane* pane, const MSG_ViewIndex* indices,
- int32 numindices, MSG_FolderInfo *folder);
- extern int MSG_MoveMessagesIntoFolder(MSG_Pane* pane, const MSG_ViewIndex* indices,
- int32 numindices, MSG_FolderInfo *folder);
-
-
- extern int MSG_MoveFoldersInto (MSG_Pane *folderPane, const MSG_ViewIndex *indices,
- int32 numIndices, MSG_FolderInfo *destFolder);
-
- /* ===========================================================================
- HOSTS
- ===========================================================================
- */
-
- /* These operations on hosts are mostly used for the subscribe pane. */
-
- /* Returns the number of known newshosts. If the result pointer is not NULL,
- fills it in with the list of newshosts (providing up to resultsize entries.)
- */
- extern int32 MSG_GetNewsHosts(MSG_Master* master,
- MSG_NewsHost** result,
- int32 resultsize);
-
- /* Same as above for imap hosts */
- extern int32 MSG_GetIMAPHosts(MSG_Master* master,
- MSG_IMAPHost** result,
- int32 resultsize);
-
- /* Same as above for imap hosts that support subscription */
- extern int32 MSG_GetSubscribingIMAPHosts(MSG_Master* master,
- MSG_IMAPHost** result,
- int32 resultsize);
-
- /* Same as above for news hosts + imap hosts that support subscription */
- extern int32 MSG_GetSubscribingHosts(MSG_Master* master,
- MSG_Host** result,
- int32 resultsize);
-
- /* Get the host type */
- extern XP_Bool MSG_IsNewsHost(MSG_Host* host);
- extern XP_Bool MSG_IsIMAPHost(MSG_Host* host);
-
- /* Returns a pointer to the associated MSG_Host object for this MSG_NewsHost */
- extern MSG_Host* MSG_GetMSGHostFromNewsHost(MSG_NewsHost *newsHost);
- /* Returns a pointer to the associated MSG_Host object for this MSG_IMAPHost */
- extern MSG_Host* MSG_GetMSGHostFromIMAPHost(MSG_IMAPHost *imapHost);
- /* Returns a pointer to the associated MSG_NewsHost object for this MSG_Host,
- if it is a MSG_NewsHost. Otherwise, returns NULL. */
- extern MSG_NewsHost* MSG_GetNewsHostFromMSGHost(MSG_Host *host);
- /* Returns a pointer to the associated MSG_IMAPHost object for this MSG_Host,
- if it is a MSG_IMAPHost. Otherwise, returns NULL. */
- extern MSG_IMAPHost* MSG_GetIMAPHostFromMSGHost(MSG_Host *host);
-
-
-
- /* this should be in msgnet.h, but winfe uses it - this is dangerous in
- a multiple host world.
- */
- extern XP_Bool MSG_GetMailServerIsIMAP4(MSG_Prefs* prefs);
-
- /* Creates a new newshost. If the given info matches an existing newshost,
- then returns that newshost. */
-
- extern MSG_NewsHost* MSG_CreateNewsHost(MSG_Master* master,
- const char* hostname,
- XP_Bool isSecure,
- int32 port /* If 0, use default */
- );
-
-
- /* Gets the default newshost. Could be NULL, if the user has managed to
- configure himself that way. */
- extern MSG_NewsHost* MSG_GetDefaultNewsHost(MSG_Master* master);
-
-
-
- /* Deletes a newshost. This deletes everything known about this hosts -- the
- newsrc files, the databases, everything. The user had better have confirmed
- this operation before making this call. */
-
- extern int MSG_DeleteNewsHost(MSG_Master* master, MSG_NewsHost* host);
-
-
- /* IMAP Hosts API's */
- /* Creates a new imap host. If the given info matches an existing imap host,
- then returns that imap host. */
-
- extern MSG_IMAPHost* MSG_CreateIMAPHost(MSG_Master* master,
- const char* hostname,
- XP_Bool isSecure,
- const char *userName,
- XP_Bool checkNewMail,
- int biffInterval,
- XP_Bool rememberPassword,
- XP_Bool usingSubscription,
- XP_Bool overrideNamespaces,
- const char *personalOnlineDir,
- const char *publicOnlineDir,
- const char *otherUsersOnlineDir
- );
-
-
- /* Gets the default imap host. Could be NULL, if the user has managed to
- configure himself that way. */
- extern MSG_IMAPHost* MSG_GetDefaultIMAPHost(MSG_Master* master);
-
-
- /* Deletes an imap host. This deletes everything known about this hosts -- the
- preferences, the databases, everything. The user had better have confirmed
- this operation before making this call. */
-
- extern int MSG_DeleteIMAPHost(MSG_Master* master, MSG_IMAPHost* host);
-
- /* Get info about a host. */
-
- #ifdef SUBSCRIBE_USE_OLD_API /* these are being obsoleted */
- extern const char* MSG_GetNewsHostUIName(MSG_NewsHost* host);
- extern const char* MSG_GetNewsHostName(MSG_NewsHost* host);
- extern XP_Bool MSG_IsNewsHostSecure(MSG_NewsHost* host);
- extern int32 MSG_GetNewsHostPort(MSG_NewsHost* host);
- #endif /* SUBSCRIBE_USE_OLD_API */
-
- extern const char* MSG_GetHostUIName(MSG_Host* host);
- extern const char* MSG_GetHostName(MSG_Host* host);
- extern XP_Bool MSG_IsHostSecure(MSG_Host* host);
- extern int32 MSG_GetHostPort(MSG_Host* host);
- extern void MSG_SetNewsHostPostingAllowed (MSG_NewsHost *host, XP_Bool allowed);
- extern XP_Bool MSG_GetNewsHostPushAuth (MSG_NewsHost *host);
- extern void MSG_SetNewsHostPushAuth (MSG_NewsHost *host, XP_Bool pushAuth);
-
-
-
- /* ===========================================================================
- SUBSCRIBE WINDOW
- ===========================================================================
- */
-
-
- /* Set list of callback routines that the subscribe pane can call to the
- FE. */
- extern int MSG_SubscribeSetCallbacks(MSG_Pane* subscribepane,
- MSG_SubscribeCallbacks* callbacks,
- void* callbackclosure);
-
-
- /* The cancel button was hit. Forget any subscriptions or unsubscriptions that
- had been requested. (This call is usually quickly followed by a call to
- MSG_DestroyPane). */
- extern int MSG_SubscribeCancel(MSG_Pane* subscribepane);
-
- /* The OK button was hit. Commit any subscriptions or unsubscriptions to the
- IMAP server, if there are any changes. If the changes are on a news server,
- the commit will happen in the destructor, just like they used to (ack).
- This needs to change for IMAP because we do network I/O. */
- extern int MSG_SubscribeCommit(MSG_Pane* subscribepane);
-
- /* Get which newshost we're currently viewing. */
- #ifdef SUBSCRIBE_USE_OLD_API
- extern MSG_NewsHost* MSG_SubscribeGetNewsHost(MSG_Pane* subscribepane);
- #endif /* SUBSCRIBE_USE_OLD_API */
-
- /* Get which news or imap host we're currently viewing. */
- extern MSG_Host* MSG_SubscribeGetHost(MSG_Pane* subscribepane);
-
- /* Set our view to the given newshost. */
- #ifdef SUBSCRIBE_USE_OLD_API
- extern int MSG_SubscribeSetNewsHost(MSG_Pane* subscribepane,
- MSG_NewsHost* host);
- #endif /* SUBSCRIBE_USE_OLD_API */
-
- /* Set our view to the given news or imap host. */
- extern int MSG_SubscribeSetHost(MSG_Pane* subscribepane,
- MSG_Host* host);
-
- /* Gets the mode of the pane. */
- extern MSG_SubscribeMode MSG_SubscribeGetMode(MSG_Pane* subscribepane);
-
- /* Sets the mode of the pane */
- extern int MSG_SubscribeSetMode(MSG_Pane* subscribepane,
- MSG_SubscribeMode mode);
-
-
- /* Finds the first newsgroup whose name matches the given string. Expansions
- will automatically be done as necessary. Returns the index that matches;
- the FE should then scroll to and select that index. The pane must be
- in the "MSG_SubscribeAll" mode. */
- extern MSG_ViewIndex MSG_SubscribeFindFirst(MSG_Pane* subscribepane,
- const char* str);
-
-
- /* Finds all the newsgroups that have the given string as a substring, and
- changes the view to show only those groups. The pane must be in the
- "MSG_SubscribeSearch" mode. */
- extern int MSG_SubscribeFindAll(MSG_Pane* subscribepane, const char* str);
-
-
- /* Get information to display on these lines in the subscription pane
- outline list. Returns TRUE on success, FALSE if the given
- line doesn't exist or if there are less than numlines worth of data to get.
- The given data pointer must point to an array of at least numlines
- elements. */
-
- extern XP_Bool MSG_GetGroupNameLineByIndex(MSG_Pane* subscribepane,
- MSG_ViewIndex firstline,
- int32 numlines,
- MSG_GroupNameLine* data);
-
-
-
- /* ===========================================================================
- OFFLINE NEWS
- ===========================================================================
- */
-
- typedef enum MSG_PurgeByPreferences
- {
- MSG_PurgeNone,
- MSG_PurgeByAge,
- MSG_PurgeByNumHeaders
- } MSG_PurgeByPreferences;
-
-
- extern int MSG_SetOfflineRetrievalInfo(
- MSG_FolderInfo *newsGroup,
- XP_Bool useDefaults,
- XP_Bool byReadness,
- XP_Bool unreadOnly,
- XP_Bool byDate,
- int32 daysOld);
-
- extern int MSG_SetArticlePurgingInfo(
- MSG_FolderInfo *newsGroup,
- XP_Bool useDefaults,
- MSG_PurgeByPreferences purgeBy,
- int32 daysToKeep);
-
- extern int MSG_SetHeaderPurgingInfo(
- MSG_FolderInfo *newsGroup,
- XP_Bool useDefaults,
- MSG_PurgeByPreferences purgeBy,
- XP_Bool unreadOnly,
- int32 daysToKeep,
- int32 numHeadersToKeep
- );
-
- extern void MSG_GetOfflineRetrievalInfo(
- MSG_FolderInfo *newsGroup,
- XP_Bool *pUseDefaults,
- XP_Bool *pByReadness,
- XP_Bool *pUnreadOnly,
- XP_Bool *pByDate,
- int32 *pDaysOld);
-
- extern void MSG_GetArticlePurgingInfo(MSG_FolderInfo *newsGroup,
- XP_Bool *pUseDefaults,
- MSG_PurgeByPreferences *pPurgeBy,
- int32 *pDaysToKeep);
-
- extern void MSG_GetHeaderPurgingInfo(MSG_FolderInfo *newsGroup,
- XP_Bool *pUseDefaults,
- MSG_PurgeByPreferences *pPurgeBy,
- XP_Bool *pUnreadOnly,
- int32 *pDaysToKeep,
- int32 *pNumHeadersToKeep);
-
-
-
- /* run the url to download mail and news articles for offline use
- for those folders so configured.
- */
- extern int MSG_DownloadForOffline(MSG_Master *master, MSG_Pane *pane);
- extern int MSG_GoOffline(MSG_Master *master, MSG_Pane *pane, XP_Bool downloadDiscussions, XP_Bool getNewMail, XP_Bool sendOutbox);
- extern int MSG_DownloadFolderForOffline(MSG_Master *master, MSG_Pane *pane, MSG_FolderInfo *folder);
-
-
- /* ===========================================================================
- QUERIES
- ===========================================================================
- */
-
- /* Get the filename for the folder on the given line. This string is perfect
- for passing to calls to MSG_MoveMessagesInto() and friends. String is
- allocated with XP_STRDUP so client needs to free. This should only be used
- for mail folders, it appears from the code.
- */
- extern const char* MSG_GetFolderName(MSG_Pane* folderpane, MSG_ViewIndex line);
-
-
- /* return the full folder name from a folder id. String is not allocated so caller
- should duplicate it. For mail boxes, this returns the full folder path. This is
- currently used for filters to remember a full folder path.
- */
- extern const char *MSG_GetFolderNameFromID(MSG_FolderInfo *);
-
-
- /* Get how many lines are in the list for this folderpane or threadpane or
- subscribepane. */
- extern int32 MSG_GetNumLines(MSG_Pane* pane);
-
-
- /* Convert a MSG_FolderInfo* into a MSG_ViewIndex. Returns MSG_VIEWINDEXNONE if
- the given MSG_FolderInfo* is not being displayed anywhere. */
-
- extern MSG_ViewIndex MSG_GetFolderIndex(MSG_Pane* folderpane,
- MSG_FolderInfo* info);
-
-
- /* This routine should replace the above routine when people port over to it.
- If expand is TRUE, we will expand the folderPane enough to
- expose the passed in folder info. Otherwise, if the folder is collapsed,
- we return MSG_ViewIndexNone.
- */
- extern MSG_ViewIndex MSG_GetFolderIndexForInfo(MSG_Pane *folderpane,
- MSG_FolderInfo *info,
- XP_Bool expand);
-
- /* Converts a MSG_ViewIndex into a MSG_FolderInfo*. */
-
- extern MSG_FolderInfo* MSG_GetFolderInfo(MSG_Pane* folderpane,
- MSG_ViewIndex index);
-
- extern MSG_FolderInfo* MSG_GetFolderInfoFromURL(MSG_Master* master, const char *url);
-
- /* returns folder info of host owning this folder*/
- MSG_FolderInfo* GetHostFolderInfo(MSG_FolderInfo* info);
-
- extern MSG_FolderInfo* MSG_GetThreadFolder(MSG_Pane *threadpane);
-
- extern MSG_FolderInfo* MSG_GetCategoryContainerForCategory(MSG_FolderInfo *category);
-
- #ifdef SUBSCRIBE_USE_OLD_API
- /* Finds the newshost that contains the given folder. If the given folder is
- not a newsgroup, returns NULL. */
- extern MSG_NewsHost* MSG_GetNewsHostForFolder(MSG_FolderInfo* folder);
-
- /* Converts a MSG_ViewIndex into a MSG_NewsHost */
- extern MSG_NewsHost *MSG_GetNewsHostFromIndex (MSG_Pane *folderPane,
- MSG_ViewIndex index);
- #endif /* SUBSCRIBE_USE_OLD_API */
-
- /* Finds the host that contains the given folder. If the given folder is
- not a newsgroup or IMAP folder, returns NULL. */
- extern MSG_Host *MSG_GetHostForFolder(MSG_FolderInfo* folder);
-
- /* Converts a MSG_ViewIndex into a MSG_Host */
- extern MSG_Host *MSG_GetHostFromIndex (MSG_Pane *folderPane,
- MSG_ViewIndex index);
-
- /* Gets the MSG_FolderInfo object associated with a given MSG_Host. */
- extern MSG_FolderInfo *MSG_GetFolderInfoForHost(MSG_Host *host);
-
- /* given a url containing a message id, fill in the message line info for the msg.
- For news urls, the news group will need to be open!
- */
- extern int MSG_GetMessageLineForURL(MSG_Master* master, const char *url, MSG_MessageLine *msgLine);
-
- /* This routine should replace the MSG_GetMessageIndex when people port over to
- it. If expand is TRUE, we will expand the folderPane enough to
- expose the passed in folder info. Otherwise, if the folder is collapsed,
- we return MSG_ViewIndexNone.
- */
- extern MSG_ViewIndex MSG_GetMessageIndexForKey(MSG_Pane* threadpane,
- MessageKey key,
- XP_Bool expand);
-
- /* Look up the MessageKey based on the message ID */
-
- extern int MSG_GetKeyFromMessageId (MSG_Pane *message_pane,
- const char *message_id,
- MessageKey *outKey);
-
- /* Converts a MSG_ViewIndex into a MessageKey. */
-
- extern MessageKey MSG_GetMessageKey(MSG_Pane* threadpane, MSG_ViewIndex index);
-
-
- /* Getting a message key from the undo manager for dsiplay */
-
- extern XP_Bool MSG_GetUndoMessageKey (MSG_Pane* pane,
- MSG_FolderInfo** pFolderInfo,
- MessageKey* pKey);
-
- /* Get current undo operation status */
- extern UndoStatus MSG_GetUndoStatus (MSG_Pane* pane);
-
- /* Get Undo Manager State */
- extern UndoMgrState MSG_GetUndoState(MSG_Pane* pane);
-
- /* Given a MSG_FolderInfo*, returns the number of children folders. If the
- result pointer is not NULL, fills it in with the list of children (providing
- up to resultsize entries.) If the given MSG_FolderInfo* is NULL, then
- returns the list of top-level folders. */
-
- extern int32 MSG_GetFolderChildren(MSG_Master* master,
- MSG_FolderInfo* folder,
- MSG_FolderInfo** result,
- int32 resultsize);
-
- /* Returns the container of all local (off-line) mail folders. */
-
- extern MSG_FolderInfo* MSG_GetLocalMailTree(MSG_Master* master);
-
- /* Returns the number of mail folders (both local and IMAP). If this number is
- greater than zero, an array of pointers to the MSG_FolderInfos is allocated
- and returned in result. The caller is responsible for freeing the array.
- This function is not recursive, it only returns the top level mail folders. */
- extern int32 MSG_ListMailFolders(MSG_Master *master, MSG_FolderInfo ***result);
-
- /* Given a flag or set of flags, returns the number of folders that have
- that flag set. If the result pointer is not NULL, fills it in with the
- list of folders (providing up to resultsize entries). */
-
- extern int32 MSG_GetFoldersWithFlag(MSG_Master* master,
- uint32 flags,
- MSG_FolderInfo** result,
- int32 resultsize);
-
-
-
-
- /* Returns what folder a threadpane is viewing (NULL if not viewing
- anything.) */
-
- extern MSG_FolderInfo* MSG_GetCurFolder(MSG_Pane* threadpane);
-
- /* Call this from the new Create Folder UI with the dropdown list.
- The MSG_Command will go away when everyone uses this.
- This should not be called anymore - keeping it for a smooth transition to
- MSG_CreateMailFolderWithPane (below) */
- extern int MSG_CreateMailFolder (MSG_Master *master, MSG_FolderInfo *parent,
- const char *childName);
-
- /* Call this from the new Create Folder UI with the dropdown list.
- The MSG_Command will go away when everyone uses this.
- Call with invokingPane set to the pane with which to run any IMAP
- Create-Folder URLs. (probably the pane from which it was invoked,
- or a progress pane) */
- extern int MSG_CreateMailFolderWithPane (MSG_Pane *invokingPane, MSG_Master *master,
- MSG_FolderInfo *parent, const char *childName);
-
-
-
- /* FEs should call this to determine what folder we should suggest as the parent folder,
- when creating a new folder.
- current is the MSG_FolderInfo of the currently selected folder or host.
- Returns the MSG_FolderInfo for the suggested parent, given the currently selected folder or host.
- Returns NULL if current is NULL.
- */
- extern MSG_FolderInfo *MSG_SuggestNewFolderParent(MSG_FolderInfo *current);
-
- /* Call this from the new folder properties UI */
- extern int MSG_RenameMailFolder (MSG_Pane *folderPane, MSG_FolderInfo *folder,
- const char *newName);
-
- /* Returns what folder and message a messagepane is currently displaying.
- (Sets the folder to NULL and the key to MSG_MESSAGEKEYNONE if the
- messagepane is currently displaying nothing.) */
-
- extern void MSG_GetCurMessage(MSG_Pane* messagepane,
- MSG_FolderInfo** folder,
- MessageKey* key, MSG_ViewIndex *index);
-
-
- /* Returns what attachments are being viewed in the messagepane, and whether
- we're certain it's the entire list. (If the data is still being downloaded,
- then there could still be attachments that we don't know about.)
-
- The returned data must be free'd using MSG_FreeAttachmentList(). */
-
- extern int MSG_GetViewedAttachments(MSG_Pane* messagepane,
- MSG_AttachmentData** data,
- XP_Bool* iscomplete);
-
-
- /* Frees the attachemnt data returned by MSG_GetViewedAttachments(). */
-
- extern void MSG_FreeAttachmentList(MSG_Pane* messagepane,
- MSG_AttachmentData* data);
-
-
-
-
- /* These return NULL if they fail. Caller must call NET_FreeURLStruct */
- extern URL_Struct* MSG_ConstructUrlForPane(MSG_Pane *pane);
- extern URL_Struct* MSG_ConstructUrlForMessage(MSG_Pane *pane, MessageKey key);
- extern URL_Struct* MSG_ConstructUrlForFolder(MSG_Pane *pane, MSG_FolderInfo *folder);
- /* Returns whether the user has asked to rot13 messages displayed in
- this pane. (Used by libmime.) */
- extern XP_Bool MSG_ShouldRot13Message(MSG_Pane* messagepane);
-
-
- /* ===========================================================================
- BIFF
- ===========================================================================
- */
-
- /* biff is the unixy name for "Check for New Mail". It comes from the unix
- command of the same name; the author of that command named it after his dog,
- who would bark at him whenever he had new mail... */
-
- /* The different biff states we can be in: */
-
- typedef enum
- {
- MSG_BIFF_NewMail, /* User has new mail waiting. */
- MSG_BIFF_NoMail, /* No new mail is waiting. */
- MSG_BIFF_Unknown /* We dunno whether there is new mail. */
- } MSG_BIFF_STATE;
-
-
- /* Register and unregister biff callback functions */
- typedef void (*MSG_BIFF_CALLBACK)(MSG_BIFF_STATE oldState, MSG_BIFF_STATE newState);
-
- extern void MSG_RegisterBiffCallback( MSG_BIFF_CALLBACK cb );
-
- extern void MSG_UnregisterBiffCallback();
-
- /* Get and set the current biff state */
-
- extern MSG_BIFF_STATE MSG_GetBiffState();
-
- extern void MSG_SetBiffStateAndUpdateFE(MSG_BIFF_STATE newState);
-
-
- /* Set the preference of how often to run biff. If zero is passed in, then
- never check. */
-
- extern void MSG_SetBiffInterval(int32 seconds);
-
-
-
- #ifdef XP_UNIX
- /* Set the file to stat, instead of using pop3. This is for the Unix movemail
- nonsense. If the filename is NULL (the default), then use pop3. */
- extern void MSG_SetBiffStatFile(const char* filename);
- #endif
-
-
-
- /* Initialize the biff context. Note that biff contexts exist entirely
- independent of mail contexts; it's up to the FE to decide what order they
- get created and stuff. */
-
- extern int MSG_BiffInit(MWContext* context, MSG_Prefs* prefs);
-
-
- /* The biff context is about to go away. The FE must call this first to
- clean up. */
-
- extern int MSG_BiffCleanupContext(MWContext* context);
-
-
- /* Causes a biff check to occur immediately. This gets caused
- automatically by MSG_SetBiffInterval or whenever libmsg gets new mail. */
-
- extern void MSG_BiffCheckNow(MWContext* context);
-
-
- /* Tell the FE to render in all the right places this latest knowledge as to
- whether we have new mail waiting. */
- extern void FE_UpdateBiff(MSG_BIFF_STATE state);
-
-
-
- /* ===========================================================================
- OTHER INTERFACES
- ===========================================================================
- */
-
- /* Certain URLs must always be displayed in certain types of windows:
- for example, all "mailbox:" URLs must go in the mail window, and
- all "http:" URLs must go in a browser window. These predicates
- look at the address and say which window type is required.
- */
- extern XP_Bool MSG_RequiresMailWindow (const char *url);
- extern XP_Bool MSG_RequiresNewsWindow (const char *url);
- extern XP_Bool MSG_RequiresBrowserWindow (const char *url);
- extern XP_Bool MSG_RequiresComposeWindow (const char *url);
-
- /* If this URL requires a particular kind of window, and this is not
- that kind of window, then we need to find or create one.
- */
- extern XP_Bool MSG_NewWindowRequired (MWContext *context, const char *url);
-
- /* If this URL requires a particular kind of window, and this is not
- that kind of window, then we need to find or create one.
- This routine takes a URL_Struct, which allows it to be smarter than
- the above routine.
- */
- extern XP_Bool MSG_NewWindowRequiredForURL (MWContext *context, URL_Struct *urlStruct);
-
- /* If we're in a mail window, and clicking on a link which will itself
- require a mail window, then don't allow this to show up in a different
- window - since there can be only one mail window.
- */
- extern XP_Bool MSG_NewWindowProhibited (MWContext *context, const char *url);
-
-
- /* When the front end loads a url, it needs to know what kind of pane the url
- should be loaded into.
- */
- extern MSG_PaneType MSG_PaneTypeForURL(const char *url);
-
- /* Returns the number of bytes available on the disk where the given directory
- is - this is so we know whether there is room to incorporate new mail. */
- extern uint32 FE_DiskSpaceAvailable (MWContext* context, const char* dir);
-
-
- /* ===========================================================================
- SECURE MAIL
- ===========================================================================
- */
-
- extern MSG_SecurityLevel MSG_GetMessageSecurityLevel(MSG_Pane *pPane);
- extern const XP_List *MSG_GetRecipientsWithNoCerts(MSG_Pane *pPane);
- extern XP_Bool MSG_ShouldEncryptMessage(MSG_Pane *pPane);
- extern XP_Bool MSG_ShouldSignMessage(MSG_Pane *pPane);
-
-
- /* FEs call this any time the set of recipients on the compose window
- changes. They should make the state (and sensitivity) of the "sign"
- and "encrypt" checkboxes, and the state of the "security" button,
- correspond to the returned boolean values.
-
- Maybe this function doesn't really belong here, but it's as good a
- place as any...
- */
- /* (This is maybe not the most appropriate header file for this proto.) */
- extern void SEC_GetMessageCryptoViability(const char *from,
- const char *reply_to,
- const char *to,
- const char *cc,
- const char *bcc,
- const char *newsgroups,
- const char *followup_to,
- XP_Bool *signing_possible_return,
- XP_Bool *encryption_possible_return);
-
-
- /* Returns TRUE if the user has selected the preference that says that new
- mail messages should be encrypted by default.
- */
- extern XP_Bool MSG_GetMailEncryptionPreference(void);
-
- /* Returns TRUE if the user has selected the preference that says that new
- mail messages should be cryptographically signed by default.
- */
- extern XP_Bool MSG_GetMailSigningPreference(void);
-
- /* Returns TRUE if the user has selected the preference that says that new
- news messages should be cryptographically signed by default.
- */
- extern XP_Bool MSG_GetNewsSigningPreference(void);
-
-
-
-
- /* ===========================================================================
- COMPOSE WINDOW
- ===========================================================================
- */
-
- /* This is how the `mailto' parser asks the message library to create a
- message composition window. That window has its own context. The
- `old_context' arg is the context from which the mailto: URL was loaded.
- It may be NULL.
-
- Any of the fields may be 0 or "". Some of them (From, BCC, Organization,
- etc) will be given default values if none is provided.
-
- This returns the new composition pane.
- */
- extern MSG_Pane* MSG_ComposeMessage(MWContext *old_context,
- const char *from,
- const char *reply_to,
- const char *to,
- const char *cc,
- const char *bcc,
- const char *fcc,
- const char *newsgroups,
- const char *followup_to,
- const char *organization,
- const char *subject,
- const char *references,
- const char *other_random_headers,
- const char *priority,
- const char *attachment,
- const char *newspost_url,
- const char *body,
- XP_Bool encrypt_p,
- XP_Bool sign_p,
- XP_Bool force_plain_text,
- const char* html_part);
-
- extern MSG_CompositionFields* MSG_CreateCompositionFields(
- const char *from,
- const char *reply_to,
- const char *to,
- const char *cc,
- const char *bcc,
- const char *fcc,
- const char *newsgroups,
- const char *followup_to,
- const char *organization,
- const char *subject,
- const char *references,
- const char *other_random_headers,
- const char *priority,
- const char *attachment,
- const char *newspost_url,
- XP_Bool encrypt_p,
- XP_Bool sign_p);
-
- extern void MSG_DestroyCompositionFields(MSG_CompositionFields *fields);
-
- /* Tell the FE that something has changed in the composition (like, we
- finished quoting or something) so that it needs to update the status of
- toolbars and stuff. This call should go away. ###tw */
- extern void FE_UpdateCompToolbar(MSG_Pane* comppane);
-
-
- /* Tell the FE that we're all done with the given context (which was associated
- with a composition pane that we're destroying). Presumably, the FE will
- then destroy the context. */
- extern void FE_DestroyMailCompositionContext(MWContext* context);
-
-
-
- /* Determines whether this is a mail composition that ought to have a "quote
- message" operation done at startup. If so, the FE must call
- MSG_QuoteMessage and handle it, and when done call MSG_SetInitialState(). */
-
- extern XP_Bool MSG_ShouldAutoQuote(MSG_Pane* comppane);
-
-
- /* Get and set the various things that a user may have typed. These are all
- initialized automatically by the constructor from the MSG_CompositionFields*
- object. The FE needs to done setting everything before doing sanity checks
- or sending the message.
-
- MSG_SetCompHeader should not be made with the header
- MSG_ATTACHMENTS_HEADER_MASK; instead, call MSG_SetAttachmentList().
- However, the FE may call MSG_GetCompHeader() with
- MSG_ATTACHMENTS_HEADER_MASK to find the summary line to display. */
-
- extern const char* MSG_GetCompHeader(MSG_Pane* comppane,
- MSG_HEADER_SET header);
- extern int MSG_SetCompHeader(MSG_Pane* comppane,
- MSG_HEADER_SET header,
- const char* value);
- extern const char* MSG_GetCompFieldsHeader(MSG_CompositionFields *fields,
- MSG_HEADER_SET header);
- extern int MSG_SetCompFieldsHeader(MSG_CompositionFields *fields,
- MSG_HEADER_SET header,
- const char* value);
- extern void MSG_SetCompFieldsReceiptType(MSG_CompositionFields *fields,
- int32 type);
- extern int32 MSG_GetCompFieldsReceiptType(MSG_CompositionFields *fields);
-
- extern XP_Bool MSG_GetCompBoolHeader(MSG_Pane* comppane,
- MSG_BOOL_HEADER_SET header);
- extern int MSG_SetCompBoolHeader(MSG_Pane* comppane,
- MSG_BOOL_HEADER_SET header,
- XP_Bool value);
- extern XP_Bool MSG_GetCompFieldsBoolHeader(MSG_CompositionFields *fields,
- MSG_BOOL_HEADER_SET header);
- extern int MSG_SetCompFieldsBoolHeader(MSG_CompositionFields *fields,
- MSG_BOOL_HEADER_SET header,
- XP_Bool value);
-
- /* Get whether we should force plain-text composition by default. */
- extern XP_Bool MSG_GetForcePlainText(MSG_CompositionFields* fields);
-
-
- extern const char* MSG_GetCompBody(MSG_Pane* comppane);
- extern int MSG_SetCompBody(MSG_Pane* comppane, const char* body);
-
- /* These following four functions are provided to make implementing the
- grid-based compose window a bit easier. A new type definition
- (MSG_HeaderEntry) is introduced which is used to store individual
- address entries. -- jevering */
-
- typedef struct
- {
- MSG_HEADER_SET header_type;
- char * header_value;
- } MSG_HeaderEntry;
-
- /* MSG_ExplodeHeaderField() parses a single header entry and returns
- a list of MSG_HeaderEntry structures. The return value is the
- number of items in the return list or -1 for an error. The return
- list as well as its contents should be freed by the caller. */
-
- extern int MSG_ExplodeHeaderField( MSG_HEADER_SET msg_header,
- const char * field,
- MSG_HeaderEntry **return_list);
-
- /* This function retrieve the contents of the current compose window
- headers and parses them into a MSG_HeaderEntry list with one
- address per line. Call this function when constructing the compose
- window in order to initialize the grid-widget. This function returns
- the number of items in the list or -1 indicating an error. The
- return list should be freed by the caller. */
-
- extern int MSG_RetrieveStandardHeaders(MSG_Pane * pane,
- MSG_HeaderEntry ** return_list);
-
- /* This function accepts a list of single-entry address items and
- condenses it down to a list of comma separated addressed. The
- order of occurance is maintained on a MSG_HEADER_SET basis.
- The return value indicated the size of the list. A return value
- of -1 indicates that an error has occured. The returned list
- as well as its contents should be freed by the caller. */
-
- extern int MSG_CompressHeaderEntries(MSG_HeaderEntry * in_list,
- int list_size,
- MSG_HeaderEntry ** return_list);
-
- /* call this function with the list returned by MSG_CompressHeaderEntries().
- pane - message pane, count - number of entries in list.
- The previous headers are cleared and the contents of the new list
- is used. The memory is freed as well. */
-
- extern void MSG_SetHeaderEntries(MSG_Pane * pane,
- MSG_HeaderEntry * in_list,
- int count);
-
- /* Clears all compose window headers (except the attachment list). */
-
- extern void MSG_ClearComposeHeaders(MSG_Pane * pane);
-
- /* Begin a "quote message" operation. This is complicated, because this is an
- asynchronous operation. (Getting the message to quote can be a network
- operation). So, the FE must provide a callback routine that inserts the
- quoted data, piecemeal. The callback will get called with a NULL string
- when things are all done (or if things failed or were cancelled.) The
- callback routine should return a negative value on error.
-
- Actually, if we're an HTML composition, we call the editor functions
- directly, and ignore the given func(). Pretty rude, huh.
- */
- #ifdef XP_OS2
- typedef int (*PNSQMFN)(void *, const char *);
-
- extern void MSG_QuoteMessage(MSG_Pane* comppane,
- PNSQMFN func,
- void* closure);
- #else
- extern void MSG_QuoteMessage(MSG_Pane* comppane,
- int (*func)(void* closure, const char* data),
- void* closure);
- #endif
-
- /* The FE is about to call MSG_SendComposition to cause things to be sent, but
- first, it wants to make sure that the user isn't trying to send something
- blatently stupid (like, no subject, or no body, or no "To:", or whatever).
- So, there's various sanity checks for it to make, and the FE can then take
- appropriate actions if the check failed. Each sanity check returns an
- error code describing the problem. The FE can pop up the string for that
- error code in a FE_Confirm() call. If FE_Confirm() returns TRUE, then the
- user doesn't care and wants to send the message anyway, so the FE can just
- call MSG_SanityCheck() again and pass the given errorcode as the skippast
- parameter. libmsg will skip that sanity check, and all the previous ones,
- and confirm that the other things work.
-
- It's up to the FE how to handle each error code; the FE_Confirm() method
- is just the suggested default. In particular, the FE should prompt the
- user for the subject if we return MK_MSG_MISSING_SUBJECT.
-
- The current sanity checks are:
-
- MK_MSG_MISSING_SUBJECT: There is no subject line.
- MK_MSG_EMPTY_MESSAGE: There is no real body, and no attachments.
- MK_MSG_DOUBLE_INCLUDE: The original message was both quoted and attached.
- MK_MSG_MIXED_SECURITY: Some recipients have certificates; some not.
-
- */
-
- extern int MSG_SanityCheck(MSG_Pane* comppane, int skippast);
-
- /* Get the URL associated with this context (the "X-Url" field.) */
- extern const char* MSG_GetAssociatedURL(MSG_Pane* comppane);
-
-
- /* This is completely foul, but the FE needs to call this from within
- FE_AllConnectionsComplete() when the context->type is
- MWContextMessageComposition.
- */
- extern void MSG_MailCompositionAllConnectionsComplete (MSG_Pane* pane);
-
-
- /* */
-
-
- /* Bring up the dialog box that presents the user with the list of domains that
- have been marked for HTML, and let the user edit them. */
-
- extern int MSG_DisplayHTMLDomainsDialog(MWContext* context);
-
-
- /* Returns whether the given folderinfo represents a newsgroup where
- HTML postings are OK. This is to be used in the property dialog
- for that newsgroup. This call should only be done on newsgroups. */
-
- extern XP_Bool MSG_IsHTMLOK(MSG_Master* master, MSG_FolderInfo* group);
-
- /* Sets whether the given newsgroup can have HTML. This can potentially
- pop up a confirmation window, so we ask for a MWContext* to use for that
- (yick). The folderinfo provided must represent a newsgroup. This is to
- be used in the property dialog for that newsgroup. */
-
- extern int MSG_SetIsHTMLOK(MSG_Master* master, MSG_FolderInfo* group,
- MWContext* context, XP_Bool value);
-
-
-
- /* Utility function that prefixes each line with "> " (for Paste As Quote). */
- extern char *MSG_ConvertToQuotation (const char *string);
-
- /* Paste the given plaintext into the running HTML editor as a quotation.
- This can only be used if the given composition pane is in HTML mode. */
- extern int MSG_PastePlaintextQuotation(MSG_Pane* comppane, const char* string);
-
-
- /* The user has just finished editing a given header (the field has lost focus
- or something like that.) Find out if some magic change needs to be made
- (e.g., the user typed a nickname from the addressbook and we want to replace
- it with the specified address.) If so, a new value to be displayed is
- returned. The returned string, if any, must be freed using XP_FREE(). This
- should be called before calling MSG_SetCompHeader(). */
-
- extern char* MSG_UpdateHeaderContents(MSG_Pane* comppane,
- MSG_HEADER_SET header,
- const char* value);
-
-
- /* If the sanity check return MK_MSG_MIXED_SECURITY, then the user may choose
- to remove non-secure people from the list. The FE can do so by calling
- this routine. It will then have to call MSG_GetCompHeader a few times
- to get and redisplay the new values for the To, Cc, and Bcc fields. */
-
- extern void MSG_RemoveNoCertRecipients(MSG_Pane* comppane);
-
- /* Inform the backend what is to be attached. The MSG_AttachmentData structure
- is defined in mime.h. The "list" parameter is an array of these fields,
- terminated by one which has a NULL url field. In each entry, all that you
- have to fill in is "url" and probably "desired_type"; NULL is generally fine
- for all the other fields (but you can fill them in too). See mime.h for all
- the spiffy details.
-
- Note that this call copies (sigh) all the data into libmsg; it is up to the
- caller to free any data it had to allocate to create the MSG_AttachmentData
- structure. */
-
- extern int MSG_SetAttachmentList(MSG_Pane* comppane,
- struct MSG_AttachmentData* list);
-
-
- /* Get what msglib's idea of what the current attachments are. DO NOT MODIFY
- THE DATA RETURNED; you can look, but don't touch. If you want to change
- the data, you have to copy out the whole structure somewhere, make your
- changes, call MSG_SetAttachmentList() with your new data, and then free
- your copy. If there are no attachments, this routine always returns
- NULL. */
- extern const struct MSG_AttachmentData*
- MSG_GetAttachmentList(MSG_Pane* comppane);
-
-
-
-
- /* The FE should call this in response to a `Show Interesting Headers' command,
- and when first initializing the composition window.. It returns the set of
- headers that ought to be displayed (and checked in the "view" menu.)
- */
- extern MSG_HEADER_SET MSG_GetInterestingHeaders(MSG_Pane* comppane);
-
-
-
- /* This function creates a new, blank mail message composition window. It
- causes calls to FE_CreateCompositionPane, which should drive the creation
- of the window.
- */
-
- MSG_Pane* MSG_Mail(MWContext *old_context);
-
- /* Convenience function to start composing a mail message from a web
- browser window - the currently-loaded document will be the default
- attachment should the user choose to attach it. The context may
- be of any type, or NULL. Returns the new message composition pane.
-
- This is going away, you should call MSG_MailDocumentURL with NULL
- for the second argument.
- */
- extern MSG_Pane* MSG_MailDocument(MWContext *context);
- /*
- Another version of MSG_MailDocument where pAttachmentURL explicitly gives the URL to attach.
- MSG_MailDocument() is still there for backwards compatability.
- */
- extern MSG_Pane* MSG_MailDocumentURL(MWContext *context,const char *pAttachmentURL);
-
- /* These routines were in mime.h, but defined in libmsg...*/
-
- /* Given a string which contains a list of RFC822 addresses, parses it into
- their component names and mailboxes.
-
- The returned value is the number of addresses, or a negative error code;
- the names and addresses are returned into the provided pointers as
- consecutive null-terminated strings. It is up to the caller to free them.
- Note that some of the strings may be zero-length.
-
- Either of the provided pointers may be NULL if the caller is not interested
- in those components.
- */
- extern int MSG_ParseRFC822Addresses (const char *line,
- char **names, char **addresses);
-
-
- /* Given a string which contains a list of RFC822 addresses, returns a
- comma-seperated list of just the `mailbox' portions.
- */
- extern char *MSG_ExtractRFC822AddressMailboxes (const char *line);
-
-
- /* Given a string which contains a list of RFC822 addresses, returns a
- comma-seperated list of just the `user name' portions. If any of
- the addresses doesn't have a name, then the mailbox is used instead.
- */
- extern char *MSG_ExtractRFC822AddressNames (const char *line);
-
- /* Like MSG_ExtractRFC822AddressNames(), but only returns the first name
- in the list, if there is more than one.
- */
- extern char *MSG_ExtractRFC822AddressName (const char *line);
-
- /* Given a string which contains a list of RFC822 addresses, returns a new
- string with the same data, but inserts missing commas, parses and reformats
- it, and wraps long lines with newline-tab.
- */
- extern char * MSG_ReformatRFC822Addresses (const char *line);
-
- /* Returns a copy of ADDRS which may have had some addresses removed.
- Addresses are removed if they are already in either ADDRS or OTHER_ADDRS.
- (If OTHER_ADDRS contain addresses which are not in ADDRS, they are not
- added. That argument is for passing in addresses that were already
- mentioned in other header fields.)
-
- Addresses are considered to be the same if they contain the same mailbox
- part (case-insensitive.) Real names and other comments are not compared.
- */
- extern char *MSG_RemoveDuplicateAddresses (const char *addrs,
- const char *other_addrs);
-
-
- /* Given an e-mail address and a person's name, cons them together into a
- single string of the form "name <address>", doing all the necessary quoting.
- A new string is returned, which you must free when you're done with it.
- */
- extern char *MSG_MakeFullAddress (const char* name, const char* addr);
-
- /* MSG_ParseRFC822Addresses returns quoted parsable addresses
- This function removes the quoting if you want to show the
- names to users. e.g. summary file, address book
- */
- extern int MSG_UnquotePhraseOrAddr (char *line, char** lineout);
-
-
- /* Returns the address book context, creating it if necessary. A mail pane is
- passed in, on the unlikely chance that it might be useful for the FE. If
- "viewnow" is TRUE, then present the address book window to the user;
- otherwise, don't (unless it is already visible).*/
-
- extern MWContext* FE_GetAddressBookContext(MSG_Pane* pane, XP_Bool viewnow);
-
- /* Notify the address book panes that the list of directory servers has changed
- This is only called from the address book. */
-
- extern int MSG_NotifyChangeDirectoryServers();
-
- XP_END_PROTOS
-
-
- #endif /* _MSGCOM_H_ */
-