diff options
Diffstat (limited to 'sync/src/sync_file_item.c')
-rw-r--r-- | sync/src/sync_file_item.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/sync/src/sync_file_item.c b/sync/src/sync_file_item.c new file mode 100644 index 0000000..9e4ce0b --- /dev/null +++ b/sync/src/sync_file_item.c @@ -0,0 +1,63 @@ + +#include <opensync/opensync.h> +#include <glib.h> +#include <string.h> +#include "sync.h" +#include "sync_item.h" +#include "sync_group.h" +#include "sync_file_item.h" + +#define FILE_PLUGIN "file-sync" +#define FILE_CONFIG "<config>" \ + "<path>%s</path>" \ + "<recursive>FALSE</recursive>" \ + "</config>" + +static OSyncMember * +sync_file_item_get_member (SyncItem *item) +{ + OSyncMember *member; + OSyncError *error = NULL; + OSyncConfigurationTypes type = NO_CONFIGURATION; + + member = osync_member_new (sync_group_get_osync_group ( + sync_item_get_group (item))); + if (!osync_member_instance_plugin (member, FILE_PLUGIN, &error)) { + g_warning ("Error instancing file 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 ( + "File sync plug-in reports no need for configuration"); + } else { + const gchar *file_path; + gchar *file_config; + + file_path = sync_item_get_adr (item); + if (g_mkdir_with_parents (file_path, 0755) == -1) { + g_warning ("Couldn't create directory '%s'", file_path); + return NULL; + } + + file_config = g_strdup_printf (FILE_CONFIG, file_path); + osync_member_set_config ( + member, file_config, strlen (file_config)); + g_free (file_config); + } + + return member; +} + +SyncItem * +sync_file_item_new (const gchar *name, const gchar *adr) +{ + return sync_item_new (name, adr, sync_file_item_get_member); +} |