2007-01-17 [colin] 2.7.1cvs16
[claws.git] / src / folder.h
index 5534b46bea89e51ec80f356685e5ef2294ee88d8..57acfee4b79e579a30272425d53a2edb5b75579a 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-2007 Hiroyuki Yamamoto and 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
@@ -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,
@@ -569,9 +570,39 @@ struct _FolderClass
                                                 MsgInfoList    *msglist,
                                                 GRelation      *msgflags);
        
+       /* Sets batch mode for a FolderItem. It means that numerous flags updates
+        * could follow, and the FolderClass implementation can cache them in order
+        * to process them later when set_false will be called again with the
+        * batch parameter set to FALSE. 
+        */
        void            (*set_batch)            (Folder         *folder,
                                                 FolderItem     *item,
                                                 gboolean        batch);
+       /* Called when switching offline or asking for synchronisation. the imple
+        * mentation should do what's necessary to be able to read mails present
+        * in the FolderItem at this time with no network connectivity. 
+        */
+       void            (*synchronise)          (FolderItem     *item);
+       
+       /* Passed from claws-mail --subscribe scheme://uri. Implementations
+        * should check if they handle this type of URI, and return TRUE in this
+        * case after having subscribed it.
+        */
+       gboolean        (*subscribe)            (Folder         *folder,
+                                                const gchar    *uri);
+       
+       /* Gets the preferred sort key and type for a folderclass. */
+       void            (*get_sort_type)        (Folder         *folder,
+                                                FolderSortKey  *sort_key,
+                                                FolderSortType *sort_type);
+       
+       /* Copies internal FolderItem data from one folderItem to another. Used
+        * when moving folders (this move is in reality a folder creation, content
+        * move, folder delettion).
+        */
+       void            (*copy_private_data)    (Folder         *folder,
+                                                FolderItem     *src,
+                                                FolderItem     *dest);
 };
 
 struct _FolderItem
@@ -623,6 +654,11 @@ struct _FolderItem
        gpointer data;
 
        FolderItemPrefs * prefs;
+       
+       /* for faster search of special parents */
+       SpecialFolderItemType parent_stype;
+       gboolean processing_pending;
+       gboolean scanning;
 };
 
 struct _PersistPrefs
@@ -696,7 +732,8 @@ 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);
+void   folder_fast_scan_tree   (Folder *folder);
 FolderItem *folder_create_folder(FolderItem    *parent, const gchar *name);
 gint   folder_item_rename      (FolderItem *item, gchar *newname);
 void   folder_update_op_count          (void);
@@ -736,6 +773,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,
@@ -760,7 +799,8 @@ gint   folder_item_add_msgs             (FolderItem     *dest,
                                          gboolean        remove_source);
 gint   folder_item_move_to             (FolderItem     *src,
                                         FolderItem     *dest,
-                                        FolderItem    **new_item);
+                                        FolderItem    **new_item,
+                                        gboolean        copy);
 gint   folder_item_move_msg            (FolderItem     *dest,
                                         MsgInfo        *msginfo);
 gint   folder_item_move_msgs           (FolderItem     *dest,
@@ -790,7 +830,7 @@ 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);
@@ -805,4 +845,19 @@ 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__ */