/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2002 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2003 Hiroyuki Yamamoto
*
* 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
{
F_NEWS,
"news",
+ "News",
+ /* Folder functions */
+ news_folder_new,
+ news_folder_destroy,
NULL,
NULL,
- news_fetch_msg,
- news_get_msginfo,
- news_get_msginfos,
+
+ /* FolderItem functions */
NULL,
NULL,
NULL,
NULL,
NULL,
- news_remove_msg,
- NULL,
+ news_get_num_list,
NULL,
NULL,
NULL,
- news_get_num_list,
NULL,
+
+ /* Message functions */
+ news_get_msginfo,
+ news_get_msginfos,
+ news_fetch_msg,
NULL,
NULL,
NULL,
NULL,
- news_folder_destroy,
NULL,
+ news_remove_msg,
NULL,
NULL,
NULL,
NULL,
};
+FolderClass *news_get_class()
+{
+ return &news_class;
+}
+
Folder *news_folder_new(const gchar *name, const gchar *path)
{
Folder *folder;
if (nntp_sock == NULL)
return NULL;
- session = g_new(NNTPSession, 1);
+ session = g_new0(NNTPSession, 1);
+ session_init(SESSION(session));
SESSION(session)->type = SESSION_NEWS;
SESSION(session)->server = g_strdup(server);
- session->nntp_sock = nntp_sock;
- SESSION(session)->sock = nntp_sock->sock;
- SESSION(session)->connected = TRUE;
- SESSION(session)->phase = SESSION_READY;
- SESSION(session)->last_access_time = time(NULL);
+ SESSION(session)->sock = NULL;
SESSION(session)->data = NULL;
SESSION(session)->destroy = news_session_destroy;
- session->group = NULL;
+ session->nntp_sock = nntp_sock;
+ session->group = NULL;
return SESSION(session);
}
{
nntp_close(NNTP_SESSION(session)->nntp_sock);
NNTP_SESSION(session)->nntp_sock = NULL;
- session->sock = NULL;
g_free(NNTP_SESSION(session)->group);
}
RemoteFolder *rfolder = REMOTE_FOLDER(folder);
g_return_val_if_fail(folder != NULL, NULL);
- g_return_val_if_fail(FOLDER_TYPE(folder) == F_NEWS, NULL);
+ g_return_val_if_fail(FOLDER_CLASS(folder) == &news_class, NULL);
g_return_val_if_fail(folder->account != NULL, NULL);
if (!rfolder->session) {
gchar buf[NNTPBUFSIZE];
g_return_val_if_fail(folder != NULL, NULL);
- g_return_val_if_fail(FOLDER_TYPE(folder) == F_NEWS, NULL);
+ g_return_val_if_fail(FOLDER_CLASS(folder) == &news_class, NULL);
path = folder_item_get_path(FOLDER_ITEM(folder->node->data));
if (!is_dir_exist(path))
g_free(filename);
return NULL;
}
- if (recv_write_to_file(SESSION(session)->sock, filename) < 0) {
+ if (recv_write_to_file
+ (session->nntp_sock->sock, filename) < 0) {
log_warning("can't retrieve newsgroup list\n");
session_destroy(SESSION(session));
REMOTE_FOLDER(folder)->session = NULL;
gchar *path, *filename;
g_return_if_fail(folder != NULL);
- g_return_if_fail(FOLDER_TYPE(folder) == F_NEWS);
+ g_return_if_fail(FOLDER_CLASS(folder) == &news_class);
path = folder_item_get_path(FOLDER_ITEM(folder->node->data));
filename = g_strconcat(path, G_DIR_SEPARATOR_S, NEWSGROUP_LIST, NULL);
gint ok;
g_return_val_if_fail(folder != NULL, -1);
- g_return_val_if_fail(FOLDER_TYPE(folder) == F_NEWS, -1);
+ g_return_val_if_fail(FOLDER_CLASS(folder) == &news_class, -1);
g_return_val_if_fail(file != NULL, -1);
if ((fp = fopen(file, "rb")) == NULL) {
gint ok;
g_return_val_if_fail(folder != NULL, -1);
- g_return_val_if_fail(FOLDER_TYPE(folder) == F_NEWS, -1);
+ g_return_val_if_fail(FOLDER_CLASS(folder) == &news_class, -1);
g_return_val_if_fail(fp != NULL, -1);
session = news_session_get(folder);
g_return_val_if_fail(item != NULL, -1);
g_return_val_if_fail(item->folder != NULL, -1);
- g_return_val_if_fail(FOLDER_TYPE(folder) == F_NEWS, -1);
+ g_return_val_if_fail(FOLDER_CLASS(folder) == &news_class, -1);
session = news_session_get(folder);
g_return_val_if_fail(session != NULL, -1);
#define READ_TO_LISTEND(hdr) \
while (!(buf[0] == '.' && buf[1] == '\r')) { \
- if (sock_gets(SESSION(session)->sock, buf, sizeof(buf)) < 0) { \
+ if (sock_gets(session->nntp_sock->sock, buf, sizeof(buf)) < 0) { \
log_warning(_("error occurred while getting %s.\n"), hdr); \
return msginfo; \
} \
g_return_val_if_fail(session != NULL, NULL);
g_return_val_if_fail(item != NULL, NULL);
g_return_val_if_fail(item->folder != NULL, NULL);
- g_return_val_if_fail(FOLDER_TYPE(item->folder) == F_NEWS, NULL);
+ g_return_val_if_fail(FOLDER_CLASS(item->folder) == &news_class, NULL);
log_message(_("getting xover %d in %s...\n"),
num, item->path);
return NULL;
}
- if (sock_gets(SESSION(session)->sock, buf, sizeof(buf)) < 0) {
+ if (sock_gets(session->nntp_sock->sock, buf, sizeof(buf)) < 0) {
log_warning(_("error occurred while getting xover.\n"));
return NULL;
}
return msginfo;
}
- if (sock_gets(SESSION(session)->sock, buf, sizeof(buf)) < 0) {
+ if (sock_gets(session->nntp_sock->sock, buf, sizeof(buf)) < 0) {
log_warning(_("error occurred while getting xhdr.\n"));
return msginfo;
}
return msginfo;
}
- if (sock_gets(SESSION(session)->sock, buf, sizeof(buf)) < 0) {
+ if (sock_gets(session->nntp_sock->sock, buf, sizeof(buf)) < 0) {
log_warning(_("error occurred while getting xhdr.\n"));
return msginfo;
}
}
for (;;) {
- if (sock_gets(SESSION(session)->sock, buf, sizeof(buf)) < 0) {
+ if (sock_gets(session->nntp_sock->sock, buf, sizeof(buf)) < 0) {
log_warning(_("error occurred while getting xover.\n"));
return newlist;
}
llast = newlist;
for (;;) {
- if (sock_gets(SESSION(session)->sock, buf, sizeof(buf)) < 0) {
+ if (sock_gets(session->nntp_sock->sock, buf, sizeof(buf)) < 0) {
log_warning(_("error occurred while getting xhdr.\n"));
return newlist;
}
llast = newlist;
for (;;) {
- if (sock_gets(SESSION(session)->sock, buf, sizeof(buf)) < 0) {
+ if (sock_gets(session->nntp_sock->sock, buf, sizeof(buf)) < 0) {
log_warning(_("error occurred while getting xhdr.\n"));
return newlist;
}
guint tofetch, fetched;
g_return_val_if_fail(folder != NULL, NULL);
- g_return_val_if_fail(FOLDER_TYPE(folder) == F_NEWS, NULL);
+ g_return_val_if_fail(FOLDER_CLASS(folder) == &news_class, NULL);
g_return_val_if_fail(msgnum_list != NULL, NULL);
g_return_val_if_fail(item != NULL, NULL);