return NULL;
}
+Folder *folder_find_from_name(const gchar *name, FolderType type)
+{
+ GList *list;
+ Folder *folder;
+
+ for (list = folder_list; list != NULL; list = list->next) {
+ folder = list->data;
+ if (folder->type == type && strcmp2(name, folder->name) == 0)
+ return folder;
+ }
+
+ return NULL;
+}
+
static gboolean folder_item_find_func(GNode *node, gpointer data)
{
FolderItem *item = node->data;
return d[1];
}
+static const struct {
+ gchar *str;
+ FolderType type;
+} type_str_table[] = {
+ {"#mh" , F_MH},
+ {"#mbox" , F_MBOX},
+ {"#maildir", F_MAILDIR},
+ {"#imap" , F_IMAP},
+ {"#news" , F_NEWS}
+};
+
+static gchar *folder_get_type_string(FolderType type)
+{
+ gint i;
+
+ for (i = 0; i < sizeof(type_str_table) / sizeof(type_str_table[0]);
+ i++) {
+ if (type_str_table[i].type == type)
+ return type_str_table[i].str;
+ }
+
+ return NULL;
+}
+
+static FolderType folder_get_type_from_string(const gchar *str)
+{
+ gint i;
+
+ for (i = 0; i < sizeof(type_str_table) / sizeof(type_str_table[0]);
+ i++) {
+ if (g_strcasecmp(type_str_table[i].str, str) == 0)
+ return type_str_table[i].type;
+ }
+
+ return F_UNKNOWN;
+}
+
+gchar *folder_get_identifier(Folder *folder)
+{
+ gchar *type_str;
+
+ g_return_val_if_fail(folder != NULL, NULL);
+
+ type_str = folder_get_type_string(folder->type);
+ return g_strconcat(type_str, "/", folder->name, NULL);
+}
+
+gchar *folder_item_get_identifier(FolderItem *item)
+{
+ gchar *id;
+ gchar *folder_id;
+
+ g_return_val_if_fail(item != NULL, NULL);
+ g_return_val_if_fail(item->path != NULL, NULL);
+
+ folder_id = folder_get_identifier(item->folder);
+ id = g_strconcat(folder_id, "/", item->path, NULL);
+ g_free(folder_id);
+
+ return id;
+}
+
+FolderItem *folder_find_item_from_identifier(const gchar *identifier)
+{
+ Folder *folder;
+ gpointer d[2];
+ gchar *str;
+ gchar *p;
+ gchar *name;
+ gchar *path;
+ FolderType type;
+
+ g_return_val_if_fail(identifier != NULL, NULL);
+
+ if (*identifier != '#')
+ return folder_find_item_from_path(identifier);
+
+ Xstrdup_a(str, identifier, return NULL);
+
+ p = strchr(str, '/');
+ if (!p)
+ return folder_find_item_from_path(identifier);
+ *p = '\0';
+ p++;
+ type = folder_get_type_from_string(str);
+ if (type == F_UNKNOWN)
+ return folder_find_item_from_path(identifier);
+
+ name = p;
+ p = strchr(p, '/');
+ if (!p)
+ return folder_find_item_from_path(identifier);
+ *p = '\0';
+ p++;
+
+ folder = folder_find_from_name(name, type);
+ if (!folder)
+ return folder_find_item_from_path(identifier);
+
+ path = p;
+
+ d[0] = (gpointer)path;
+ d[1] = NULL;
+ g_node_traverse(folder->node, G_PRE_ORDER, G_TRAVERSE_ALL, -1,
+ folder_item_find_func, d);
+ return d[1];
+}
+
Folder *folder_get_default_folder(void)
{
return folder_list ? FOLDER(folder_list->data) : NULL;
return path;
}
-void folder_item_scan(FolderItem *item)
+gint folder_item_scan(FolderItem *item)
{
Folder *folder;
- g_return_if_fail(item != NULL);
+ g_return_val_if_fail(item != NULL, -1);
folder = item->folder;
-
- g_return_if_fail(folder->scan != NULL);
-
- folder->scan(folder, item);
+ return folder->scan(folder, item);
}
static void folder_item_scan_foreach_func(gpointer key, gpointer val,
} type_str;
-static type_str type_str_table[] =
-{
- {"#mh", F_MH},
- {"#mbox", F_MBOX},
- {"#maildir", F_MAILDIR},
- {"#imap", F_IMAP},
- {"#news", F_NEWS}
-};
-
-
-static gchar * folder_get_type_string(gint type)
-{
- gint i;
-
- for(i = 0 ; i < sizeof(type_str_table) / sizeof(type_str) ; i++) {
- if (type_str_table[i].type == type)
- return type_str_table[i].str;
- }
- return NULL;
-}
-
-static gint folder_get_type_from_string(gchar * str)
-{
- gint i;
-
- for(i = 0 ; i < sizeof(type_str_table) / sizeof(type_str) ; i++) {
- if (g_strcasecmp(type_str_table[i].str, str))
- return type_str_table[i].type;
- }
- return F_UNKNOWN;
-}
-
-gchar * folder_get_identifier(Folder * folder)
-{
- gchar * type_str;
- type_str = folder_get_type_string(folder->type);
-
- return g_strconcat(type_str, "/", folder->name, NULL);
-}
-
/*
static gchar * folder_item_get_tree_identifier(FolderItem * item)
{
}
*/
-gchar * folder_item_get_identifier(FolderItem * item)
-{
- gchar * id;
- gchar * folder_str;
-
- g_return_val_if_fail(item->path != NULL, NULL);
-
- folder_str = folder_get_identifier(item->folder);
- id = g_strconcat(folder_str, "/", item->path, NULL);
- g_free(folder_str);
-
- return id;
-}
-
-Folder * folder_find_from_name(const gchar * name)
-{
- GList *list;
- Folder *folder;
-
- for (list = g_list_first(folder_list); list != NULL;
- list = list->next) {
- folder = list->data;
- if (strcmp(name, folder->name) == 0)
- return folder;
- }
- return NULL;
-}
-
-FolderItem * folder_find_item_from_identifier(const gchar *identifier)
-{
- Folder *folder;
- gpointer d[2];
- gchar * str;
- gchar * p;
- gint type;
- gchar * name;
- gchar * path;
-
- Xstrdup_a(str, identifier, return NULL);
-
- /* extract box type */
-
- p = strchr(str, '/');
-
- if (p == NULL)
- return NULL;
-
- *p = '\0';
-
- type = folder_get_type_from_string(str);
-
- str = p + 1;
-
- /* extract box name */
-
- p = strchr(str, '/');
-
- if (p == NULL)
- return NULL;
-
- *p = '\0';
-
- name = str;
-
- folder = folder_find_from_name(name);
- if (folder == NULL)
- return;
-
- path = p + 1;
-
- d[0] = (gpointer)path;
- d[1] = NULL;
- g_node_traverse(folder->node, G_PRE_ORDER, G_TRAVERSE_ALL, -1,
- folder_item_find_func, d);
- return d[1];
-}
-
/* CLAWS: temporary local folder for filtering */
-
static Folder *processing_folder;
static FolderItem *processing_folder_item;