2006-10-04 [colin] 2.5.2cvs42
[claws.git] / src / folder.h
index 49d33f23842168d21a05b7b5d1e7301b7e92f612..a349e9a16864375ced6f99026138e0a0ae7cd7c1 100644 (file)
@@ -2,7 +2,7 @@
 
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2006 Hiroyuki Yamamoto and the Sylpheed-Claws 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
@@ -16,7 +16,7 @@
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
 #ifndef __FOLDER_H__
@@ -95,7 +95,7 @@ typedef enum
        F_MOVE_FAILED_DEST_IS_PARENT = -1,
        F_MOVE_FAILED_DEST_IS_CHILD = -2,
        F_MOVE_FAILED_DEST_OUTSIDE_MAILBOX = -3,
-       F_MOVE_FAILED = -4,
+       F_MOVE_FAILED = -4
 } FolderItemMoveResult;
 
 typedef enum
@@ -105,6 +105,7 @@ typedef enum
        FOLDER_TREE_CHANGED             = 1 << 2,
        FOLDER_ADD_FOLDERITEM           = 1 << 3,
        FOLDER_REMOVE_FOLDERITEM        = 1 << 4,
+       FOLDER_RENAME_FOLDERITEM        = 1 << 5
 } FolderUpdateFlags;
 
 typedef enum
@@ -113,7 +114,7 @@ typedef enum
        F_ITEM_UPDATE_CONTENT = 1 << 1,
        F_ITEM_UPDATE_ADDMSG = 1 << 2,
        F_ITEM_UPDATE_REMOVEMSG = 1 << 3,
-       F_ITEM_UPDATE_NAME = 1 << 4,
+       F_ITEM_UPDATE_NAME = 1 << 4
 } FolderItemUpdateFlags;
 
 typedef void (*FolderUIFunc)           (Folder         *folder,
@@ -430,6 +431,11 @@ struct _FolderClass
        gchar           *(*fetch_msg)           (Folder         *folder,
                                                 FolderItem     *item,
                                                 gint            num);
+       gchar           *(*fetch_msg_full)      (Folder         *folder,
+                                                FolderItem     *item,
+                                                gint            num,
+                                                gboolean        headers,
+                                                gboolean        body);
        /**
         * Add a single message file to a folder with the given flags (if
         * flag handling is supported by the folder)
@@ -503,6 +509,10 @@ struct _FolderClass
        gint            (*remove_msg)           (Folder         *folder,
                                                 FolderItem     *item,
                                                 gint            num);
+       gint            (*remove_msgs)          (Folder         *folder,
+                                                FolderItem     *item,
+                                                MsgInfoList    *msglist,
+                                                GRelation      *relation);
        /**
         * Remove all messages in a \ c FolderItem
         *
@@ -559,6 +569,16 @@ struct _FolderClass
                                                 FolderItem     *item,
                                                 MsgInfoList    *msglist,
                                                 GRelation      *msgflags);
+       
+       void            (*set_batch)            (Folder         *folder,
+                                                FolderItem     *item,
+                                                gboolean        batch);
+       void            (*synchronise)          (FolderItem     *item);
+       gboolean        (*subscribe)            (Folder         *folder,
+                                                const gchar    *uri);
+       void            (*get_sort_type)        (Folder         *folder,
+                                                FolderSortKey  *sort_key,
+                                                FolderSortType *sort_type);
 };
 
 struct _FolderItem
@@ -574,6 +594,7 @@ struct _FolderItem
        gint unread_msgs;
        gint total_msgs;
        gint unreadmarked_msgs;
+       gint marked_msgs;
 
        gint last_num;
 
@@ -587,6 +608,7 @@ struct _FolderItem
        guint threaded       : 1; /* threaded folder view */
        guint hide_read_msgs : 1; /* hide read messages   */
        guint ret_rcpt       : 1; /* return receipt       */
+       guint search_match   : 1;
 
        gint op_count;
        guint opened         : 1; /* opened by summary view */
@@ -608,6 +630,11 @@ struct _FolderItem
        gpointer data;
 
        FolderItemPrefs * prefs;
+       
+       /* for faster search of special parents */
+       SpecialFolderItemType parent_stype;
+       gboolean processing_pending;
+       gboolean scanning;
 };
 
 struct _PersistPrefs
@@ -681,16 +708,15 @@ void   folder_remove              (Folder         *folder);
 GList *folder_get_list         (void);
 gint   folder_read_list                (void);
 void   folder_write_list       (void);
