diff options
Diffstat (limited to 'camel')
-rw-r--r-- | camel/ChangeLog | 12 | ||||
-rw-r--r-- | camel/camel-session.c | 8 | ||||
-rw-r--r-- | camel/camel-url.c | 17 | ||||
-rw-r--r-- | camel/providers/imap/camel-imap-folder.c | 51 |
4 files changed, 54 insertions, 34 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog index 255f80ab8c..baed02d1f8 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,3 +1,15 @@ +2000-06-20 Jeffrey Stedfast <fejj@helixcode.com> + + * providers/imap/camel-imap-folder.c (imap_get_summary): Only + fetch the summary if the folder summary doesn't already exist. + When the summary *does* exist, start fetching from 1, not 0. + (imap_free_summary): Don't do anything here. + (imap_finalize): Free the summary here instead of in + imap_free_summary(). + + * camel-url.c (check_equal): No need to check s1 if s2 is NULL + (camel_url_equal): Don't check the passwd component of the url. + 2000-06-20 Dan Winship <danw@helixcode.com> * camel-folder-summary.c (camel_folder_summary_add): mark the diff --git a/camel/camel-session.c b/camel/camel-session.c index 82334c978c..0df50c2906 100644 --- a/camel/camel-session.c +++ b/camel/camel-session.c @@ -183,7 +183,7 @@ camel_session_list_providers (CamelSession *session, gboolean load) } static void -service_cache_remove(CamelService *service, CamelSession *session) +service_cache_remove (CamelService *service, CamelSession *session) { g_hash_table_remove(session->service_cache, service->url); } @@ -201,7 +201,7 @@ camel_session_get_service (CamelSession *session, const char *url_string, return NULL; /* lookup in cache first */ - printf("looking up service in cache: %s\n", url_string); + printf("looking up service in cache: \"%s\"\n", camel_url_to_string (url, FALSE)); service = g_hash_table_lookup(session->service_cache, url); if (service != NULL) { printf("found!!\n"); @@ -225,8 +225,7 @@ camel_session_get_service (CamelSession *session, const char *url_string, return NULL; } } - provider = g_hash_table_lookup (session->providers, - url->protocol); + provider = g_hash_table_lookup (session->providers, url->protocol); } if (!provider || !provider->object_types[type]) { @@ -243,6 +242,7 @@ camel_session_get_service (CamelSession *session, const char *url_string, g_hash_table_insert(session->service_cache, url, service); gtk_signal_connect((GtkObject *)service, "destroy", service_cache_remove, session); } + return service; } diff --git a/camel/camel-url.c b/camel/camel-url.c index c0707dcbb1..cb3f5a1408 100644 --- a/camel/camel-url.c +++ b/camel/camel-url.c @@ -315,7 +315,7 @@ guint camel_url_hash (const void *v) } static int -check_equal(char *s1, char *s2) +check_equal (char *s1, char *s2) { if (s1 == NULL) { if (s2 == NULL) @@ -323,23 +323,20 @@ check_equal(char *s1, char *s2) else return FALSE; } - if (s2 == NULL) { - if (s1 == NULL) - return TRUE; - else - return FALSE; - } - return strcmp(s1, s2) == 0; + + if (s2 == NULL) + return FALSE; + + return strcmp (s1, s2) == 0; } int camel_url_equal(const void *v, const void *v2) { const CamelURL *u1 = v, *u2 = v2; - + return check_equal(u1->protocol, u2->protocol) && check_equal(u1->user, u2->user) && check_equal(u1->authmech, u2->authmech) - && check_equal(u1->passwd, u2->passwd) && check_equal(u1->host, u2->host) && check_equal(u1->path, u2->path) && u1->port == u2->port; diff --git a/camel/providers/imap/camel-imap-folder.c b/camel/providers/imap/camel-imap-folder.c index 0d67c2fa7f..fd005f82ba 100644 --- a/camel/providers/imap/camel-imap-folder.c +++ b/camel/providers/imap/camel-imap-folder.c @@ -209,7 +209,27 @@ static void imap_finalize (GtkObject *object) { /* TODO: do we need to do more here? */ + CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (object); + CamelMessageInfo *info; + gint i, max; + GTK_OBJECT_CLASS (parent_class)->finalize (object); + + g_return_if_fail (imap_folder->summary != NULL); + + max = imap_folder->summary->len; + for (i = 0; i < max; i++) { + info = g_ptr_array_index (imap_folder->summary, i); + g_free (info->subject); + g_free (info->to); + g_free (info->from); + g_free (info->uid); + g_free (info); + info = NULL; + } + + g_ptr_array_free (imap_folder->summary, TRUE); + imap_folder->summary = NULL; } static void @@ -745,16 +765,17 @@ imap_get_summary (CamelFolder *folder, CamelException *ex) CamelImapFolder *imap_folder = CAMEL_IMAP_FOLDER (folder); GPtrArray *array = NULL; CamelMessageInfo *info; - int i, num, status; + gint num, i = 0, status = 0; char *result, *datestr, *p, *q; - imap_free_summary (folder, imap_folder->summary); + if (imap_folder->summary) + return imap_folder->summary; num = imap_get_message_count (folder, ex); array = g_ptr_array_new (); - for (i = 0; i < num; i++) { + for (i = 1; i <= num; i++) { status = camel_imap_command_extended (CAMEL_IMAP_STORE (folder->parent_store), folder, &result, "FETCH %d BODY.PEEK[HEADER]", i); @@ -798,6 +819,7 @@ imap_get_summary (CamelFolder *folder, CamelException *ex) g_free (info->to); g_free (info->from); g_free (info); + info = NULL; break; } @@ -810,6 +832,7 @@ imap_get_summary (CamelFolder *folder, CamelException *ex) g_free (info->to); g_free (info->from); g_free (info); + info = NULL; break; } @@ -823,6 +846,7 @@ imap_get_summary (CamelFolder *folder, CamelException *ex) g_free (info->to); g_free (info->from); g_free (info); + info = NULL; break; } @@ -850,6 +874,7 @@ imap_get_summary (CamelFolder *folder, CamelException *ex) g_free (info->to); g_free (info->from); g_free (info); + info = NULL; break; } @@ -862,6 +887,7 @@ imap_get_summary (CamelFolder *folder, CamelException *ex) g_free (info->to); g_free (info->from); g_free (info); + info = NULL; break; } @@ -875,6 +901,7 @@ imap_get_summary (CamelFolder *folder, CamelException *ex) g_free (info->to); g_free (info->from); g_free (info); + info = NULL; break; } @@ -905,23 +932,7 @@ imap_get_summary (CamelFolder *folder, CamelException *ex) void imap_free_summary (CamelFolder *folder, GPtrArray *array) { - CamelMessageInfo *info; - gint i, max; - - max = array->len; - for (i = 0; i < max; i++) { - info = g_ptr_array_index (array, i); - g_free (info->subject); - g_free (info->to); - g_free (info->from); - g_free (info->uid); - g_free (info); - info = NULL; - } - - g_ptr_array_free (array, TRUE); - array = NULL; - + /* no-op */ return; } |