From 3581bfb3efdbdd9747749db0ddfa55a728f96719 Mon Sep 17 00:00:00 2001 From: JP Rosevear Date: Wed, 19 Dec 2001 15:19:33 +0000 Subject: go slow and clear the map if the last uri and the current uri do not match 2001-12-19 JP Rosevear * conduits/calendar/calendar-conduit.c (check_for_slow_setting): go slow and clear the map if the last uri and the current uri do not match (post_sync): save the last uri * conduits/calendar/calendar-conduit-config.h: handle a last uri config option * conduits/todo/todo-conduit-config.h: ditto * conduits/calendar/calendar-conduit.c (start_calendar_server): use the open_default_calendar method * conduits/todo/todo-conduit.c (start_calendar_server): same as above * cal-client/Makefile.am: link with bonobo conf * cal-client/cal-client.h: new protos * idl/evolution-calendar.idl: make sure open method raises appropriate exceptions * gui/e-itip-control.c (start_calendar_server): use cal_client_open_default_* calls * cal-client/cal-client.c (real_open_calendar): do the real work of loading (cal_client_open_calendar): use above (get_fall_back_uri): get the basic local uri (get_default_uri): get the default uri from the config db (cal_client_open_default_calendar): open the default uri or the fallback if the method is unsupported (cal_client_open_default_tasks): same for tasks svn path=/trunk/; revision=15179 --- .../conduits/calendar/calendar-conduit-config.h | 13 ++++++++--- calendar/conduits/calendar/calendar-conduit.c | 26 ++++++++++++++-------- calendar/conduits/todo/todo-conduit-config.h | 11 +++++++-- calendar/conduits/todo/todo-conduit.c | 26 ++++++++++++++-------- 4 files changed, 53 insertions(+), 23 deletions(-) (limited to 'calendar/conduits') diff --git a/calendar/conduits/calendar/calendar-conduit-config.h b/calendar/conduits/calendar/calendar-conduit-config.h index c231a59008..4521612034 100644 --- a/calendar/conduits/calendar/calendar-conduit-config.h +++ b/calendar/conduits/calendar/calendar-conduit-config.h @@ -31,9 +31,11 @@ /* Configuration info */ typedef struct _ECalConduitCfg ECalConduitCfg; struct _ECalConduitCfg { - gboolean open_secret; guint32 pilot_id; - GnomePilotConduitSyncType sync_type; /* only used by capplet */ + GnomePilotConduitSyncType sync_type; + + gboolean open_secret; + gchar *last_uri; }; #ifdef CAL_CONFIG_LOAD @@ -63,6 +65,7 @@ calconduit_load_configuration (ECalConduitCfg **c, guint32 pilot_id) gnome_config_push_prefix (prefix); (*c)->open_secret = gnome_config_get_bool ("open_secret=FALSE"); + (*c)->last_uri = gnome_config_get_string ("last_uri"); gnome_config_pop_prefix (); } @@ -80,6 +83,7 @@ calconduit_save_configuration (ECalConduitCfg *c) gnome_config_push_prefix (prefix); gnome_config_set_bool ("open_secret", c->open_secret); + gnome_config_set_string ("last_uri", c->last_uri); gnome_config_pop_prefix (); gnome_config_sync (); @@ -98,9 +102,11 @@ calconduit_dupe_configuration (ECalConduitCfg *c) retval = g_new0 (ECalConduitCfg, 1); retval->sync_type = c->sync_type; - retval->open_secret = c->open_secret; retval->pilot_id = c->pilot_id; + retval->open_secret = c->open_secret; + retval->last_uri = g_strdup (c->last_uri); + return retval; } #endif @@ -113,6 +119,7 @@ calconduit_destroy_configuration (ECalConduitCfg **c) g_return_if_fail (c != NULL); g_return_if_fail (*c != NULL); + g_free ((*c)->last_uri); g_free (*c); *c = NULL; } diff --git a/calendar/conduits/calendar/calendar-conduit.c b/calendar/conduits/calendar/calendar-conduit.c index 1546141254..a320e9bb8d 100644 --- a/calendar/conduits/calendar/calendar-conduit.c +++ b/calendar/conduits/calendar/calendar-conduit.c @@ -37,9 +37,11 @@ #include #define CAL_CONFIG_LOAD 1 +#define CAL_CONFIG_SAVE 1 #define CAL_CONFIG_DESTROY 1 #include #undef CAL_CONFIG_LOAD +#undef CAL_CONFIG_SAVE #undef CAL_CONFIG_DESTROY #include @@ -202,28 +204,21 @@ start_calendar_server_cb (CalClient *cal_client, static int start_calendar_server (ECalConduitContext *ctxt) { - char *calendar_file; gboolean success = FALSE; g_return_val_if_fail (ctxt != NULL, -2); ctxt->client = cal_client_new (); - /* FIX ME */ - calendar_file = g_concat_dir_and_file (g_get_home_dir (), - "evolution/local/" - "Calendar/calendar.ics"); - gtk_signal_connect (GTK_OBJECT (ctxt->client), "cal_opened", start_calendar_server_cb, &success); - if (!cal_client_open_calendar (ctxt->client, calendar_file, FALSE)) + if (!cal_client_open_default_calendar (ctxt->client, FALSE)) return -1; /* run a sub event loop to turn cal-client's async load notification into a synchronous call */ gtk_main (); - g_free (calendar_file); if (success) return 0; @@ -1039,12 +1034,21 @@ check_for_slow_setting (GnomePilotConduit *c, ECalConduitContext *ctxt) { GnomePilotConduitStandard *conduit = GNOME_PILOT_CONDUIT_STANDARD (c); int map_count; - + const char *uri; + /* If there are objects but no log */ map_count = g_hash_table_size (ctxt->map->pid_map); if (map_count == 0) gnome_pilot_conduit_standard_set_slow (conduit, TRUE); + /* Or if the URI's don't match */ + uri = cal_client_get_uri (ctxt->client); + LOG(" Current URI %s (%s)\n", uri, ctxt->cfg->last_uri ? ctxt->cfg->last_uri : ""); + if (ctxt->cfg->last_uri != NULL && strcmp (ctxt->cfg->last_uri, uri)) { + gnome_pilot_conduit_standard_set_slow (conduit, TRUE); + e_pilot_map_clear (ctxt->map); + } + if (gnome_pilot_conduit_standard_get_slow (conduit)) { ctxt->map->write_touched_only = TRUE; LOG (" doing slow sync\n"); @@ -1196,6 +1200,10 @@ post_sync (GnomePilotConduit *conduit, LOG ("post_sync: Calendar Conduit v.%s", CONDUIT_VERSION); + g_free (ctxt->cfg->last_uri); + ctxt->cfg->last_uri = g_strdup (cal_client_get_uri (ctxt->client)); + calconduit_save_configuration (ctxt->cfg); + filename = map_name (ctxt); e_pilot_map_write (filename, ctxt->map); g_free (filename); diff --git a/calendar/conduits/todo/todo-conduit-config.h b/calendar/conduits/todo/todo-conduit-config.h index 010315291c..3296cd47e3 100644 --- a/calendar/conduits/todo/todo-conduit-config.h +++ b/calendar/conduits/todo/todo-conduit-config.h @@ -31,9 +31,11 @@ /* Configuration info */ typedef struct _EToDoConduitCfg EToDoConduitCfg; struct _EToDoConduitCfg { - gboolean open_secret; guint32 pilot_id; GnomePilotConduitSyncType sync_type; /* only used by capplet */ + + gboolean open_secret; + gchar *last_uri; }; #ifdef TODO_CONFIG_LOAD @@ -63,6 +65,7 @@ todoconduit_load_configuration (EToDoConduitCfg **c, guint32 pilot_id) gnome_config_push_prefix (prefix); (*c)->open_secret = gnome_config_get_bool ("open_secret=FALSE"); + (*c)->last_uri = gnome_config_get_string ("last_uri"); gnome_config_pop_prefix (); } @@ -80,6 +83,7 @@ todoconduit_save_configuration (EToDoConduitCfg *c) gnome_config_push_prefix (prefix); gnome_config_set_bool ("open_secret", c->open_secret); + gnome_config_set_string ("last_uri", c->last_uri); gnome_config_pop_prefix (); gnome_config_sync (); @@ -98,9 +102,11 @@ todoconduit_dupe_configuration (EToDoConduitCfg *c) retval = g_new0 (EToDoConduitCfg, 1); retval->sync_type = c->sync_type; - retval->open_secret = c->open_secret; retval->pilot_id = c->pilot_id; + retval->open_secret = c->open_secret; + retval->last_uri = g_strdup (c->last_uri); + return retval; } #endif @@ -113,6 +119,7 @@ todoconduit_destroy_configuration (EToDoConduitCfg **c) g_return_if_fail (c != NULL); g_return_if_fail (*c != NULL); + g_free ((*c)->last_uri); g_free (*c); *c = NULL; } diff --git a/calendar/conduits/todo/todo-conduit.c b/calendar/conduits/todo/todo-conduit.c index 4964860e22..8b68110847 100644 --- a/calendar/conduits/todo/todo-conduit.c +++ b/calendar/conduits/todo/todo-conduit.c @@ -37,9 +37,11 @@ #include #define TODO_CONFIG_LOAD 1 +#define TODO_CONFIG_SAVE 1 #define TODO_CONFIG_DESTROY 1 #include #undef TODO_CONFIG_LOAD +#undef TODO_CONFIG_SAVE #undef TODO_CONFIG_DESTROY #include @@ -204,28 +206,21 @@ start_calendar_server_cb (CalClient *cal_client, static int start_calendar_server (EToDoConduitContext *ctxt) { - char *calendar_file; gboolean success = FALSE; g_return_val_if_fail (ctxt != NULL, -2); ctxt->client = cal_client_new (); - /* FIX ME */ - calendar_file = g_concat_dir_and_file (g_get_home_dir (), - "evolution/local/" - "Tasks/tasks.ics"); - gtk_signal_connect (GTK_OBJECT (ctxt->client), "cal_opened", start_calendar_server_cb, &success); - if (!cal_client_open_calendar (ctxt->client, calendar_file, FALSE)) + if (!cal_client_open_default_tasks (ctxt->client, FALSE)) return -1; /* run a sub event loop to turn cal-client's async load notification into a synchronous call */ gtk_main (); - g_free (calendar_file); if (success) return 0; @@ -654,12 +649,21 @@ check_for_slow_setting (GnomePilotConduit *c, EToDoConduitContext *ctxt) { GnomePilotConduitStandard *conduit = GNOME_PILOT_CONDUIT_STANDARD (c); int map_count; - + const char *uri; + /* If there are no objects or objects but no log */ map_count = g_hash_table_size (ctxt->map->pid_map); if (map_count == 0) gnome_pilot_conduit_standard_set_slow (conduit, TRUE); + /* Or if the URI's don't match */ + uri = cal_client_get_uri (ctxt->client); + LOG(" Current URI %s (%s)\n", uri, ctxt->cfg->last_uri ? ctxt->cfg->last_uri : ""); + if (ctxt->cfg->last_uri != NULL && strcmp (ctxt->cfg->last_uri, uri)) { + gnome_pilot_conduit_standard_set_slow (conduit, TRUE); + e_pilot_map_clear (ctxt->map); + } + if (gnome_pilot_conduit_standard_get_slow (conduit)) { ctxt->map->write_touched_only = TRUE; LOG (" doing slow sync\n"); @@ -779,6 +783,10 @@ post_sync (GnomePilotConduit *conduit, gchar *filename, *change_id; LOG ("post_sync: ToDo Conduit v.%s", CONDUIT_VERSION); + + g_free (ctxt->cfg->last_uri); + ctxt->cfg->last_uri = g_strdup (cal_client_get_uri (ctxt->client)); + todoconduit_save_configuration (ctxt->cfg); filename = map_name (ctxt); e_pilot_map_write (filename, ctxt->map); -- cgit