diff options
author | Chris Toshok <toshok@helixcode.com> | 2000-10-06 16:25:36 +0800 |
---|---|---|
committer | Chris Toshok <toshok@src.gnome.org> | 2000-10-06 16:25:36 +0800 |
commit | 912d759d75d9cc7f23f9774d692a44496c2e85fb (patch) | |
tree | 9549c8c64bb0b25d6cb685d47bd6d36521f849b7 /camel/providers/nntp/camel-nntp-newsrc.c | |
parent | a30dec16fd81cef36804cb741e2a0bb1d799dfd7 (diff) | |
download | gsoc2013-evolution-912d759d75d9cc7f23f9774d692a44496c2e85fb.tar.gz gsoc2013-evolution-912d759d75d9cc7f23f9774d692a44496c2e85fb.tar.zst gsoc2013-evolution-912d759d75d9cc7f23f9774d692a44496c2e85fb.zip |
add camel-nntp-grouplist.h (libcamelnntp_la_SOURCES): add
2000-10-06 Chris Toshok <toshok@helixcode.com>
* providers/nntp/Makefile.am (libcamelnntpinclude_HEADERS): add
camel-nntp-grouplist.h
(libcamelnntp_la_SOURCES): add camel-nntp-grouplist.c
* providers/nntp/camel-nntp-provider.c: add our own hash functions
for nntp urls.
* providers/nntp/camel-nntp-newsrc.c
(camel_nntp_newsrc_group_is_subscribed): new function.
(camel_nntp_newsrc_subscribe_group): new function.
(camel_nntp_newsrc_unsubscribe_group): new function.
* providers/nntp/camel-nntp-newsrc.h: add prototypes for
_group_is_subscribed, _subscribe_group, and _unsubscribe_group.
* providers/nntp/camel-nntp-store.c
(build_folder_info_from_grouplist): new function.
(nntp_store_get_folder_info): add subscribed_only_parameter. if
it's FALSE, load the grouplist and call
build_folder_info_from_grouplist.
(nntp_store_folder_subscribed): implement.
(nntp_store_subscribe_folder): implement.
(nntp_store_unsubscribe_folder): implement.
(camel_nntp_store_init): add CAMEL_STORE_SUBSCRIPTIONS to the
store's flags.
* providers/mh/camel-mh-store.c (get_folder_info): add
subscribed_only parameter.
* providers/mbox/camel-mbox-store.c (get_folder_info): add
subscribed_only parameter.
* providers/imap/camel-imap-store.c (get_folder_info): add
subscribed_only parameter.
* camel-store.c (camel_store_supports_subscriptions): new function.
(camel_store_folder_subscribed): new function.
(camel_store_subscribe_folder): new function.
(camel_store_unsubscribe_folder): new function.
* camel-store.h: add prototypes and virtual functions for the
subscribe implementation. also, add a subscribed_only argument to
camel_store_get_folder_info.
svn path=/trunk/; revision=5760
Diffstat (limited to 'camel/providers/nntp/camel-nntp-newsrc.c')
-rw-r--r-- | camel/providers/nntp/camel-nntp-newsrc.c | 59 |
1 files changed, 49 insertions, 10 deletions
diff --git a/camel/providers/nntp/camel-nntp-newsrc.c b/camel/providers/nntp/camel-nntp-newsrc.c index a44e42c910..5c92074000 100644 --- a/camel/providers/nntp/camel-nntp-newsrc.c +++ b/camel/providers/nntp/camel-nntp-newsrc.c @@ -45,12 +45,11 @@ typedef struct { struct CamelNNTPNewsrc { gchar *filename; GHashTable *groups; - GHashTable *subscribed_groups; gboolean dirty; } ; static NewsrcGroup * -camel_nntp_newsrc_group_add (CamelNNTPNewsrc *newsrc, char *group_name, gboolean subscribed) +camel_nntp_newsrc_group_add (CamelNNTPNewsrc *newsrc, const char *group_name, gboolean subscribed) { NewsrcGroup *new_group = g_malloc(sizeof(NewsrcGroup)); @@ -59,8 +58,6 @@ camel_nntp_newsrc_group_add (CamelNNTPNewsrc *newsrc, char *group_name, gboolean new_group->ranges = g_array_new (FALSE, FALSE, sizeof (ArticleRange)); g_hash_table_insert (newsrc->groups, new_group->name, new_group); - if (subscribed) - g_hash_table_insert (newsrc->subscribed_groups, new_group->name, new_group); newsrc->dirty = TRUE; @@ -162,7 +159,7 @@ camel_nntp_newsrc_group_mark_range_read(CamelNNTPNewsrc *newsrc, NewsrcGroup *gr } int -camel_nntp_newsrc_get_highest_article_read (CamelNNTPNewsrc *newsrc, char *group_name) +camel_nntp_newsrc_get_highest_article_read (CamelNNTPNewsrc *newsrc, const char *group_name) { NewsrcGroup *group; @@ -172,13 +169,13 @@ camel_nntp_newsrc_get_highest_article_read (CamelNNTPNewsrc *newsrc, char *group } void -camel_nntp_newsrc_mark_article_read (CamelNNTPNewsrc *newsrc, char *group_name, int num) +camel_nntp_newsrc_mark_article_read (CamelNNTPNewsrc *newsrc, const char *group_name, int num) { camel_nntp_newsrc_mark_range_read (newsrc, group_name, num, num); } void -camel_nntp_newsrc_mark_range_read(CamelNNTPNewsrc *newsrc, char *group_name, long low, long high) +camel_nntp_newsrc_mark_range_read(CamelNNTPNewsrc *newsrc, const char *group_name, long low, long high) { NewsrcGroup *group; @@ -197,7 +194,7 @@ camel_nntp_newsrc_mark_range_read(CamelNNTPNewsrc *newsrc, char *group_name, lon } gboolean -camel_nntp_newsrc_article_is_read (CamelNNTPNewsrc *newsrc, char *group_name, long num) +camel_nntp_newsrc_article_is_read (CamelNNTPNewsrc *newsrc, const char *group_name, long num) { int i; NewsrcGroup *group; @@ -214,6 +211,49 @@ camel_nntp_newsrc_article_is_read (CamelNNTPNewsrc *newsrc, char *group_name, lo return FALSE; } +gboolean +camel_nntp_newsrc_group_is_subscribed (CamelNNTPNewsrc *newsrc, const char *group_name) +{ + NewsrcGroup *group = g_hash_table_lookup (newsrc->groups, group_name); + + if (group) { + return group->subscribed; + } + else { + return FALSE; + } +} + +void +camel_nntp_newsrc_subscribe_group (CamelNNTPNewsrc *newsrc, const char *group_name) +{ + NewsrcGroup *group = g_hash_table_lookup (newsrc->groups, group_name); + + if (group) { + if (!group->subscribed) + newsrc->dirty = TRUE; + group->subscribed = TRUE; + } + else { + camel_nntp_newsrc_group_add (newsrc, group_name, TRUE); + } +} + +void +camel_nntp_newsrc_unsubscribe_group (CamelNNTPNewsrc *newsrc, const char *group_name) +{ + NewsrcGroup *group = g_hash_table_lookup (newsrc->groups, group_name); + + if (group) { + if (group->subscribed) + newsrc->dirty = TRUE; + group->subscribed = FALSE; + } + else { + camel_nntp_newsrc_group_add (newsrc, group_name, FALSE); + } +} + struct newsrc_ptr_array { GPtrArray *ptr_array; gboolean subscribed_only; @@ -237,7 +277,7 @@ camel_nntp_newsrc_get_subscribed_group_names (CamelNNTPNewsrc *newsrc) npa.ptr_array = g_ptr_array_new(); npa.subscribed_only = TRUE; - g_hash_table_foreach (newsrc->subscribed_groups, + g_hash_table_foreach (newsrc->groups, (GHFunc)get_group_foreach, &npa); return npa.ptr_array; @@ -451,7 +491,6 @@ camel_nntp_newsrc_read_for_server (const char *server) newsrc = g_new0(CamelNNTPNewsrc, 1); newsrc->filename = filename; newsrc->groups = g_hash_table_new (g_str_hash, g_str_equal); - newsrc->subscribed_groups = g_hash_table_new (g_str_hash, g_str_equal); if ((fp = fopen(filename, "r")) == NULL) { g_warning ("~/.newsrc-%s not present.\n", server); |