From d21e6e4dc143f1b077da4d9c9375947e63321d7a Mon Sep 17 00:00:00 2001 From: Federico Mena Quintero Date: Thu, 18 Oct 2001 19:50:29 +0000 Subject: Adds session management for the alarm daemon. Also makes it store a list 2001-10-18 Federico Mena Quintero Adds session management for the alarm daemon. Also makes it store a list of calendars to be monitored. Those calendars will all be loaded when the alarm daemon starts up. * idl/evolution-calendar.idl (AlarmNotify): Removed the ::die() method. The alarm daemon now handles termination via the session manager's commands. * gui/alarm-notify/notify-main.c (set_session_parameters): New function, sets some parameters so that the session manager can restart the daemon via the evolution-alarm-client program. Also, sets up the "die" signal so that the daemon can terminate when the session ends. (load_calendars): New function to load the calendars on startup. (main): Set the session parameters. Load the calendars on startup. * gui/alarm-notify/alarm-notify.c (alarm_notify_add_calendar): New function, moved over from the impl_ function. Added a load_afterwards argument to indicate whether the calendar should just be loaded or if it should also be added to the list of calendars to load on startup. (AlarmNotify_addCalendar): Use alarm_notify_add_calendar(). (AlarmNotify_removeCalendar): Remove the calendar from the list of calendars to load on startup. * gui/alarm-notify/save.c (save_calendars_to_load): New function, saves a sequence of the URIs to load. (get_calendars_to_load): New function, loads a sequence of calendars to load. * gui/alarm-notify/alarm.h: Removed stale prototype for alarm_init(). * gui/component-factory.c (remove_folder): Ask the alarm daemon to stop monitoring alarms for the folder that is being deleted. svn path=/trunk/; revision=13763 --- calendar/gui/component-factory.c | 58 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) (limited to 'calendar/gui/component-factory.c') diff --git a/calendar/gui/component-factory.c b/calendar/gui/component-factory.c index e13a3f8a50..5aa8913f73 100644 --- a/calendar/gui/component-factory.c +++ b/calendar/gui/component-factory.c @@ -142,6 +142,60 @@ create_folder (EvolutionShellComponent *shell_component, CORBA_exception_free (&ev); } +/* Asks the alarm daemon to stop monitoring the specified URI */ +static void +stop_alarms (GnomeVFSURI *uri) +{ + char *str_uri; + CORBA_Environment ev; + GNOME_Evolution_Calendar_AlarmNotify an; + + /* Activate the alarm notification service */ + + CORBA_exception_init (&ev); + an = oaf_activate_from_id ("OAFIID:GNOME_Evolution_Calendar_AlarmNotify", 0, NULL, &ev); + + if (ev._major != CORBA_NO_EXCEPTION) { + g_message ("stop_alarms(): Could not activate the alarm notification service"); + CORBA_exception_free (&ev); + return; + } + CORBA_exception_free (&ev); + + /* Ask the service to remove the URI from its list of calendars */ + + str_uri = gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_NONE); + g_assert (str_uri != NULL); + + CORBA_exception_init (&ev); + GNOME_Evolution_Calendar_AlarmNotify_removeCalendar (an, str_uri, &ev); + g_free (str_uri); + + if (ev._major == CORBA_USER_EXCEPTION) { + char *ex_id; + + ex_id = CORBA_exception_id (&ev); + if (strcmp (ex_id, ex_GNOME_Evolution_Calendar_AlarmNotify_InvalidURI) == 0) + g_message ("stop_alarms(): Invalid URI reported from the " + "alarm notification service"); + else if (strcmp (ex_id, ex_GNOME_Evolution_Calendar_AlarmNotify_NotFound) == 0) { + /* This is OK; the service may not have loaded that calendar */ + } + } else if (ev._major != CORBA_NO_EXCEPTION) + g_message ("stop_alarms(): Could not issue the removeCalendar request"); + + CORBA_exception_free (&ev); + + /* Get rid of the service */ + + CORBA_exception_init (&ev); + bonobo_object_release_unref (an, &ev); + if (ev._major != CORBA_NO_EXCEPTION) + g_message ("stop_alarms(): Could not unref the alarm notification service"); + + CORBA_exception_free (&ev); +} + static void remove_folder (EvolutionShellComponent *shell_component, const char *physical_uri, @@ -217,6 +271,10 @@ remove_folder (EvolutionShellComponent *shell_component, goto out; } + /* Ask the alarm daemon to stop monitoring this URI */ + + stop_alarms (data_uri); + /* Delete the data and backup files; the shell will take care of the rest */ data_result = gnome_vfs_unlink_from_uri (data_uri); -- cgit v1.2.3