aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/pcs
diff options
context:
space:
mode:
authorArturo Espinosa <unammx@src.gnome.org>2000-01-18 14:17:26 +0800
committerArturo Espinosa <unammx@src.gnome.org>2000-01-18 14:17:26 +0800
commitc820a35c23f65807cc0eaaa0f39ec51b98e06192 (patch)
tree828a64b007ca7d0143e1e8395b5495330e791d37 /calendar/pcs
parent2f1705c6c0d747e708a34b089c4b6ebfc7832022 (diff)
downloadgsoc2013-evolution-c820a35c23f65807cc0eaaa0f39ec51b98e06192.tar
gsoc2013-evolution-c820a35c23f65807cc0eaaa0f39ec51b98e06192.tar.gz
gsoc2013-evolution-c820a35c23f65807cc0eaaa0f39ec51b98e06192.tar.bz2
gsoc2013-evolution-c820a35c23f65807cc0eaaa0f39ec51b98e06192.tar.lz
gsoc2013-evolution-c820a35c23f65807cc0eaaa0f39ec51b98e06192.tar.xz
gsoc2013-evolution-c820a35c23f65807cc0eaaa0f39ec51b98e06192.tar.zst
gsoc2013-evolution-c820a35c23f65807cc0eaaa0f39ec51b98e06192.zip
Sync - Federico
svn path=/trunk/; revision=1585
Diffstat (limited to 'calendar/pcs')
-rw-r--r--calendar/pcs/cal-factory.c116
-rw-r--r--calendar/pcs/cal-factory.h2
2 files changed, 112 insertions, 6 deletions
diff --git a/calendar/pcs/cal-factory.c b/calendar/pcs/cal-factory.c
index 2dc1260f1b..1874939c61 100644
--- a/calendar/pcs/cal-factory.c
+++ b/calendar/pcs/cal-factory.c
@@ -21,12 +21,13 @@
#include <config.h>
#include "cal-factory.h"
+#include "job.h"
/* Private part of the CalFactory structure */
typedef struct {
- /* Hash table from canonized uris to loaded calendars */
+ /* Hash table from GnomeVFSURI structures to loaded calendars */
GHashTable *calendars;
} CalFactoryPrivate;
@@ -106,7 +107,7 @@ cal_factory_init (CalFactory *factory)
priv = g_new0 (CalFactoryPrivate, 1);
factory->priv = priv;
- priv->calendars = g_hash_table_new (g_str_hash, g_str_equal);
+ priv->calendars = g_hash_table_new (gnome_vfs_uri_hash, gnome_vfs_uri_hequal);
}
/* Destroy handler for the calendar */
@@ -122,6 +123,8 @@ cal_factory_destroy (GtkObject *object)
factory = CAL_FACTORY (object);
priv = factory->priv;
+ /* FIXME: free the calendar hash table */
+
g_free (priv);
if (GTK_OBJECT_CLASS (parent_class)->destroy)
@@ -152,6 +155,7 @@ CalFactory_load (PortableServer_Servant servant,
static GNOME_Calendar_Cal
CalFactory_create (PortableServer_Servant servant,
CORBA_char *uri,
+ GNOME_Calendar_Listener listener,
CORBA_Environment *ev)
{
CalFactory *factory;
@@ -160,9 +164,17 @@ CalFactory_create (PortableServer_Servant servant,
factory = CAL_FACTORY (gnome_object_from_servant (servant));
priv = factory->priv;
- return cal_factory_create (factory, uri);
+ cal_factory_create (factory, uri, listener);
}
+/**
+ * cal_factory_get_epv:
+ * @void:
+ *
+ * Creates an EPV for the CalFactory CORBA class.
+ *
+ * Return value: A newly-allocated EPV.
+ **/
POA_GNOME_Calendar_CalFactory__epv *
cal_factory_get_epv (void)
{
@@ -175,8 +187,6 @@ cal_factory_get_epv (void)
return epv;
}
-
-
/* Returns whether a CORBA object is nil */
static gboolean
corba_object_is_nil (CORBA_Object object)
@@ -191,6 +201,77 @@ corba_object_is_nil (CORBA_Object object)
return retval;
}
+
+
+/* Loading and creating calendars */
+
+/* Job data */
+typedef struct {
+ CalFactory *factory;
+ char *uri;
+ GNOME_Calendar_Listener listener;
+} LoadCreateJobData;
+
+/* Looks up a calendar in a factory's hash table of uri->cal */
+static Cal *
+lookup_calendar (CalFactory *factory, GnomeVFSURI *uri)
+{
+ CalFactoryPrivate *priv;
+ Cal *cal;
+
+ priv = factory->priv;
+
+ cal = g_hash_table_lookup (priv->calendars, uri);
+ return cal;
+}
+
+/* Loads a calendar and puts it in the factory's hash table */
+static void
+load_calendar (CalFactory *factory, GnomeVFSURI *uri, GNOME_Calendar_Listener listener)
+{
+}
+
+/* Adds a listener to a calendar */
+static void
+add_calendar_listener (CalFactory *factory, Cal *cal, GNOME_Calendar_Listener listener)
+{
+ /* FIXME */
+}
+
+/* Job handler for the load calendar command */
+static void
+load_fn (gpointer data)
+{
+ LoadCreateJobData jd;
+ GnomeVFSURI *uri;
+ Cal *cal;
+ CORBA_Environment ev;
+
+ jd = data;
+
+ /* Look up the calendar */
+
+ uri = gnome_vfs_uri_new (jd->uri);
+ cal = lookup_calendar (jd->factory, uri);
+
+ if (!cal)
+ load_calendar (factory, uri, jd->listener);
+ else
+ add_calendar_listener (factory, cal, jd->listener);
+
+ gnome_vfs_uri_unref (uri);
+ g_free (jd->uri);
+
+ CORBA_exception_init (&ev);
+ GNOME_Unknown_unref (jd->listener, &ev);
+ CORBA_Object_release (jd->listener, &ev);
+ CORBA_exception_free (&ev);
+
+ g_free (jd);
+}
+
+
+
/**
* cal_factory_construct:
* @factory: A calendar factory.
@@ -270,3 +351,28 @@ cal_factory_new (void)
return cal_factory_construct (factory, corba_factory);
}
+
+void
+cal_factory_load (CalFactory *factory, const char *uri, GNOME_Calendar_Listener listener)
+{
+ LoadCreateJobData *jd;
+ CORBA_Environment ev;
+
+ CORBA_exception_init (&ev);
+
+ jd = g_new (LoadCreateJobData, 1);
+ jd->factory = factory;
+ jd->uri = g_strdup (uri);
+ jd->listener = CORBA_Object_duplicate (listener, &ev);
+ GNOME_Unknown_ref (jd->listener);
+
+ job_add (load_fn, jd);
+
+ CORBA_exception_free (&ev);
+}
+
+void
+cal_factory_create (CalFactory *factory, const char *uri, GNOME_Calendar_Listener listener)
+{
+ /* FIXME */
+}
diff --git a/calendar/pcs/cal-factory.h b/calendar/pcs/cal-factory.h
index 0baa3f746a..0c227148c2 100644
--- a/calendar/pcs/cal-factory.h
+++ b/calendar/pcs/cal-factory.h
@@ -59,7 +59,7 @@ GNOME_Calendar_CalFactory cal_factory_corba_object_create (GnomeObject *object);
CalFactory *cal_factory_new (void);
void cal_factory_load (CalFactory *factory, const char *uri, GNOME_Calendar_Listener listener);
-GNOME_Calendar_Cal cal_factory_create (CalFactory *factory, const char *uri);
+void cal_factory_create (CalFactory *factory, const char *uri, GNOME_Calendar_Listener listener);
POA_GNOME_Calendar_CalFactory__epv *cal_factory_get_epv (void);