/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2003 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2005 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 "defs.h"
#include <glib.h>
+#include <glib/gi18n.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
-#include "intl.h"
#include "folder.h"
#include "session.h"
#include "imap.h"
if (!attr || !attr->name || !attr->value) continue;
if (!strcmp(attr->name, "type")) {
- if (!strcasecmp(attr->value, "normal"))
+ if (!g_ascii_strcasecmp(attr->value, "normal"))
item->stype = F_NORMAL;
- else if (!strcasecmp(attr->value, "inbox"))
+ else if (!g_ascii_strcasecmp(attr->value, "inbox"))
item->stype = F_INBOX;
- else if (!strcasecmp(attr->value, "outbox"))
+ else if (!g_ascii_strcasecmp(attr->value, "outbox"))
item->stype = F_OUTBOX;
- else if (!strcasecmp(attr->value, "draft"))
+ else if (!g_ascii_strcasecmp(attr->value, "draft"))
item->stype = F_DRAFT;
- else if (!strcasecmp(attr->value, "queue"))
+ else if (!g_ascii_strcasecmp(attr->value, "queue"))
item->stype = F_QUEUE;
- else if (!strcasecmp(attr->value, "trash"))
+ else if (!g_ascii_strcasecmp(attr->value, "trash"))
item->stype = F_TRASH;
} else if (!strcmp(attr->name, "name")) {
if (item->name != NULL)
if (status->str) {
id = folder_item_get_identifier(item);
- g_string_sprintfa(status->str, "%5d %5d %5d %s\n",
+ g_string_append_printf(status->str, "%5d %5d %5d %s\n",
item->new_msgs, item->unread_msgs,
item->total_msgs, id);
g_free(id);
gchar *id;
id = folder_item_get_identifier(item);
- g_string_sprintfa(str, "%5d %5d %5d %s\n",
+ g_string_append_printf(str, "%5d %5d %5d %s\n",
item->new_msgs, item->unread_msgs,
item->total_msgs, id);
g_free(id);
}
if (full)
- g_string_sprintfa(str, "%5d %5d %5d\n", new, unread, total);
+ g_string_append_printf(str, "%5d %5d %5d\n", new, unread, total);
else
- g_string_sprintfa(str, "%d %d %d\n", new, unread, total);
+ g_string_append_printf(str, "%d %d %d\n", new, unread, total);
ret = str->str;
g_string_free(str, FALSE);
FolderItem *child;
for (node = item->node->children; node != NULL; node = node->next) {
+ gchar *base;
child = FOLDER_ITEM(node->data);
- if (strcmp2(g_basename(child->path), name) == 0)
+ base = g_path_get_basename(child->path);
+ if (strcmp2(base, name) == 0) {
+ g_free(base);
return child;
+ }
+ g_free(base);
}
return NULL;
classlist = folder_get_class_list();
for (; classlist != NULL; classlist = g_slist_next(classlist)) {
FolderClass *class = (FolderClass *) classlist->data;
- if (g_strcasecmp(class->idstr, str) == 0)
+ if (g_ascii_strcasecmp(class->idstr, str) == 0)
return class;
}
gint folder_item_open(FolderItem *item)
{
gchar *buf;
- if((item->folder->klass->scan_required != NULL) && (item->folder->klass->scan_required(item->folder, item))) {
+ if((item->folder->klass->scan_required != NULL) &&
+ (item->folder->klass->scan_required(item->folder, item))) {
folder_item_scan_full(item, TRUE);
}
folder_item_syncronize_flags(item);
return msginfo;
}
+static gint syncronize_flags(FolderItem *item, MsgInfoList *msglist)
+{
+ GRelation *relation;
+ gint ret = 0;
+ GSList *cur;
+
+ if(msglist == NULL)
+ return 0;
+ if(item->folder->klass->get_flags == NULL)
+ return 0;
+
+ relation = g_relation_new(2);
+ g_relation_index(relation, 0, g_direct_hash, g_direct_equal);
+ if ((ret = item->folder->klass->get_flags(
+ item->folder, item, msglist, relation)) == 0) {
+ GTuples *tuples;
+ MsgInfo *msginfo;
+ MsgPermFlags permflags;
+ gboolean skip;
+
+ for (cur = msglist; cur != NULL; cur = g_slist_next(cur)) {
+ msginfo = (MsgInfo *) cur->data;
+
+ tuples = g_relation_select(relation, msginfo, 0);
+ skip = tuples->len < 1;
+ if (!skip)
+ permflags = GPOINTER_TO_INT(g_tuples_index(tuples, 0, 1));
+ g_tuples_destroy(tuples);
+ if (skip)
+ continue;
+
+ if (msginfo->flags.perm_flags != permflags) {
+ procmsg_msginfo_set_flags(msginfo,
+ permflags & ~msginfo->flags.perm_flags, 0);
+ procmsg_msginfo_unset_flags(msginfo,
+ ~permflags & msginfo->flags.perm_flags, 0);
+ }
+ }
+ }
+ g_relation_destroy(relation);
+
+ return ret;
+}
+
gint folder_item_scan_full(FolderItem *item, gboolean filtering)
{
Folder *folder;
g_slist_free(new_list);
}
+ syncronize_flags(item, exists_list);
+
folder_item_update_freeze();
if (newmsg_list != NULL) {
GSList *elem;
return 0;
}
-gint folder_item_syncronize_flags(FolderItem *item)
-{
- MsgInfoList *msglist = NULL;
- GSList *cur;
- GRelation *relation;
- gint ret = 0;
-
- g_return_val_if_fail(item != NULL, -1);
- g_return_val_if_fail(item->folder != NULL, -1);
- g_return_val_if_fail(item->folder->klass != NULL, -1);
- if(item->folder->klass->get_flags == NULL)
- return 0;
-
- if (item->cache == NULL)
- folder_item_read_cache(item);
-
- msglist = msgcache_get_msg_list(item->cache);
-
- relation = g_relation_new(2);
- g_relation_index(relation, 0, g_direct_hash, g_direct_equal);
- if ((ret = item->folder->klass->get_flags(
- item->folder, item, msglist, relation)) == 0) {
- GTuples *tuples;
- MsgInfo *msginfo;
- MsgPermFlags permflags;
- gboolean skip;
-
- for (cur = msglist; cur != NULL; cur = g_slist_next(cur)) {
- msginfo = (MsgInfo *) cur->data;
-
- tuples = g_relation_select(relation, msginfo, 0);
- skip = tuples->len < 1;
- if (!skip)
- permflags = GPOINTER_TO_INT(g_tuples_index(tuples, 0, 1));
- g_tuples_destroy(tuples);
- if (skip)
- continue;
-
- if (msginfo->flags.perm_flags != permflags) {
- procmsg_msginfo_set_flags(msginfo,
- permflags & ~msginfo->flags.perm_flags, 0);
- procmsg_msginfo_unset_flags(msginfo,
- ~permflags & msginfo->flags.perm_flags, 0);
- }
- }
- }
- g_relation_destroy(relation);
-
- for (cur = msglist; cur != NULL; cur = g_slist_next(cur))
- procmsg_msginfo_free((MsgInfo *) cur->data);
-
- return ret;
-}
-
gint folder_item_scan(FolderItem *item)
{
return folder_item_scan_full(item, TRUE);
*memusage += msgcache_get_memory_usage(item->cache);
}
+gint folder_item_syncronize_flags(FolderItem *item)
+{
+ MsgInfoList *msglist = NULL;
+ GSList *cur;
+ gint ret = 0;
+
+ g_return_val_if_fail(item != NULL, -1);
+ g_return_val_if_fail(item->folder != NULL, -1);
+ g_return_val_if_fail(item->folder->klass != NULL, -1);
+
+ if (item->cache == NULL)
+ folder_item_read_cache(item);
+
+ msglist = msgcache_get_msg_list(item->cache);
+
+ ret = syncronize_flags(item, msglist);
+
+ for (cur = msglist; cur != NULL; cur = g_slist_next(cur))
+ procmsg_msginfo_free((MsgInfo *) cur->data);
+
+ return ret;
+}
+
gint folder_cache_time_compare_func(gconstpointer a, gconstpointer b)
{
FolderItem *fa = (FolderItem *)a;
while((listitem != NULL) && (memusage > (prefs_common.cache_max_mem_usage * 1024))) {
FolderItem *item = (FolderItem *)(listitem->data);
- debug_print("Freeing cache memory for %s\n", item->path);
+ debug_print("Freeing cache memory for %s\n", item->path ? item->path : item->name);
memusage -= msgcache_get_memory_usage(item->cache);
folder_item_free_cache(item);
listitem = listitem->next;
}
phys_srcpath = folder_item_get_path(src);
- phys_dstpath = g_strconcat(folder_item_get_path(dest),G_DIR_SEPARATOR_S,g_basename(phys_srcpath),NULL);
+ phys_dstpath = g_strconcat(folder_item_get_path(dest),
+ G_DIR_SEPARATOR_S,
+ g_path_get_basename(phys_srcpath),
+ NULL);
if (folder_item_parent(src) == dest || src == dest) {
g_free(src_identifier);
folder = item->folder;
- g_return_val_if_fail(folder->klass->remove_all_msg != NULL, -1);
+ if (folder->klass->remove_all_msg != NULL) {
+ result = folder->klass->remove_all_msg(folder, item);
- result = folder->klass->remove_all_msg(folder, item);
+ if (result == 0) {
+ folder_item_free_cache(item);
+ item->cache = msgcache_new();
+ }
+ } else {
+ MsgInfoList *msglist;
- if (result == 0) {
- folder_item_free_cache(item);
- item->cache = msgcache_new();
+ msglist = folder_item_get_msg_list(item);
+ result = folder_item_remove_msgs(item, msglist);
+ procmsg_msg_list_free(msglist);
+ }
+ if (result == 0) {
item->new_msgs = 0;
item->unread_msgs = 0;
item->unreadmarked_msgs = 0;