diff options
Diffstat (limited to 'sync/src/sync_gcal_item.c')
-rw-r--r-- | sync/src/sync_gcal_item.c | 85 |
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; +} |