/* * $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