aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/importers
diff options
context:
space:
mode:
authornobody <nobody@localhost>2002-12-06 03:58:38 +0800
committernobody <nobody@localhost>2002-12-06 03:58:38 +0800
commit472a367597cd6158e2e9dc3e2210bf9efab4d112 (patch)
treedbf36038cda1070ffb9d92e023654b2bdf1451b4 /calendar/importers
parentcf5e09fda7bba7532d7be4b9949f7737a4a418cd (diff)
downloadgsoc2013-evolution-472a367597cd6158e2e9dc3e2210bf9efab4d112.tar.gz
gsoc2013-evolution-472a367597cd6158e2e9dc3e2210bf9efab4d112.tar.zst
gsoc2013-evolution-472a367597cd6158e2e9dc3e2210bf9efab4d112.zip
This commit was manufactured by cvs2svn to create tag 'R2_0'.R2_0
svn path=/tags/R2_0/; revision=19030
Diffstat (limited to 'calendar/importers')
-rw-r--r--calendar/importers/.cvsignore6
-rw-r--r--calendar/importers/GNOME_Evolution_Calendar_Importer.server.in51
-rw-r--r--calendar/importers/Makefile.am43
-rw-r--r--calendar/importers/evolution-calendar-importer.h37
-rw-r--r--calendar/importers/icalendar-importer.c740
-rw-r--r--calendar/importers/main.c89
6 files changed, 0 insertions, 966 deletions
diff --git a/calendar/importers/.cvsignore b/calendar/importers/.cvsignore
deleted file mode 100644
index 0da04d0400..0000000000
--- a/calendar/importers/.cvsignore
+++ /dev/null
@@ -1,6 +0,0 @@
-.deps
-.libs
-Makefile
-Makefile.in
-evolution-calendar-importer
-GNOME_Evolution_Calendar_Importer.server
diff --git a/calendar/importers/GNOME_Evolution_Calendar_Importer.server.in b/calendar/importers/GNOME_Evolution_Calendar_Importer.server.in
deleted file mode 100644
index 710567dbc0..0000000000
--- a/calendar/importers/GNOME_Evolution_Calendar_Importer.server.in
+++ /dev/null
@@ -1,51 +0,0 @@
-<oaf_info>
-
-<oaf_server iid="OAFIID:GNOME_Evolution_Calendar_ImporterFactory"
- type="exe"
- location="evolution-calendar-importer">
-
- <oaf_attribute name="repo_ids" type="stringv">
- <item value="IDL:GNOME/ObjectFactory:1.0"/>
- </oaf_attribute>
- <oaf_attribute name="description" type="string"
- _value="Factory to import iCalendar files into Evolution"/>
-</oaf_server>
-
-<oaf_server iid="OAFIID:GNOME_Evolution_Calendar_iCalendar_Importer"
- type="factory"
- location="OAFIID:GNOME_Evolution_Calendar_ImporterFactory">
-
- <oaf_attribute name="repo_ids" type="stringv">
- <item value="IDL:GNOME/Evolution/Importer:1.0"/>
- </oaf_attribute>
- <oaf_attribute name="evolution:menu-name" type="string"
- value="iCalendar files (.ics)"/>
- <oaf_attribute name="description" type="string"
- _value="Imports iCalendar files into Evolution"/>
-
-</oaf_server>
-
-<oaf_server iid="OAFIID:GNOME_Evolution_Calendar_vCalendar_Importer"
- type="factory"
- location="OAFIID:GNOME_Evolution_Calendar_ImporterFactory">
-
- <oaf_attribute name="repo_ids" type="stringv">
- <item value="IDL:GNOME/Evolution/Importer:1.0"/>
- </oaf_attribute>
- <oaf_attribute name="evolution:menu-name" type="string"
- value="vCalendar files (.vcf)"/>
- <oaf_attribute name="description" type="string"
- _value="Imports vCalendar files into Evolution"/>
-
-</oaf_server>
-
-<oaf_server iid="OAFIID:GNOME_Evolution_Gnome_Calendar_Intelligent_Importer"
- type="factory"
- location="OAFIID:GNOME_Evolution_Calendar_ImporterFactory">
-
- <oaf_attribute name="repo_ids" type="stringv">
- <item value="IDL:GNOME/Evolution/IntelligentImporter:1.0"/>
- </oaf_attribute>
-
-</oaf_server>
-</oaf_info>
diff --git a/calendar/importers/Makefile.am b/calendar/importers/Makefile.am
deleted file mode 100644
index 7e385ff477..0000000000
--- a/calendar/importers/Makefile.am
+++ /dev/null
@@ -1,43 +0,0 @@
-bin_PROGRAMS = evolution-calendar-importer
-
-sounddir = $(datadir)/evolution/sounds
-
-INCLUDES = \
- -DEVOLUTION_LOCALEDIR=\""$(localedir)"\" \
- -DEVOLUTION_SOUNDDIR=\""$(sounddir)"\" \
- -DG_LOG_DOMAIN=\"Evolution-Importer\" \
- -I$(top_srcdir) \
- -I$(top_builddir)/shell \
- -I$(top_srcdir)/shell \
- -I$(top_srcdir)/calendar/cal-client \
- -I$(top_builddir)/calendar/cal-client \
- -I$(top_srcdir)/calendar \
- -I$(top_builddir)/calendar \
- -I$(top_srcdir)/libical/src/libical \
- -I$(top_builddir)/libical/src/libical \
- -I$(top_srcdir)/libical/src/libicalvcal \
- $(EVOLUTION_CALENDAR_CFLAGS)
-
-evolution_calendar_importer_SOURCES = \
- evolution-calendar-importer.h \
- icalendar-importer.c \
- main.c
-
-evolution_calendar_importer_LDADD = \
- $(top_builddir)/shell/libeshell.la \
- $(top_builddir)/shell/importer/libevolution-importer.la \
- $(top_builddir)/calendar/cal-util/libcal-util.la \
- $(top_builddir)/calendar/cal-client/libcal-client.la \
- $(top_builddir)/libwombat/libwombat.la \
- $(top_builddir)/libical/src/libical/libical-evolution.la \
- $(top_builddir)/libical/src/libicalvcal/libicalvcal-evolution.la \
- $(EVOLUTION_CALENDAR_LIBS)
-
-serversdir = $(libdir)/bonobo/servers
-server_in_files = GNOME_Evolution_Calendar_Importer.server.in
-
-servers_DATA = $(server_in_files:.server.in=.server)
-
-EXTRA_DIST = $(server_in_files) $(servers_DATA)
-
-@INTLTOOL_SERVER_RULE@
diff --git a/calendar/importers/evolution-calendar-importer.h b/calendar/importers/evolution-calendar-importer.h
deleted file mode 100644
index 0691ee2cab..0000000000
--- a/calendar/importers/evolution-calendar-importer.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* Evolution calendar importer component
- *
- * Authors: Rodrigo Moya <rodrigo@ximian.com>
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * 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.
- */
-
-#ifndef EVOLUTION_CALENDAR_IMPORTER_H
-#define EVOLUTION_CALENDAR_IMPORTER_H
-
-#include <bonobo/bonobo-object.h>
-
-G_BEGIN_DECLS
-
-BonoboObject *ical_importer_new (void);
-BonoboObject *vcal_importer_new (void);
-
-BonoboObject *gnome_calendar_importer_new (void);
-
-G_END_DECLS
-
-#endif
diff --git a/calendar/importers/icalendar-importer.c b/calendar/importers/icalendar-importer.c
deleted file mode 100644
index 0300201ca4..0000000000
--- a/calendar/importers/icalendar-importer.c
+++ /dev/null
@@ -1,740 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* Evolution calendar importer component
- *
- * Authors: Rodrigo Moya <rodrigo@ximian.com>
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * 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.
- */
-
-#include <sys/types.h>
-#include <fcntl.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtkcheckbutton.h>
-#include <gtk/gtkhbox.h>
-#include <gtk/gtkmain.h>
-#include <libgnome/gnome-util.h>
-#include <bonobo/bonobo-control.h>
-#include <bonobo/bonobo-exception.h>
-#include <cal-client.h>
-#include <importer/evolution-importer.h>
-#include <importer/evolution-intelligent-importer.h>
-#include <importer/GNOME_Evolution_Importer.h>
-#include <shell/e-shell.h>
-#include <shell/evolution-shell-client.h>
-#include "icalvcal.h"
-#include "evolution-calendar-importer.h"
-
-/* We timeout after 2 minutes, when opening the folders. */
-#define IMPORTER_TIMEOUT_SECONDS 120
-
-
-typedef struct {
- CalClient *client;
- CalClient *tasks_client;
- EvolutionImporter *importer;
- icalcomponent *icalcomp;
- gboolean folder_contains_events;
- gboolean folder_contains_tasks;
- EvolutionShellClient *shell_client;
-} ICalImporter;
-
-typedef struct {
- gboolean do_calendar;
- gboolean do_tasks;
-} ICalIntelligentImporter;
-
-/*
- * Functions shared by iCalendar & vCalendar importer.
- */
-
-static void
-importer_destroy_cb (GtkObject *object, gpointer user_data)
-{
- ICalImporter *ici = (ICalImporter *) user_data;
-
- g_return_if_fail (ici != NULL);
-
- gtk_object_unref (GTK_OBJECT (ici->client));
- gtk_object_unref (GTK_OBJECT (ici->tasks_client));
-
- if (ici->icalcomp != NULL) {
- icalcomponent_free (ici->icalcomp);
- ici->icalcomp = NULL;
- }
-
- if (BONOBO_IS_OBJECT (ici->shell_client)) {
- bonobo_object_unref (BONOBO_OBJECT (ici->shell_client));
- ici->shell_client = NULL;
- }
-
- g_free (ici);
-}
-
-/* Connects an importer to the Evolution shell */
-static void
-connect_to_shell (ICalImporter *ici)
-{
- CORBA_Environment ev;
- GNOME_Evolution_Shell corba_shell;
-
- CORBA_exception_init (&ev);
- corba_shell = oaf_activate_from_id (E_SHELL_OAFIID, 0, NULL, &ev);
- if (BONOBO_EX (&ev)) {
- CORBA_exception_free (&ev);
- return;
- }
-
- ici->shell_client = evolution_shell_client_new (corba_shell);
-}
-
-/* This reads in an entire file and returns it. It returns NULL on error.
- The returned string should be freed. */
-static char*
-read_file (const char *filename)
-{
- int fd, n;
- GString *str;
- char buffer[2049];
- gboolean error = FALSE;
-
- /* read file contents */
- fd = open (filename, O_RDONLY);
- if (fd == -1)
- return NULL;
-
- str = g_string_new ("");
- while (1) {
- memset (buffer, 0, sizeof(buffer));
- n = read (fd, buffer, sizeof (buffer) - 1);
- if (n > 0) {
- str = g_string_append (str, buffer);
- } else if (n == 0) {
- break;
- } else {
- error = TRUE;
- break;
- }
- }
-
- close (fd);
-
- if (error) {
- g_string_free (str, FALSE);
- return NULL;
- } else {
- gchar *retval = str->str;
- g_string_free (str, FALSE);
- return retval;
- }
-}
-
-
-/* Returns the URI to load given a folder path. The returned string should be freed. */
-static char*
-get_uri_from_folder_path (ICalImporter *ici, const char *folderpath)
-{
- GNOME_Evolution_StorageRegistry corba_registry;
- GNOME_Evolution_StorageRegistry_StorageList *storage_list;
- GNOME_Evolution_Folder *corba_folder;
- CORBA_Environment ev;
- int i;
- char *uri = NULL;
-
- corba_registry = evolution_shell_client_get_storage_registry_interface (ici->shell_client);
- if (!corba_registry) {
- return g_strdup_printf ("%s/evolution/local/Calendar/calendar.ics",
- g_get_home_dir ());
- }
-
- CORBA_exception_init (&ev);
- storage_list = GNOME_Evolution_StorageRegistry_getStorageList (corba_registry, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning (_("Can't get storage list from registry: %s"), CORBA_exception_id (&ev));
- CORBA_exception_free (&ev);
- return NULL;
- }
-
- CORBA_exception_free (&ev);
-
- for (i = 0; i < storage_list->_length; i++) {
- CORBA_exception_init (&ev);
- corba_folder = GNOME_Evolution_Storage_getFolderAtPath (storage_list->_buffer[i],
- folderpath, &ev);
- if (BONOBO_EX (&ev)) {
- g_warning (_("Can't call getFolderAtPath on storage: %s"), CORBA_exception_id (&ev));
- CORBA_exception_free (&ev);
- continue;
- }
-
- CORBA_exception_free (&ev);
-
- if (corba_folder) {
- ici->folder_contains_events = FALSE;
- ici->folder_contains_tasks = FALSE;
-
- if (!strncmp (corba_folder->physicalUri, "file:", 5)) {
- if (!strcmp (corba_folder->type, "tasks")) {
- ici->folder_contains_tasks = TRUE;
- uri = g_strdup_printf ("%s/tasks.ics",
- corba_folder->physicalUri);
- }
- else if (!strcmp (corba_folder->type, "calendar")) {
- ici->folder_contains_events = TRUE;
- uri = g_strdup_printf ("%s/calendar.ics",
- corba_folder->physicalUri);
- }
- } else {
- uri = g_strdup (corba_folder->physicalUri);
-
- if (!strcmp (corba_folder->type, "tasks") ||
- !strcmp (corba_folder->type, "tasks/public"))
- ici->folder_contains_tasks = TRUE;
- else if (!strcmp (corba_folder->type, "calendar") ||
- !strcmp (corba_folder->type, "calendar/public"))
- ici->folder_contains_events = TRUE;
- }
-
- CORBA_free (corba_folder);
- break;
- }
- }
-
- CORBA_free (storage_list);
-
- return uri;
-}
-
-
-/* This removes all components except VEVENTs and VTIMEZONEs from the toplevel
- icalcomponent, and returns a GList of the VTODO components. */
-static GList*
-prepare_events (icalcomponent *icalcomp)
-{
- icalcomponent *subcomp, *next_subcomp;
- GList *vtodos = NULL;
-
- subcomp = icalcomponent_get_first_component (icalcomp,
- ICAL_ANY_COMPONENT);
- while (subcomp) {
- icalcomponent_kind child_kind = icalcomponent_isa (subcomp);
- next_subcomp = icalcomponent_get_next_component (icalcomp, ICAL_ANY_COMPONENT);
- if (child_kind != ICAL_VEVENT_COMPONENT
- && child_kind != ICAL_VTIMEZONE_COMPONENT) {
-
- icalcomponent_remove_component (icalcomp,
- subcomp);
- if (child_kind == ICAL_VTODO_COMPONENT)
- vtodos = g_list_prepend (vtodos, subcomp);
- else
- icalcomponent_free (subcomp);
- }
- subcomp = next_subcomp;
- }
-
- return vtodos;
-}
-
-
-/* This removes all components except VTODOs and VTIMEZONEs from the toplevel
- icalcomponent, and adds the given list of VTODO components. The list is
- freed afterwards. */
-static void
-prepare_tasks (icalcomponent *icalcomp, GList *vtodos)
-{
- icalcomponent *subcomp, *next_subcomp;
- GList *elem;
-
- subcomp = icalcomponent_get_first_component (icalcomp,
- ICAL_ANY_COMPONENT);
- while (subcomp) {
- icalcomponent_kind child_kind = icalcomponent_isa (subcomp);
- next_subcomp = icalcomponent_get_next_component (icalcomp, ICAL_ANY_COMPONENT);
- if (child_kind != ICAL_VTODO_COMPONENT
- && child_kind != ICAL_VTIMEZONE_COMPONENT) {
- icalcomponent_remove_component (icalcomp, subcomp);
- icalcomponent_free (subcomp);
- }
- subcomp = next_subcomp;
- }
-
- for (elem = vtodos; elem; elem = elem->next) {
- icalcomponent_add_component (icalcomp, elem->data);
- }
- g_list_free (vtodos);
-}
-
-
-static void
-process_item_fn (EvolutionImporter *importer,
- CORBA_Object listener,
- void *closure,
- CORBA_Environment *ev)
-{
- CalClientLoadState state, tasks_state;
- ICalImporter *ici = (ICalImporter *) closure;
- GNOME_Evolution_ImporterListener_ImporterResult result;
-
- result = GNOME_Evolution_ImporterListener_OK;
-
- g_return_if_fail (ici != NULL);
- g_return_if_fail (IS_CAL_CLIENT (ici->client));
- g_return_if_fail (ici->icalcomp != NULL);
-
- state = cal_client_get_load_state (ici->client);
- tasks_state = cal_client_get_load_state (ici->tasks_client);
- if (state == CAL_CLIENT_LOAD_LOADING
- || tasks_state == CAL_CLIENT_LOAD_LOADING) {
- GNOME_Evolution_ImporterListener_notifyResult (
- listener,
- GNOME_Evolution_ImporterListener_BUSY,
- TRUE, ev);
- return;
- } else if (state != CAL_CLIENT_LOAD_LOADED
- || tasks_state != CAL_CLIENT_LOAD_LOADED) {
- GNOME_Evolution_ImporterListener_notifyResult (
- listener,
- GNOME_Evolution_ImporterListener_UNSUPPORTED_OPERATION,
- FALSE, ev);
- return;
- }
-
- /* If the folder contains events & tasks we can just import everything
- into it. If it contains just events, we have to strip out the
- VTODOs and import them into the default tasks folder. If the folder
- contains just tasks, we strip out the VEVENTs, which do not get
- imported at all. */
- if (ici->folder_contains_events && ici->folder_contains_tasks) {
- if (cal_client_update_objects (ici->client, ici->icalcomp) != CAL_CLIENT_RESULT_SUCCESS)
- result = GNOME_Evolution_ImporterListener_BAD_DATA;
- } else if (ici->folder_contains_events) {
- GList *vtodos = prepare_events (ici->icalcomp);
- if (cal_client_update_objects (ici->client, ici->icalcomp) != CAL_CLIENT_RESULT_SUCCESS)
- result = GNOME_Evolution_ImporterListener_BAD_DATA;
-
- prepare_tasks (ici->icalcomp, vtodos);
- if (cal_client_update_objects (ici->tasks_client,
- ici->icalcomp) != CAL_CLIENT_RESULT_SUCCESS)
- result = GNOME_Evolution_ImporterListener_BAD_DATA;
- } else {
- prepare_tasks (ici->icalcomp, NULL);
- if (cal_client_update_objects (ici->client, ici->icalcomp) != CAL_CLIENT_RESULT_SUCCESS)
- result = GNOME_Evolution_ImporterListener_BAD_DATA;
- }
-
- GNOME_Evolution_ImporterListener_notifyResult (listener, result, FALSE,
- ev);
-}
-
-
-/*
- * iCalendar importer functions.
- */
-
-static gboolean
-support_format_fn (EvolutionImporter *importer,
- const char *filename,
- void *closure)
-{
- char *contents;
- icalcomponent *icalcomp;
- gboolean ret = FALSE;
-
- contents = read_file (filename);
-
- /* parse the file */
- if (contents) {
- icalcomp = icalparser_parse_string (contents);
- if (icalcomp) {
- icalcomponent_free (icalcomp);
- ret = TRUE;
- }
- }
-
- g_free (contents);
-
- return ret;
-}
-
-static gboolean
-load_file_fn (EvolutionImporter *importer,
- const char *filename,
- const char *folderpath,
- void *closure)
-{
- char *uri_str, *contents;
- gboolean ret = FALSE;
- ICalImporter *ici = (ICalImporter *) closure;
-
- g_return_val_if_fail (ici != NULL, FALSE);
-
- uri_str = get_uri_from_folder_path (ici, folderpath);
-
- contents = read_file (filename);
-
- /* parse the file */
- if (contents) {
- icalcomponent *icalcomp;
-
- icalcomp = icalparser_parse_string (contents);
- if (icalcomp) {
- if (cal_client_open_calendar (ici->client, uri_str, TRUE)
- && cal_client_open_default_tasks (ici->tasks_client, FALSE)) {
- ici->icalcomp = icalcomp;
- ret = TRUE;
- }
- }
- }
-
- g_free (contents);
- g_free (uri_str);
-
- return ret;
-}
-
-BonoboObject *
-ical_importer_new (void)
-{
- ICalImporter *ici;
-
- ici = g_new0 (ICalImporter, 1);
- ici->client = cal_client_new ();
- ici->tasks_client = cal_client_new ();
- ici->icalcomp = NULL;
- ici->importer = evolution_importer_new (support_format_fn,
- load_file_fn,
- process_item_fn,
- NULL,
- ici);
- connect_to_shell (ici);
- gtk_signal_connect (GTK_OBJECT (ici->importer), "destroy",
- GTK_SIGNAL_FUNC (importer_destroy_cb), ici);
-
- return BONOBO_OBJECT (ici->importer);
-}
-
-
-
-/*
- * vCalendar importer functions.
- */
-
-static gboolean
-vcal_support_format_fn (EvolutionImporter *importer,
- const char *filename,
- void *closure)
-{
- char *contents;
- gboolean ret = FALSE;
-
- contents = read_file (filename);
-
- /* parse the file */
- if (contents) {
- VObject *vcal;
-
- vcal = Parse_MIME (contents, strlen (contents));
-
- if (vcal) {
- icalcomponent *icalcomp;
-
- icalcomp = icalvcal_convert (vcal);
-
- if (icalcomp) {
- icalcomponent_free (icalcomp);
- ret = TRUE;
- }
-
- cleanVObject (vcal);
- }
- }
-
- g_free (contents);
-
- return ret;
-}
-
-/* This tries to load in a vCalendar file and convert it to an icalcomponent.
- It returns NULL on failure. */
-static icalcomponent*
-load_vcalendar_file (const char *filename)
-{
- icalvcal_defaults defaults = { 0 };
- icalcomponent *icalcomp = NULL;
- char *contents;
-
- defaults.alarm_audio_url = "file://" EVOLUTION_SOUNDDIR "/default_alarm.wav";
- defaults.alarm_audio_fmttype = "audio/x-wav";
- defaults.alarm_description = (char*) U_("Reminder!!");
-
- contents = read_file (filename);
-
- /* parse the file */
- if (contents) {
- VObject *vcal;
-
- vcal = Parse_MIME (contents, strlen (contents));
-
- if (vcal) {
- icalcomp = icalvcal_convert_with_defaults (vcal,
- &defaults);
- cleanVObject (vcal);
- }
- }
-
- g_free (contents);
-
- return icalcomp;
-}
-
-static gboolean
-vcal_load_file_fn (EvolutionImporter *importer,
- const char *filename,
- const char *folderpath,
- void *closure)
-{
- char *uri_str;
- gboolean ret = FALSE;
- ICalImporter *ici = (ICalImporter *) closure;
- icalcomponent *icalcomp;
-
- g_return_val_if_fail (ici != NULL, FALSE);
-
- uri_str = get_uri_from_folder_path (ici, folderpath);
-
- icalcomp = load_vcalendar_file (filename);
- if (icalcomp) {
- if (cal_client_open_calendar (ici->client, uri_str, TRUE)
- && cal_client_open_default_tasks (ici->tasks_client, FALSE)) {
- ici->icalcomp = icalcomp;
- ret = TRUE;
- }
- }
-
- g_free (uri_str);
-
- return ret;
-}
-
-BonoboObject *
-vcal_importer_new (void)
-{
- ICalImporter *ici;
-
- ici = g_new0 (ICalImporter, 1);
- ici->client = cal_client_new ();
- ici->tasks_client = cal_client_new ();
- ici->icalcomp = NULL;
- ici->importer = evolution_importer_new (vcal_support_format_fn,
- vcal_load_file_fn,
- process_item_fn,
- NULL,
- ici);
- connect_to_shell (ici);
- gtk_signal_connect (GTK_OBJECT (ici->importer), "destroy",
- GTK_SIGNAL_FUNC (importer_destroy_cb), ici);
-
- return BONOBO_OBJECT (ici->importer);
-}
-
-
-
-
-
-
-static void
-gnome_calendar_importer_destroy_cb (GtkObject *object, gpointer user_data)
-{
- ICalIntelligentImporter *ici = (ICalIntelligentImporter *) user_data;
-
- g_return_if_fail (ici != NULL);
-
- g_free (ici);
-}
-
-
-
-static gboolean
-gnome_calendar_can_import_fn (EvolutionIntelligentImporter *ii,
- void *closure)
-{
- char *filename;
- gboolean gnome_calendar_exists;
-
- filename = gnome_util_home_file ("user-cal.vcf");
- gnome_calendar_exists = g_file_exists (filename);
- g_free (filename);
-
- return gnome_calendar_exists;
-}
-
-
-static void
-gnome_calendar_import_data_fn (EvolutionIntelligentImporter *ii,
- void *closure)
-{
- ICalIntelligentImporter *ici = closure;
- icalcomponent *icalcomp = NULL;
- char *filename;
- GList *vtodos;
- CalClient *calendar_client = NULL, *tasks_client = NULL;
- int t;
-
- /* If neither is selected, just return. */
- if (!ici->do_calendar && !ici->do_tasks) {
- return;
- }
-
- /* Try to open the default calendar & tasks folders. */
- if (ici->do_calendar) {
- calendar_client = cal_client_new ();
- if (!cal_client_open_default_calendar (calendar_client, FALSE))
- goto out;
- }
-
- if (ici->do_tasks) {
- tasks_client = cal_client_new ();
- if (!cal_client_open_default_tasks (tasks_client, FALSE))
- goto out;
- }
-
- /* Load the Gnome Calendar file and convert to iCalendar. */
- filename = gnome_util_home_file ("user-cal.vcf");
- icalcomp = load_vcalendar_file (filename);
- g_free (filename);
-
- /* If we couldn't load the file, just return. FIXME: Error message? */
- if (!icalcomp)
- goto out;
-
- /*
- * Import the calendar events into the default calendar folder.
- */
- vtodos = prepare_events (icalcomp);
-
- /* Wait for client to finish opening the calendar & tasks folders. */
- for (t = 0; t < IMPORTER_TIMEOUT_SECONDS; t++) {
- CalClientLoadState calendar_state, tasks_state;
-
- calendar_state = tasks_state = CAL_CLIENT_LOAD_LOADED;
-
- /* We need this so the CalClient gets notified that the
- folder is opened, via Corba. */
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
- if (ici->do_calendar)
- calendar_state = cal_client_get_load_state (calendar_client);
-
- if (ici->do_tasks)
- tasks_state = cal_client_get_load_state (tasks_client);
-
- if (calendar_state == CAL_CLIENT_LOAD_LOADED
- && tasks_state == CAL_CLIENT_LOAD_LOADED)
- break;
-
- sleep (1);
- }
-
- /* If we timed out, just return. */
- if (t == IMPORTER_TIMEOUT_SECONDS)
- goto out;
-
- /* Import the calendar events. */
- /* FIXME: What do intelligent importers do about errors? */
- if (ici->do_calendar)
- cal_client_update_objects (calendar_client, icalcomp);
-
-
- /*
- * Import the tasks into the default tasks folder.
- */
- prepare_tasks (icalcomp, vtodos);
- if (ici->do_tasks)
- cal_client_update_objects (tasks_client, icalcomp);
-
- out:
- if (icalcomp)
- icalcomponent_free (icalcomp);
- if (calendar_client)
- gtk_object_unref (GTK_OBJECT (calendar_client));
- if (tasks_client)
- gtk_object_unref (GTK_OBJECT (tasks_client));
-}
-
-
-/* Fun with aggregation */
-static void
-checkbox_toggle_cb (GtkToggleButton *tb,
- gboolean *do_item)
-{
- *do_item = gtk_toggle_button_get_active (tb);
-}
-
-static BonoboControl *
-create_checkboxes_control (ICalIntelligentImporter *ici)
-{
- GtkWidget *hbox, *calendar_checkbox, *tasks_checkbox;
- BonoboControl *control;
-
- hbox = gtk_hbox_new (FALSE, 2);
-
- calendar_checkbox = gtk_check_button_new_with_label (_("Calendar Events"));
- gtk_signal_connect (GTK_OBJECT (calendar_checkbox), "toggled",
- GTK_SIGNAL_FUNC (checkbox_toggle_cb),
- &ici->do_calendar);
- gtk_box_pack_start (GTK_BOX (hbox), calendar_checkbox,
- FALSE, FALSE, 0);
-
- tasks_checkbox = gtk_check_button_new_with_label (_("Tasks"));
- gtk_signal_connect (GTK_OBJECT (tasks_checkbox), "toggled",
- GTK_SIGNAL_FUNC (checkbox_toggle_cb),
- &ici->do_tasks);
- gtk_box_pack_start (GTK_BOX (hbox), tasks_checkbox,
- FALSE, FALSE, 0);
-
- gtk_widget_show_all (hbox);
- control = bonobo_control_new (hbox);
- return control;
-}
-
-BonoboObject *
-gnome_calendar_importer_new (void)
-{
- EvolutionIntelligentImporter *importer;
- ICalIntelligentImporter *ici;
- BonoboControl *control;
- char *message = N_("Evolution has found Gnome Calendar files.\n"
- "Would you like to import them into Evolution?");
-
- ici = g_new0 (ICalIntelligentImporter, 1);
-
- importer = evolution_intelligent_importer_new (gnome_calendar_can_import_fn,
- gnome_calendar_import_data_fn,
- _("Gnome Calendar"),
- _(message),
- ici);
-
-
- gtk_signal_connect (GTK_OBJECT (importer), "destroy",
- GTK_SIGNAL_FUNC (gnome_calendar_importer_destroy_cb), ici);
-
- control = create_checkboxes_control (ici);
- bonobo_object_add_interface (BONOBO_OBJECT (importer),
- BONOBO_OBJECT (control));
-
- return BONOBO_OBJECT (importer);
-}
diff --git a/calendar/importers/main.c b/calendar/importers/main.c
deleted file mode 100644
index e3ac17fa2a..0000000000
--- a/calendar/importers/main.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* Evolution calendar importer component
- *
- * Authors: Rodrigo Moya <rodrigo@ximian.com>
- *
- * Copyright (C) 2001 Ximian, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * 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 <bonobo/bonobo-generic-factory.h>
-#include <bonobo/bonobo-context.h>
-#include <bonobo/bonobo-main.h>
-#include "evolution-calendar-importer.h"
-
-#define IMPORTER_FACTORY_ID "OAFIID:GNOME_Evolution_Calendar_ImporterFactory"
-#define ICALENDAR_IMPORTER_ID "OAFIID:GNOME_Evolution_Calendar_iCalendar_Importer"
-#define VCALENDAR_IMPORTER_ID "OAFIID:GNOME_Evolution_Calendar_vCalendar_Importer"
-#define GNOME_CALENDAR_IMPORTER_ID "OAFIID:GNOME_Evolution_Gnome_Calendar_Intelligent_Importer"
-
-static BonoboObject *
-importer_factory_fn (BonoboGenericFactory *factory, const char *id, void *closure)
-{
- BonoboObject *object = NULL;
-
- g_return_val_if_fail (id != NULL, NULL);
-
- if (!strcmp (id, ICALENDAR_IMPORTER_ID))
- object = ical_importer_new ();
- else if (!strcmp (id, VCALENDAR_IMPORTER_ID))
- object = vcal_importer_new ();
- else if (!strcmp (id, GNOME_CALENDAR_IMPORTER_ID))
- object = gnome_calendar_importer_new ();
- else
- g_warning ("Component not supported by this factory");
-
- return object;
-}
-
-static void
-init_importer (void)
-{
- BonoboGenericFactory *factory;
-
- factory = bonobo_generic_factory_new (IMPORTER_FACTORY_ID,
- importer_factory_fn, NULL);
- if (factory == NULL) {
- g_error ("Unable to create factory");
- exit (0);
- }
-
- bonobo_running_context_auto_exit_unref (BONOBO_OBJECT (factory));
-}
-
-int
-main (int argc, char *argv[])
-{
- CORBA_ORB orb;
-
- bindtextdomain(PACKAGE, EVOLUTION_LOCALEDIR);
- textdomain(PACKAGE);
-
- g_type_init ();
- bonobo_activation_init (argc, argv);
- if (bonobo_init (&argc, argv) == FALSE) {
- g_error ("Could not initialize Bonobo.");
- exit (0);
- }
-
- init_importer ();
- bonobo_main ();
-
- return 0;
-}