/* Evolution calendar - Command-line client for the alarm notification service * * Copyright (C) 2001 Ximian, Inc. * * Authors: Federico Mena-Quintero * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include "evolution-calendar.h" /* Requests that a calendar be added to the alarm notification service */ static void add_calendar (GNOME_Evolution_Calendar_AlarmNotify an, const char *uri) { CORBA_Environment ev; CORBA_exception_init (&ev); GNOME_Evolution_Calendar_AlarmNotify_addCalendar (an, uri, &ev); 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 ("add_calendar(): Invalid URI reported from the " "alarm notification service"); goto out; } else if (strcmp (ex_id, ex_GNOME_Evolution_Calendar_AlarmNotify_BackendContactError) == 0) { g_message ("add_calendar(): The alarm notification service could " "not contact the backend"); goto out; } } if (ev._major != CORBA_NO_EXCEPTION) g_message ("add_calendar(): Could not issue the addCalendar request"); out: CORBA_exception_free (&ev); } /* Loads the calendars that the user has configured to be loaded */ static void load_calendars (void) { CORBA_Environment ev; GNOME_Evolution_Calendar_AlarmNotify an; char *base_uri; char *uri; CORBA_exception_init (&ev); an = oaf_activate_from_id ("OAFID:GNOME_Evolution_Calendar_AlarmNotify", 0, NULL, &ev); if (ev._major != CORBA_NO_EXCEPTION) { g_message ("load_calendars(): Could not activate the alarm notification service"); CORBA_exception_free (&ev); exit (EXIT_FAILURE); } CORBA_exception_free (&ev); /* FIXME: this should be obtained from the configuration in the Wombat */ base_uri = g_concat_dir_and_file (g_get_home_dir (), "evolution"); uri = g_concat_dir_and_file (base_uri, "local/Calendar/calendar.ics"); add_calendar (an, uri); g_free (uri); uri = g_concat_dir_and_file (base_uri, "local/Tasks/tasks.ics"); add_calendar (an, uri); g_free (uri); g_free (base_uri); CORBA_exception_init (&ev); Bonobo_Unknown_unref (an, &ev); if (ev._major != CORBA_NO_EXCEPTION) g_message ("load_calendars(): Could not unref the alarm notification service"); CORBA_exception_free (&ev); CORBA_exception_init (&ev); CORBA_Object_release (an, &ev); if (ev._major != CORBA_NO_EXCEPTION) g_message ("load_calendars(): Could not release the alarm notification service"); CORBA_exception_free (&ev); } /* FIXME: handle the --die option */ int main (int argc, char **argv) { GnomeClient *client; int flags; gboolean launch_service; bindtextdomain (PACKAGE, EVOLUTION_LOCALEDIR); textdomain (PACKAGE); if (gnome_init_with_popt_table ("evolution-alarm-client", VERSION, argc, argv, oaf_popt_options, 0, NULL) != 0) { g_message ("main(): Could not initialize GNOME"); exit (EXIT_FAILURE); } oaf_init (argc, argv); if (!bonobo_init (CORBA_OBJECT_NIL, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL)) { g_message ("main(): Could not initialize Bonobo"); exit (EXIT_FAILURE); } /* Ask the session manager to restart us */ client = gnome_master_client (); flags = gnome_client_get_flags (client); if (flags & GNOME_CLIENT_IS_CONNECTED) { char *client_id; client_id = gnome_client_get_id (client); g_assert (client_id != NULL); launch_service = gnome_startup_acquire_token ("EVOLUTION_ALARM_NOTIFY", client_id); if (launch_service) { char *args[3]; args[0] = argv[0]; args[2] = NULL; gnome_client_set_restart_style (client, GNOME_RESTART_ANYWAY); gnome_client_set_restart_command (client, 2, args); args[0] = argv[0]; args[1] = "--die"; args[2] = NULL; gnome_client_set_shutdown_command (client, 2, args); } else gnome_client_set_restart_style (client, GNOME_RESTART_NEVER); gnome_client_flush (client); } else launch_service = TRUE; if (!launch_service) return EXIT_SUCCESS; load_calendars (); return EXIT_SUCCESS; }