2008-07-29 [colin] 3.5.0cvs37
[claws.git] / src / news.c
index 473f0437c3715dd3113f2bcddd20fd2de3ab7d30..b9947a028e2a2d58e6531976113ecc96ba0068d2 100644 (file)
@@ -37,7 +37,6 @@
 
 #include "nntp-thread.h"
 #include "news.h"
-#include "news.h"
 #include "news_gtk.h"
 #include "socket.h"
 #include "recv.h"
@@ -147,6 +146,9 @@ static void news_synchronise                 (FolderItem    *item, gint days);
 static int news_remove_msg              (Folder        *folder, 
                                          FolderItem    *item, 
                                          gint           msgnum);
+static gint news_rename_folder          (Folder *folder,
+                                         FolderItem *item,
+                                         const gchar *name);
 static gint news_remove_folder          (Folder        *folder,
                                          FolderItem    *item);
 static FolderClass news_class;
@@ -166,6 +168,7 @@ FolderClass *news_get_class(void)
                news_class.item_get_path = news_item_get_path;
                news_class.get_num_list = news_get_num_list;
                news_class.scan_required = news_scan_required;
+               news_class.rename_folder = news_rename_folder;
                news_class.remove_folder = news_remove_folder;
 
                /* Message functions */
@@ -294,7 +297,7 @@ static Session *news_session_new(Folder *folder, const gchar *server, gushort po
        log_message(LOG_PROTOCOL, _("creating NNTP connection to %s:%d ...\n"), server, port);
 
        session = g_new0(NewsSession, 1);
-       session_init(SESSION(session));
+       session_init(SESSION(session), folder->account, FALSE);
        SESSION(session)->type             = SESSION_NEWS;
        SESSION(session)->server           = g_strdup(server);
        SESSION(session)->sock             = NULL;
@@ -709,9 +712,9 @@ static gint news_get_article(Folder *folder, gint num, gchar *filename)
        if (r == NEWSNNTP_NO_ERROR) {
                if (str_write_to_file(result, filename) < 0)
                        return -1;
+               g_free(result);
        }
        
-       g_free(result);
        return r;
 }
 
@@ -1212,6 +1215,26 @@ void news_synchronise(FolderItem *item, gint days)
        news_gtk_synchronise(item, days);
 }
 
+static gint news_rename_folder(Folder *folder, FolderItem *item,
+                               const gchar *name)
+{
+       gchar *path;
+        
+       g_return_val_if_fail(folder != NULL, -1);
+       g_return_val_if_fail(item != NULL, -1);
+       g_return_val_if_fail(item->path != NULL, -1);
+       g_return_val_if_fail(name != NULL, -1);
+
+       path = folder_item_get_path(item);
+       if (!is_dir_exist(path))
+               make_dir_hier(path);
+
+       g_free(item->name);
+       item->name = g_strdup(name);
+
+       return 0;
+}
+
 static gint news_remove_folder(Folder *folder, FolderItem *item)
 {
        gchar *path;