-void   folder_scan_tree                (Folder *folder);
+void   folder_scan_tree                (Folder *folder, gboolean rebuild);
 FolderItem *folder_create_folder(FolderItem    *parent, const gchar *name);
 gint   folder_item_rename      (FolderItem *item, gchar *newname);
 void   folder_update_op_count          (void);
 void   folder_func_to_all_folders      (FolderItemFunc function,
                                         gpointer data);
-void   folder_count_total_msgs (guint          *new_msgs,
-                                guint          *unread_msgs,
-                                guint          *unreadmarked_msgs,
-                                guint          *total_msgs);
+void folder_count_total_msgs(guint *new_msgs, guint *unread_msgs, 
+                            guint *unreadmarked_msgs, guint *marked_msgs,
+                            guint *total_msgs);
 gchar *folder_get_status       (GPtrArray      *folders,
                                 gboolean        full);
 
@@ -698,7 +724,6 @@ Folder     *folder_find_from_path           (const gchar    *path);
 Folder     *folder_find_from_name              (const gchar    *name,
                                                 FolderClass    *klass);
 FolderItem *folder_find_item_from_path         (const gchar    *path);
-FolderItem *folder_find_item_from_phys_path    (const gchar    *path);
 FolderClass *folder_get_class_from_string      (const gchar    *str);
 FolderItem *folder_find_child_item_by_name     (FolderItem     *item,
                                                 const gchar    *name);
@@ -723,6 +748,8 @@ gchar *folder_item_get_path         (FolderItem     *item);
 gint   folder_item_open                        (FolderItem     *item);
 gint   folder_item_close               (FolderItem     *item);
 gint   folder_item_scan                        (FolderItem     *item);
+gint   folder_item_scan_full           (FolderItem     *item, 
+                                        gboolean        filtering);
 gint   folder_item_syncronize_flags    (FolderItem     *item);
 void   folder_item_scan_foreach                (GHashTable     *table);
 MsgInfo *folder_item_get_msginfo       (FolderItem     *item,
@@ -733,6 +760,10 @@ GSList *folder_item_get_msg_list   (FolderItem     *item);
 /* return value is locale charset */
 gchar *folder_item_fetch_msg           (FolderItem     *item,
                                         gint            num);
+gchar *folder_item_fetch_msg_full      (FolderItem     *item,
+                                        gint            num, 
+                                        gboolean        get_headers,
+                                        gboolean        get_body);
 gint   folder_item_fetch_all_msg       (FolderItem     *item);
 gint   folder_item_add_msg             (FolderItem     *dest,
                                         const gchar    *file,
@@ -773,7 +804,8 @@ const PersistPrefs *folder_get_persist_prefs
                                        (GHashTable *pptable, const char *name);
 
 void folder_item_restore_persist_prefs (FolderItem *item, GHashTable *pptable);
-void folder_clean_cache_memory         (void);
+void folder_clean_cache_memory         (FolderItem *protected_item);
+void folder_clean_cache_memory_force   (void);
 void folder_item_write_cache           (FolderItem *item);
 void folder_item_set_default_flags     (FolderItem *dest, MsgFlags *flags);
 
@@ -785,5 +817,21 @@ void folder_item_update_recursive  (FolderItem *item,
                                         FolderItemUpdateFlags update_flags);
 void folder_item_update_freeze         (void);
 void folder_item_update_thaw           (void);
+void folder_item_set_batch             (FolderItem *item, gboolean batch);
+gboolean folder_has_parent_of_type     (FolderItem *item, SpecialFolderItemType type);
+void folder_synchronise                        (Folder *folder);
+gboolean folder_want_synchronise       (Folder *folder);
+void folder_item_process_open          (FolderItem *item,
+                                        void (*before_proc_func)(gpointer data),
+                                        void (*after_proc_func)(gpointer data),
+                                        gpointer data);
+gboolean folder_subscribe              (const gchar *uri);
+gboolean folder_have_mailbox           (void);
+gboolean folder_item_free_cache                (FolderItem *item, gboolean force);
+void folder_item_change_type           (FolderItem *item,
+                                        SpecialFolderItemType newtype);
+gboolean folder_get_sort_type          (Folder         *folder,
+                                        FolderSortKey  *sort_key,
+                                        FolderSortType *sort_type);
 
 #endif /* __FOLDER_H__ */