/*
* $Id: $
*/
/* vim:et:ts=4:sw=4:et:sts=4:ai:set list listchars=tab\:»·,trail\:·: */
/*
* Virtual folder plugin for claws-mail
* Claws Mail is Copyright (C) 1999-2012 by the Claws Mail Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
*/
#ifndef __VFOLDER_H__
#define __VFOLDER_H__
#include
G_BEGIN_DECLS
#include "folder.h"
#include
#include "gettext.h"
/* Name of directory in rcdir where VFolder will store its data. */
#define VFOLDER_DIR "vfolder"
/* Parent mailbox name */
#define VFOLDER_DEFAULT_MAILBOX _("Virtual folders")
typedef enum {
SEARCH_HEADERS = 1, /* from/to/subject */
SEARCH_BODY = 2, /* message */
SEARCH_BOTH = 4 /* both */
} SearchType;
typedef struct {
guint my_num;
guint claws_num;
} MsgBridge;
/*typedef enum {
BEFORE_ADDING_MSG = 1,
BEFORE_DELETING_MSG = 2,
AFTER_ADDING_MSG = 4,
AFTER_DELETING_MSG = 8
} ChangeAction;
*/
typedef struct _VFolderItem VFolderItem;
typedef MsgInfoList* (*MSGFILTERFUNC) (MsgInfoList* msgs, VFolderItem* item);
struct _VFolderItem {
FolderItem item;
gchar* filter; /* Regex used to select messages */
gboolean frozen; /* Automatic update or not */
gboolean deep_copy; /* Copy messages or use reference */
SearchType search;
gboolean updating; /* Is this VFolder currently updating */
FolderItem* source; /* Source folder for virtual folder */
// MsgInfoList* msginfos; /* List of MsgInfo */
GHashTable* me_to_claws; /* Hashtable containing MsgBridge */
GHashTable* claws_to_me; /* Hashtable containing MsgBridge */
MSGFILTERFUNC msg_filter_func; /* Active filter function */
};
gboolean vfolder_init(void);
void vfolder_done(void);
FolderClass* vfolder_folder_get_class(void);
VFolderItem* vfolder_get_vfolder_item(const gchar* name);
GList* vfolder_get_vfolder_items(void);
GList* vfolder_get_vfolder_from_source(FolderItem* source);
gboolean vfolder_add_message_to_bridge(VFolderItem* item, MsgBridge* bridge);
gboolean vfolder_replace_key_in_bridge(VFolderItem* item, guint from, guint to);
MsgInfo* vfolder_find_msg_from_claws_num(VFolderItem* item, guint msgnum);
MsgInfo* vfolder_find_msg_from_vfolder_num(VFolderItem* item, guint msgnum);
void vfolder_folder_item_update_msgs(VFolderItem* item, FolderItemUpdateFlags flag);
#define VFOLDER_ITEM(obj) ((VFolderItem *)obj)
#define VFOLDER(obj) ((VFolder *)obj)
#define IS_VFOLDER_FOLDER(folder) \
((folder) && (folder->klass == vfolder_folder_get_class()))
#define IS_VFOLDER_FOLDER_ITEM(item) \
((item) && (item->folder->klass == vfolder_folder_get_class()))
#define IS_VFOLDER_MSGINFO(msginfo) \
((msginfo) && (msginfo->folder) && IS_VFOLDER_FOLDER_ITEM(msginfo->folder))
#define IS_VFOLDER_FROZEN(item) ((item) && (item->frozen))
#define IS_VFOLDER_DEEP_COPY(item) ((item) && (item->deep_copy))
G_END_DECLS
#endif