#include #include #include #include "sync_item.h" #include "sync_group.h" #include "sync_gcal_item.h" #define GCAL_PLUGIN "google-calendar" #define GCAL_CONFIG \ "" \ "http://www.google.com/calendar/feeds/%s@gmail.com/private/full" \ "%s@gmail.com" \ "%s" \ "" 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; }