aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2013-07-15 22:38:11 +0800
committerMatthew Barnes <mbarnes@redhat.com>2013-07-18 00:08:46 +0800
commitc36aa6b7498ac73a77624533516b010f5701f08b (patch)
tree8fbe15ebb84ad3e5ea1785bf203c09bddc17d803 /mail
parent4de572679748a0586b9a9c3bf34c40ea5102e826 (diff)
downloadgsoc2013-evolution-c36aa6b7498ac73a77624533516b010f5701f08b.tar
gsoc2013-evolution-c36aa6b7498ac73a77624533516b010f5701f08b.tar.gz
gsoc2013-evolution-c36aa6b7498ac73a77624533516b010f5701f08b.tar.bz2
gsoc2013-evolution-c36aa6b7498ac73a77624533516b010f5701f08b.tar.lz
gsoc2013-evolution-c36aa6b7498ac73a77624533516b010f5701f08b.tar.xz
gsoc2013-evolution-c36aa6b7498ac73a77624533516b010f5701f08b.tar.zst
gsoc2013-evolution-c36aa6b7498ac73a77624533516b010f5701f08b.zip
Add mail_folder_cache_ref_folder().
Replaces mail_folder_cache_get_folder_from_uri(). Returns the CamelFolder for the CamelStore and folder name if available, or else NULL if a CamelFolder instance is not yet cached. This function does not block.
Diffstat (limited to 'mail')
-rw-r--r--mail/e-mail-backend.c29
-rw-r--r--mail/em-folder-tree-model.c17
2 files changed, 21 insertions, 25 deletions
diff --git a/mail/e-mail-backend.c b/mail/e-mail-backend.c
index d1ca660ab7..c2952daffd 100644
--- a/mail/e-mail-backend.c
+++ b/mail/e-mail-backend.c
@@ -673,35 +673,30 @@ mail_backend_folder_changed_cb (MailFolderCache *folder_cache,
EMEvent *event = em_event_peek ();
EMEventTargetFolder *target;
EMFolderTreeModel *model;
+ CamelFolder *folder;
gchar *folder_uri;
gint folder_type;
CamelFolderInfoFlags flags = 0;
folder_uri = e_mail_folder_uri_build (store, folder_name);
- if (folder_uri != NULL) {
- CamelFolder *folder = NULL;
-
- if (mail_folder_cache_get_folder_from_uri (
- folder_cache, folder_uri, &folder)) {
- if (folder != NULL &&
- !mail_folder_cache_get_folder_info_flags (
- folder_cache, folder, &flags)) {
- g_free (folder_uri);
- g_return_if_reached ();
- }
- }
-
- if (folder != NULL)
- g_object_unref (folder);
+ folder = mail_folder_cache_ref_folder (
+ folder_cache, store, folder_name);
+ if (folder != NULL) {
+ /* XXX Need to rethink this API. Why should we
+ * need the CamelFolder instance just to get
+ * folder flags? The flags are more readily
+ * available than the CamelFolder instance. */
+ mail_folder_cache_get_folder_info_flags (
+ folder_cache, folder, &flags);
+ g_object_unref (folder);
}
target = em_event_target_new_folder (
event, store, folder_uri, new_messages,
msg_uid, msg_sender, msg_subject);
- if (folder_uri)
- g_free (folder_uri);
+ g_free (folder_uri);
folder_type = (flags & CAMEL_FOLDER_TYPE_MASK);
target->is_inbox = (folder_type == CAMEL_FOLDER_TYPE_INBOX);
diff --git a/mail/em-folder-tree-model.c b/mail/em-folder-tree-model.c
index eaa6b92342..66f292695b 100644
--- a/mail/em-folder-tree-model.c
+++ b/mail/em-folder-tree-model.c
@@ -748,22 +748,23 @@ em_folder_tree_model_set_folder_info (EMFolderTreeModel *model,
/* XXX This is duplicated in mail-folder-cache too, should perhaps
* be functionised. */
unread = fi->unread;
- if (mail_folder_cache_get_folder_from_uri (
- folder_cache, uri, &folder) && folder) {
+ folder = mail_folder_cache_ref_folder (
+ folder_cache, si->store, fi->full_name);
+ if (folder != NULL) {
folder_is_drafts = em_utils_folder_is_drafts (registry, folder);
folder_is_outbox = em_utils_folder_is_outbox (registry, folder);
if (folder_is_drafts || folder_is_outbox) {
gint total;
+ gint deleted;
- if ((total = camel_folder_get_message_count (folder)) > 0) {
- gint deleted = camel_folder_get_deleted_message_count (folder);
+ total = camel_folder_get_message_count (folder);
+ deleted = camel_folder_get_deleted_message_count (folder);
- if (deleted != -1)
- total -= deleted;
- }
+ if (total > 0 && deleted != -1)
+ total -= deleted;
- unread = total > 0 ? total : 0;
+ unread = MAX (total, 0);
}
g_object_unref (folder);