/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2011 Hiroyuki Yamamoto and the Claws Mail team
+ * Copyright (C) 1999-2012 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
#ifdef HAVE_CONFIG_H
# include "config.h"
+#include "claws-features.h"
#endif
#ifdef HAVE_LIBETPAN
struct _NewsSession
{
Session session;
-
+ Folder *folder;
gchar *group;
};
news_class.type = F_NEWS;
news_class.idstr = "news";
news_class.uistr = "News";
+ news_class.supports_server_search = FALSE;
/* Folder functions */
news_class.new_folder = news_folder_new;
news_class.get_msginfos = news_get_msginfos;
news_class.fetch_msg = news_fetch_msg;
news_class.synchronise = news_synchronise;
+ news_class.search_msgs = folder_item_search_msgs_local;
news_class.remove_msg = news_remove_msg;
news_class.remove_cached_msg = news_remove_cached_msg;
};
g_free(news_session->group);
}
+static gboolean nntp_ping(gpointer data)
+{
+ Session *session = (Session *)data;
+ NewsSession *news_session = NEWS_SESSION(session);
+ int r;
+ struct tm lt;
+
+ if (session->state != SESSION_READY || news_folder_locked(news_session->folder))
+ return FALSE;
+
+ if ((r = nntp_threaded_date(news_session->folder, <)) != NEWSNNTP_NO_ERROR) {
+ if (r != NEWSNNTP_ERROR_COMMAND_NOT_SUPPORTED &&
+ r != NEWSNNTP_ERROR_COMMAND_NOT_UNDERSTOOD) {
+ log_warning(LOG_PROTOCOL, _("NNTP connection to %s:%d has been"
+ " disconnected.\n"),
+ news_session->folder->account->nntp_server,
+ news_session->folder->account->set_nntpport ?
+ news_session->folder->account->nntpport : NNTP_PORT);
+ REMOTE_FOLDER(news_session->folder)->session = NULL;
+ session_destroy(session);
+ return FALSE;
+ }
+ }
+ session_set_access_time(session);
+ return TRUE;
+}
+
+
#ifdef USE_GNUTLS
static Session *news_session_new(Folder *folder, const gchar *server, gushort port,
const gchar *userid, const gchar *passwd,
int r = 0;
cm_return_val_if_fail(server != NULL, NULL);
- log_message(LOG_PROTOCOL, _("Account '%s': Connecting to NNTP server: %s...\n"),
- folder->account->account_name, server);
+ log_message(LOG_PROTOCOL, _("Account '%s': Connecting to NNTP server: %s:%d...\n"),
+ folder->account->account_name, server, port);
session = g_new0(NewsSession, 1);
session_init(SESSION(session), folder->account, FALSE);
session_destroy(SESSION(session));
return NULL;
}
-
+
+ session->folder = folder;
+
+ session_register_ping(SESSION(session), nntp_ping);
return SESSION(session);
}
session = news_session_new(folder, ac->nntp_server, port, userid, passwd);
#endif
- r = nntp_threaded_mode_reader(folder);
+ if (session != NULL)
+ r = nntp_threaded_mode_reader(folder);
+ else
+ r = NEWSNNTP_ERROR_CONNECTION_REFUSED;
+
if (r != NEWSNNTP_NO_ERROR) {
if (r == NEWSNNTP_WARNING_REQUEST_AUTHORIZATION_USERNAME) {
/*
static NewsSession *news_session_get(Folder *folder)
{
RemoteFolder *rfolder = REMOTE_FOLDER(folder);
- struct tm lt;
- int r;
cm_return_val_if_fail(folder != NULL, NULL);
cm_return_val_if_fail(FOLDER_CLASS(folder) == &news_class, NULL);
return NEWS_SESSION(rfolder->session);
}
- if ((r = nntp_threaded_date(folder, <)) != NEWSNNTP_NO_ERROR) {
- if (r != NEWSNNTP_ERROR_COMMAND_NOT_SUPPORTED &&
- r != NEWSNNTP_ERROR_COMMAND_NOT_UNDERSTOOD) {
- log_warning(LOG_PROTOCOL, _("NNTP connection to %s:%d has been"
- " disconnected. Reconnecting...\n"),
- folder->account->nntp_server,
- folder->account->set_nntpport ?
- folder->account->nntpport : NNTP_PORT);
- session_destroy(rfolder->session);
- rfolder->session = news_session_new_for_folder(folder);
- }
- }
+ if (!nntp_ping(rfolder->session))
+ rfolder->session = news_session_new_for_folder(folder);
newsession:
if (rfolder->session)
NewsSession *session;
GSList *elem, *msginfo_list = NULL, *tmp_msgnum_list, *tmp_msginfo_list;
guint first, last, next;
- guint tofetch, fetched;
+/* guint tofetch, fetched;
+*/
cm_return_val_if_fail(folder != NULL, NULL);
cm_return_val_if_fail(FOLDER_CLASS(folder) == &news_class, NULL);
tmp_msgnum_list = g_slist_sort(tmp_msgnum_list, g_int_compare);
progressindicator_start(PROGRESS_TYPE_NETWORK);
- tofetch = g_slist_length(tmp_msgnum_list);
+/* tofetch = g_slist_length(tmp_msgnum_list);
fetched = 0;
+*/
first = GPOINTER_TO_INT(tmp_msgnum_list->data);
last = first;
*/
tmp_msginfo_list = news_get_msginfos_for_range(session, item, first, last);
msginfo_list = g_slist_concat(msginfo_list, tmp_msginfo_list);
- fetched = last - first + 1;
+/* fetched = last - first + 1;
+*/
first = next;
}
last = next;
return 0;
}
+void nntp_disconnect_all(gboolean have_connectivity)
+{
+ GList *list;
+ gboolean short_timeout;
+#ifdef HAVE_NETWORKMANAGER_SUPPORT
+ GError *error;
+#endif
+
+#ifdef HAVE_NETWORKMANAGER_SUPPORT
+ error = NULL;
+ short_timeout = !networkmanager_is_online(&error);
+ if(error) {
+ short_timeout = TRUE;
+ g_error_free(error);
+ }
+#else
+ short_timeout = TRUE;
+#endif
+
+ if(short_timeout)
+ nntp_main_set_timeout(1);
+
+ for (list = account_get_list(); list != NULL; list = list->next) {
+ PrefsAccount *account = list->data;
+ if (account->protocol == A_NNTP) {
+ RemoteFolder *folder = (RemoteFolder *)account->folder;
+ if (folder && folder->session) {
+ NewsSession *session = (NewsSession *)folder->session;
+ if (have_connectivity)
+ nntp_threaded_disconnect(FOLDER(folder));
+ SESSION(session)->state = SESSION_DISCONNECTED;
+ SESSION(session)->sock = NULL;
+ session_destroy(SESSION(session));
+ folder->session = NULL;
+ }
+ }
+ }
+
+ if(short_timeout)
+ nntp_main_set_timeout(prefs_common.io_timeout_secs);
+}
+
#else
#include <glib.h>
#include <glib/gi18n.h>
return &news_class;
}
+void nntp_disconnect_all(gboolean have_connectivity)
+{
+}
#endif