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-provider.c | |
parent | a30dec16fd81cef36804cb741e2a0bb1d799dfd7 (diff) | |
download | gsoc2013-evolution-912d759d75d9cc7f23f9774d692a44496c2e85fb.tar gsoc2013-evolution-912d759d75d9cc7f23f9774d692a44496c2e85fb.tar.gz gsoc2013-evolution-912d759d75d9cc7f23f9774d692a44496c2e85fb.tar.bz2 gsoc2013-evolution-912d759d75d9cc7f23f9774d692a44496c2e85fb.tar.lz gsoc2013-evolution-912d759d75d9cc7f23f9774d692a44496c2e85fb.tar.xz 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-provider.c')
-rw-r--r-- | camel/providers/nntp/camel-nntp-provider.c | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/camel/providers/nntp/camel-nntp-provider.c b/camel/providers/nntp/camel-nntp-provider.c index f8e8916865..7041c81c31 100644 --- a/camel/providers/nntp/camel-nntp-provider.c +++ b/camel/providers/nntp/camel-nntp-provider.c @@ -28,6 +28,11 @@ #include "camel-provider.h" #include "camel-session.h" +static void add_hash (guint *hash, char *s); +static guint nntp_url_hash (gconstpointer key); +static gint check_equal (char *s1, char *s2); +static gint nntp_url_equal (gconstpointer a, gconstpointer b); + static CamelProvider news_provider = { "nntp", "USENET news", @@ -50,10 +55,53 @@ camel_provider_module_init (CamelSession *session) news_provider.object_types[CAMEL_PROVIDER_STORE] = camel_nntp_store_get_type(); - news_provider.service_cache = g_hash_table_new (camel_url_hash, camel_url_equal); + news_provider.service_cache = g_hash_table_new (nntp_url_hash, nntp_url_equal); camel_session_register_provider (session, &news_provider); } +static void +add_hash (guint *hash, char *s) +{ + if (s) + *hash ^= g_str_hash(s); +} + +static guint +nntp_url_hash (gconstpointer key) +{ + const CamelURL *u = (CamelURL *)key; + guint hash = 0; + + add_hash (&hash, u->user); + add_hash (&hash, u->host); + hash ^= u->port; + + return hash; +} + +static gint +check_equal (char *s1, char *s2) +{ + if (s1 == NULL) { + if (s2 == NULL) + return TRUE; + else + return FALSE; + } + + if (s2 == NULL) + return FALSE; + return strcmp (s1, s2) == 0; +} +static gint +nntp_url_equal (gconstpointer a, gconstpointer b) +{ + const CamelURL *u1 = a, *u2 = b; + + return check_equal (u1->user, u2->user) + && check_equal (u1->host, u2->host) + && u1->port == u2->port; +} |