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.
- */
- /* foobar Public API for mail (and news?) filters */
- #ifndef MSG_RULE_H
- #define MSG_RULE_H
-
- /*
- Terminology - Filter - either a Rule (defined with GUI) or a (Java) Script
- Rule -
- */
- #include "msg_srch.h"
-
- typedef enum
- {
- FilterError_Success = 0, /* no error */
- FilterError_First = SearchError_Last + 1, /* no functions return this; just for bookkeeping */
- FilterError_NotImplemented, /* coming soon */
- FilterError_OutOfMemory, /* out of memory */
- FilterError_FileError, /* error reading or writing the rules file */
- FilterError_InvalidVersion, /* invalid filter file version */
- FilterError_InvalidIndex, /* Invalid filter index */
- FilterError_InvalidMotion, /* invalid filter move motion */
- FilterError_InvalidFilterType, /* method doesn't accept this filter type */
- FilterError_NullPointer, /* a required pointer parameter was null */
- FilterError_NotRule, /* tried to get rule for non-rule filter */
- FilterError_NotScript, /* tried to get a script name for a non-script filter */
- FilterError_InvalidAction, /* invalid action */
- FilterError_SearchError, /* error in search code */
- FilterError_Last /* no functions return this; just for bookkeeping */
- } MSG_FilterError;
-
-
- typedef enum
- {
- acNone, /* uninitialized state */
- acMoveToFolder,
- acChangePriority,
- acDelete,
- acMarkRead,
- acKillThread,
- acWatchThread
- } MSG_RuleActionType;
-
- typedef enum
- {
- filterInboxRule = 0x1,
- filterInboxJavaScript = 0x2,
- filterInbox = 0x3,
- filterNewsRule = 0x4,
- filterNewsJavaScript = 0x8,
- filterNews=0xb,
- filterAll=0xf
- } MSG_FilterType;
-
- typedef enum
- {
- filterUp,
- filterDown
- } MSG_FilterMotion;
-
- typedef int32 MSG_FilterIndex;
-
- /* opaque struct defs - defined in libmsg/pmsgfilt.h */
- #ifdef XP_CPLUSPLUS
- struct MSG_Filter;
- struct MSG_Rule;
- struct MSG_RuleAction;
- struct MSG_FilterList;
- #else
- typedef struct MSG_FilterList MSG_FilterList;
- typedef struct MSG_Filter MSG_Filter;
- typedef struct MSG_Rule MSG_Rule;
- typedef struct MSG_RuleAction MSG_RuleAction;
- #endif
-
- XP_BEGIN_PROTOS
-
- /* Front ends call MSG_OpenFilterList to get a handle to a FilterList, of existing MSG_Filter *.
- These are manipulated by the front ends as a result of user interaction
- with dialog boxes. To apply the new list, fe's call MSG_CloseFilterList.
-
- For example, if the user brings up the rule management UI, deletes a rule,
- and presses OK, the front end calls MSG_RemoveFilterListAt, and
- then MSG_CloseFilterList.
-
- */
- MSG_FilterError MSG_OpenFilterList(MSG_Master *master, MSG_FilterType type, MSG_FilterList **filterList);
- MSG_FilterError MSG_OpenFolderFilterList(MSG_Pane *pane, MSG_FolderInfo *folder, MSG_FilterType type, MSG_FilterList **filterList);
- MSG_FilterError MSG_CloseFilterList(MSG_FilterList *filterList);
- MSG_FilterError MSG_SaveFilterList(MSG_FilterList *filterList); /* save without deleting */
- MSG_FilterError MSG_CancelFilterList(MSG_FilterList *filterList);
-
- MSG_FolderInfo *MSG_GetFolderInfoForFilterList(MSG_FilterList *filterList);
- MSG_FilterError MSG_GetFilterCount(MSG_FilterList *filterList, int32 *pCount);
- MSG_FilterError MSG_GetFilterAt(MSG_FilterList *filterList,
- MSG_FilterIndex filterIndex, MSG_Filter **filter);
- /* these methods don't delete filters - they just change the list. FE still must
- call MSG_DestroyFilter to delete a filter.
- */
- MSG_FilterError MSG_SetFilterAt(MSG_FilterList *filterList,
- MSG_FilterIndex filterIndex, MSG_Filter *filter);
- MSG_FilterError MSG_RemoveFilterAt(MSG_FilterList *filterList,
- MSG_FilterIndex filterIndex);
- MSG_FilterError MSG_MoveFilterAt(MSG_FilterList *filterList,
- MSG_FilterIndex filterIndex, MSG_FilterMotion motion);
- MSG_FilterError MSG_InsertFilterAt(MSG_FilterList *filterList,
- MSG_FilterIndex filterIndex, MSG_Filter *filter);
-
- MSG_FilterError MSG_EnableLogging(MSG_FilterList *filterList, XP_Bool enable);
- XP_Bool MSG_IsLoggingEnabled(MSG_FilterList *filterList);
-
- /* In general, any data gotten with MSG_*Get is good until the owning object
- is deleted, or the data is replaced with a MSG_*Set call. For example, the name
- returned in MSG_GetFilterName is valid until either the filter is destroyed,
- or MSG_SetFilterName is called on the same filter.
- */
- MSG_FilterError MSG_CreateFilter (MSG_FilterType type, char *name, MSG_Filter **result);
- MSG_FilterError MSG_DestroyFilter(MSG_Filter *filter);
- MSG_FilterError MSG_GetFilterType(MSG_Filter *, MSG_FilterType *filterType);
- MSG_FilterError MSG_EnableFilter(MSG_Filter *, XP_Bool enable);
- MSG_FilterError MSG_IsFilterEnabled(MSG_Filter *, XP_Bool *enabled);
- MSG_FilterError MSG_GetFilterRule(MSG_Filter *, MSG_Rule ** result);
- MSG_FilterError MSG_GetFilterName(MSG_Filter *, char **name);
- MSG_FilterError MSG_SetFilterName(MSG_Filter *, const char *name);
- MSG_FilterError MSG_GetFilterDesc(MSG_Filter *, char **description);
- MSG_FilterError MSG_SetFilterDesc(MSG_Filter*, const char *description);
- MSG_FilterError MSG_GetFilterScript(MSG_Filter *, char **name);
- MSG_FilterError MSG_SetFilterScript(MSG_Filter *, const char *name);
-
- MSG_FilterError MSG_RuleAddTerm(MSG_Rule *,
- MSG_SearchAttribute attrib, /* attribute for this term */
- MSG_SearchOperator op, /* operator e.g. opContains */
- MSG_SearchValue *value, /* value e.g. "Dogbert" */
- XP_Bool BooleanAND, /* TRUE if AND is the boolean operator. FALSE if OR is the boolean operators */
- char * arbitraryHeader); /* arbitrary header specified by user. ignored unless attrib = attribOtherHeader */
-
- MSG_FilterError MSG_RuleGetNumTerms(MSG_Rule *, int32 *numTerms);
-
- MSG_FilterError MSG_RuleGetTerm(MSG_Rule *, int32 termIndex,
- MSG_SearchAttribute *attrib, /* attribute for this term */
- MSG_SearchOperator *op, /* operator e.g. opContains */
- MSG_SearchValue *value, /* value e.g. "Dogbert" */
- XP_Bool *BooleanAnd, /* TRUE if AND is the boolean operator. FALSE if OR is the boolean operator */
- char ** arbitraryHeader); /* arbitrary header specified by user. ignore unless attrib = attribOtherHeader */
-
- MSG_FilterError MSG_RuleSetScope(MSG_Rule *, MSG_ScopeTerm *scope);
- MSG_FilterError MSG_RuleGetScope(MSG_Rule *, MSG_ScopeTerm **scope);
-
- /* if type is acChangePriority, value is a pointer to priority.
- If type is acMoveToFolder, value is pointer to folder name.
- Otherwise, value is ignored.
- */
- MSG_FilterError MSG_RuleSetAction(MSG_Rule *, MSG_RuleActionType type, void *value);
- MSG_FilterError MSG_RuleGetAction(MSG_Rule *, MSG_RuleActionType *type, void **value);
-
- /* help FEs manage menu choices in Filter dialog box */
-
- /* Use this to help build menus in the filter dialogs. See APIs below */
- typedef struct MSG_RuleMenuItem
- {
- int16 attrib;
- char name[32];
- } MSG_RuleMenuItem;
-
-
- MSG_FilterError MSG_GetRuleActionMenuItems (
- MSG_FilterType type, /* type of filter */
- MSG_RuleMenuItem *items, /* array of caller-allocated structs */
- uint16 *maxItems); /* in- max array size; out- num returned */
-
- MSG_FilterError MSG_GetFilterWidgetForAction( MSG_RuleActionType action,
- MSG_SearchValueWidget *widget );
-
- MSG_SearchError MSG_GetValuesForAction( MSG_RuleActionType action,
- MSG_SearchMenuItem *items,
- uint16 *maxItems);
-
- void MSG_ViewFilterLog(MSG_Pane *pane);
-
- /*
- ** Adding/editting javascript filters.
- **
- ** The FE calls one of the below functions, along with a callback and some closure
- ** data. This callback is invoked when the user clicks OK in the JS filter dialog.
- ** If CANCEL is pressed, the callback is not invoked.
- **
- ** If the user called MSG_EditJSFilter, the filter_index parameter of the callback
- ** is the same one passed in. If the user called MSG_NewJSFilter, the filter_index
- ** parameter is -1.
- **
- ** The filter_changed parameter is TRUE if the user modified any of the fields of
- ** the javascript filter, and FALSE otherwise.
- */
- typedef void (*JSFilterCallback)(void* arg, MSG_FilterIndex filter_index, XP_Bool filter_changed);
-
- void MSG_EditJSFilter(MWContext *context, MSG_FilterList *filter_list,
- MSG_FilterIndex filter_index,
- JSFilterCallback cb, void *arg);
- void MSG_NewJSFilter(MWContext *context, MSG_FilterList *filter_list,
- MSG_FilterType filter_type, JSFilterCallback cb, void *arg);
-
- XP_END_PROTOS
-
- #endif
-