#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"
#define FOLDER_ITEM(obj) ((FolderItem *)obj)
+#define FOLDER_ITEM_UPDATE_HOOKLIST "folder_item_update"
+
typedef enum
{
F_MH,
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);
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,
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);
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,
gchar *name;
gchar *path;
- PrefsAccount *account;
time_t mtime;
gint new;
gint unread;
gint total;
+ gint unreadmarked;
gint last_num;
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;
Folder *folder;
+ PrefsAccount *account;
+
+ gboolean apply_sub;
+
GSList *mark_queue;
gpointer data;
guint ret_rcpt : 1; /* CLAWS */
} PersistPrefs;
+struct _FolderItemUpdateData
+{
+ FolderItem *item;
+ gboolean content_change;
+};
+
Folder *folder_new (FolderType type,
const gchar *name,
const gchar *path);
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);
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,
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,
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);
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__ */