Generate speed dial from key file without JSON

A timer for speed dial is shown if MIDORI_STARTTIME is defined.
This commit is contained in:
Paweł Forysiuk 2011-03-22 22:59:56 +01:00 committed by Christian Dywan
parent a89ef70bee
commit 616f49605b
3 changed files with 254 additions and 361 deletions

View file

@ -108,6 +108,9 @@
margin: 0px;
padding: 5px 0px 0px;
color: #222;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
div.clear {
@ -194,14 +197,6 @@
<script type="text/javascript">
var sc = JSON.decode ({json_data});
var encodeSafe = function (obj) {
var str = JSON.encode (obj);
str = str.replace (/\'/g, '\\\'');
return str;
}
var getAction = function (id)
{
var a = $(id).getFirst ();
@ -220,7 +215,6 @@
a.getNext().set('text', name);
var num = id.substr (1) - 1;
sc.shortcuts[num].title = name;
a.empty();
var im = new Element('img', { src: '{stock}/image-loading' });
@ -228,51 +222,19 @@
a.addClass ('waiter');
a.grab (im);
getThumbnail (id, url);
console.log ("speed_dial-save-add " + id + " " + url + " " + name);
return false;
}
var getThumbnail = function (id, url)
{
console.log ("speed_dial-get-thumbnail " + id + " " + url);
return false;
}
var setThumbnail = function (id, data, href)
{
var a = $(id).getFirst ();
var im = new Element ('img', { src: 'data:image/png;base64,' + data });
a.empty ().removeClass ('waiter').grab (im);
a.setProperty ('href', href);
var cross = new Element ('div', { 'html': '' });
cross.setProperty ('onclick', 'clearShortcut("' + id + '");');
cross.addClass ('cross');
cross.inject ($(id), 'top');
$(id).addClass ('activated');
var p = a.getNext ();
p.setProperty('onclick', 'javascript:renameShortcut("' + id + '");');
var num = id.substr (1) - 1;
sc.shortcuts[num].href = href;
sc.shortcuts[num].img = data;
console.log ("speed_dial-save '" + encodeSafe (sc) + "'");
}
var renameShortcut = function (id)
{
var num = id.substr (1) - 1;
var name = prompt ("{enter_shortcut_name}", sc.shortcuts[num].title);
var name = prompt ("{enter_shortcut_name}", $(id).getLast ().get ('html', name));
if (!name) return;
$(id).getLast ().set ('html', name);
sc.shortcuts[num].title = name;
console.log ("speed_dial-save '" + encodeSafe (sc) + "'");
console.log ("speed_dial-save-rename " + id + " " + name);
}
var clearShortcut = function (id)
@ -292,84 +254,13 @@
a.setProperty ('href', '#');
p.empty ().removeProperty ('onclick');
num -= 1;
sc.shortcuts[num].href = "#";
sc.shortcuts[num].title = "";
sc.shortcuts[num].img = "";
console.log ("speed_dial-save '" + encodeSafe (sc) + "'");
}
var buildSpeeddial = function ()
{
var width = 3;
var thumb = 160;
if (sc.thumb)
{
thumb = sc.thumb;
setThumbSize(thumb);
}
if (sc.width)
{
width = sc.width;
$('wrap').style.width = (width * (thumb + 60)) + 'px';
}
sc.shortcuts.each (function (item, index, sc)
{
var cl = "shortcut";
if (index < width)
cl += " top";
if ((index % width) == (width - 1))
cl += " right";
var div = new Element ('div', {
'class': cl,
'id': item.id
});
var a = new Element ('a', {
'href': item.href,
'events': {
'click': function () {
return getAction (item.id);
}
}
});
var p = new Element ('p', {
'text': item.title
});
if (item.href == "#")
a.set ('html', '<h1>' + item.id.substr (1) + '</h1><h4><span/></h4>');
else
{
div.addClass ('activated');
var im = new Element ('img', { src: 'data:image/png;base64,' + item.img });
var cross = new Element ('div', { 'html': '' });
cross.setProperty ('onclick', 'clearShortcut("' + item.id + '");');
cross.addClass ('cross');
cross.inject (div, 'top');
a.grab (im);
p.setProperty('onclick', 'javascript:renameShortcut("' + item.id + '");');
}
div.grab (a);
div.grab (p);
$('content').grab (div);
});
console.log ("speed_dial-save-delete " + id);
}
var setSize = function ()
{
if (typeof sc.width == 'undefined')
sc.width = 3;
var rows = Math.ceil (sc.shortcuts.length / sc.width);
var size = prompt ("{enter_dial_size}", sc.width + 'x' + rows);
var size = prompt ("{enter_dial_size}", columns + 'x' + rows);
if (!size) return;
@ -396,23 +287,7 @@
return;
}
sc.width = cols;
var count = cols * rows;
sc.shortcuts = sc.shortcuts.slice (0, count);
var i = sc.shortcuts.length;
while (i < count)
{
i++;
sc.shortcuts.push ({"id" : "s" + i, "href" : "#", "title" : "", "img" : ""});
}
$('content').empty ();
buildSpeeddial ();
console.log ("speed_dial-save '" + encodeSafe (sc) + "'");
console.log ("speed_dial-save-size " + cols + " " + rows);
}
var setThumbSize = function (size)
@ -420,10 +295,7 @@
var i;
var rules = document.styleSheets[0].cssRules;
var width = 3;
if (sc.width)
width = sc.width;
var width = columns;
var height = Math.round (size / 1.5);
$('wrap').style.width = (width * (size + 60)) + 'px';
@ -452,17 +324,8 @@
break;
}
}
if (sc.thumb != size)
{
sc.thumb = size;
console.log ("speed_dial-save '" + encodeSafe (sc) + "'");
console.log ("speed_dial-save-thumbsize " + size);
}
}
window.addEvent ('domready', function () {
buildSpeeddial ();
});
var key_id = 's';
var key_timeout;
@ -511,8 +374,3 @@
</div>
<div id="wrap">
<div id="content">
</div>
</div>
</body>
</html>

