First move towards superseding KatzeXbelItem by KatzeItem

The idea is, since we have KatzeItem, KatzeList and KatzeArray
now, except for KatzeXbelItem's loading and saving XBEL the
interface is obsolete.

As a bonus, we actually save the trash again.
This commit is contained in:
Christian Dywan 2008-08-31 20:48:13 +02:00
parent 88956ae34c
commit efab194b63
3 changed files with 91 additions and 7 deletions

View file

@ -803,7 +803,7 @@ katze_xbel_xml_element (const gchar* name,
return markup; return markup;
} }
static gchar* gchar*
katze_xbel_item_to_data (KatzeXbelItem* item) katze_xbel_item_to_data (KatzeXbelItem* item)
{ {
g_return_val_if_fail (KATZE_IS_XBEL_ITEM (item), NULL); g_return_val_if_fail (KATZE_IS_XBEL_ITEM (item), NULL);

View file

@ -161,6 +161,9 @@ katze_xbel_folder_from_data_dirs (KatzeXbelItem* folder,
gchar** full_path, gchar** full_path,
GError** error); GError** error);
gchar*
katze_xbel_item_to_data (KatzeXbelItem* item);
gchar* gchar*
katze_xbel_folder_to_data (KatzeXbelItem* folder, katze_xbel_folder_to_data (KatzeXbelItem* folder,
gsize* length, gsize* length,

View file

@ -349,7 +349,7 @@ midori_web_list_add_item_cb (KatzeArray* trash,
} }
} }
void static void
midori_browser_session_cb (MidoriBrowser* browser, midori_browser_session_cb (MidoriBrowser* browser,
gpointer arg1, gpointer arg1,
KatzeXbelItem* session) KatzeXbelItem* session)
@ -373,7 +373,7 @@ midori_browser_session_cb (MidoriBrowser* browser,
g_free (config_path); g_free (config_path);
} }
void static void
midori_browser_weak_notify_cb (MidoriBrowser* browser, midori_browser_weak_notify_cb (MidoriBrowser* browser,
KatzeXbelItem* session) KatzeXbelItem* session)
{ {
@ -381,6 +381,86 @@ midori_browser_weak_notify_cb (MidoriBrowser* browser,
G_CALLBACK (midori_browser_session_cb), session, NULL); G_CALLBACK (midori_browser_session_cb), session, NULL);
} }
static gchar*
_simple_xml_element (const gchar* name,
const gchar* value)
{
gchar* value_escaped;
gchar* markup;
if (!value)
return g_strdup ("");
value_escaped = g_markup_escape_text (value, -1);
markup = g_strdup_printf ("<%s>%s</%s>\n", name, value_escaped, name);
g_free (value_escaped);
return markup;
}
static gchar*
katze_xbel_array_to_xml (KatzeArray* array,
GError** error)
{
GString* inner_markup;
guint i, n;
KatzeXbelItem* item;
gchar* item_xml;
gchar* title;
gchar* desc;
gchar* outer_markup;
g_return_val_if_fail (katze_array_is_a (array, KATZE_TYPE_XBEL_ITEM), NULL);
inner_markup = g_string_new (NULL);
n = katze_array_get_length (array);
for (i = 0; i < n; i++)
{
item = katze_array_get_nth_item (array, i);
item_xml = katze_xbel_item_to_data (item);
g_string_append (inner_markup, item_xml);
g_free (item_xml);
}
title = _simple_xml_element ("title", katze_item_get_name (KATZE_ITEM (array)));
desc = _simple_xml_element ("desc", katze_item_get_text (KATZE_ITEM (array)));
outer_markup = g_strdup_printf (
"%s%s<xbel version=\"1.0\">\n%s%s%s</xbel>\n",
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",
"<!DOCTYPE xbel PUBLIC \"+//IDN python.org//DTD "
"XML Bookmark Exchange Language 1.0//EN//XML\" "
"\"http://www.python.org/topics/xml/dtds/xbel-1.0.dtd\">\n",
title,
desc,
g_string_free (inner_markup, FALSE));
g_free (title);
g_free (desc);
return outer_markup;
}
static gboolean
katze_array_to_file (KatzeArray* array,
const gchar* filename,
GError** error)
{
gchar* data;
FILE* fp;
g_return_val_if_fail (katze_array_is_a (array, KATZE_TYPE_XBEL_ITEM), FALSE);
g_return_val_if_fail (filename, FALSE);
if (!(data = katze_xbel_array_to_xml (array, error)))
return FALSE;
if (!(fp = fopen (filename, "w")))
{
*error = g_error_new_literal (G_FILE_ERROR, G_FILE_ERROR_ACCES,
_("Writing failed."));
return FALSE;
}
fputs (data, fp);
fclose (fp);
g_free (data);
return TRUE;
}
int int
main (int argc, main (int argc,
@ -609,6 +689,7 @@ main (int argc,
KatzeXbelItem* item = katze_xbel_folder_get_nth_item (xbel_trash, i); KatzeXbelItem* item = katze_xbel_folder_get_nth_item (xbel_trash, i);
katze_array_add_item (trash, item); katze_array_add_item (trash, item);
} }
katze_xbel_item_unref (xbel_trash);
g_signal_connect_after (trash, "add-item", g_signal_connect_after (trash, "add-item",
G_CALLBACK (midori_web_list_add_item_cb), NULL); G_CALLBACK (midori_web_list_add_item_cb), NULL);
@ -702,12 +783,12 @@ main (int argc,
g_free (config_file); g_free (config_file);
config_file = g_build_filename (config_path, "tabtrash.xbel", NULL); config_file = g_build_filename (config_path, "tabtrash.xbel", NULL);
error = NULL; error = NULL;
if (!katze_xbel_folder_to_file (xbel_trash, config_file, &error)) if (!katze_array_to_file (trash, config_file, &error))
{ {
g_warning (_("The trash couldn't be saved. %s"), error->message); g_warning (_("The trash couldn't be saved. %s"), error->message);
g_error_free (error); g_error_free (error);
} }
katze_xbel_item_unref (xbel_trash); g_object_unref (trash);
katze_assign (config_file, g_build_filename (config_path, "config", NULL)); katze_assign (config_file, g_build_filename (config_path, "config", NULL));
error = NULL; error = NULL;
if (!settings_save_to_file (settings, config_file, &error)) if (!settings_save_to_file (settings, config_file, &error))