summaryrefslogtreecommitdiffstats
path: root/sync/src/sync_gcal_item.c
diff options
context:
space:
mode:
Diffstat (limited to 'sync/src/sync_gcal_item.c')
-rw-r--r--sync/src/sync_gcal_item.c85
1 files changed, 85 insertions, 0 deletions
diff --git a/sync/src/sync_gcal_item.c b/sync/src/sync_gcal_item.c
new file mode 100644
index 0000000..45362cc
--- /dev/null
+++ b/sync/src/sync_gcal_item.c
@@ -0,0 +1,85 @@
+
+#include <opensync/opensync.h>
+#include <glib.h>
+#include <string.h>
+#include "sync_item.h"
+#include "sync_group.h"
+#include "sync_gcal_item.h"
+
+#define GCAL_PLUGIN "google-calendar"
+#define GCAL_CONFIG \
+ "<config>" \
+ "<url>http://www.google.com/calendar/feeds/%s@gmail.com/private/full</url>" \
+ "<username>%s@gmail.com</username>" \
+ "<password>%s</password>" \
+ "</config>"
+
+typedef struct {
+ gchar *user;
+ gchar *pass;
+} SyncGCalItemData;
+
+static OSyncMember *
+sync_gcal_item_get_member (SyncItem *item, SyncGroup *group)
+{
+ OSyncMember *member;
+ OSyncError *error = NULL;
+ OSyncConfigurationTypes type = NO_CONFIGURATION;
+
+ member = osync_member_new (sync_group_get_osync_group (group));
+ if (!osync_member_instance_plugin (member, GCAL_PLUGIN, &error)) {
+ g_warning ("Error instancing google calendar plug-in: %s",
+ osync_error_print (&error));
+ osync_error_free (&error);
+ return NULL;
+ }
+ if (!osync_member_need_config (member, &type, &error)) {
+ g_warning ("Error reading plug-in config requirements: %s",
+ osync_error_print (&error));
+ osync_error_free (&error);
+ return NULL;
+ }
+ if (type == NO_CONFIGURATION) {
+ g_warning ("Google Calendar sync plug-in reports no need for "
+ "configuration");
+ } else {
+ SyncGCalItemData *data;
+ gchar *gcal_config;
+
+ data = (SyncGCalItemData *)sync_item_get_data (item);
+ gcal_config = g_strdup_printf (GCAL_CONFIG, data->user,
+ data->user, data->pass);
+ osync_member_set_config (
+ member, gcal_config, strlen (gcal_config));
+ g_free (gcal_config);
+ }
+
+ return member;
+}
+
+static void
+sync_gcal_free_data (SyncGCalItemData *data)
+{
+ g_free (data->user);
+ g_free (data->pass);
+ g_free (data);
+}
+
+SyncItem *
+sync_gcal_item_new (const gchar *name, const gchar *user, const gchar *pass)
+{
+ SyncItem *item;
+ SyncGCalItemData *data;
+
+ item = sync_item_new (name, NULL, sync_gcal_item_get_member);
+
+ data = g_new0 (SyncGCalItemData, 1);
+ data->user = user ? g_strdup (user) : g_strdup ("username");
+ data->pass = pass ? g_strdup (pass) : g_strdup ("password");
+
+ sync_item_set_data (item, data);
+ sync_item_set_data_free_func (
+ item, (SyncItemDataFreeFunc)sync_gcal_free_data);
+
+ return item;
+}