[evolution-data-server] Bug #562015 - CalDAV - Store CTag in a cache
- From: Milan Crha <mcrha src gnome org>
- To: svn-commits-list gnome org
- Subject: [evolution-data-server] Bug #562015 - CalDAV - Store CTag in a cache
- Date: Wed, 27 May 2009 07:56:53 -0400 (EDT)
commit 9e2e454642b4e12a8a225260ddcdedb15fc8e2fe
Author: Milan Crha <mcrha redhat com>
Date: Wed May 27 13:53:38 2009 +0200
Bug #562015 - CalDAV - Store CTag in a cache
Improved storing of a CTag, store it to a cache, to not fetch
whole calendar every start, only when CTag changed.
It's only part of that bug, it's not fixing it fully.
---
calendar/backends/caldav/e-cal-backend-caldav.c | 19 ++++++--------
calendar/libedata-cal/e-cal-backend-cache.c | 31 ++++++++++++++++++----
2 files changed, 33 insertions(+), 17 deletions(-)
diff --git a/calendar/backends/caldav/e-cal-backend-caldav.c b/calendar/backends/caldav/e-cal-backend-caldav.c
index 78002ca..364728e 100644
--- a/calendar/backends/caldav/e-cal-backend-caldav.c
+++ b/calendar/backends/caldav/e-cal-backend-caldav.c
@@ -49,6 +49,8 @@
#define d(x)
+#define CALDAV_CTAG_KEY "CALDAV_CTAG"
+
/* in seconds */
#define DEFAULT_REFRESH_TIME 60
@@ -112,7 +114,6 @@ struct _ECalBackendCalDAVPrivate {
/* support for 'getctag' extension */
gboolean ctag_supported;
- gchar *ctag;
};
/* ************************************************************************* */
@@ -1037,14 +1038,16 @@ check_calendar_changed_on_server (ECalBackendCalDAV *cbdav)
char *ctag = NULL;
if (parse_getctag_response (message, &ctag)) {
- if (ctag && priv->ctag && g_str_equal (ctag, priv->ctag)) {
+ const char *my_ctag = e_cal_backend_cache_get_key_value (priv->cache, CALDAV_CTAG_KEY);
+
+ if (ctag && my_ctag && g_str_equal (ctag, my_ctag)) {
/* ctag is same, no change in the calendar */
result = FALSE;
- g_free (ctag);
} else {
- g_free (priv->ctag);
- priv->ctag = ctag;
+ e_cal_backend_cache_put_key_value (priv->cache, CALDAV_CTAG_KEY, ctag);
}
+
+ g_free (ctag);
} else {
priv->ctag_supported = FALSE;
}
@@ -1896,8 +1899,6 @@ caldav_do_open (ECalBackendSync *backend,
g_mutex_lock (priv->lock);
/* let it decide the 'getctag' extension availability again */
- g_free (priv->ctag);
- priv->ctag = NULL;
priv->ctag_supported = TRUE;
if (!priv->loaded) {
@@ -3655,9 +3656,6 @@ e_cal_backend_caldav_finalize (GObject *object)
cbdav = E_CAL_BACKEND_CALDAV (object);
priv = E_CAL_BACKEND_CALDAV_GET_PRIVATE (cbdav);
- g_free (priv->ctag);
- priv->ctag = NULL;
-
g_mutex_free (priv->lock);
g_cond_free (priv->cond);
g_cond_free (priv->slave_gone_cond);
@@ -3693,7 +3691,6 @@ e_cal_backend_caldav_init (ECalBackendCalDAV *cbdav)
/* Thinks the 'getctag' extension is available the first time, but unset it when realizes it isn't. */
priv->ctag_supported = TRUE;
- priv->ctag = NULL;
priv->lock = g_mutex_new ();
priv->cond = g_cond_new ();
diff --git a/calendar/libedata-cal/e-cal-backend-cache.c b/calendar/libedata-cal/e-cal-backend-cache.c
index 763f170..bfc75ef 100644
--- a/calendar/libedata-cal/e-cal-backend-cache.c
+++ b/calendar/libedata-cal/e-cal-backend-cache.c
@@ -46,7 +46,7 @@ static char *
get_filename_from_uri (const char *uri, ECalSourceType source_type)
{
char *mangled_uri, *filename;
- char *source = NULL;
+ const char *source = NULL;
int i;
switch (source_type) {
@@ -832,6 +832,14 @@ e_cal_backend_cache_get_server_utc_time (ECalBackendCache *cache)
return e_file_cache_get_object (E_FILE_CACHE (cache), "server_utc_time");
}
+static char *
+get_keys_key (const char *key)
+{
+ g_return_val_if_fail (key != NULL, NULL);
+
+ return g_strconcat ("keys::", key, NULL);
+}
+
/**
* e_cal_backend_cache_put_key_value:
* @cache: An #ECalBackendCache object.
@@ -843,17 +851,22 @@ e_cal_backend_cache_get_server_utc_time (ECalBackendCache *cache)
gboolean
e_cal_backend_cache_put_key_value (ECalBackendCache *cache, const char *key, const char *value)
{
+ char *real_key;
gboolean ret_val = FALSE;
g_return_val_if_fail (E_IS_CAL_BACKEND_CACHE (cache), FALSE);
- if (value) {
- e_file_cache_remove_object (E_FILE_CACHE (cache), key);
+ real_key = get_keys_key (key);
+ if (!value) {
+ e_file_cache_remove_object (E_FILE_CACHE (cache), real_key);
+ g_free (real_key);
return TRUE;
}
- if (!(ret_val = e_file_cache_add_object (E_FILE_CACHE (cache), key, value)))
- ret_val = e_file_cache_replace_object (E_FILE_CACHE (cache), key, value);
+ if (!(ret_val = e_file_cache_add_object (E_FILE_CACHE (cache), real_key, value)))
+ ret_val = e_file_cache_replace_object (E_FILE_CACHE (cache), real_key, value);
+
+ g_free (real_key);
return ret_val;
}
@@ -867,8 +880,14 @@ e_cal_backend_cache_put_key_value (ECalBackendCache *cache, const char *key, con
const char *
e_cal_backend_cache_get_key_value (ECalBackendCache *cache, const char *key)
{
+ char *real_key;
+ const char *value;
g_return_val_if_fail (E_IS_CAL_BACKEND_CACHE (cache), NULL);
- return e_file_cache_get_object (E_FILE_CACHE (cache), key);
+ real_key = get_keys_key (key);
+ value = e_file_cache_get_object (E_FILE_CACHE (cache), real_key);
+ g_free (real_key);
+
+ return value;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]