/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
*
* 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
#include <glib.h>
#include <time.h>
-typedef struct _Folder Folder;
-typedef struct _FolderClass FolderClass;
-typedef struct _LocalFolder LocalFolder;
-typedef struct _RemoteFolder RemoteFolder;
-#if 0
-typedef struct _MaildirFolder MaildirFolder;
-#endif
-typedef struct _FolderItem FolderItem;
+typedef struct _Folder Folder;
+typedef struct _FolderClass FolderClass;
+typedef struct _FolderItem FolderItem;
typedef struct _FolderUpdateData FolderUpdateData;
typedef struct _FolderItemUpdateData FolderItemUpdateData;
+typedef struct _PersistPrefs PersistPrefs;
#define FOLDER(obj) ((Folder *)obj)
-#define FOLDER_TYPE(obj) (FOLDER(obj)->klass->type)
-
#define FOLDER_CLASS(obj) (FOLDER(obj)->klass)
-#define LOCAL_FOLDER(obj) ((LocalFolder *)obj)
-#define REMOTE_FOLDER(obj) ((RemoteFolder *)obj)
+#define FOLDER_TYPE(obj) (FOLDER(obj)->klass->type)
#define FOLDER_IS_LOCAL(obj) (FOLDER_TYPE(obj) == F_MH || \
FOLDER_TYPE(obj) == F_MBOX || \
FOLDER_TYPE(obj) == F_MAILDIR)
-#if 0
-#define MAILDIR_FOLDER(obj) ((MaildirFolder *)obj)
-#endif
-
#define FOLDER_ITEM(obj) ((FolderItem *)obj)
#define FOLDER_UPDATE_HOOKLIST "folder_update"
typedef enum
{
FOLDER_TREE_CHANGED = 1 << 0,
-/*
- maybe enhance with:
- FOLDER_NEW_FOLDERITEM
- FOLDER_REMOVE_FOLDERITEM
-*/
+ FOLDER_NEW_FOLDERITEM = 1 << 1,
+ FOLDER_REMOVE_FOLDERITEM = 1 << 2,
} FolderUpdateFlags;
typedef enum
typedef void (*FolderItemFunc) (FolderItem *item,
gpointer data);
+
#include "folder_item_prefs.h"
-#include "prefs_account.h"
-#include "session.h"
#include "procmsg.h"
#include "msgcache.h"
+#include "xml.h"
+#include "prefs_account.h"
struct _Folder
{
Folder *(*new_folder) (const gchar *name,
const gchar *path);
void (*destroy_folder) (Folder *folder);
- void (*scan_tree) (Folder *folder);
+ gint (*scan_tree) (Folder *folder);
gint (*create_tree) (Folder *folder);
/* FolderItem functions */
FolderItem *(*item_new) (Folder *folder);
- void (*item_destroy) (Folder *folder,
+ void (*item_destroy) (Folder *folder,
+ FolderItem *item);
+ void (*item_set_xml) (Folder *folder,
+ FolderItem *item,
+ XMLTag *tag);
+ XMLTag *(*item_get_xml) (Folder *folder,
FolderItem *item);
gchar *(*item_get_path) (Folder *folder,
FolderItem *item);
FolderItem *(*create_folder) (Folder *folder,
FolderItem *parent,
const gchar *name);
- gint (*rename_folder) (Folder *folder,
+ gint (*rename_folder) (Folder *folder,
FolderItem *item,
const gchar *name);
- gint (*remove_folder) (Folder *folder,
+ gint (*remove_folder) (Folder *folder,
+ FolderItem *item);
+ gint (*close) (Folder *folder,
FolderItem *item);
- gint (*get_num_list) (Folder *folder,
+ gint (*get_num_list) (Folder *folder,
FolderItem *item,
- GSList **list);
+ GSList **list,
+ gboolean *old_uids_valid);
void (*update_mark) (Folder *folder,
FolderItem *item);
void (*finished_copy) (Folder *folder,
FolderItem *item);
void (*finished_remove) (Folder *folder,
- FolderItem * item);
- gboolean (*check_msgnum_validity)(Folder *folder,
- FolderItem * item);
+ FolderItem *item);
+ gboolean (*scan_required) (Folder *folder,
+ FolderItem *item);
/* Message functions */
MsgInfo *(*get_msginfo) (Folder *folder,
gint num);
gint (*add_msg) (Folder *folder,
FolderItem *dest,
- const gchar *file);
+ const gchar *file,
+ MsgFlags *flags);
gint (*add_msgs) (Folder *folder,
FolderItem *dest,
GSList *file_list,
- MsgNumberList **newnum_list);
+ GRelation *relation);
gint (*copy_msg) (Folder *folder,
FolderItem *dest,
MsgInfo *msginfo);
gint (*copy_msgs) (Folder *folder,
FolderItem *dest,
MsgInfoList *msglist,
- MsgNumberList **newnum_list);
+ GRelation *relation);
gint (*remove_msg) (Folder *folder,
FolderItem *item,
gint num);
MsgPermFlags newflags);
};
-struct _LocalFolder
-{
- Folder folder;
-
- gchar *rootpath;
-};
-
-struct _RemoteFolder
-{
- Folder folder;
-
- Session *session;
-};
-
-#if 0
-struct _MaildirFolder
-{
- LocalFolder lfolder;
-};
-#endif
-
struct _FolderItem
{
SpecialFolderItemType stype;
FolderSortKey sort_key;
FolderSortType sort_type;
+ GNode *node;
+
FolderItem *parent;
Folder *folder;
FolderItemPrefs * prefs;
};
-typedef struct {
+struct _PersistPrefs
+{
FolderSortKey sort_key;
FolderSortType sort_type;
guint collapsed : 1;
guint threaded : 1;
guint hide_read_msgs : 1; /* CLAWS */
guint ret_rcpt : 1; /* CLAWS */
-} PersistPrefs;
+};
struct _FolderUpdateData
{
Folder *folder;
FolderUpdateFlags update_flags;
-/*
- FolderItem *item
-*/
+ FolderItem *item;
};
struct _FolderItemUpdateData
Folder *folder_new (FolderClass *type,
const gchar *name,
const gchar *path);
-void folder_local_folder_init (Folder *folder,
- const gchar *name,
- const gchar *path);
-void folder_remote_folder_init (Folder *folder,
- const gchar *name,
- const gchar *path);
+void folder_init (Folder *folder,
+ const gchar *name);
void folder_destroy (Folder *folder);
-void folder_local_folder_destroy (LocalFolder *lfolder);
-void folder_remote_folder_destroy(RemoteFolder *rfolder);
-FolderItem *folder_item_new (Folder *folder,
- const gchar *name,
- const gchar *path);
-void folder_item_append (FolderItem *parent,
- FolderItem *item);
-void folder_item_remove (FolderItem *item);
-void folder_item_destroy (FolderItem *item);
+XMLTag *folder_item_get_attrs (Folder *folder,
+ FolderItem *item);
+
+FolderItem *folder_item_new (Folder *folder,
+ const gchar *name,
+ const gchar *path);
+void folder_item_append (FolderItem *parent,
+ FolderItem *item);
+void folder_item_remove (FolderItem *item);
+void folder_item_remove_children (FolderItem *item);
+void folder_item_destroy (FolderItem *item);
void folder_set_ui_func (Folder *folder,
FolderUIFunc func,
gchar *folder_item_get_path (FolderItem *item);
gint folder_item_open (FolderItem *item);
-void folder_item_close (FolderItem *item);
+gint folder_item_close (FolderItem *item);
gint folder_item_scan (FolderItem *item);
void folder_item_scan_foreach (GHashTable *table);
MsgInfo *folder_item_get_msginfo (FolderItem *item,
gint num);
gint folder_item_add_msg (FolderItem *dest,
const gchar *file,
+ MsgFlags *flags,
gboolean remove_source);
gint folder_item_add_msgs (FolderItem *dest,
GSList *file_list,
FolderItem **new_item);
gint folder_item_move_msg (FolderItem *dest,
MsgInfo *msginfo);
-gint folder_item_move_msgs_with_dest (FolderItem *dest,
+gint folder_item_move_msgs (FolderItem *dest,
GSList *msglist);
gint folder_item_copy_msg (FolderItem *dest,
MsgInfo *msginfo);
-gint folder_item_copy_msgs_with_dest (FolderItem *dest,
+gint folder_item_copy_msgs (FolderItem *dest,
GSList *msglist);
gint folder_item_remove_msg (FolderItem *item,
gint num);
MsgInfo *msginfo);
gchar *folder_item_get_cache_file (FolderItem *item);
gchar *folder_item_get_mark_file (FolderItem *item);
-gchar * folder_item_get_identifier(FolderItem * item);
+gchar * folder_item_get_identifier (FolderItem * item);
GHashTable *folder_persist_prefs_new (Folder *folder);
void folder_persist_prefs_free (GHashTable *pptable);