#include "nntp-thread.h"
#include "news.h"
-#include "news.h"
#include "news_gtk.h"
#include "socket.h"
#include "recv.h"
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;
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 */
filename = g_strconcat(path, G_DIR_SEPARATOR_S, itos(msgnum), NULL);
g_free(path);
- g_unlink(filename);
+ claws_unlink(filename);
g_free(filename);
return 0;
}
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;
if (ac->passwd && ac->passwd[0])
passwd = g_strdup(ac->passwd);
else
- passwd = input_dialog_query_password(ac->nntp_server,
- userid);
+ passwd = input_dialog_query_password_keep(ac->nntp_server,
+ userid,
+ &(ac->session_passwd));
}
#if (defined(USE_OPENSSL) || defined (USE_GNUTLS))
log_error(LOG_PROTOCOL, _("Error authenticating to %s:%d ...\n"), ac->nntp_server, port);
session_destroy(SESSION(session));
g_free(passwd);
+ if (ac->session_passwd) {
+ g_free(ac->session_passwd);
+ ac->session_passwd = NULL;
+ }
return NULL;
}
}
g_free(path);
if (is_file_exist(filename)) {
- g_unlink(filename);
+ claws_unlink(filename);
}
g_free(filename);
}
gint ok;
clist *grouplist = NULL;
clistiter *cur;
- fp = fopen(filename, "wb");
+ fp = g_fopen(filename, "wb");
if (!fp) {
g_free(filename);
gint news_post(Folder *folder, const gchar *file)
{
gint ok;
- char *contents = file_read_to_str(file);
+ char *contents = file_read_to_str_no_recode(file);
NewsSession *session;
g_return_val_if_fail(folder != NULL, -1);
}
ok = nntp_threaded_post(folder, contents, strlen(contents));
-
+
+ if (ok != NEWSNNTP_NO_ERROR && ok != NEWSNNTP_ERROR_STREAM) {
+ ok = nntp_threaded_mode_reader(folder);
+ if (ok == NEWSNNTP_NO_ERROR)
+ ok = nntp_threaded_post(folder, contents, strlen(contents));
+ }
g_free(contents);
+
if (ok == NEWSNNTP_ERROR_STREAM) {
session_destroy(SESSION(session));
REMOTE_FOLDER(folder)->session = NULL;
}
- return ok;
+ return (ok == NEWSNNTP_NO_ERROR ? 0 : -1);
}
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;
}
buf) < 0) {
FILE_OP_ERROR(tmp, "fprintf");
fclose(tmpfp);
- g_unlink(tmp);
+ claws_unlink(tmp);
g_free(tmp);
return -1;
}
if (fclose(tmpfp) == EOF) {
FILE_OP_ERROR(tmp, "fclose");
- g_unlink(tmp);
+ claws_unlink(tmp);
g_free(tmp);
return -1;
}
folder_path = news_folder_get_path(folder);
g_return_val_if_fail(folder_path != NULL, NULL);
- if (folder_path[0] == G_DIR_SEPARATOR) {
+ if (g_path_is_absolute(folder_path)) {
if (item->path)
path = g_strconcat(folder_path, G_DIR_SEPARATOR_S,
item->path, NULL);
folder_path, NULL);
}
g_free(folder_path);
-
+#ifdef G_OS_WIN32
+ while (strchr(path, '/'))
+ *strchr(path, '/') = '\\';
+#endif
return path;
}
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;