diff options
Diffstat (limited to 'calendar')
-rw-r--r-- | calendar/ChangeLog | 14 | ||||
-rw-r--r-- | calendar/TODO | 5 | ||||
-rw-r--r-- | calendar/calendar-pilot-sync.c | 36 | ||||
-rw-r--r-- | calendar/calendar.c | 23 | ||||
-rw-r--r-- | calendar/calendar.h | 2 | ||||
-rw-r--r-- | calendar/corba-cal.c | 2 | ||||
-rw-r--r-- | calendar/eventedit.c | 9 | ||||
-rw-r--r-- | calendar/gui/calendar-pilot-sync.c | 36 | ||||
-rw-r--r-- | calendar/gui/calendar.c | 23 | ||||
-rw-r--r-- | calendar/gui/calendar.h | 2 | ||||
-rw-r--r-- | calendar/gui/corba-cal.c | 2 | ||||
-rw-r--r-- | calendar/gui/eventedit.c | 9 | ||||
-rw-r--r-- | calendar/gui/main.c | 1 | ||||
-rw-r--r-- | calendar/main.c | 1 |
14 files changed, 83 insertions, 82 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index c6e61d4ee0..e9d3776cc5 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,5 +1,19 @@ 1999-07-28 Miguel de Icaza <miguel@gnu.org> + * calendar-pilot-sync.c: Make the code not take arguments + (sync_cal_to_pilot): Nice event update information + + * calendar.c (calendar_new): Add Event UID hash table. + (calendar_add_object): Add events to the hash table here. + (calendar_remove_object): Remove events here. + (calendar_object_find_event): Use the hash table here. + + * main.c (save_calendar_cmd): The object is already destroyed by + gnome_dialog_run. + + * calendar-pilot-sync.c (sync_object_to_pilot): Do not turn + archived bit on. + * calobj.c (ical_gen_uid): Use the hostname, not the domain name. (ical_gen_uid): Add a serial number. Isodates can be small. diff --git a/calendar/TODO b/calendar/TODO index 822ec2eb35..2dbd29cdbb 100644 --- a/calendar/TODO +++ b/calendar/TODO @@ -2,10 +2,11 @@ Pilot: * Better support for untimed events (we have none now). -* Add syncing from Desktop to Pilot. - * Hash objects based on their UIDs. +* Add placeholders for deleted events, so that we can kill those + when syncing to the pilot. + BUGS: - Recurrence end date is wrong. An event that repeats daily will not diff --git a/calendar/calendar-pilot-sync.c b/calendar/calendar-pilot-sync.c index bbacd312eb..d0bd03ed75 100644 --- a/calendar/calendar-pilot-sync.c +++ b/calendar/calendar-pilot-sync.c @@ -47,9 +47,9 @@ int only_pilot_to_desktop = 0; const struct poptOption calendar_sync_options [] = { { "pilot", 0, POPT_ARG_STRING, &pilot_port, 0, N_("Specifies the port on which the Pilot is"), N_("PORT") }, - { "debug-attrs", 0, POPT_ARG_INT, &debug_attrs, 0, + { "debug-attrs", 0, POPT_ARG_NONE, &debug_attrs, 0, N_("If you want to debug the attributes on records"), NULL }, - { "only-desktop", 0, POPT_ARG_INT, &only_desktop_to_pilot, 0, + { "only-desktop", 0, POPT_ARG_NONE, &only_desktop_to_pilot, 0, N_("Only syncs from desktop to pilot"), NULL }, { "only-pilot", 0, POPT_ARG_INT, &only_pilot_to_desktop, 0, N_("Only syncs from pilot to desktop"), NULL }, @@ -331,7 +331,11 @@ sync_object_to_pilot (GNOME_Calendar_Repository repo, iCalObject *obj, int pilot if (rec_len > 0) unpack_Appointment (a, buffer, rec_len); - } + } else { + attr = 0; + cat = 0; + } + /* a contains the appointment either cleared or with the data from the Pilot */ a->begin = *localtime (&obj->dtstart); a->end = *localtime (&obj->dtend); @@ -432,20 +436,14 @@ sync_object_to_pilot (GNOME_Calendar_Repository repo, iCalObject *obj, int pilot attr &= ~dlpRecAttrSecret; /* - * Mark as archived. FIXME: is this the case? - */ - attr |= dlpRecAttrArchived; - - /* * Send the appointment to the pilot */ rec_len = pack_Appointment (a, buffer, sizeof (buffer)); attr &= ~dlpRecAttrDirty; - printf ("Status=%d\n", - dlp_WriteRecord ( + dlp_WriteRecord ( pilot_fd, db, attr, - obj->pilot_id, cat, buffer, rec_len, &new_id)); + obj->pilot_id, cat, buffer, rec_len, &new_id); GNOME_Calendar_Repository_update_pilot_id (repo, obj->uid, new_id, ICAL_PILOT_SYNC_NONE, &ev); free_Appointment (a); @@ -456,10 +454,15 @@ static void sync_cal_to_pilot (GNOME_Calendar_Repository repo, Calendar *cal, int pilot_fd) { GList *l; - - for (l = cal->events; l; l = l->next){ + int c = g_list_length (cal->events); + int i; + + printf ("\n"); + for (i = 0, l = cal->events; l; l = l->next, i++){ iCalObject *obj = l->data; + printf ("Syncing desktop to pilot: %d/%d\r", i + 1, c); + fflush (stdout); if (obj->pilot_status != ICAL_PILOT_SYNC_MOD){ g_warning ("Strange, we were supposed to get only a dirty object"); continue; @@ -467,6 +470,7 @@ sync_cal_to_pilot (GNOME_Calendar_Repository repo, Calendar *cal, int pilot_fd) sync_object_to_pilot (repo, obj, pilot_fd); } + printf ("\n"); } static void @@ -533,7 +537,7 @@ sync_pilot (GNOME_Calendar_Repository repo, int pilot_fd) /* If the object was deleted, remove it from the database */ if (attr & dlpRecAttrDeleted){ - printf ("Deleteing\n"); + printf ("Deleting\n"); delete_record (repo, id); free_Appointment (&a); continue; @@ -591,9 +595,9 @@ main (int argc, char *argv []) repository = locate_calendar_server (); printf ("Done\n"); - printf ("Syncing...\n"); + printf ("<Syncing>\n"); sync_pilot (repository, link); - printf ("Done Syncing\n"); + printf ("</Syncing>\n"); GNOME_Calendar_Repository_done (repository, &ev); diff --git a/calendar/calendar.c b/calendar/calendar.c index 30e4e0168c..339995cb92 100644 --- a/calendar/calendar.c +++ b/calendar/calendar.c @@ -38,6 +38,8 @@ calendar_new (char *title) cal->title = g_strdup (title); + cal->event_hash = g_hash_table_new (g_str_hash, g_str_equal); + calendar_init_alarms (cal); return cal; @@ -93,9 +95,14 @@ ical_object_try_alarms (iCalObject *obj) void calendar_add_object (Calendar *cal, iCalObject *obj) { + g_return_if_fail (cal != NULL); + g_return_if_fail (obj != NULL); + g_return_if_fail (obj->uid != NULL); + obj->new = 0; switch (obj->type){ case ICAL_EVENT: + g_hash_table_insert (cal->event_hash, obj->uid, obj); cal->events = g_list_prepend (cal->events, obj); ical_object_try_alarms (obj); #ifdef DEBUGGING_MAIL_ALARM @@ -133,6 +140,7 @@ calendar_remove_object (Calendar *cal, iCalObject *obj) switch (obj->type){ case ICAL_EVENT: cal->events = g_list_remove (cal->events, obj); + g_hash_table_remove (cal->event_hash, obj->uid); break; case ICAL_TODO: @@ -161,6 +169,8 @@ calendar_destroy (Calendar *cal) g_list_foreach (cal->journal, (GFunc) ical_object_destroy, NULL); g_list_free (cal->journal); + g_hash_table_destroy (cal->event_hash); + if (cal->title) g_free (cal->title); if (cal->filename) @@ -169,17 +179,6 @@ calendar_destroy (Calendar *cal) g_free (cal); } -static char * -ice (time_t t) -{ - static char buffer [100]; - struct tm *tm; - - tm = localtime (&t); - sprintf (buffer, "%d/%d/%d", tm->tm_mday, tm->tm_mon, tm->tm_year); - return buffer; -} - void calendar_iterate_on_objects (GList *objects, time_t start, time_t end, calendarfn cb, void *closure) { @@ -544,7 +543,7 @@ calendar_object_find_event (Calendar *cal, const char *uid) g_return_val_if_fail (cal != NULL, NULL); g_return_val_if_fail (uid != NULL, NULL); - return calendar_object_find_in_list (cal, cal->events, uid); + return g_hash_table_lookup (cal->event_hash, uid); } iCalObject * diff --git a/calendar/calendar.h b/calendar/calendar.h index aa25fba67c..4a9d4bcff2 100644 --- a/calendar/calendar.h +++ b/calendar/calendar.h @@ -17,6 +17,8 @@ typedef struct { GList *todo; GList *journal; + GHashTable *event_hash; + /* Time at which the calendar was created */ time_t created; diff --git a/calendar/corba-cal.c b/calendar/corba-cal.c index 8f92057d42..f322b41db8 100644 --- a/calendar/corba-cal.c +++ b/calendar/corba-cal.c @@ -81,7 +81,6 @@ cal_repo_get_object_by_pilot_id (PortableServer_Servant servant, CORBA_char *ret; obj = calendar_object_find_by_pilot (gcal->cal, pilot_id); - printf ("Looking for [%d]\n", pilot_id); if (obj == NULL){ CORBA_exception_set (ev, CORBA_USER_EXCEPTION, @@ -149,7 +148,6 @@ cal_repo_update_object (PortableServer_Servant servant, obj = calendar_object_find_event (gcal->cal, uid); if (obj != NULL){ - printf ("ELIMINATING: %s -> %s\n", obj->uid, new_object->uid); calendar_remove_object (gcal->cal, obj); } diff --git a/calendar/eventedit.c b/calendar/eventedit.c index 8a36b94638..027c59839d 100644 --- a/calendar/eventedit.c +++ b/calendar/eventedit.c @@ -60,15 +60,6 @@ event_editor_class_init (EventEditorClass *class) } static GtkWidget * -adjust (GtkWidget *w, gfloat x, gfloat y, gfloat xs, gfloat ys) -{ - GtkWidget *a = gtk_alignment_new (x, y, xs, ys); - - gtk_container_add (GTK_CONTAINER (a), w); - return a; -} - -static GtkWidget * make_spin_button (int val, int low, int high) { GtkAdjustment *adj; diff --git a/calendar/gui/calendar-pilot-sync.c b/calendar/gui/calendar-pilot-sync.c index bbacd312eb..d0bd03ed75 100644 --- a/calendar/gui/calendar-pilot-sync.c +++ b/calendar/gui/calendar-pilot-sync.c @@ -47,9 +47,9 @@ int only_pilot_to_desktop = 0; const struct poptOption calendar_sync_options [] = { { "pilot", 0, POPT_ARG_STRING, &pilot_port, 0, N_("Specifies the port on which the Pilot is"), N_("PORT") }, - { "debug-attrs", 0, POPT_ARG_INT, &debug_attrs, 0, + { "debug-attrs", 0, POPT_ARG_NONE, &debug_attrs, 0, N_("If you want to debug the attributes on records"), NULL }, - { "only-desktop", 0, POPT_ARG_INT, &only_desktop_to_pilot, 0, + { "only-desktop", 0, POPT_ARG_NONE, &only_desktop_to_pilot, 0, N_("Only syncs from desktop to pilot"), NULL }, { "only-pilot", 0, POPT_ARG_INT, &only_pilot_to_desktop, 0, N_("Only syncs from pilot to desktop"), NULL }, @@ -331,7 +331,11 @@ sync_object_to_pilot (GNOME_Calendar_Repository repo, iCalObject *obj, int pilot if (rec_len > 0) unpack_Appointment (a, buffer, rec_len); - } + } else { + attr = 0; + cat = 0; + } + /* a contains the appointment either cleared or with the data from the Pilot */ a->begin = *localtime (&obj->dtstart); a->end = *localtime (&obj->dtend); @@ -432,20 +436,14 @@ sync_object_to_pilot (GNOME_Calendar_Repository repo, iCalObject *obj, int pilot attr &= ~dlpRecAttrSecret; /* - * Mark as archived. FIXME: is this the case? - */ - attr |= dlpRecAttrArchived; - - /* * Send the appointment to the pilot */ rec_len = pack_Appointment (a, buffer, sizeof (buffer)); attr &= ~dlpRecAttrDirty; - printf ("Status=%d\n", - dlp_WriteRecord ( + dlp_WriteRecord ( pilot_fd, db, attr, - obj->pilot_id, cat, buffer, rec_len, &new_id)); + obj->pilot_id, cat, buffer, rec_len, &new_id); GNOME_Calendar_Repository_update_pilot_id (repo, obj->uid, new_id, ICAL_PILOT_SYNC_NONE, &ev); free_Appointment (a); @@ -456,10 +454,15 @@ static void sync_cal_to_pilot (GNOME_Calendar_Repository repo, Calendar *cal, int pilot_fd) { GList *l; - - for (l = cal->events; l; l = l->next){ + int c = g_list_length (cal->events); + int i; + + printf ("\n"); + for (i = 0, l = cal->events; l; l = l->next, i++){ iCalObject *obj = l->data; + printf ("Syncing desktop to pilot: %d/%d\r", i + 1, c); + fflush (stdout); if (obj->pilot_status != ICAL_PILOT_SYNC_MOD){ g_warning ("Strange, we were supposed to get only a dirty object"); continue; @@ -467,6 +470,7 @@ sync_cal_to_pilot (GNOME_Calendar_Repository repo, Calendar *cal, int pilot_fd) sync_object_to_pilot (repo, obj, pilot_fd); } + printf ("\n"); } static void @@ -533,7 +537,7 @@ sync_pilot (GNOME_Calendar_Repository repo, int pilot_fd) /* If the object was deleted, remove it from the database */ if (attr & dlpRecAttrDeleted){ - printf ("Deleteing\n"); + printf ("Deleting\n"); delete_record (repo, id); free_Appointment (&a); continue; @@ -591,9 +595,9 @@ main (int argc, char *argv []) repository = locate_calendar_server (); printf ("Done\n"); - printf ("Syncing...\n"); + printf ("<Syncing>\n"); sync_pilot (repository, link); - printf ("Done Syncing\n"); + printf ("</Syncing>\n"); GNOME_Calendar_Repository_done (repository, &ev); diff --git a/calendar/gui/calendar.c b/calendar/gui/calendar.c index 30e4e0168c..339995cb92 100644 --- a/calendar/gui/calendar.c +++ b/calendar/gui/calendar.c @@ -38,6 +38,8 @@ calendar_new (char *title) cal->title = g_strdup (title); + cal->event_hash = g_hash_table_new (g_str_hash, g_str_equal); + calendar_init_alarms (cal); return cal; @@ -93,9 +95,14 @@ ical_object_try_alarms (iCalObject *obj) void calendar_add_object (Calendar *cal, iCalObject *obj) { + g_return_if_fail (cal != NULL); + g_return_if_fail (obj != NULL); + g_return_if_fail (obj->uid != NULL); + obj->new = 0; switch (obj->type){ case ICAL_EVENT: + g_hash_table_insert (cal->event_hash, obj->uid, obj); cal->events = g_list_prepend (cal->events, obj); ical_object_try_alarms (obj); #ifdef DEBUGGING_MAIL_ALARM @@ -133,6 +140,7 @@ calendar_remove_object (Calendar *cal, iCalObject *obj) switch (obj->type){ case ICAL_EVENT: cal->events = g_list_remove (cal->events, obj); + g_hash_table_remove (cal->event_hash, obj->uid); break; case ICAL_TODO: @@ -161,6 +169,8 @@ calendar_destroy (Calendar *cal) g_list_foreach (cal->journal, (GFunc) ical_object_destroy, NULL); g_list_free (cal->journal); + g_hash_table_destroy (cal->event_hash); + if (cal->title) g_free (cal->title); if (cal->filename) @@ -169,17 +179,6 @@ calendar_destroy (Calendar *cal) g_free (cal); } -static char * -ice (time_t t) -{ - static char buffer [100]; - struct tm *tm; - - tm = localtime (&t); - sprintf (buffer, "%d/%d/%d", tm->tm_mday, tm->tm_mon, tm->tm_year); - return buffer; -} - void calendar_iterate_on_objects (GList *objects, time_t start, time_t end, calendarfn cb, void *closure) { @@ -544,7 +543,7 @@ calendar_object_find_event (Calendar *cal, const char *uid) g_return_val_if_fail (cal != NULL, NULL); g_return_val_if_fail (uid != NULL, NULL); - return calendar_object_find_in_list (cal, cal->events, uid); + return g_hash_table_lookup (cal->event_hash, uid); } iCalObject * diff --git a/calendar/gui/calendar.h b/calendar/gui/calendar.h index aa25fba67c..4a9d4bcff2 100644 --- a/calendar/gui/calendar.h +++ b/calendar/gui/calendar.h @@ -17,6 +17,8 @@ typedef struct { GList *todo; GList *journal; + GHashTable *event_hash; + /* Time at which the calendar was created */ time_t created; diff --git a/calendar/gui/corba-cal.c b/calendar/gui/corba-cal.c index 8f92057d42..f322b41db8 100644 --- a/calendar/gui/corba-cal.c +++ b/calendar/gui/corba-cal.c @@ -81,7 +81,6 @@ cal_repo_get_object_by_pilot_id (PortableServer_Servant servant, CORBA_char *ret; obj = calendar_object_find_by_pilot (gcal->cal, pilot_id); - printf ("Looking for [%d]\n", pilot_id); if (obj == NULL){ CORBA_exception_set (ev, CORBA_USER_EXCEPTION, @@ -149,7 +148,6 @@ cal_repo_update_object (PortableServer_Servant servant, obj = calendar_object_find_event (gcal->cal, uid); if (obj != NULL){ - printf ("ELIMINATING: %s -> %s\n", obj->uid, new_object->uid); calendar_remove_object (gcal->cal, obj); } diff --git a/calendar/gui/eventedit.c b/calendar/gui/eventedit.c index 8a36b94638..027c59839d 100644 --- a/calendar/gui/eventedit.c +++ b/calendar/gui/eventedit.c @@ -60,15 +60,6 @@ event_editor_class_init (EventEditorClass *class) } static GtkWidget * -adjust (GtkWidget *w, gfloat x, gfloat y, gfloat xs, gfloat ys) -{ - GtkWidget *a = gtk_alignment_new (x, y, xs, ys); - - gtk_container_add (GTK_CONTAINER (a), w); - return a; -} - -static GtkWidget * make_spin_button (int val, int low, int high) { GtkAdjustment *adj; diff --git a/calendar/gui/main.c b/calendar/gui/main.c index 7a1888898b..3a49dfaa9a 100644 --- a/calendar/gui/main.c +++ b/calendar/gui/main.c @@ -440,7 +440,6 @@ save_calendar_cmd (GtkWidget *widget, void *data) g_free (str); gnome_dialog_set_default (GNOME_DIALOG (box), 1); b = gnome_dialog_run (GNOME_DIALOG (box)); - gtk_object_destroy (GTK_OBJECT (box)); if (b != 0) return; diff --git a/calendar/main.c b/calendar/main.c index 7a1888898b..3a49dfaa9a 100644 --- a/calendar/main.c +++ b/calendar/main.c @@ -440,7 +440,6 @@ save_calendar_cmd (GtkWidget *widget, void *data) g_free (str); gnome_dialog_set_default (GNOME_DIALOG (box), 1); b = gnome_dialog_run (GNOME_DIALOG (box)); - gtk_object_destroy (GTK_OBJECT (box)); if (b != 0) return; |