2009-01-11 [colin] 3.7.0cvs30
[claws.git] / src / folder.c
index 4a8143d481ac3fd411a12759ec5d9cacd489a8aa..2a7c9320d047efac446787df26f10b904fac2e90 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2008 Hiroyuki Yamamoto and the Claws Mail team
+ * Copyright (C) 1999-2009 Hiroyuki Yamamoto and the Claws Mail team
  *
  * 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
@@ -398,6 +398,7 @@ void folder_item_remove(FolderItem *item)
 {
        GNode *node, *start_node;
        FolderUpdateData hookdata;
+       gchar *tags_file = NULL;
 
        g_return_if_fail(item != NULL);
        g_return_if_fail(item->folder != NULL);
@@ -424,6 +425,10 @@ void folder_item_remove(FolderItem *item)
                msgcache_destroy(item->cache);
                item->cache = NULL;
        }
+       tags_file = folder_item_get_tags_file(item);
+       if (tags_file)
+               claws_unlink(tags_file);
+       g_free(tags_file);
 
        hookdata.folder = item->folder;
        hookdata.update_flags = FOLDER_TREE_CHANGED | FOLDER_REMOVE_FOLDERITEM;
@@ -959,6 +964,8 @@ void folder_fast_scan_tree(Folder *folder)
 FolderItem *folder_create_folder(FolderItem *parent, const gchar *name)
 {
        FolderItem *new_item;
+       
+       g_return_val_if_fail(parent != NULL, NULL);
 
        new_item = parent->folder->klass->create_folder(parent->folder, parent, name);
        if (new_item) {
@@ -1317,14 +1324,10 @@ FolderItem *folder_find_child_item_by_name(FolderItem *item, const gchar *name)
        FolderItem *child;
 
        for (node = item->node->children; node != NULL; node = node->next) {
-               gchar *base;
                child = FOLDER_ITEM(node->data);
-               base = g_path_get_basename(child->path);
-               if (strcmp2(base, name) == 0) {
-                       g_free(base);
+               if (strcmp2(child->name, name) == 0) {
                        return child;
                }
-               g_free(base);
        }
 
        return NULL;
@@ -2112,7 +2115,8 @@ gint folder_item_scan_full(FolderItem *item, gboolean filtering)
                        }
 
                        /* Move to next folder number */
-                       folder_list_cur = folder_list_cur->next;
+                       if (folder_list_cur)
+                               folder_list_cur = folder_list_cur->next;
 
                        if (folder_list_cur != NULL)
                                folder_cur_num = GPOINTER_TO_INT(folder_list_cur->data);
@@ -2131,7 +2135,8 @@ gint folder_item_scan_full(FolderItem *item, gboolean filtering)
                        debug_print("Removed message %d from cache.\n", cache_cur_num);
 
                        /* Move to next cache number */
-                       cache_list_cur = cache_list_cur->next;
+                       if (cache_list_cur)
+                               cache_list_cur = cache_list_cur->next;
 
                        if (cache_list_cur != NULL)
                                cache_cur_num = ((MsgInfo *)cache_list_cur->data)->msgnum;
@@ -2168,8 +2173,11 @@ gint folder_item_scan_full(FolderItem *item, gboolean filtering)
                        }
                        
                        /* Move to next folder and cache number */
-                       cache_list_cur = cache_list_cur->next;
-                       folder_list_cur = folder_list_cur->next;
+                       if (cache_list_cur)
+                               cache_list_cur = cache_list_cur->next;
+                       
+                       if (folder_list_cur)
+                               folder_list_cur = folder_list_cur->next;
 
                        if (cache_list_cur != NULL)
                                cache_cur_num = ((MsgInfo *)cache_list_cur->data)->msgnum;
@@ -2582,7 +2590,10 @@ void folder_item_write_cache(FolderItem *item)
                return;
 
        last_mtime = item->mtime;
-       need_scan = item->folder->klass->scan_required(item->folder, item);
+       if (item->folder->klass->scan_required)
+               need_scan = item->folder->klass->scan_required(item->folder, item);
+       else
+               need_scan = TRUE;
 
        id = folder_item_get_identifier(item);
        debug_print("Save cache for folder %s\n", id);