0.8.6claws51
[claws.git] / src / folder.h
index 9dececed38f5b86454b82f106181cce41cf8b67f..3472aa9d8badf151ce85a92395092f927c235784 100644 (file)
 #include <glib.h>
 #include <time.h>
 
-typedef struct _Folder         Folder;
-typedef struct _LocalFolder    LocalFolder;
-typedef struct _RemoteFolder   RemoteFolder;
+typedef struct _Folder                 Folder;
+typedef struct _LocalFolder            LocalFolder;
+typedef struct _RemoteFolder           RemoteFolder;
 #if 0
-typedef struct _MaildirFolder  MaildirFolder;
+typedef struct _MaildirFolder          MaildirFolder;
 #endif
-typedef struct _FolderItem     FolderItem;
+typedef struct _FolderItem             FolderItem;
+typedef struct _FolderItemUpdateData   FolderItemUpdateData;
 
 #include "prefs_folder_item.h"
 
@@ -54,6 +55,8 @@ typedef struct _FolderItem    FolderItem;
 
 #define FOLDER_ITEM(obj)       ((FolderItem *)obj)
 
+#define FOLDER_ITEM_UPDATE_HOOKLIST "folder_item_update"
+
 typedef enum
 {
        F_MH,
@@ -96,6 +99,15 @@ typedef enum
        SORT_DESCENDING
 } FolderSortType;
 
+typedef enum
+{
+       F_MOVE_OK,
+       F_MOVE_FAILED_DEST_IS_PARENT,
+       F_MOVE_FAILED_DEST_IS_CHILD,
+       F_MOVE_FAILED_DEST_OUTSIDE_MAILBOX,
+       F_MOVE_FAILED
+} FolderMoveStatus;
+
 typedef void (*FolderUIFunc)           (Folder         *folder,
                                         FolderItem     *item,
                                         gpointer        data);
@@ -133,13 +145,16 @@ struct _Folder
                                         FolderItem     *item,
                                         gboolean        use_cache);
 */
+       FolderItem *(*item_new)         (Folder         *folder);
+       void     (*item_destroy)        (Folder         *folder,
+                                        FolderItem     *item);
        gchar *  (*fetch_msg)           (Folder         *folder,
                                         FolderItem     *item,
                                         gint            num);
