added newsgroup list dialog
This commit is contained in:
parent
5214768ee8
commit
6881020185
8 changed files with 126 additions and 28 deletions
|
@ -71,7 +71,8 @@ sylpheed_SOURCES = \
|
|||
select-keys.c select-keys.h \
|
||||
manual.c manual.h \
|
||||
addr_compl.c addr_compl.h \
|
||||
export.c export.h
|
||||
export.c export.h \
|
||||
grouplist_dialog.c grouplist_dialog.h
|
||||
|
||||
EXTRA_DIST = \
|
||||
pixmaps/clip.xpm \
|
||||
|
|
|
@ -60,6 +60,7 @@ POST_UNINSTALL = :
|
|||
host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
AS = @AS@
|
||||
BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
|
||||
CATALOGS = @CATALOGS@
|
||||
CATOBJEXT = @CATOBJEXT@
|
||||
CC = @CC@
|
||||
|
@ -71,7 +72,6 @@ GDK_IMLIB_LIBS = @GDK_IMLIB_LIBS@
|
|||
GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@
|
||||
GDK_PIXBUF_CONFIG = @GDK_PIXBUF_CONFIG@
|
||||
GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@
|
||||
GENCAT = @GENCAT@
|
||||
GLIB_CFLAGS = @GLIB_CFLAGS@
|
||||
GLIB_CONFIG = @GLIB_CONFIG@
|
||||
GLIB_LIBS = @GLIB_LIBS@
|
||||
|
@ -83,16 +83,14 @@ GPGME_LIBS = @GPGME_LIBS@
|
|||
GTK_CFLAGS = @GTK_CFLAGS@
|
||||
GTK_CONFIG = @GTK_CONFIG@
|
||||
GTK_LIBS = @GTK_LIBS@
|
||||
GT_NO = @GT_NO@
|
||||
GT_YES = @GT_YES@
|
||||
IMLIB_CFLAGS = @IMLIB_CFLAGS@
|
||||
IMLIB_CONFIG = @IMLIB_CONFIG@
|
||||
IMLIB_LIBS = @IMLIB_LIBS@
|
||||
INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@
|
||||
INSTOBJEXT = @INSTOBJEXT@
|
||||
INTLDEPS = @INTLDEPS@
|
||||
INTLBISON = @INTLBISON@
|
||||
INTLLIBS = @INTLLIBS@
|
||||
INTLOBJS = @INTLOBJS@
|
||||
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
|
||||
LIBICONV = @LIBICONV@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LT_AGE = @LT_AGE@
|
||||
|
@ -111,13 +109,12 @@ RANLIB = @RANLIB@
|
|||
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
|
||||
USE_NLS = @USE_NLS@
|
||||
VERSION = @VERSION@
|
||||
l = @l@
|
||||
localedir = @localedir@
|
||||
manualdir = @manualdir@
|
||||
|
||||
bin_PROGRAMS = sylpheed
|
||||
|
||||
sylpheed_SOURCES = intl.h defs.h main.c main.h mainwindow.c mainwindow.h folderview.c folderview.h summaryview.c summaryview.h messageview.c messageview.h headerview.c headerview.h textview.c textview.h imageview.c imageview.h mimeview.c mimeview.h summary_search.c summary_search.h folder.c folder.h procmsg.c procmsg.h procheader.c procheader.h filter.c filter.h compose.c compose.h gtkshruler.c gtkshruler.h gtksctree.c gtksctree.h menu.c menu.h prefs.c prefs.h prefs_common.c prefs_common.h prefs_filter.c prefs_filter.h prefs_account.c prefs_account.h account.c account.h addressbook.c addressbook.h filesel.c filesel.h foldersel.c foldersel.h statusbar.c statusbar.h headerwindow.c headerwindow.h logwindow.c logwindow.h sourcewindow.c sourcewindow.h manage_window.c manage_window.h alertpanel.c alertpanel.h inputdialog.c inputdialog.h progressdialog.c progressdialog.h about.c about.h setup.c setup.h utils.c utils.h gtkutils.c gtkutils.h codeconv.c codeconv.h unmime.c unmime.h base64.c base64.h uuencode.c uuencode.h md5c.c md5.h md5global.h md5ify.c md5ify.h rfc822.c rfc822.h socket.c socket.h automaton.c automaton.h session.c session.h smtp.c smtp.h esmtp.c esmtp.h pop.c pop.h mh.c mh.h mbox.c mbox.h send.c send.h recv.c recv.h inc.c inc.h import.c import.h nntp.c nntp.h news.c news.h imap.c imap.h xml.c xml.h html.c html.h procmime.c procmime.h rfc2015.c rfc2015.h passphrase.c passphrase.h select-keys.c select-keys.h manual.c manual.h addr_compl.c addr_compl.h export.c export.h
|
||||
sylpheed_SOURCES = intl.h defs.h main.c main.h mainwindow.c mainwindow.h folderview.c folderview.h summaryview.c summaryview.h messageview.c messageview.h headerview.c headerview.h textview.c textview.h imageview.c imageview.h mimeview.c mimeview.h summary_search.c summary_search.h folder.c folder.h procmsg.c procmsg.h procheader.c procheader.h filter.c filter.h compose.c compose.h gtkshruler.c gtkshruler.h gtksctree.c gtksctree.h menu.c menu.h prefs.c prefs.h prefs_common.c prefs_common.h prefs_filter.c prefs_filter.h prefs_account.c prefs_account.h account.c account.h addressbook.c addressbook.h filesel.c filesel.h foldersel.c foldersel.h statusbar.c statusbar.h headerwindow.c headerwindow.h logwindow.c logwindow.h sourcewindow.c sourcewindow.h manage_window.c manage_window.h alertpanel.c alertpanel.h inputdialog.c inputdialog.h progressdialog.c progressdialog.h about.c about.h setup.c setup.h utils.c utils.h gtkutils.c gtkutils.h codeconv.c codeconv.h unmime.c unmime.h base64.c base64.h uuencode.c uuencode.h md5c.c md5.h md5global.h md5ify.c md5ify.h rfc822.c rfc822.h socket.c socket.h automaton.c automaton.h session.c session.h smtp.c smtp.h esmtp.c esmtp.h pop.c pop.h mh.c mh.h mbox.c mbox.h send.c send.h recv.c recv.h inc.c inc.h import.c import.h nntp.c nntp.h news.c news.h imap.c imap.h xml.c xml.h html.c html.h procmime.c procmime.h rfc2015.c rfc2015.h passphrase.c passphrase.h select-keys.c select-keys.h manual.c manual.h addr_compl.c addr_compl.h export.c export.h grouplist_dialog.c grouplist_dialog.h
|
||||
|
||||
|
||||
EXTRA_DIST = pixmaps/clip.xpm pixmaps/deleted.xpm pixmaps/dir-close.xpm pixmaps/dir-open.xpm pixmaps/folder.xpm pixmaps/forwarded.xpm pixmaps/group.xpm pixmaps/inbox.xpm pixmaps/mark.xpm pixmaps/new.xpm pixmaps/outbox.xpm pixmaps/regular.xpm pixmaps/replied.xpm pixmaps/trash.xpm pixmaps/unread.xpm pixmaps/linewrap.xpm pixmaps/stock_mail.xpm pixmaps/stock_mail_attach.xpm pixmaps/stock_mail_receive.xpm pixmaps/stock_mail_receive_all.xpm pixmaps/stock_mail_send.xpm pixmaps/stock_mail_compose.xpm pixmaps/stock_mail_reply.xpm pixmaps/stock_mail_reply_to_all.xpm pixmaps/stock_mail_forward.xpm pixmaps/stock_preferences.xpm pixmaps/stock_properties.xpm pixmaps/stock_search.xpm pixmaps/stock_close.xpm pixmaps/stock_exec.xpm pixmaps/stock_trash.xpm pixmaps/stock_up_arrow.xpm pixmaps/stock_down_arrow.xpm pixmaps/stock_paste.xpm pixmaps/tb_address_book.xpm pixmaps/sylpheed-logo.xpm
|
||||
|
@ -151,7 +148,7 @@ gtkutils.o codeconv.o unmime.o base64.o uuencode.o md5c.o md5ify.o \
|
|||
rfc822.o socket.o automaton.o session.o smtp.o esmtp.o pop.o mh.o \
|
||||
mbox.o send.o recv.o inc.o import.o nntp.o news.o imap.o xml.o html.o \
|
||||
procmime.o rfc2015.o passphrase.o select-keys.o manual.o addr_compl.o \
|
||||
export.o
|
||||
export.o grouplist_dialog.o
|
||||
sylpheed_DEPENDENCIES = $(top_builddir)/libkcc/libkcc.a
|
||||
sylpheed_LDFLAGS =
|
||||
CFLAGS = @CFLAGS@
|
||||
|
@ -164,27 +161,27 @@ DIST_COMMON = Makefile.am Makefile.in
|
|||
|
||||
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
TAR = gtar
|
||||
TAR = tar
|
||||
GZIP_ENV = --best
|
||||
DEP_FILES = .deps/about.P .deps/account.P .deps/addr_compl.P \
|
||||
.deps/addressbook.P .deps/alertpanel.P .deps/automaton.P .deps/base64.P \
|
||||
.deps/codeconv.P .deps/compose.P .deps/esmtp.P .deps/export.P \
|
||||
.deps/filesel.P .deps/filter.P .deps/folder.P .deps/foldersel.P \
|
||||
.deps/folderview.P .deps/gtksctree.P .deps/gtkshruler.P \
|
||||
.deps/gtkutils.P .deps/headerview.P .deps/headerwindow.P .deps/html.P \
|
||||
.deps/imageview.P .deps/imap.P .deps/import.P .deps/inc.P \
|
||||
.deps/inputdialog.P .deps/logwindow.P .deps/main.P .deps/mainwindow.P \
|
||||
.deps/manage_window.P .deps/manual.P .deps/mbox.P .deps/md5c.P \
|
||||
.deps/md5ify.P .deps/menu.P .deps/messageview.P .deps/mh.P \
|
||||
.deps/mimeview.P .deps/news.P .deps/nntp.P .deps/passphrase.P \
|
||||
.deps/pop.P .deps/prefs.P .deps/prefs_account.P .deps/prefs_common.P \
|
||||
.deps/prefs_filter.P .deps/procheader.P .deps/procmime.P \
|
||||
.deps/procmsg.P .deps/progressdialog.P .deps/recv.P .deps/rfc2015.P \
|
||||
.deps/rfc822.P .deps/select-keys.P .deps/send.P .deps/session.P \
|
||||
.deps/setup.P .deps/smtp.P .deps/socket.P .deps/sourcewindow.P \
|
||||
.deps/statusbar.P .deps/summary_search.P .deps/summaryview.P \
|
||||
.deps/textview.P .deps/unmime.P .deps/utils.P .deps/uuencode.P \
|
||||
.deps/xml.P
|
||||
.deps/folderview.P .deps/grouplist_dialog.P .deps/gtksctree.P \
|
||||
.deps/gtkshruler.P .deps/gtkutils.P .deps/headerview.P \
|
||||
.deps/headerwindow.P .deps/html.P .deps/imageview.P .deps/imap.P \
|
||||
.deps/import.P .deps/inc.P .deps/inputdialog.P .deps/logwindow.P \
|
||||
.deps/main.P .deps/mainwindow.P .deps/manage_window.P .deps/manual.P \
|
||||
.deps/mbox.P .deps/md5c.P .deps/md5ify.P .deps/menu.P \
|
||||
.deps/messageview.P .deps/mh.P .deps/mimeview.P .deps/news.P \
|
||||
.deps/nntp.P .deps/passphrase.P .deps/pop.P .deps/prefs.P \
|
||||
.deps/prefs_account.P .deps/prefs_common.P .deps/prefs_filter.P \
|
||||
.deps/procheader.P .deps/procmime.P .deps/procmsg.P \
|
||||
.deps/progressdialog.P .deps/recv.P .deps/rfc2015.P .deps/rfc822.P \
|
||||
.deps/select-keys.P .deps/send.P .deps/session.P .deps/setup.P \
|
||||
.deps/smtp.P .deps/socket.P .deps/sourcewindow.P .deps/statusbar.P \
|
||||
.deps/summary_search.P .deps/summaryview.P .deps/textview.P \
|
||||
.deps/unmime.P .deps/utils.P .deps/uuencode.P .deps/xml.P
|
||||
SOURCES = $(sylpheed_SOURCES)
|
||||
OBJECTS = $(sylpheed_OBJECTS)
|
||||
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
#define TRASH_DIR "trash"
|
||||
#define RC_DIR ".sylpheed"
|
||||
#define NEWS_CACHE_DIR "newscache"
|
||||
#define GROUPLIST_FILE "grouplist"
|
||||
#define IMAP_CACHE_DIR "imapcache"
|
||||
#define MIME_TMP_DIR "mimetmp"
|
||||
#define COMMON_RC "sylpheedrc"
|
||||
|
|
|
@ -1474,8 +1474,7 @@ static void folderview_new_news_group_cb(FolderView *folderview, guint action,
|
|||
g_return_if_fail(item->folder->type == F_NEWS);
|
||||
g_return_if_fail(item->folder->account != NULL);
|
||||
|
||||
new_group = input_dialog(_("Subscribe newsgroup"),
|
||||
_("Input subscribing newsgroup:"), NULL);
|
||||
new_group = grouplist_dialog(item);
|
||||
if (!new_group) return;
|
||||
|
||||
if (GTK_CTREE_ROW(folderview->selected)->parent != NULL)
|
||||
|
|
77
src/news.c
77
src/news.c
|
@ -28,6 +28,7 @@
|
|||
#include <dirent.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "defs.h"
|
||||
#include "intl.h"
|
||||
#include "news.h"
|
||||
#include "nntp.h"
|
||||
|
@ -482,3 +483,79 @@ static void news_delete_all_article(FolderItem *item)
|
|||
|
||||
debug_print(_("done.\n"));
|
||||
}
|
||||
|
||||
GSList * news_get_group_list(FolderItem *item)
|
||||
{
|
||||
gchar *path, *filename;
|
||||
gint ok;
|
||||
NNTPSession *session;
|
||||
GSList * group_list = NULL;
|
||||
FILE * f;
|
||||
gchar buf[NNTPBUFSIZE];
|
||||
int len;
|
||||
|
||||
if (item == NULL)
|
||||
return NULL;
|
||||
|
||||
path = folder_item_get_path(item);
|
||||
|
||||
if (!is_dir_exist(path))
|
||||
make_dir_hier(path);
|
||||
|
||||
filename = g_strconcat(path, G_DIR_SEPARATOR_S, GROUPLIST_FILE, NULL);
|
||||
g_free(path);
|
||||
|
||||
session = news_session_get(item->folder);
|
||||
|
||||
if (session == NULL)
|
||||
return NULL;
|
||||
|
||||
if (is_file_exist(filename)) {
|
||||
debug_print(_("group list has been already cached.\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
ok = nntp_list(SESSION(session)->sock);
|
||||
if (ok != NN_SUCCESS)
|
||||
return NULL;
|
||||
|
||||
if (recv_write_to_file(SESSION(session)->sock, filename)
|
||||
< 0) {
|
||||
log_warning(_("can't retrieve group list\n"));
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
f = fopen(filename, "r");
|
||||
while (fgets(buf, NNTPBUFSIZE, f))
|
||||
{
|
||||
char * s;
|
||||
|
||||
len = 0;
|
||||
while ((buf[len] != 0) && (buf[len] != ' '))
|
||||
len++;
|
||||
buf[len] = 0;
|
||||
s = g_strdup(buf);
|
||||
|
||||
group_list = g_slist_append(group_list, s);
|
||||
}
|
||||
fclose(f);
|
||||
g_free(filename);
|
||||
|
||||
group_list = g_slist_sort(group_list, (GCompareFunc) g_strcasecmp);
|
||||
|
||||
return group_list;
|
||||
}
|
||||
|
||||
void news_reset_group_list(FolderItem *item)
|
||||
{
|
||||
gchar *path, *filename;
|
||||
|
||||
debug_print(_("\tDeleting cached group list... "));
|
||||
path = folder_item_get_path(item);
|
||||
filename = g_strconcat(path, G_DIR_SEPARATOR_S, GROUPLIST_FILE, NULL);
|
||||
g_free(path);
|
||||
if (remove(filename) != 0)
|
||||
log_warning(_("can't delete cached group list %s\n"), filename);
|
||||
g_free(filename);
|
||||
}
|
||||
|
|
|
@ -55,4 +55,7 @@ void news_scan_group (Folder *folder,
|
|||
gint news_post (Folder *folder,
|
||||
const gchar *file);
|
||||
|
||||
GSList * news_get_group_list(FolderItem *item);
|
||||
void news_reset_group_list();
|
||||
|
||||
#endif /* __NEWS_H__ */
|
||||
|
|
19
src/nntp.c
19
src/nntp.c
|
@ -259,3 +259,22 @@ static gint nntp_gen_recv(gint sock, gchar *buf, gint size)
|
|||
|
||||
return NN_SUCCESS;
|
||||
}
|
||||
|
||||
gint nntp_list(gint sock)
|
||||
{
|
||||
GList * result = NULL;
|
||||
|
||||
gint ok;
|
||||
gint resp;
|
||||
gchar buf[NNTPBUFSIZE];
|
||||
|
||||
nntp_gen_send(sock, "LIST");
|
||||
|
||||
if ((ok = nntp_ok(sock, buf)) != NN_SUCCESS)
|
||||
return NN_ERROR;
|
||||
|
||||
if (verbose)
|
||||
log_print("NNTP< %s\n", buf);
|
||||
|
||||
return NN_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -45,5 +45,6 @@ gint nntp_newgroups(gint sock);
|
|||
gint nntp_newnews(gint sock);
|
||||
gint nntp_mode(gint sock, gboolean stream);
|
||||
gint nntp_ok(gint sock, gchar *argbuf);
|
||||
gint nntp_list(gint sock);
|
||||
|
||||
#endif /* __NNTP_H__ */
|
||||
|
|
Loading…
Reference in a new issue