aboutsummaryrefslogtreecommitdiffstats
path: root/libemail-engine/mail-folder-cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'libemail-engine/mail-folder-cache.c')
-rw-r--r--libemail-engine/mail-folder-cache.c168
1 files changed, 40 insertions, 128 deletions
diff --git a/libemail-engine/mail-folder-cache.c b/libemail-engine/mail-folder-cache.c
index e62ffdf6d6..745bd5ba9d 100644
--- a/libemail-engine/mail-folder-cache.c
+++ b/libemail-engine/mail-folder-cache.c
@@ -60,8 +60,6 @@
typedef struct _StoreInfo StoreInfo;
struct _MailFolderCachePrivate {
- gpointer session; /* weak pointer */
-
/* source id for the ping timeout callback */
guint ping_id;
/* Store to storeinfo table, active stores */
@@ -81,11 +79,6 @@ struct _MailFolderCachePrivate {
};
enum {
- PROP_0,
- PROP_SESSION
-};
-
-enum {
FOLDER_AVAILABLE,
FOLDER_UNAVAILABLE,
FOLDER_DELETED,
@@ -339,18 +332,24 @@ update_1folder (MailFolderCache *cache,
const gchar *msg_subject,
CamelFolderInfo *info)
{
- EMailSession *session;
ESourceRegistry *registry;
- struct _folder_update *up;
+ CamelService *service;
+ CamelSession *session;
CamelFolder *folder;
gint unread = -1;
gint deleted;
- session = mail_folder_cache_get_session (cache);
- registry = e_mail_session_get_registry (session);
+ /* XXX This is a dirty way to obtain the ESourceRegistry,
+ * but it avoids MailFolderCache requiring it up front
+ * in mail_folder_cache_new(), which just complicates
+ * application startup even more. */
+ service = CAMEL_SERVICE (mfi->store_info->store);
+ session = camel_service_get_session (service);
+ registry = e_mail_session_get_registry (E_MAIL_SESSION (session));
+ g_return_if_fail (E_IS_SOURCE_REGISTRY (registry));
folder = mfi->folder;
- if (folder) {
+ if (folder != NULL) {
gboolean folder_is_sent;
gboolean folder_is_drafts;
gboolean folder_is_outbox;
@@ -392,19 +391,20 @@ update_1folder (MailFolderCache *cache,
d (printf ("folder updated: unread %d: '%s'\n", unread, mfi->full_name));
- if (unread == -1)
- return;
+ if (unread >= 0) {
+ struct _folder_update *up;
- up = g_malloc0 (sizeof (*up));
- up->full_name = g_strdup (mfi->full_name);
- up->unread = unread;
- up->new = new;
- up->store = g_object_ref (mfi->store_info->store);
- up->msg_uid = g_strdup (msg_uid);
- up->msg_sender = g_strdup (msg_sender);
- up->msg_subject = g_strdup (msg_subject);
- g_queue_push_tail (&cache->priv->updates, up);
- flush_updates (cache);
+ up = g_malloc0 (sizeof (*up));
+ up->full_name = g_strdup (mfi->full_name);
+ up->unread = unread;
+ up->new = new;
+ up->store = g_object_ref (mfi->store_info->store);
+ up->msg_uid = g_strdup (msg_uid);
+ up->msg_sender = g_strdup (msg_sender);
+ up->msg_subject = g_strdup (msg_subject);
+ g_queue_push_tail (&cache->priv->updates, up);
+ flush_updates (cache);
+ }
}
static void
@@ -785,19 +785,21 @@ unset_folder_info_hash (gchar *path,
static void
mail_folder_cache_first_update (MailFolderCache *cache,
- StoreInfo *info)
+ StoreInfo *store_info)
{
- EMailSession *session;
+ CamelService *service;
+ CamelSession *session;
const gchar *uid;
- session = mail_folder_cache_get_session (cache);
- uid = camel_service_get_uid (CAMEL_SERVICE (info->store));
+ service = CAMEL_SERVICE (store_info->store);
+ session = camel_service_ref_session (service);
+ uid = camel_service_get_uid (service);
- if (info->vjunk != NULL)
- mail_folder_cache_note_folder (cache, info->vjunk);
+ if (store_info->vjunk != NULL)
+ mail_folder_cache_note_folder (cache, store_info->vjunk);
- if (info->vtrash != NULL)
- mail_folder_cache_note_folder (cache, info->vtrash);
+ if (store_info->vtrash != NULL)
+ mail_folder_cache_note_folder (cache, store_info->vtrash);
/* Some extra work for the "On This Computer" store. */
if (g_strcmp0 (uid, E_MAIL_SESSION_LOCAL_UID) == 0) {
@@ -805,10 +807,13 @@ mail_folder_cache_first_update (MailFolderCache *cache,
gint ii;
for (ii = 0; ii < E_MAIL_NUM_LOCAL_FOLDERS; ii++) {
- folder = e_mail_session_get_local_folder (session, ii);
+ folder = e_mail_session_get_local_folder (
+ E_MAIL_SESSION (session), ii);
mail_folder_cache_note_folder (cache, folder);
}
}
+
+ g_object_unref (session);
}
static void
@@ -1054,72 +1059,6 @@ storeinfo_find_folder_info (CamelStore *store,
}
static void
-mail_folder_cache_set_session (MailFolderCache *cache,
- EMailSession *session)
-{
- g_return_if_fail (E_IS_MAIL_SESSION (session));
- g_return_if_fail (cache->priv->session == NULL);
-
- cache->priv->session = session;
-
- g_object_add_weak_pointer (
- G_OBJECT (cache->priv->session),
- &cache->priv->session);
-}
-
-static void
-mail_folder_cache_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- switch (property_id) {
- case PROP_SESSION:
- mail_folder_cache_set_session (
- MAIL_FOLDER_CACHE (object),
- g_value_get_object (value));
- return;
- }
-
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-}
-
-static void
-mail_folder_cache_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- switch (property_id) {
- case PROP_SESSION:
- g_value_set_object (
- value,
- mail_folder_cache_get_session (
- MAIL_FOLDER_CACHE (object)));
- return;
- }
-
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-}
-
-static void
-mail_folder_cache_dispose (GObject *object)
-{
- MailFolderCachePrivate *priv;
-
- priv = MAIL_FOLDER_CACHE_GET_PRIVATE (object);
-
- if (priv->session != NULL) {
- g_object_remove_weak_pointer (
- G_OBJECT (priv->session), &priv->session);
- priv->session = NULL;
- }
-
- /* Chain up to parent's dispose() method. */
- G_OBJECT_CLASS (mail_folder_cache_parent_class)->dispose (object);
-}
-
-static void
mail_folder_cache_finalize (GObject *object)
{
MailFolderCachePrivate *priv;
@@ -1313,27 +1252,12 @@ mail_folder_cache_class_init (MailFolderCacheClass *class)
g_type_class_add_private (class, sizeof (MailFolderCachePrivate));
object_class = G_OBJECT_CLASS (class);
- object_class->set_property = mail_folder_cache_set_property;
- object_class->get_property = mail_folder_cache_get_property;
- object_class->dispose = mail_folder_cache_dispose;
object_class->finalize = mail_folder_cache_finalize;
class->folder_available = mail_folder_cache_folder_available;
class->folder_unavailable = mail_folder_cache_folder_unavailable;
class->folder_deleted = mail_folder_cache_folder_deleted;
- g_object_class_install_property (
- object_class,
- PROP_SESSION,
- g_param_spec_object (
- "session",
- "Session",
- "Mail session",
- E_TYPE_MAIL_SESSION,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS));
-
/**
* MailFolderCache::folder-available
* @store: the #CamelStore containing the folder
@@ -1479,21 +1403,9 @@ mail_folder_cache_init (MailFolderCache *cache)
}
MailFolderCache *
-mail_folder_cache_new (EMailSession *session)
+mail_folder_cache_new (void)
{
- g_return_val_if_fail (E_IS_MAIL_SESSION (session), NULL);
-
- return g_object_new (
- MAIL_TYPE_FOLDER_CACHE,
- "session", session, NULL);
-}
-
-EMailSession *
-mail_folder_cache_get_session (MailFolderCache *cache)
-{
- g_return_val_if_fail (MAIL_IS_FOLDER_CACHE (cache), NULL);
-
- return E_MAIL_SESSION (cache->priv->session);
+ return g_object_new (MAIL_TYPE_FOLDER_CACHE, NULL);
}
/**