Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
Please login to access the resource
home:pchenthill
evolution-data-server
bnc-187529-calendar-cache-population.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File bnc-187529-calendar-cache-population.patch of Package evolution-data-server
--- calendar/backends/groupwise/e-cal-backend-groupwise.c.orig 2006-06-26 14:26:10.000000000 +0530 +++ calendar/backends/groupwise/e-cal-backend-groupwise.c 2006-06-26 14:30:26.000000000 +0530 @@ -132,13 +132,19 @@ populate_cache (ECalBackendGroupwise *cb EGwConnectionStatus status; ECalComponent *comp; GList *list = NULL, *l; - gboolean done = FALSE; + gboolean done = FALSE, forward = FALSE; int cursor = 0; guint32 total, num = 0; - int percent = 0; + int percent = 0, i; const char *position = E_GW_CURSOR_POSITION_END; icalcomponent_kind kind; const char *type; + EGwFilter* filter[3]; + char l_str[26]; + char h_str[26]; + icaltimetype temp; + struct tm tm; + time_t h_time, l_time; priv = cbgw->priv; kind = e_cal_backend_get_kind (E_CAL_BACKEND (cbgw)); @@ -155,66 +161,101 @@ populate_cache (ECalBackendGroupwise *cb else type = "Task"; - status = e_gw_connection_create_cursor (priv->cnc, - priv->container_id, - "recipients message recipientStatus attachments default peek", NULL, &cursor); - if (status != E_GW_CONNECTION_STATUS_OK) { - e_cal_backend_groupwise_notify_error_code (cbgw, status); - g_mutex_unlock (mutex); - return status; - } - - while (!done) { - - status = e_gw_connection_read_cursor (priv->cnc, priv->container_id, cursor, FALSE, CURSOR_ITEM_LIMIT, position, &list); + /* Fetch the data with a bias to present, near past/future */ + temp = icaltime_current_time_with_zone (icaltimezone_get_utc_timezone ()); + i = g_ascii_strtod (g_getenv ("PRELOAD_WINDOW_DAYS")? g_getenv ("PRELOAD_WINDOW_DAYS"):"15", NULL); + temp.day -= i; + icaltime_normalize (temp); + l_time = icaltime_as_timet_with_zone (temp, icaltimezone_get_utc_timezone ()); + gmtime_r (&l_time, &tm); + strftime (l_str, 26, "%Y-%m-%dT%H:%M:%SZ", &tm); + temp.day += (2*i); + icaltime_normalize (temp); + h_time = icaltime_as_timet_with_zone (temp, icaltimezone_get_utc_timezone ()); + gmtime_r (&h_time, &tm); + strftime (h_str, 26, "%Y-%m-%dT%H:%M:%SZ", &tm); + + filter[0] = e_gw_filter_new (); + e_gw_filter_add_filter_component (filter[0], E_GW_FILTER_OP_GREATERTHAN_OR_EQUAL, "startDate", l_str); + e_gw_filter_add_filter_component (filter[0], E_GW_FILTER_OP_LESSTHAN_OR_EQUAL, "startDate", h_str); + e_gw_filter_group_conditions (filter[0], E_GW_FILTER_OP_AND, 2); + filter[1] = e_gw_filter_new (); + e_gw_filter_add_filter_component (filter[1], E_GW_FILTER_OP_GREATERTHAN, "startDate", h_str); + filter[2] = e_gw_filter_new (); + e_gw_filter_add_filter_component (filter[2], E_GW_FILTER_OP_LESSTHAN, "startDate", l_str); + + for (i = 0; i < 3; i++) { + status = e_gw_connection_create_cursor (priv->cnc, + priv->container_id, + "recipients message recipientStatus attachments default peek", filter[i], &cursor); if (status != E_GW_CONNECTION_STATUS_OK) { e_cal_backend_groupwise_notify_error_code (cbgw, status); g_mutex_unlock (mutex); return status; } - for (l = list; l != NULL; l = g_list_next(l)) { - EGwItem *item; - char *progress_string = NULL; + done = FALSE; + if (i == 1) { + position = E_GW_CURSOR_POSITION_START; + forward = TRUE; + + } else { + position = E_GW_CURSOR_POSITION_END; + forward = FALSE; + } - item = E_GW_ITEM (l->data); - comp = e_gw_item_to_cal_component (item, cbgw); - g_object_unref (item); + while (!done) { - /* Show the progress information */ - num++; - percent = ((float) num/total) * 100; - - /* FIXME The total obtained from the server is wrong. Sometimes the num can - be greater than the total. The following makes sure that the percentage is not >= 100 */ - - if (percent > 100) - percent = 99; - - progress_string = g_strdup_printf (_("Loading %s items"), type); - e_cal_backend_notify_view_progress (E_CAL_BACKEND (cbgw), progress_string, percent); + status = e_gw_connection_read_cursor (priv->cnc, priv->container_id, cursor, forward, CURSOR_ITEM_LIMIT, position, &list); + if (status != E_GW_CONNECTION_STATUS_OK) { + e_cal_backend_groupwise_notify_error_code (cbgw, status); + g_mutex_unlock (mutex); + return status; + } + for (l = list; l != NULL; l = g_list_next(l)) { + EGwItem *item; + char *progress_string = NULL; + + item = E_GW_ITEM (l->data); + comp = e_gw_item_to_cal_component (item, cbgw); + g_object_unref (item); + + /* Show the progress information */ + num++; + percent = ((float) num/total) * 100; - if (E_IS_CAL_COMPONENT (comp)) { - char *comp_str; + /* FIXME The total obtained from the server is wrong. Sometimes the num can + be greater than the total. The following makes sure that the percentage is not >= 100 */ + + if (percent > 100) + percent = 99; + + progress_string = g_strdup_printf (_("Loading %s items"), type); + e_cal_backend_notify_view_progress (E_CAL_BACKEND (cbgw), progress_string, percent); - e_cal_component_commit_sequence (comp); - if (kind == icalcomponent_isa (e_cal_component_get_icalcomponent (comp))) { - comp_str = e_cal_component_get_as_string (comp); - e_cal_backend_notify_object_created (E_CAL_BACKEND (cbgw), (const char *) comp_str); - g_free (comp_str); + if (E_IS_CAL_COMPONENT (comp)) { + char *comp_str; + + e_cal_component_commit_sequence (comp); + if (kind == icalcomponent_isa (e_cal_component_get_icalcomponent (comp))) { + comp_str = e_cal_component_get_as_string (comp); + e_cal_backend_notify_object_created (E_CAL_BACKEND (cbgw), (const char *) comp_str); + g_free (comp_str); + } + e_cal_backend_cache_put_component (priv->cache, comp); + g_object_unref (comp); } - e_cal_backend_cache_put_component (priv->cache, comp); - g_object_unref (comp); + g_free (progress_string); } - g_free (progress_string); + + if (!list || g_list_length (list) == 0) + done = TRUE; + g_list_free (list); + list = NULL; + position = E_GW_CURSOR_POSITION_CURRENT; } - - if (!list || g_list_length (list) == 0) - done = TRUE; - g_list_free (list); - list = NULL; - position = E_GW_CURSOR_POSITION_CURRENT; - } - e_gw_connection_destroy_cursor (priv->cnc, priv->container_id, cursor); + e_gw_connection_destroy_cursor (priv->cnc, priv->container_id, cursor); + g_object_unref (filter[i]); + } e_cal_backend_notify_view_done (E_CAL_BACKEND (cbgw), GNOME_Evolution_Calendar_Success); g_mutex_unlock (mutex);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor