#include "imap.h"
#include "news.h"
#include "mh.h"
+#include "mbox_folder.h"
#include "utils.h"
#include "xml.h"
#include "codeconv.h"
#include "prefs.h"
#include "account.h"
#include "prefs_account.h"
+#include "mbox_folder.h"
static GList *folder_list = NULL;
static void local_folder_destroy (LocalFolder *lfolder);
static void remote_folder_destroy (RemoteFolder *rfolder);
static void mh_folder_destroy (MHFolder *folder);
+static void mbox_folder_destroy (MboxFolder *folder);
static void imap_folder_destroy (IMAPFolder *folder);
static void news_folder_destroy (NewsFolder *folder);
name = name ? name : path;
switch (type) {
+ case F_MBOX:
+ folder = mbox_folder_new(name, path);
+ break;
case F_MH:
folder = mh_folder_new(name, path);
break;
Folder *mbox_folder_new(const gchar *name, const gchar *path)
{
- /* not yet implemented */
- return NULL;
+ /* implementing */
+ Folder *folder;
+
+ folder = (Folder *)g_new0(MboxFolder, 1);
+ folder_init(folder, F_MBOX, name);
+ LOCAL_FOLDER(folder)->rootpath = g_strdup(path);
+
+ return folder;
}
Folder *maildir_folder_new(const gchar *name, const gchar *path)
item->folder = NULL;
item->data = NULL;
+ item->prefs = prefs_folder_item_new();
+
return item;
}
case F_MH:
mh_folder_destroy(MH_FOLDER(folder));
break;
+ case F_MBOX:
+ mbox_folder_destroy(MBOX_FOLDER(folder));
+ break;
case F_IMAP:
imap_folder_destroy(IMAP_FOLDER(folder));
break;
cur_folder = FOLDER(cur->data);
if (folder->type == F_MH) {
if (cur_folder->type != F_MH) break;
+ } else if (folder->type == F_MBOX) {
+ if (cur_folder->type != F_MH &&
+ cur_folder->type != F_MBOX) break;
} else if (folder->type == F_IMAP) {
if (cur_folder->type != F_MH &&
+ cur_folder->type != F_MBOX &&
cur_folder->type != F_IMAP) break;
} else if (folder->type == F_NEWS) {
if (cur_folder->type != F_MH &&
+ cur_folder->type != F_MBOX &&
cur_folder->type != F_IMAP &&
cur_folder->type != F_NEWS) break;
}
if (FOLDER_TYPE(item->folder) == F_MH)
folder_path = g_strdup(LOCAL_FOLDER(item->folder)->rootpath);
+ else if (FOLDER_TYPE(item->folder) == F_MBOX) {
+ path = mbox_get_virtual_path(item);
+ if (path == NULL)
+ return NULL;
+ folder_path = g_strconcat(get_mbox_cache_dir(),
+ G_DIR_SEPARATOR_S, path, NULL);
+ g_free(path);
+
+ return folder_path;
+ }
else if (FOLDER_TYPE(item->folder) == F_IMAP) {
g_return_val_if_fail(item->folder->account != NULL, NULL);
folder_path = g_strconcat(get_imap_cache_dir(),
g_return_if_fail(item != NULL);
folder = item->folder;
+
+ g_return_if_fail(folder->scan != NULL);
+
folder->scan(folder, item);
}
g_return_val_if_fail(item != NULL, NULL);
folder = item->folder;
+
+ g_return_val_if_fail(folder->scan != NULL, NULL);
+ g_return_val_if_fail(folder->fetch_msg != NULL, NULL);
+
if (item->last_num < 0) folder->scan(folder, item);
return folder->fetch_msg(folder, item, num);
}
-gint folder_item_add_msg(FolderItem *dest, const gchar *file)
+gint folder_item_add_msg(FolderItem *dest, const gchar *file,
+ gboolean remove_source)
{
Folder *folder;
gint num;
g_return_val_if_fail(dest != NULL, -1);
g_return_val_if_fail(file != NULL, -1);
- g_return_val_if_fail(dest->folder->add_msg != NULL, -1);
folder = dest->folder;
+
+ g_return_val_if_fail(folder->scan != NULL, -1);
+ g_return_val_if_fail(folder->add_msg != NULL, -1);
+
if (dest->last_num < 0) folder->scan(folder, dest);
- num = folder->add_msg(folder, dest, file);
+ num = folder->add_msg(folder, dest, file, remove_source);
if (num > 0) dest->last_num = num;
return num;
g_return_val_if_fail(msginfo != NULL, -1);
folder = dest->folder;
+
+ g_return_val_if_fail(folder->scan != NULL, -1);
+ g_return_val_if_fail(folder->move_msg != NULL, -1);
+
if (dest->last_num < 0) folder->scan(folder, dest);
num = folder->move_msg(folder, dest, msginfo);
g_return_val_if_fail(msglist != NULL, -1);
folder = dest->folder;
+
+ g_return_val_if_fail(folder->scan != NULL, -1);
+ g_return_val_if_fail(folder->move_msgs_with_dest != NULL, -1);
+
if (dest->last_num < 0) folder->scan(folder, dest);
num = folder->move_msgs_with_dest(folder, dest, msglist);
g_return_val_if_fail(msginfo != NULL, -1);
folder = dest->folder;
+
+ g_return_val_if_fail(folder->scan != NULL, -1);
+ g_return_val_if_fail(folder->copy_msg != NULL, -1);
+
if (dest->last_num < 0) folder->scan(folder, dest);
num = folder->copy_msg(folder, dest, msginfo);
g_return_val_if_fail(msglist != NULL, -1);
folder = dest->folder;
+
+ g_return_val_if_fail(folder->scan != NULL, -1);
+ g_return_val_if_fail(folder->copy_msgs_with_dest != NULL, -1);
+
if (dest->last_num < 0) folder->scan(folder, dest);
num = folder->copy_msgs_with_dest(folder, dest, msglist);
g_return_val_if_fail(item != NULL, -1);
folder = item->folder;
+
+ g_return_val_if_fail(folder->scan != NULL, -1);
+ g_return_val_if_fail(folder->remove_msg != NULL, -1);
+
if (item->last_num < 0) folder->scan(folder, item);
return folder->remove_msg(folder, item, num);
Folder *folder;
g_return_val_if_fail(item != NULL, -1);
+ g_return_val_if_fail(folder->scan != NULL, -1);
+ g_return_val_if_fail(folder->remove_all_msg != NULL, -1);
folder = item->folder;
if (item->last_num < 0) folder->scan(folder, item);
g_return_val_if_fail(item != NULL, FALSE);
folder = item->folder;
+
+ g_return_val_if_fail(folder->is_msg_changed != NULL, -1);
+
return folder->is_msg_changed(folder, item, msginfo);
}
folder->remove_folder = imap_remove_folder;
break;
case F_NEWS:
- folder->get_msg_list = news_get_article_list;
- folder->fetch_msg = news_fetch_msg;
- folder->scan = news_scan_group;
+ folder->get_msg_list = news_get_article_list;
+ folder->fetch_msg = news_fetch_msg;
+ folder->scan = news_scan_group;
+ break;
+ case F_MBOX:
+ folder->get_msg_list = mbox_get_msg_list;
+ folder->fetch_msg = mbox_fetch_msg;
+ folder->scan = mbox_scan_folder;
+ folder->add_msg = mbox_add_msg;
+ folder->remove_all_msg = mbox_remove_all_msg;
+ folder->remove_msg = mbox_remove_msg;
+ folder->update_mark = mbox_update_mark;
+ folder->move_msg = mbox_move_msg;
+ folder->move_msgs_with_dest = mbox_move_msgs_with_dest;
+
+ /*
+ folder->remove_msg = mh_remove_msg;
+ folder->is_msg_changed = mh_is_msg_changed;
+ folder->scan_tree = mh_scan_tree;
+ folder->create_tree = mh_create_tree;
+ folder->create_folder = mh_create_folder;
+ folder->rename_folder = mh_rename_folder;
+ folder->remove_folder = mh_remove_folder;*/
break;
default:
}
local_folder_destroy(LOCAL_FOLDER(folder));
}
+static void mbox_folder_destroy(MboxFolder *folder)
+{
+ local_folder_destroy(LOCAL_FOLDER(folder));
+}
+
static void imap_folder_destroy(IMAPFolder *folder)
{
remote_folder_destroy(REMOTE_FOLDER(folder));
case F_TRASH: folder->trash = item; break;
default:
}
+
+ prefs_folder_item_read_config(item);
+
node->data = item;
xml_free_node(xmlnode);