-       MsgInfo *(*fetch_msginfo)       (Folder         *folder,
+       MsgInfo * (*get_msginfo)        (Folder         *folder,
                                         FolderItem     *item,
                                         gint            num);
-       GSList  *(*fetch_msginfos)      (Folder         *folder,
+       GSList  * (*get_msginfos)       (Folder         *folder,
                                         FolderItem     *item,
                                         GSList         *msgnum_list);
        gint     (*add_msg)             (Folder         *folder,
@@ -161,14 +176,18 @@ struct _Folder
        gint     (*remove_msg)          (Folder         *folder,
                                         FolderItem     *item,
                                         gint            num);
+       gint     (*remove_msgs)         (Folder         *folder,
+                                        FolderItem     *item,
+                                        GSList         *msglist);
        gint     (*remove_all_msg)      (Folder         *folder,
                                         FolderItem     *item);
        gboolean (*is_msg_changed)      (Folder         *folder,
                                         FolderItem     *item,
                                         MsgInfo        *msginfo);
        gint     (*scan)                (Folder         *folder);
-       GSList  * (*get_num_list)       (Folder         *folder,
-                                        FolderItem     *item);
+       gint     (*get_num_list)        (Folder         *folder,
+                                        FolderItem     *item,
+                                        GSList        **list);
        void     (*scan_tree)           (Folder         *folder);
 
        gint     (*create_tree)         (Folder         *folder);
@@ -180,6 +199,8 @@ struct _Folder
                                         const gchar    *name);
        gint     (*remove_folder)       (Folder         *folder,
                                         FolderItem     *item);
+
+       void     (*destroy)             (Folder         *folder);
        void     (*update_mark)         (Folder         *folder,
                                         FolderItem     *item);
        void     (*change_flags)        (Folder         *folder,
@@ -217,13 +238,13 @@ struct _FolderItem
 
        gchar *name;
        gchar *path;
-       PrefsAccount *account;
 
        time_t mtime;
 
        gint new;
        gint unread;
        gint total;
+       gint unreadmarked;
 
        gint last_num;
 
@@ -239,6 +260,7 @@ struct _FolderItem
 
        gint op_count;
        guint opened    : 1; /* opened by summary view */
+       guint need_update    : 1; /* folderview for this folder should be updated */
 
        FolderSortKey sort_key;
        FolderSortType sort_type;
@@ -247,6 +269,10 @@ struct _FolderItem
 
        Folder *folder;
 
+       PrefsAccount *account;
+
+       gboolean apply_sub;
+       
        GSList *mark_queue;
 
        gpointer data;
@@ -263,6 +289,12 @@ typedef struct {
        guint           ret_rcpt        : 1; /* CLAWS */
 } PersistPrefs;
 
+struct _FolderItemUpdateData
+{
+       FolderItem      *item;
+       gboolean         content_change;
+};
+
 Folder     *folder_new                 (FolderType      type,
                                         const gchar    *name,
                                         const gchar    *path);
@@ -298,11 +330,13 @@ GList *folder_get_list            (void);
 gint   folder_read_list                (void);
 void   folder_write_list       (void);
 void   folder_scan_tree                (Folder *folder);
+FolderItem *folder_create_folder(FolderItem    *parent, const gchar *name);
 void   folder_update_op_count          (void);
 void   folder_func_to_all_folders      (FolderItemFunc function,
                                         gpointer data);
 void   folder_count_total_msgs (guint          *new,
                                 guint          *unread,
+                                guint          *unreadmarked,
                                 guint          *total);
 
 Folder     *folder_find_from_path              (const gchar    *path);
@@ -321,13 +355,18 @@ FolderItem *folder_get_default_queue      (void);
 FolderItem *folder_get_default_trash   (void);
 FolderItem *folder_get_default_processing (void);
 void folder_set_missing_folders                (void);
+void folder_unref_account_all          (PrefsAccount   *account);
 
+gchar *folder_get_path                 (Folder         *folder);
 gchar *folder_item_get_path            (FolderItem     *item);
+
+gint   folder_item_open                        (FolderItem     *item);
+void   folder_item_close               (FolderItem     *item);
 gint   folder_item_scan                        (FolderItem     *item);
 void   folder_item_scan_foreach                (GHashTable     *table);
-MsgInfo *folder_item_fetch_msginfo     (FolderItem     *item,
+MsgInfo *folder_item_get_msginfo       (FolderItem     *item,
                                         gint            num);
-MsgInfo *folder_item_fetch_msginfo_by_id(FolderItem    *item,
+MsgInfo *folder_item_get_msginfo_by_msgid(FolderItem   *item,
                                         const gchar    *msgid);
 GSList *folder_item_get_msg_list       (FolderItem     *item);
 gchar *folder_item_fetch_msg           (FolderItem     *item,
@@ -335,6 +374,9 @@ gchar *folder_item_fetch_msg                (FolderItem     *item,
 gint   folder_item_add_msg             (FolderItem     *dest,
                                         const gchar    *file,
                                         gboolean        remove_source);
+gint   folder_item_move_to             (FolderItem     *src,
+                                        FolderItem     *dest,
+                                        FolderItem    **new_item);
 gint   folder_item_move_msg            (FolderItem     *dest,
                                         MsgInfo        *msginfo);
 gint   folder_item_move_msgs_with_dest (FolderItem     *dest,
@@ -353,7 +395,6 @@ gboolean folder_item_is_msg_changed (FolderItem     *item,
 gchar *folder_item_get_cache_file      (FolderItem     *item);
 gchar *folder_item_get_mark_file       (FolderItem     *item);
 gchar * folder_item_get_identifier(FolderItem * item);
-FolderItem * folder_find_item_from_identifier(const gchar *identifier);
 
 GHashTable *folder_persist_prefs_new   (Folder *folder);
 void folder_persist_prefs_free         (GHashTable *pptable);
@@ -367,4 +408,10 @@ void folder_item_set_default_flags (FolderItem *dest, MsgFlags *flags);
 
 void folder_item_apply_processing      (FolderItem *item);
 
+void folder_update_item                        (FolderItem *item,
+                                        gboolean contentchange);
+void folder_update_items_when_required (gboolean contentchange);
+void folder_update_item_recursive      (FolderItem *item,
+                                        gboolean update_summary);
+
 #endif /* __FOLDER_H__ */