Example #1
0
void discover_all_once(OSyncEngine *engine, OSyncError **error)
{
	OSyncGroup *group = osync_engine_get_group(engine);
	int i, max = osync_group_num_members(group); 
	for (i=0; i < max; i++) {
		OSyncMember *member = osync_group_nth_member(group, i);
		osync_engine_discover_and_block(engine, member, error);
		osync_member_save(member, error);
	}
}
/*! @brief Saves the group to disc
 * 
 * Saves the group to disc possibly creating the configdirectory
 * 
 * @param group The group
 * @param error Pointer to an error struct
 * @returns TRUE on success, FALSE otherwise
 * 
 */
osync_bool osync_group_save(OSyncGroup *group, OSyncError **error)
{
  char *filename = NULL;
  int i;
  xmlDocPtr doc;
  char *tmstr = NULL;
  char *version_str = NULL;
	
  osync_trace(TRACE_ENTRY, "%s(%p, %p)", __func__, group, error);
  osync_assert(group);
  osync_assert(group->configdir);
	
  osync_trace(TRACE_INTERNAL, "Trying to open configdirectory %s to save group %s", group->configdir, group->name);
	
  if (!g_file_test(group->configdir, G_FILE_TEST_IS_DIR)) {
    osync_trace(TRACE_INTERNAL, "Creating group configdirectory %s", group->configdir);
    if (g_mkdir(group->configdir, 0700)) {
      osync_error_set(error, OSYNC_ERROR_IO_ERROR, "Unable to create directory for group %s\n", group->name);
      goto error;
    }
  }
	
  filename = g_strdup_printf ("%s%csyncgroup.conf", group->configdir, G_DIR_SEPARATOR);
  osync_trace(TRACE_INTERNAL, "Saving group to file %s", filename);
	
  doc = xmlNewDoc((xmlChar*)"1.0");
  doc->children = xmlNewDocNode(doc, NULL, (xmlChar*)"syncgroup", NULL);

  version_str = g_strdup_printf("%u.%u", OSYNC_GROUP_MAJOR_VERSION, OSYNC_GROUP_MINOR_VERSION);
  xmlSetProp(doc->children, (const xmlChar*)"version", (const xmlChar *)version_str);	
  g_free(version_str);
	
  // TODO: reimplement the filter!
  //The filters
  /*GList *f;
    for (f = group->filters; f; f = f->next) {
    OSyncFilter *filter = f->data;
    xmlNodePtr child = xmlNewChild(doc->children, NULL, (xmlChar*)"filter", NULL);
		
    if (filter->sourcememberid) {
    char *sourcememberid = g_strdup_printf("%lli", filter->sourcememberid);
    xmlNewChild(child, NULL, (xmlChar*)"sourcemember", (xmlChar*)sourcememberid);
    g_free(sourcememberid);
    }
    if (filter->destmemberid) {
    char *destmemberid = g_strdup_printf("%lli", filter->destmemberid);
    xmlNewChild(child, NULL, (xmlChar*)"destmember", (xmlChar*)destmemberid);
    g_free(destmemberid);
    }
    if (filter->sourceobjtype)
    xmlNewChild(child, NULL, (xmlChar*)"sourceobjtype", (xmlChar*)filter->sourceobjtype);
    if (filter->destobjtype)
    xmlNewChild(child, NULL, (xmlChar*)"destobjtype", (xmlChar*)filter->destobjtype);
    if (filter->detectobjtype)
    xmlNewChild(child, NULL, (xmlChar*)"detectobjtype", (xmlChar*)filter->detectobjtype);
    if (filter->action) {
    char *action = g_strdup_printf("%i", filter->action);
    xmlNewChild(child, NULL, (xmlChar*)"action", (xmlChar*)action);
    g_free(action);
    }
    if (filter->function_name)
    xmlNewChild(child, NULL, (xmlChar*)"function_name", (xmlChar*)filter->function_name);
    if (filter->config)
    xmlNewChild(child, NULL, (xmlChar*)"config", (xmlChar*)filter->config);
    }*/

  xmlNewChild(doc->children, NULL, (xmlChar*)"groupname", (xmlChar*)group->name);

  tmstr = g_strdup_printf("%i", (int)group->last_sync);
  xmlNewChild(doc->children, NULL, (xmlChar*)"last_sync", (xmlChar*)tmstr);
  g_free(tmstr);

  xmlNewChild(doc->children, NULL, (xmlChar*)"merger_enabled", (xmlChar*) (group->merger_enabled ? "true" : "false"));
  xmlNewChild(doc->children, NULL, (xmlChar*)"converter_enabled", (xmlChar*) (group->converter_enabled ? "true" : "false"));


  xmlSaveFormatFile(filename, doc, 1);
  osync_xml_free_doc(doc);
  g_free(filename);

  for (i = 0; i < osync_group_num_members(group); i++) {
    OSyncMember *member = osync_group_nth_member(group, i);
    if (!osync_member_save(member, error))
      goto error;
  }
	
  osync_trace(TRACE_EXIT, "%s", __func__);
  return TRUE;

 error:
  osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error));
  return FALSE;
}