示例#1
0
文件: UgCategory.c 项目: Endz0/uget
gboolean	ug_download_list_save (GList* list, const gchar* download_file)
{
	UgetRelation*	relation;
	UgMarkup*	markup;
	guint		index;

	markup = ug_markup_new ();
	if (ug_markup_write_start (markup, download_file, TRUE) == FALSE) {
		ug_markup_free (markup);
		return FALSE;
	}

	for (index = 0;  list;  list = list->next, index++) {
		relation = UG_DATASET_RELATION ((UgDataset*) list->data);
		if (relation)
			relation->index = index;
		if (list->next == NULL)
			break;
	}

	ug_markup_write_element_start (markup, "UgDownloadList version='1'");
	for (;  list;  list = list->prev) {
		ug_markup_write_element_start (markup, "download");
		ug_data_write_markup ((UgData*) list->data, markup);
		ug_markup_write_element_end (markup, "download");
	}
	ug_markup_write_element_end (markup, "UgDownloadList");

	ug_markup_write_end (markup);
	return	TRUE;
}
示例#2
0
文件: UgSetting.c 项目: Endz0/uget
static void	ug_string_list_to_markup (GList** string_list, UgMarkup* markup)
{
	GList*	link;

	for (link = g_list_last (*string_list);  link;  link = link->prev) {
		ug_markup_write_element_start	(markup, "string value='%s'", link->data);
		ug_markup_write_element_end	(markup, "string");
	}
}
示例#3
0
文件: UgCategory.c 项目: Endz0/uget
static void	ug_int_list_to_markup (GList** list, UgMarkup* markup)
{
	GList*		link;
	guint		value;

	for (link = g_list_last (*list);  link;  link = link->prev) {
		value = GPOINTER_TO_INT (link->data);
		ug_markup_write_element_start (markup, "int value='%d'", value);
		ug_markup_write_element_end   (markup, "int");
	}
}
示例#4
0
文件: UgSetting.c 项目: Endz0/uget
gboolean	ug_setting_save (UgSetting* setting, const gchar* file)
{
	UgMarkup*	markup;

	markup = ug_markup_new ();
	if (ug_markup_write_start (markup, file, TRUE)) {
		ug_markup_write_element_start	(markup, "UgSetting version='1'");
		ug_data_write_markup ((UgData*) setting, markup);
		ug_markup_write_element_end	(markup, "UgSetting");
		ug_markup_write_end (markup);
		return TRUE;
	}
	return FALSE;
}
示例#5
0
文件: UgCategory.c 项目: Endz0/uget
gboolean	ug_category_list_save (GList* list, const gchar* file)
{
	UgCategoryGetAllFunc	get_all;
	UgCategory*	category;
	UgMarkup*	markup;
	GList*		link;
	guint		index;

	markup = ug_markup_new ();
	if (ug_markup_write_start (markup, file, TRUE) == FALSE) {
		ug_markup_free (markup);
		return FALSE;
	}

	ug_markup_write_element_start (markup, "UgCategoryList version='1'");
	for (list = g_list_last (list);  list;  list = list->prev) {
		category = list->data;
		get_all = category->funcs->get_all;
		// create UgCategory.indices
		category->indices = get_all (category);
		for (link = category->indices;  link;  link = link->next) {
			index = UG_DATASET_RELATION ((UgDataset*) link->data)->index;
			link->data = GINT_TO_POINTER (index);
		}
		// output
		ug_markup_write_element_start (markup, "category");
		ug_data_write_markup ((UgData*) list->data, markup);
		ug_markup_write_element_end (markup, "category");
		// free UgCategory.indices
		g_list_free (category->indices);
		category->indices = NULL;
	}
	ug_markup_write_element_end (markup, "UgCategoryList");

	ug_markup_write_end (markup);
	return	TRUE;
}
示例#6
0
static void	ug_dataset_to_markup (UgDataset* dataset, UgMarkup* markup)
{
	const UgData1Interface*	iface;
	UgDatalist*			datalist;
	guint				index;

	for (index = 0;  index < dataset->data_len;  index += 2) {
		// output from tail to head
		datalist = ug_datalist_last (dataset->data[index]);
		for (;  datalist;  datalist = datalist->prev) {
			iface = datalist->iface;
			if (iface->entry == NULL)
				continue;
			ug_markup_write_element_start (markup, "DataClass name='%s'", iface->name);
			ug_data1_write_markup ((UgData1*)datalist, markup);
			ug_markup_write_element_end   (markup, "DataClass");
		}
	}
}
示例#7
0
文件: UgData1.c 项目: erdincay/uget2
void	ug_data1_write_markup (UgData1* data, UgMarkup* markup)
{
	const UgDataEntry*	entry;
	union {
		gpointer	src;
		gchar*		v_string;
		gint		v_int;
		guint		v_uint;
		gint64		v_int64;
		gdouble		v_double;
	} value;

	entry = data->iface->entry;
	if (entry == NULL)
		return;

	for (;  entry->name;  entry++) {
		value.src = ((guint8*) data) + entry->offset;

		switch (entry->type) {
		case UG_TYPE_STRING:
			value.v_string = *(gchar**)value.src;
			if (value.v_string) {
				// ug_markup_write_element_start() must use with ug_markup_write_element_end()
				ug_markup_write_element_start (markup, "%s value='%s'", entry->name, value.v_string);
				ug_markup_write_element_end   (markup, entry->name);
			}
			break;

		case UG_TYPE_INT:
			value.v_int = *(gint*)value.src;
//			if (value.v_int) {
				// ug_markup_write_element_start() must use with ug_markup_write_element_end()
				ug_markup_write_element_start (markup, "%s value='%d'", entry->name, value.v_int);
				ug_markup_write_element_end   (markup, entry->name);
//			}
			break;

		case UG_TYPE_UINT:
			value.v_uint = *(guint*)value.src;
//			if (value.v_int) {
				// ug_markup_write_element_start() must use with ug_markup_write_element_end()
				ug_markup_write_element_start (markup, "%s value='%u'", entry->name, value.v_uint);
				ug_markup_write_element_end   (markup, entry->name);
//			}
			break;

		case UG_TYPE_INT64:
			value.v_int64 = *(gint64*)value.src;
//			if (value.v_int64) {
				// ug_markup_write_element_start() must use with ug_markup_write_element_end()
//#if  defined (_MSC_VER)  ||  defined (__MINGW32__)
//				ug_markup_write_element_start (markup, "%s value='%I64d'", entry->name, value.v_int64);
//#else	// C99 Standard
				ug_markup_write_element_start (markup, "%s value='%lld'", entry->name, value.v_int64);
//#endif
				ug_markup_write_element_end   (markup, entry->name);
//			}
			break;

		case UG_TYPE_DOUBLE:
			value.v_double = *(gdouble*)value.src;
//			if (value.v_double) {
				// ug_markup_write_element_start() must use with ug_markup_write_element_end()
				ug_markup_write_element_start (markup, "%s value='%f'", entry->name, value.v_double);
				ug_markup_write_element_end   (markup, entry->name);
//			}
			break;

		case UG_TYPE_INSTANCE:
			value.src = *(gpointer*) value.src;
			if (value.src == NULL)
				break;
		case UG_TYPE_STATIC:
			ug_markup_write_element_start (markup, entry->name);
			ug_data1_write_markup (value.src, markup);
			ug_markup_write_element_end   (markup, entry->name);
			break;

		case UG_TYPE_CUSTOM:
			// ug_markup_write_element_start() must use with ug_markup_write_element_end()
			if (entry->writer) {
				ug_markup_write_element_start (markup, entry->name);
				((UgWriteFunc) entry->writer) (value.src, markup);
				ug_markup_write_element_end   (markup, entry->name);
			}
			break;

		default:
			break;
		}
		// End of switch (entry->type)
	}
}