Introduce midori_array_query to unify bookmark queries
This ensures querying is consistently quoted and ordered.
This commit is contained in:
parent
6ff2109adb
commit
e4963aa324
4 changed files with 67 additions and 65 deletions
|
@ -1065,3 +1065,49 @@ katze_array_from_sqlite (sqlite3* db,
|
||||||
|
|
||||||
return katze_array_from_statement (stmt);
|
return katze_array_from_statement (stmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* midori_array_query:
|
||||||
|
* @array: the main bookmark array
|
||||||
|
* @fields: comma separated list of fields
|
||||||
|
* @condition: condition, like "folder = '%q'"
|
||||||
|
* @value: a value to be inserted if @condition contains %q
|
||||||
|
*
|
||||||
|
* Stores the result in a #KatzeArray.
|
||||||
|
*
|
||||||
|
* Return value: a #KatzeArray on success, %NULL otherwise
|
||||||
|
*
|
||||||
|
* Since: 0.4.3
|
||||||
|
**/
|
||||||
|
KatzeArray*
|
||||||
|
midori_array_query (KatzeArray* bookmarks,
|
||||||
|
const gchar* fields,
|
||||||
|
const gchar* condition,
|
||||||
|
const gchar* value)
|
||||||
|
{
|
||||||
|
sqlite3* db;
|
||||||
|
gchar* sqlcmd;
|
||||||
|
char* sqlcmd_value;
|
||||||
|
KatzeArray* array;
|
||||||
|
|
||||||
|
g_return_val_if_fail (KATZE_IS_ARRAY (bookmarks), NULL);
|
||||||
|
g_return_val_if_fail (fields, NULL);
|
||||||
|
g_return_val_if_fail (condition, NULL);
|
||||||
|
db = g_object_get_data (G_OBJECT (bookmarks), "db");
|
||||||
|
if (db == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
sqlcmd = g_strdup_printf ("SELECT %s FROM bookmarks WHERE %s "
|
||||||
|
"ORDER BY title DESC", fields, condition);
|
||||||
|
if (strstr (condition, "%q"))
|
||||||
|
{
|
||||||
|
sqlcmd_value = sqlite3_mprintf (sqlcmd, value ? value : "");
|
||||||
|
array = katze_array_from_sqlite (db, sqlcmd_value);
|
||||||
|
sqlite3_free (sqlcmd_value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
array = katze_array_from_sqlite (db, sqlcmd);
|
||||||
|
g_free (sqlcmd);
|
||||||
|
return array;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,12 @@ midori_array_to_file (KatzeArray* array,
|
||||||
KatzeArray*
|
KatzeArray*
|
||||||
katze_array_from_statement (sqlite3_stmt* stmt);
|
katze_array_from_statement (sqlite3_stmt* stmt);
|
||||||
|
|
||||||
|
KatzeArray*
|
||||||
|
midori_array_query (KatzeArray* array,
|
||||||
|
const gchar* fields,
|
||||||
|
const gchar* condition,
|
||||||
|
const gchar* value);
|
||||||
|
|
||||||
KatzeArray*
|
KatzeArray*
|
||||||
katze_array_from_sqlite (sqlite3* db,
|
katze_array_from_sqlite (sqlite3* db,
|
||||||
const gchar* sqlcmd);
|
const gchar* sqlcmd);
|
||||||
|
|
|
@ -2951,26 +2951,20 @@ _action_bookmarks_populate_folder (GtkAction* action,
|
||||||
KatzeArray* folder,
|
KatzeArray* folder,
|
||||||
MidoriBrowser* browser)
|
MidoriBrowser* browser)
|
||||||
{
|
{
|
||||||
const char* sqlcmd = "SELECT uri, title, app, folder "
|
|
||||||
"FROM bookmarks WHERE folder = '%q' ORDER BY uri ASC";
|
|
||||||
sqlite3* db = g_object_get_data (G_OBJECT (browser->bookmarks), "db");
|
|
||||||
const gchar* folder_name;
|
const gchar* folder_name;
|
||||||
char* sqlcmd_folder;
|
|
||||||
KatzeArray* bookmarks;
|
KatzeArray* bookmarks;
|
||||||
GtkWidget* menuitem;
|
GtkWidget* menuitem;
|
||||||
|
|
||||||
if (!db)
|
folder_name = katze_item_get_name (KATZE_ITEM (folder));
|
||||||
|
if (!(bookmarks = midori_array_query (browser->bookmarks,
|
||||||
|
"uri, title, app, folder", "folder = '%q'", folder_name)))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
/* Clear items from dummy array here */
|
/* Clear items from dummy array here */
|
||||||
gtk_container_foreach (GTK_CONTAINER (menu),
|
gtk_container_foreach (GTK_CONTAINER (menu),
|
||||||
(GtkCallback)(gtk_widget_destroy), NULL);
|
(GtkCallback)(gtk_widget_destroy), NULL);
|
||||||
|
|
||||||
folder_name = katze_item_get_name (KATZE_ITEM (folder));
|
if (katze_array_is_empty (bookmarks))
|
||||||
sqlcmd_folder = sqlite3_mprintf (sqlcmd, folder_name ? folder_name : "");
|
|
||||||
bookmarks = katze_array_from_sqlite (db, sqlcmd_folder);
|
|
||||||
sqlite3_free (sqlcmd_folder);
|
|
||||||
if (!bookmarks || katze_array_is_empty (bookmarks))
|
|
||||||
{
|
{
|
||||||
menuitem = gtk_image_menu_item_new_with_label (_("Empty"));
|
menuitem = gtk_image_menu_item_new_with_label (_("Empty"));
|
||||||
gtk_widget_set_sensitive (menuitem, FALSE);
|
gtk_widget_set_sensitive (menuitem, FALSE);
|
||||||
|
@ -6741,8 +6735,6 @@ midori_bookmarkbar_remove_item_cb (KatzeArray* bookmarks,
|
||||||
static void
|
static void
|
||||||
midori_bookmarkbar_populate (MidoriBrowser* browser)
|
midori_bookmarkbar_populate (MidoriBrowser* browser)
|
||||||
{
|
{
|
||||||
sqlite3* db;
|
|
||||||
const gchar* sqlcmd;
|
|
||||||
KatzeArray* array;
|
KatzeArray* array;
|
||||||
KatzeItem* item;
|
KatzeItem* item;
|
||||||
|
|
||||||
|
@ -6752,14 +6744,8 @@ midori_bookmarkbar_populate (MidoriBrowser* browser)
|
||||||
gtk_toolbar_insert (GTK_TOOLBAR (browser->bookmarkbar),
|
gtk_toolbar_insert (GTK_TOOLBAR (browser->bookmarkbar),
|
||||||
gtk_separator_tool_item_new (), -1);
|
gtk_separator_tool_item_new (), -1);
|
||||||
|
|
||||||
db = g_object_get_data (G_OBJECT (browser->bookmarks), "db");
|
array = midori_array_query (browser->bookmarks,
|
||||||
if (!db)
|
"uri, title, desc, app, folder, toolbar", "toolbar = 1", NULL);
|
||||||
return;
|
|
||||||
|
|
||||||
sqlcmd = "SELECT uri, title, desc, app, folder, toolbar FROM bookmarks WHERE "
|
|
||||||
" toolbar = 1 ORDER BY uri ASC";
|
|
||||||
|
|
||||||
array = katze_array_from_sqlite (db, sqlcmd);
|
|
||||||
if (!array)
|
if (!array)
|
||||||
{
|
{
|
||||||
_action_set_sensitive (browser, "BookmarkAdd", FALSE);
|
_action_set_sensitive (browser, "BookmarkAdd", FALSE);
|
||||||
|
@ -6773,15 +6759,10 @@ midori_bookmarkbar_populate (MidoriBrowser* browser)
|
||||||
midori_bookmarkbar_insert_item (browser->bookmarkbar, item);
|
midori_bookmarkbar_insert_item (browser->bookmarkbar, item);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
KatzeArray* subfolder;
|
KatzeArray* subfolder = midori_array_query (browser->bookmarks,
|
||||||
gchar* subsqlcmd;
|
"uri, title, desc, app", "folder = '%q' AND uri != ''", katze_item_get_name (item));
|
||||||
|
|
||||||
subsqlcmd = g_strdup_printf ("SELECT uri, title, desc, app FROM bookmarks WHERE "
|
|
||||||
" folder = '%s' and uri != ''", katze_item_get_name (item));
|
|
||||||
subfolder = katze_array_from_sqlite (db, subsqlcmd);
|
|
||||||
katze_item_set_name (KATZE_ITEM (subfolder), katze_item_get_name (item));
|
katze_item_set_name (KATZE_ITEM (subfolder), katze_item_get_name (item));
|
||||||
midori_bookmarkbar_insert_item (browser->bookmarkbar, KATZE_ITEM (subfolder));
|
midori_bookmarkbar_insert_item (browser->bookmarkbar, KATZE_ITEM (subfolder));
|
||||||
g_free (subsqlcmd);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_action_set_sensitive (browser, "BookmarkAdd", TRUE);
|
_action_set_sensitive (browser, "BookmarkAdd", TRUE);
|
||||||
|
|
|
@ -124,19 +124,13 @@ midori_bookmarks_export_array_db (sqlite3* db,
|
||||||
KatzeArray* array,
|
KatzeArray* array,
|
||||||
const gchar* folder)
|
const gchar* folder)
|
||||||
{
|
{
|
||||||
gchar* sqlcmd;
|
|
||||||
KatzeArray* root_array;
|
KatzeArray* root_array;
|
||||||
KatzeArray* subarray;
|
KatzeArray* subarray;
|
||||||
KatzeItem* item;
|
KatzeItem* item;
|
||||||
GList* list;
|
GList* list;
|
||||||
|
|
||||||
if (!db)
|
if (!(root_array = midori_array_query (array, "*", "folder='%q'", folder)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
sqlcmd = g_strdup_printf ("SELECT * FROM bookmarks where folder='%s'", folder);
|
|
||||||
root_array = katze_array_from_sqlite (db, sqlcmd);
|
|
||||||
g_free (sqlcmd);
|
|
||||||
|
|
||||||
KATZE_ARRAY_FOREACH_ITEM_L (item, root_array, list)
|
KATZE_ARRAY_FOREACH_ITEM_L (item, root_array, list)
|
||||||
{
|
{
|
||||||
if (KATZE_ITEM_IS_FOLDER (item))
|
if (KATZE_ITEM_IS_FOLDER (item))
|
||||||
|
@ -177,40 +171,15 @@ midori_bookmarks_read_from_db (MidoriBookmarks* bookmarks,
|
||||||
const gchar* folder,
|
const gchar* folder,
|
||||||
const gchar* keyword)
|
const gchar* keyword)
|
||||||
{
|
{
|
||||||
sqlite3* db;
|
KatzeArray* array;
|
||||||
sqlite3_stmt* statement;
|
|
||||||
gint result;
|
|
||||||
const gchar* sqlcmd;
|
|
||||||
|
|
||||||
db = g_object_get_data (G_OBJECT (bookmarks->array), "db");
|
|
||||||
|
|
||||||
if (!db)
|
|
||||||
return katze_array_new (KATZE_TYPE_ITEM);
|
|
||||||
|
|
||||||
if (keyword && *keyword)
|
if (keyword && *keyword)
|
||||||
{
|
array = midori_array_query (bookmarks->array,
|
||||||
gchar* filterstr;
|
"uri, title, desc, app, toolbar, folder", "title LIKE '%%%q%%'", keyword);
|
||||||
sqlcmd = "SELECT uri, title, desc, app, toolbar, folder from bookmarks where "
|
|
||||||
" title like ? ORDER BY uri DESC";
|
|
||||||
result = sqlite3_prepare_v2 (db, sqlcmd, -1, &statement, NULL);
|
|
||||||
filterstr = g_strdup_printf ("%%%s%%", keyword);
|
|
||||||
sqlite3_bind_text (statement, 1, g_strdup (filterstr), -1, g_free);
|
|
||||||
g_free (filterstr);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
array = midori_array_query (bookmarks->array,
|
||||||
if (!folder)
|
"uri, title, desc, app, toolbar, folder", "folder = '%q'", folder);
|
||||||
folder = "";
|
return array ? array : katze_array_new (KATZE_TYPE_ITEM);
|
||||||
sqlcmd = "SELECT uri, title, desc, app, toolbar, folder from bookmarks where "
|
|
||||||
" folder = ? ORDER BY title DESC";
|
|
||||||
result = sqlite3_prepare_v2 (db, sqlcmd, -1, &statement, NULL);
|
|
||||||
sqlite3_bind_text (statement, 1, g_strdup (folder), -1, g_free);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result != SQLITE_OK)
|
|
||||||
return katze_array_new (KATZE_TYPE_ITEM);
|
|
||||||
|
|
||||||
return katze_array_from_statement (statement);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in a new issue