From 6fedf12dc9b6919adb19473d0b044572fbfe12a8 Mon Sep 17 00:00:00 2001 From: Srinivasa Ragavan Date: Thu, 31 Jul 2008 05:00:29 +0000 Subject: [PATCH] Add delete folder functionality. Added code to check if the uid exists in 2008-07-31 Srinivasa Ragavan * camel/camel-db.c: Add delete folder functionality. * camel/camel-folder-summary.c: Added code to check if the uid exists in summary. * camel/camel-folder-summary.h: 2008-07-31 Srinivasa Ragavan * camel/providers/imap/camel-imap-message-cache.c: Fix delete cache code, when the summary is deleted. svn path=/trunk/; revision=9232 --- camel/ChangeLog | 7 ++++++ camel/camel-db.c | 28 ++++++++++++++---------- camel/camel-folder-summary.c | 29 +++++++++++++++++++++++++ camel/camel-folder-summary.h | 1 + camel/providers/imap/ChangeLog | 5 +++++ camel/providers/imap/camel-imap-message-cache.c | 12 +++------- 6 files changed, 61 insertions(+), 21 deletions(-) diff --git a/camel/ChangeLog b/camel/ChangeLog index 9ef683e..ff0c514 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,3 +1,10 @@ +2008-07-31 Srinivasa Ragavan + + * camel/camel-db.c: Add delete folder functionality. + * camel/camel-folder-summary.c: Added code to check if the uid exists + in summary. + * camel/camel-folder-summary.h: + 2008-07-30 Milan Crha ** Part of fix for bug #500389 diff --git a/camel/camel-db.c b/camel/camel-db.c index 6574750..fb0c81e 100644 --- a/camel/camel-db.c +++ b/camel/camel-db.c @@ -447,18 +447,6 @@ camel_db_select (CamelDB *cdb, const char* stmt, CamelDBSelectCB callback, gpoin } int -camel_db_delete_folder (CamelDB *cdb, const char *folder, CamelException *ex) -{ - char *tab = sqlite3_mprintf ("DELETE FROM folders WHERE folder_name =%Q", folder); - int ret; - - ret = camel_db_command (cdb, tab, ex); - sqlite3_free (tab); - CAMEL_DB_RELEASE_SQLITE_MEMORY; - return ret; -} - -int camel_db_create_vfolder (CamelDB *db, const char *folder_name, CamelException *ex) { int ret; @@ -924,7 +912,23 @@ camel_db_clear_folder_summary (CamelDB *cdb, char *folder, CamelException *ex) return ret; } +int +camel_db_delete_folder (CamelDB *cdb, const char *folder, CamelException *ex) +{ + int ret; + char *del; + del = sqlite3_mprintf ("DELETE FROM folders WHERE folder_name = %Q", folder); + ret = camel_db_command (cdb, del, ex); + sqlite3_free (del); + + del = sqlite3_mprintf ("DROP TABLE %Q ", folder); + ret = camel_db_command (cdb, del, ex); + sqlite3_free (del); + + CAMEL_DB_RELEASE_SQLITE_MEMORY; + return ret; +} void camel_db_camel_mir_free (CamelMIRecord *record) diff --git a/camel/camel-folder-summary.c b/camel/camel-folder-summary.c index 1b2f1cb..0dbe7a2 100644 --- a/camel/camel-folder-summary.c +++ b/camel/camel-folder-summary.c @@ -428,6 +428,35 @@ camel_folder_summary_uid_from_index (CamelFolderSummary *s, int i) } +/** + * camel_folder_summary_check_uid + * @s: a #CamelFolderSummary object + * @uid: a uid + * + * Check if the uid is valid. This isn't very efficient, so it shouldn't be called iteratively. + * + * + * Returns: if the uid is present in the summary or not (%TRUE or %FALSE) + **/ +gboolean +camel_folder_summary_check_uid (CamelFolderSummary *s, const char *uid) +{ + gboolean ret = FALSE; + int i; + + CAMEL_SUMMARY_LOCK(s, summary_lock); + + for (i=0; iuids->len; i++) { + if(strcmp(s->uids->pdata[i], uid) == 0) { + CAMEL_SUMMARY_UNLOCK(s, summary_lock); + return TRUE; + } + } + + CAMEL_SUMMARY_UNLOCK(s, summary_lock); + + return ret; +} /** * camel_folder_summary_array: diff --git a/camel/camel-folder-summary.h b/camel/camel-folder-summary.h index c5e2202..c62080b 100644 --- a/camel/camel-folder-summary.h +++ b/camel/camel-folder-summary.h @@ -390,6 +390,7 @@ guint camel_folder_summary_count(CamelFolderSummary *summary); CamelMessageInfo *camel_folder_summary_index(CamelFolderSummary *summary, int index); CamelMessageInfo *camel_folder_summary_uid(CamelFolderSummary *summary, const char *uid); char * camel_folder_summary_uid_from_index (CamelFolderSummary *s, int i); +gboolean camel_folder_summary_check_uid (CamelFolderSummary *s, const char *uid); GPtrArray *camel_folder_summary_array(CamelFolderSummary *summary); diff --git a/camel/providers/imap/ChangeLog b/camel/providers/imap/ChangeLog index 23efda3..ae158cf 100644 --- a/camel/providers/imap/ChangeLog +++ b/camel/providers/imap/ChangeLog @@ -1,3 +1,8 @@ +2008-07-31 Srinivasa Ragavan + + * camel/providers/imap/camel-imap-message-cache.c: Fix delete cache + code, when the summary is deleted. + 2008-07-30 Srinivasa Ragavan * camel/providers/imap/camel-imap-folder.c: Revamp imap_rescan. It diff --git a/camel/providers/imap/camel-imap-message-cache.c b/camel/providers/imap/camel-imap-message-cache.c index 89ca985..d3607f5 100644 --- a/camel/providers/imap/camel-imap-message-cache.c +++ b/camel/providers/imap/camel-imap-message-cache.c @@ -178,17 +178,11 @@ camel_imap_message_cache_new (const char *path, CamelFolderSummary *summary, else uid = g_strdup (dname); - #warning "this could be wrong" - if (summary->loaded_infos && g_hash_table_lookup (summary->loaded_infos, uid)) + if (camel_folder_summary_check_uid(summary, uid)) cache_put (cache, uid, dname, NULL); + else + g_ptr_array_add (deletes, g_strdup_printf ("%s/%s", cache->path, dname)); - /* - info = camel_folder_summary_uid (summary, uid); - if (info) { - camel_message_info_free(info); - cache_put (cache, uid, dname, NULL); - } else - g_ptr_array_add (deletes, g_strdup_printf ("%s/%s", cache->path, dname)); */ g_free (uid); } g_dir_close (dir); -- 2.7.4