/*! @brief Loads all members of a group
 * 
 * Loads all members of a group
 * 
 * @param group The group
 * @param path The path from which to load the members
 * @param error Pointer to an error struct
 * @returns True if the members were loaded successfully, FALSE otherwise
 * 
 */
static osync_bool _osync_group_load_members(OSyncGroup *group, const char *path, OSyncError **error)
{	
  GDir *dir = NULL;
  GError *gerror = NULL;
  char *member_path = NULL;
  char *filename = NULL;
  OSyncMember *member = NULL;
  const gchar *de = NULL;
	
  osync_trace(TRACE_ENTRY, "%s(%p, %s, %p)", __func__, group, path, error);

  dir = g_dir_open(path, 0, &gerror);
  if (!dir) {
    osync_error_set(error, OSYNC_ERROR_IO_ERROR, "Unable to open group configdir %s", gerror->message);
    g_error_free (gerror);
    goto error;
  }

  while ((de = g_dir_read_name(dir))) {
    filename = g_strdup_printf ("%s%c%s%csyncmember.conf", osync_group_get_configdir(group), G_DIR_SEPARATOR, de, G_DIR_SEPARATOR);
    if (!g_file_test(filename, G_FILE_TEST_IS_REGULAR)) {
      g_free(filename);
      continue;
    }
    g_free(filename);
		
    member = osync_member_new(error);
    if (!member)
      goto error_close;

#ifdef OPENSYNC_UNITTESTS
    if (group->schemadir)
      osync_member_set_schemadir(member, group->schemadir);
#endif /* OPENSYNC_UNITTESTS */
		
    member_path = g_strdup_printf ("%s%c%s", osync_group_get_configdir(group), G_DIR_SEPARATOR, de);
    if (!osync_member_load(member, member_path, error)) {
      g_free(member_path);
      goto error_free_member;
    }
    g_free(member_path);
		
    osync_group_add_member(group, member);
    osync_member_unref(member);
  }
  g_dir_close(dir);
	
  osync_trace(TRACE_EXIT, "%s", __func__);
  return TRUE;

 error_free_member:
  osync_member_unref(member);
 error_close:
  g_dir_close(dir);
 error:
  osync_trace(TRACE_EXIT_ERROR, "%s: %p", __func__, osync_error_print(error));
  return FALSE;
}
Esempio n. 2
0
/** @brief Creates a simple OSyncEngine with nth Members with mock-sync
 *         plugins.
 * 
 * @param member_size The number of member the Group for this Engine should have
 * @returns OSyncEngine pointer or asserts on error
 * 
 */
OSyncEngine *osync_testing_create_engine_dummy(unsigned int member_size)
{
	unsigned int u;
	OSyncError *error = NULL;
	OSyncEngine *engine = NULL;
	OSyncGroup *group = osync_group_new(&error);

	fail_unless(group != NULL, NULL);
	fail_unless(error == NULL, NULL);

	for (u=0; u < member_size; u++) {
		OSyncMember *member = osync_member_new(&error);
		fail_unless(member != NULL, NULL);
		fail_unless(error == NULL, NULL);

		osync_group_add_member(group, member);
	}

	engine = osync_engine_new(group, &error);
	fail_unless(engine != NULL, NULL);
	fail_unless(error == NULL, NULL);

	return engine;
}