View file

@ -1111,79 +1111,37 @@ midori_view_save_as_cb (GtkWidget* menuitem,
}
static gchar*
midori_browser_speed_dial_get_next_free_slot (void)
midori_browser_speed_dial_get_next_free_slot (MidoriView* view)
{
GRegex* regex;
GMatchInfo* match_info;
gchar* speed_dial_body;
gchar* body_fname;
gchar* slot_id = NULL;
MidoriBrowser* browser = midori_browser_get_for_widget (GTK_WIDGET (view));
GKeyFile* key_file;
guint cols, rows, slot = 1;
body_fname = g_build_filename (sokoke_set_config_dir (NULL),
"speeddial.json", NULL);
if (g_access (body_fname, F_OK) != 0)
g_object_get (browser, "speed-dial", &key_file, NULL);
rows = g_key_file_get_integer (key_file, "settings", "rows", NULL);
cols = g_key_file_get_integer (key_file, "settings", "columns", NULL);
while (slot <= cols * rows)
{
gchar* filename = g_build_filename ("midori", "res", "speeddial.json", NULL);
gchar* filepath = sokoke_find_data_filename (filename);
g_free (filename);
if (g_file_get_contents (filepath, &speed_dial_body, NULL, NULL))
gchar* dial_id = g_strdup_printf ("Dial %d", slot);
if (!g_key_file_has_group (key_file, dial_id))
{
g_file_set_contents (body_fname, speed_dial_body, -1, NULL);
g_free (speed_dial_body);
g_free (dial_id);
return g_strdup_printf ("s%d", slot);
}
g_free (filepath);
g_free (body_fname);
return g_strdup ("s1");
g_free (dial_id);
slot++;
}
else
g_file_get_contents (body_fname, &speed_dial_body, NULL, NULL);
regex = g_regex_new ("\"id\":\"(s[0-9]{1,2})\",\"href\":\"#\"",
G_REGEX_MULTILINE, 0, NULL);
if (g_regex_match (regex, speed_dial_body, 0, &match_info))
{
slot_id = g_match_info_fetch (match_info, 1);
g_match_info_free (match_info);
}
if (!g_strcmp0 (slot_id, ""))
g_free (slot_id);
g_free (body_fname);
g_free (speed_dial_body);
g_free (regex);
return slot_id;
return NULL;
}
static void
midori_browser_add_speed_dial (MidoriBrowser* browser)
{
GdkPixbuf* img;
gchar* replace_from;
gchar* replace_by;
gsize len;
GtkWidget* view = midori_browser_get_current_tab (browser);
gchar* uri = g_strdup (midori_view_get_display_uri (MIDORI_VIEW (view)));
gchar* title = g_strdup (midori_view_get_display_title (MIDORI_VIEW (view)));
gchar* slot_id = midori_browser_speed_dial_get_next_free_slot ();
GRegex* reg_quotes = g_regex_new ("'", 0, 0, NULL);
GRegex* reg_others = g_regex_new ("[\\\"\\\\]", 0, 0, NULL);
gchar* temp_title = g_regex_replace_literal (reg_others, title,
-1, 0, " ", 0, NULL);
g_free (title);
title = g_regex_replace_literal (reg_quotes, temp_title, -1, 0,
"\\\\'", 0, NULL);
g_free (temp_title);
g_regex_unref (reg_quotes);
g_regex_unref (reg_others);
gchar* slot_id = midori_browser_speed_dial_get_next_free_slot (MIDORI_VIEW (view));
if (slot_id == NULL)
{
@ -1192,63 +1150,21 @@ midori_browser_add_speed_dial (MidoriBrowser* browser)
return;
}
if ((len = g_utf8_strlen (title, -1)) > 15)
{
/**
* The case when a quote was escaped with a backslash and the
* backslash becomes the last character of the ellipsized string.
* This causes JSON parsing to fail.
* For example: "My Foo Bar \'b\..."
**/
GRegex* reg_unsafe = g_regex_new ("([\\\\]+\\.)", 0, 0, NULL);
gchar* temp;
gchar* ellipsized = g_malloc0 ( len + 1);
g_utf8_strncpy (ellipsized, title, 15);
g_free (title);
temp = g_strdup_printf ("%s...", ellipsized);
g_free (ellipsized);
title = g_regex_replace_literal (reg_unsafe, temp, -1, 0, ".", 0, NULL);
g_free (temp);
g_regex_unref (reg_unsafe);
}
if ((img = midori_view_get_snapshot (MIDORI_VIEW (view), 240, 160)))
{
GRegex* regex;
gchar* replace;
gchar* file_content;
gchar* encoded;
gchar* speed_dial_body;
gchar* body_fname;
gsize sz;
body_fname = g_build_filename (sokoke_set_config_dir (NULL),
"speeddial.json", NULL);
if (g_file_get_contents (body_fname, &speed_dial_body, NULL, NULL))
{
gint i;
GKeyFile* key_file;
gchar* dial_id = g_strdup_printf ("Dial %s", slot_id + 1);
gchar* config_file = g_build_filename (sokoke_set_config_dir (NULL),
"speeddial", NULL);
gchar* file_path = sokoke_build_thumbnail_path (slot_id);
g_object_get (browser, "speed-dial", &key_file, NULL);
gdk_pixbuf_save_to_buffer (img, &file_content, &sz, "png", NULL, NULL);
encoded = g_base64_encode ((guchar *)file_content, sz);
g_key_file_set_string (key_file, dial_id, "uri", uri);
g_key_file_set_string (key_file, dial_id, "title", title);
replace_from = g_strdup_printf (
"\\{\"id\":\"%s\",\"href\":\"#\",\"title\":\"\",\"img\":\"\"\\}",
slot_id);
replace_by = g_strdup_printf (
"{\"id\":\"%s\",\"href\":\"%s\",\"title\":\"%s\",\"img\":\"%s\"}",
slot_id, uri, title, encoded);
regex = g_regex_new (replace_from, G_REGEX_MULTILINE, 0, NULL);
replace = g_regex_replace (regex, speed_dial_body, -1,
1, replace_by, 0, NULL);
g_file_set_contents (body_fname, replace, -1, NULL);
gdk_pixbuf_save (img, file_path, "png", NULL, "compression", "7", NULL);
sokoke_key_file_save_to_file (key_file, config_file, NULL);
i = 0;
while ((view = gtk_notebook_get_nth_page (GTK_NOTEBOOK (
@ -1256,18 +1172,14 @@ midori_browser_add_speed_dial (MidoriBrowser* browser)
if (midori_view_is_blank (MIDORI_VIEW (view)))
midori_view_reload (MIDORI_VIEW (view), FALSE);
g_object_unref (img);
g_regex_unref (regex);
g_free (encoded);
g_free (file_content);
g_free (speed_dial_body);
g_free (replace_from);
g_free (replace_by);
g_free (replace);
}
g_free (body_fname);
g_free (file_path);
g_free (config_file);
g_free (dial_id);
}
g_free (uri);
g_free (title);
g_free (slot_id);
}

View file

@ -234,12 +234,7 @@ midori_view_settings_notify_cb (MidoriWebSettings* settings,
MidoriView* view);
static void
midori_view_speed_dial_get_thumb (GtkWidget* web_view,
const gchar* message,
MidoriView* view);
static void
midori_view_speed_dial_save (GtkWidget* web_view,
midori_view_speed_dial_save (MidoriView* view,
const gchar* message);
static void
@ -3050,10 +3045,8 @@ webkit_web_view_console_message_cb (GtkWidget* web_view,
const gchar* source_id,
MidoriView* view)
{
if (!strncmp (message, "speed_dial-get-thumbnail", 22))
midori_view_speed_dial_get_thumb (web_view, message, view);
else if (!strncmp (message, "speed_dial-save", 13))
midori_view_speed_dial_save (web_view, message);
if (!strncmp (message, "speed_dial-save", 13))
midori_view_speed_dial_save (view, message);
else
g_signal_emit (view, signals[CONSOLE_MESSAGE], 0, message, line, source_id);
return TRUE;
@ -3784,6 +3777,102 @@ static gchar* list_netscape_plugins ()
return g_string_free (ns_plugins, FALSE);
}
static gchar*
prepare_speed_dial_html (MidoriView* view)
{
MidoriBrowser* browser = midori_browser_get_for_widget (GTK_WIDGET (view));
GKeyFile* key_file;
GString* markup = g_string_new (NULL);
guint rows, cols, slot = 1;
gchar* thumb_size_type;
guint thumb_size = 160;
g_object_get (browser, "speed-dial", &key_file, NULL);
if (!key_file)
return g_string_free (markup, FALSE);
rows = g_key_file_get_integer (key_file, "settings", "rows", NULL);
cols = g_key_file_get_integer (key_file, "settings", "columns", NULL);
thumb_size_type = g_key_file_get_string (key_file, "settings", "size", NULL);
if (thumb_size_type == NULL)
thumb_size_type = g_strdup ("MEDIUM");
if (g_str_equal (thumb_size_type, "SMALL"))
thumb_size = 80;
else if (g_str_equal (thumb_size_type, "MEDIUM"))
thumb_size = 160;
else if (g_str_equal (thumb_size_type, "BIG"))
thumb_size = 240;
g_free (thumb_size_type);
g_string_append_printf (markup,
"<script>var columns = %d; var rows = %d;"
"setThumbSize(%d);</script>\n",
cols, rows, thumb_size);
while (slot <= rows * cols)
{
gchar* position;
gchar* dial_entry = g_strdup_printf ("Dial %d", slot);
if (slot < cols)
position = g_strdup (" top");
else if (slot == cols)
position = g_strdup (" top right");
else if (slot > cols && slot % cols == 0)
position = g_strdup (" right");
else
position = g_strdup ("");
if (g_key_file_has_group (key_file, dial_entry))
{
gchar* slot_id = g_strdup_printf ("s%d", slot);
gchar* thumb_file = sokoke_build_thumbnail_path (slot_id);
gchar* uri = g_key_file_get_string (key_file, dial_entry, "uri", NULL);
gchar* title = g_key_file_get_string (key_file, dial_entry, "title", NULL);
gsize sz;
gchar* encoded;
gchar* thumb_content;
g_file_get_contents (thumb_file, &thumb_content, &sz, NULL);
encoded = g_base64_encode ((guchar*)thumb_content, sz);
g_free (thumb_file);
g_free (thumb_content);
g_free (slot_id);
g_string_append_printf (markup,
"<div class=\"shortcut%s activated\" id=\"s%d\">\n"
"<div onclick='javascript:clearShortcut(\"s%d\");' "
"class='cross'></div>\n<a href=\"%s\">"
"<img src=\"data:image/png;base64,%s\"></a>\n"
"<p onclick='javascript:renameShortcut(\"s%d\");'>"
"%s</p></div>\n",
position, slot, slot, uri, encoded, slot, title);
g_free (uri);
g_free (title);
}
else
{
g_string_append_printf (markup,
"<div class=\"shortcut%s\" id=\"s%d\">"
"\n<a href=\"#\" onclick='javascript:return"
" getAction(\"s%d\");'>"
"<h1>%d</h1>\n<h4><span></span><h4>"
"</a>\n<p></p></div>\n",
position, slot, slot, slot);
}
slot++;
g_free (position);
g_free (dial_entry);
}
g_string_append_printf (markup,
"</div>\n</div>\n</body>\n</html>\n");
return g_string_free (markup, FALSE);
}
/**
* midori_view_set_uri:
* @view: a #MidoriView
@ -3820,9 +3909,14 @@ midori_view_set_uri (MidoriView* view,
gchar* res_root;
gchar* speed_dial_head;
gchar* speed_dial_body;
gchar* body_fname;
gchar* stock_root;
gchar* filepath;
#ifdef G_ENABLE_DEBUG
GTimer* timer = NULL;
if (g_getenv ("MIDORI_STARTTIME") != NULL)
timer = g_timer_new ();
#endif
katze_assign (view->uri, g_strdup (""));
katze_item_set_uri (view->item, "");
@ -3842,26 +3936,10 @@ midori_view_set_uri (MidoriView* view,
res_root = g_strdup_printf ("http://localhost:%d/res", port);
stock_root = g_strdup_printf ("http://localhost:%d/stock", port);
#endif
body_fname = g_build_filename (sokoke_set_config_dir (NULL),
"speeddial.json", NULL);
if (g_access (body_fname, F_OK) != 0)
{
filepath = sokoke_find_data_filename ("midori/res/speeddial.json");
if (g_file_get_contents (filepath,
&speed_dial_body, NULL, NULL))
g_file_set_contents (body_fname, speed_dial_body, -1, NULL);
else
speed_dial_body = g_strdup ("");
g_free (filepath);
}
else
g_file_get_contents (body_fname, &speed_dial_body, NULL, NULL);
data = sokoke_replace_variables (speed_dial_head,
"{res}", res_root,
"{stock}", stock_root,
"{json_data}", speed_dial_body,
"{title}", _("Speed dial"),
"{click_to_add}", _("Click to add a shortcut"),
"{enter_shortcut_address}", _("Enter shortcut address"),
@ -3875,6 +3953,17 @@ midori_view_set_uri (MidoriView* view,
"{set_thumb_normal}", _("Medium"),
"{set_thumb_big}", _("Big"), NULL);
#ifdef G_ENABLE_DEBUG
if (g_getenv ("MIDORI_STARTTIME") != NULL)
{
g_debug ("Speed Dial: \t%fs", g_timer_elapsed (timer, NULL));
g_timer_destroy (timer);
}
#endif
speed_dial_body = prepare_speed_dial_html (view);
data = g_strdup_printf ("%s\n%s", data, prepare_speed_dial_html (view));
midori_view_load_alternate_string (view,
data, res_root, "about:blank", NULL);
@ -3883,7 +3972,6 @@ midori_view_set_uri (MidoriView* view,
g_free (data);
g_free (speed_dial_head);
g_free (speed_dial_body);
g_free (body_fname);
}
/* This is not prefectly elegant, but creating
special pages inline is the simplest solution. */
@ -5364,31 +5452,22 @@ thumb_view_load_status_cb (MidoriView* thumb_view,
MidoriView* view)
{
GdkPixbuf* img;
gchar* file_content;
gchar* encoded;
gchar* file_path;
gchar* dom_id;
gchar* js;
gsize sz;
if (midori_view_get_load_status (thumb_view) != MIDORI_LOAD_FINISHED)
return;
gtk_widget_realize (midori_view_get_web_view (MIDORI_VIEW (thumb_view)));
img = midori_view_get_snapshot (MIDORI_VIEW (thumb_view), 240, 160);
gdk_pixbuf_save_to_buffer (img, &file_content, &sz, "png", NULL, "compression", "7", NULL);
encoded = g_base64_encode ((guchar *)file_content, sz );
/* Call Javascript function to replace shortcut's content */
dom_id = g_object_get_data (G_OBJECT (thumb_view), "dom-id");
js = g_strdup_printf ("setThumbnail('%s','%s','%s');",
dom_id, encoded, thumb_view->uri);
webkit_web_view_execute_script (WEBKIT_WEB_VIEW (view->web_view), js);
g_free (js);
file_path = sokoke_build_thumbnail_path (dom_id);
gdk_pixbuf_save (img, file_path, "png", NULL, "compression", "7", NULL);
g_object_unref (img);
g_free (dom_id);
g_free (encoded);
g_free (file_content);
g_free (file_path);
g_signal_handlers_disconnect_by_func (
thumb_view, thumb_view_load_status_cb, view);
@ -5452,54 +5531,98 @@ midori_view_speed_dial_inject_thumb (MidoriView* view,
midori_view_set_uri (MIDORI_VIEW (thumb_view), url);
}
/**
* midori_view_speed_dial_get_thumb
* @web_view: a #WebkitView
* @message: Console log data
*
* Load a thumbnail, and set the DOM
*
* message[0] == console message call
* message[1] == shortcut id in the DOM
* message[2] == shortcut uri
*
**/
static void
midori_view_speed_dial_get_thumb (GtkWidget* web_view,
const gchar* message,
MidoriView* view)
{
gchar** t_data = g_strsplit (message," ", 4);
if (t_data[1] == NULL || t_data[2] == NULL )
return;
midori_view_speed_dial_inject_thumb (view, NULL,
g_strdup (t_data[1]), g_strdup (t_data[2]));
g_strfreev (t_data);
}
/**
* midori_view_speed_dial_save
* @web_view: a #WebkitView
* @view: a #MidoriView
* @message: message from JavaScript
*
* Save speed_dial DOM structure to body template
* Save speed_dial settings
*
**/
static void
midori_view_speed_dial_save (GtkWidget* web_view,
midori_view_speed_dial_save (MidoriView* view,
const gchar* message)
{
gchar* json = g_strdup (message + 15);
gchar* fname = g_build_filename (sokoke_set_config_dir (NULL),
"speeddial.json", NULL);
gchar* action;
gchar* config_file;
GKeyFile* key_file;
MidoriBrowser* browser = midori_browser_get_for_widget (GTK_WIDGET (view));
GtkWidget* notebook;
gchar* msg = g_strdup (message + 16);
gchar** parts = g_strsplit (msg, " ", 4);
GRegex* reg_double = g_regex_new ("\\\\\"", 0, 0, NULL);
gchar* safe = g_regex_replace_literal (reg_double, json, -1, 0, "\\\\\"", 0, NULL);
g_file_set_contents (fname, safe, -1, NULL);
g_object_get (browser, "notebook", &notebook, NULL);
g_object_get (browser, "speed-dial", &key_file, NULL);
action = parts[0];
g_free (fname);
g_free (json);
g_free (safe);
g_regex_unref (reg_double);
if (g_str_equal (action, "size"))
{
g_key_file_set_string (key_file, "settings", "rows", parts[2]);
g_key_file_set_string (key_file, "settings", "columns", parts[1]);
}
else if (g_str_equal (action, "thumbsize"))
{
gchar* saved_size;
gchar* thumb_size_type;
guint size = atoi (parts[1]);
if (size == 80)
thumb_size_type = g_strdup ("SMALL");
else if (size == 240)
thumb_size_type = g_strdup ("BIG");
else /* if (size == 160) */
thumb_size_type = g_strdup ("MEDIUM");
saved_size = g_key_file_get_string (key_file, "settings", "size", NULL);
if (saved_size != NULL && g_str_equal (saved_size, thumb_size_type))
{
g_free (action);
g_free (msg);
g_free (thumb_size_type);
g_free (saved_size);
return;
}
g_key_file_set_string (key_file, "settings", "size", thumb_size_type);
g_free (thumb_size_type);
g_free (saved_size);
}
else if (g_str_equal (action, "add") || g_str_equal (action, "rename")
|| g_str_equal (action, "delete"))
{
gchar* tmp = g_strdup (parts[1] + 1);
guint slot_id = atoi (tmp);
gchar* dial_id = g_strdup_printf ("Dial %d", slot_id);
g_free (tmp);
if (g_str_equal (action, "delete"))
{
gchar* file_path = sokoke_build_thumbnail_path (parts[1]);
g_key_file_remove_group (key_file, dial_id, NULL);
g_unlink (file_path);
g_free (file_path);
}
else if (g_str_equal (action, "add"))
{
g_key_file_set_string (key_file, dial_id, "uri", parts[2]);
g_key_file_set_string (key_file, dial_id, "title", parts[3]);
midori_view_speed_dial_inject_thumb (view, NULL, parts[1], parts[2]);
}
else if (g_str_equal (action, "rename"))
{
g_key_file_set_string (key_file, dial_id, "title", parts[2]);
}
g_free (dial_id);
}
config_file = g_build_filename (sokoke_set_config_dir (NULL), "speeddial", NULL);
sokoke_key_file_save_to_file (key_file, config_file, NULL);
g_free (msg);
g_free (action);
g_free (config_file);
}