Merge lp:~aauzi/midori/fix-1179200-5 into lp:midori

Proposed by Cris Dywan
Status: Merged
Approved by: Cris Dywan
Approved revision: 6327
Merged at revision: 6406
Proposed branch: lp:~aauzi/midori/fix-1179200-5
Merge into: lp:midori
Diff against target: 1945 lines (+877/-347)
10 files modified
katze/katze-array.c (+29/-48)
katze/katze-array.h (+30/-0)
katze/katze-item.c (+6/-0)
midori/midori-array.c (+11/-1)
midori/midori-bookmarks-db.c (+660/-195)
midori/midori-bookmarks-db.h (+52/-25)
midori/midori-browser.c (+30/-26)
midori/midori-frontend.c (+4/-4)
panels/midori-bookmarks.c (+27/-25)
tests/bookmarks.c (+28/-23)
To merge this branch: bzr merge lp:~aauzi/midori/fix-1179200-5
Reviewer Review Type Date Requested Status
Cris Dywan Approve
Cody Garver (community) Needs Fixing
Review via email: mp+185943@code.launchpad.net

Commit message

Introduces KatzeArray::update-item to handle metadata changes

Description of the change

Fifth step for merge of fix-1179200

Here the midori_bookmarks_db class is derived from KatzeArray.

It provides the API for bookmarks db operations.

It introduces the update-item signal, which is used by the bookmark bar and the bookmarks panel to handle bookmarks metadata changes.

So far, the bookmark item may still be duplicated (created by the HMI or retrieved from the database)

To post a comment you must log in.
Revision history for this message
Cris Dywan (kalikiana) wrote :

There's considerable whitespace-only changes making the patch much larger than it would otherwise be.

Exposing KatzeArray internals without using a "private" is problematic. Any change to the struct affects ABI.

There's a non-trivial #if 0 without documentation.

review: Needs Fixing
Revision history for this message
Cody Garver (codygarver) wrote :

There are also merge artifacts in the diff like line 137

review: Needs Fixing
Revision history for this message
982c80311320c1b (alexander-wilms) wrote :
lp:~aauzi/midori/fix-1179200-5 updated
6325. By André Auzi

fix indentation errors

Revision history for this message
André Auzi (aauzi) wrote :

> There are also merge artifacts in the diff like line 137
I'm puzzled by this issue, I do see the artifacts in the diff here but not in the branch itself when I branch it again on my laptop.

Could it be a bzr/launchpad issue?

Revision history for this message
André Auzi (aauzi) wrote :

> There's considerable whitespace-only changes making the patch much larger than
> it would otherwise be.
>

My apologies for that, I guess I have to polish my emacs c-style for midori.
Anyway, I've tried to fix this.

> Exposing KatzeArray internals without using a "private" is problematic. Any
> change to the struct affects ABI.
>

OK, I'm on it

> There's a non-trivial #if 0 without documentation.

It was to make sure that the comment just underneath was correct and the enclosed function was actually not used.

If it was my code I would just get rid of the unused function.

lp:~aauzi/midori/fix-1179200-5 updated
6326. By André Auzi

make KatzeArray struct content private

6327. By André Auzi

merge lp:midori to fix conficts

Revision history for this message
André Auzi (aauzi) wrote :

> > There are also merge artifacts in the diff like line 137
> I'm puzzled by this issue, I do see the artifacts in the diff here but not in
> the branch itself when I branch it again on my laptop.
>
> Could it be a bzr/launchpad issue?

OK I figured it was merge conflicts indicators.
I fixed it by merging in lp:midori

Revision history for this message
Cris Dywan (kalikiana) wrote :

Thanks!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'katze/katze-array.c'
2--- katze/katze-array.c 2012-08-08 23:02:56 +0000
3+++ katze/katze-array.c 2013-09-17 19:35:27 +0000
4@@ -25,38 +25,14 @@
5 * #KatzeArray is a type aware container for items.
6 */
7
8-struct _KatzeArray
9+G_DEFINE_TYPE (KatzeArray, katze_array, KATZE_TYPE_ITEM);
10+
11+struct _KatzeArrayPrivate
12 {
13- KatzeItem parent_instance;
14-
15 GType type;
16 GList* items;
17 };
18
19-struct _KatzeArrayClass
20-{
21- KatzeItemClass parent_class;
22-
23- /* Signals */
24- void
25- (*add_item) (KatzeArray* array,
26- gpointer item);
27- void
28- (*remove_item) (KatzeArray* array,
29- gpointer item);
30- void
31- (*move_item) (KatzeArray* array,
32- gpointer item,
33- gint index);
34- void
35- (*clear) (KatzeArray* array);
36-
37- void
38- (*update) (KatzeArray* array);
39-};
40-
41-G_DEFINE_TYPE (KatzeArray, katze_array, KATZE_TYPE_ITEM);
42-
43 enum {
44 ADD_ITEM,
45 REMOVE_ITEM,
46@@ -90,7 +66,7 @@
47 if (g_type_is_a (type, KATZE_TYPE_ITEM))
48 katze_item_set_parent (item, array);
49
50- array->items = g_list_append (array->items, item);
51+ array->priv->items = g_list_append (array->priv->items, item);
52 _katze_array_update (array);
53 }
54
55@@ -98,7 +74,7 @@
56 _katze_array_remove_item (KatzeArray* array,
57 gpointer item)
58 {
59- array->items = g_list_remove (array->items, item);
60+ array->priv->items = g_list_remove (array->priv->items, item);
61
62 if (KATZE_IS_ITEM (item))
63 katze_item_set_parent (item, NULL);
64@@ -111,8 +87,8 @@
65 gpointer item,
66 gint position)
67 {
68- array->items = g_list_remove (array->items, item);
69- array->items = g_list_insert (array->items, item, position);
70+ array->priv->items = g_list_remove (array->priv->items, item);
71+ array->priv->items = g_list_insert (array->priv->items, item, position);
72 _katze_array_update (array);
73 }
74
75@@ -121,10 +97,10 @@
76 {
77 GObject* item;
78
79- while ((item = g_list_nth_data (array->items, 0)))
80+ while ((item = g_list_nth_data (array->priv->items, 0)))
81 g_signal_emit (array, signals[REMOVE_ITEM], 0, item);
82- g_list_free (array->items);
83- array->items = NULL;
84+ g_list_free (array->priv->items);
85+ array->priv->items = NULL;
86 _katze_array_update (array);
87 }
88
89@@ -217,13 +193,18 @@
90 class->move_item = _katze_array_move_item;
91 class->clear = _katze_array_clear;
92 class->update = _katze_array_update;
93+
94+ g_type_class_add_private (class, sizeof (KatzeArrayPrivate));
95 }
96
97 static void
98 katze_array_init (KatzeArray* array)
99 {
100- array->type = G_TYPE_OBJECT;
101- array->items = NULL;
102+ array->priv = G_TYPE_INSTANCE_GET_PRIVATE (array,
103+ KATZE_TYPE_ARRAY, KatzeArrayPrivate);
104+
105+ array->priv->type = G_TYPE_OBJECT;
106+ array->priv->items = NULL;
107 }
108
109 static void
110@@ -232,9 +213,9 @@
111 KatzeArray* array = KATZE_ARRAY (object);
112 GList* items;
113
114- for (items = array->items; items; items = g_list_next (items))
115+ for (items = array->priv->items; items; items = g_list_next (items))
116 g_object_unref (items->data);
117- g_list_free (array->items);
118+ g_list_free (array->priv->items);
119
120 G_OBJECT_CLASS (katze_array_parent_class)->finalize (object);
121 }
122@@ -258,7 +239,7 @@
123 g_return_val_if_fail (g_type_is_a (type, G_TYPE_OBJECT), NULL);
124
125 array = g_object_new (KATZE_TYPE_ARRAY, NULL);
126- array->type = type;
127+ array->priv->type = type;
128
129 return array;
130 }
131@@ -279,7 +260,7 @@
132 {
133 g_return_val_if_fail (KATZE_IS_ARRAY (array), FALSE);
134
135- return g_type_is_a (array->type, is_a_type);
136+ return g_type_is_a (array->priv->type, is_a_type);
137 }
138
139 /**
140@@ -333,7 +314,7 @@
141 {
142 g_return_val_if_fail (KATZE_IS_ARRAY (array), NULL);
143
144- return g_list_nth_data (array->items, n);
145+ return g_list_nth_data (array->priv->items, n);
146 }
147
148 /**
149@@ -349,7 +330,7 @@
150 {
151 g_return_val_if_fail (KATZE_IS_ARRAY (array), TRUE);
152
153- return !g_list_nth_data (array->items, 0);
154+ return !g_list_nth_data (array->priv->items, 0);
155 }
156
157 /**
158@@ -367,7 +348,7 @@
159 {
160 g_return_val_if_fail (KATZE_IS_ARRAY (array), -1);
161
162- return g_list_index (array->items, item);
163+ return g_list_index (array->priv->items, item);
164 }
165
166 /**
167@@ -401,7 +382,7 @@
168 if (token_length < 1)
169 token_length = strlen (token);
170
171- for (items = array->items; items; items = g_list_next (items))
172+ for (items = array->priv->items; items; items = g_list_next (items))
173 {
174 const gchar* found_token = ((KatzeItem*)items->data)->token;
175 if (found_token != NULL)
176@@ -439,7 +420,7 @@
177 g_return_val_if_fail (katze_array_is_a (array, KATZE_TYPE_ITEM), NULL);
178 g_return_val_if_fail (uri != NULL, NULL);
179
180- for (items = array->items; items; items = g_list_next (items))
181+ for (items = array->priv->items; items; items = g_list_next (items))
182 {
183 const gchar* found_uri = ((KatzeItem*)items->data)->uri;
184 if (found_uri != NULL && !strcmp (found_uri, uri))
185@@ -461,7 +442,7 @@
186 {
187 g_return_val_if_fail (KATZE_IS_ARRAY (array), 0);
188
189- return g_list_length (array->items);
190+ return g_list_length (array->priv->items);
191 }
192
193 /**
194@@ -499,7 +480,7 @@
195 {
196 g_return_val_if_fail (KATZE_IS_ARRAY (array), NULL);
197
198- return g_list_copy (array->items);
199+ return g_list_copy (array->priv->items);
200 }
201
202 GList*
203@@ -507,7 +488,7 @@
204 {
205 g_return_val_if_fail (KATZE_IS_ARRAY (array), NULL);
206
207- return array->items;
208+ return array->priv->items;
209 }
210
211 /**
212
213=== modified file 'katze/katze-array.h'
214--- katze/katze-array.h 2011-01-19 20:58:26 +0000
215+++ katze/katze-array.h 2013-09-17 19:35:27 +0000
216@@ -31,6 +31,36 @@
217
218 typedef struct _KatzeArray KatzeArray;
219 typedef struct _KatzeArrayClass KatzeArrayClass;
220+typedef struct _KatzeArrayPrivate KatzeArrayPrivate;
221+
222+struct _KatzeArray
223+{
224+ KatzeItem parent_instance;
225+
226+ KatzeArrayPrivate* priv;
227+};
228+
229+struct _KatzeArrayClass
230+{
231+ KatzeItemClass parent_class;
232+
233+ /* Signals */
234+ void
235+ (*add_item) (KatzeArray* array,
236+ gpointer item);
237+ void
238+ (*remove_item) (KatzeArray* array,
239+ gpointer item);
240+ void
241+ (*move_item) (KatzeArray* array,
242+ gpointer item,
243+ gint index);
244+ void
245+ (*clear) (KatzeArray* array);
246+
247+ void
248+ (*update) (KatzeArray* array);
249+};
250
251 GType
252 katze_array_get_type (void) G_GNUC_CONST;
253
254=== modified file 'katze/katze-item.c'
255--- katze/katze-item.c 2013-07-27 12:35:55 +0000
256+++ katze/katze-item.c 2013-09-17 19:35:27 +0000
257@@ -314,6 +314,9 @@
258 {
259 g_return_if_fail (KATZE_IS_ITEM (item));
260
261+ if (!g_strcmp0 (item->name, name))
262+ return;
263+
264 katze_assign (item->name, g_strdup (name));
265 if (item->parent)
266 katze_array_update ((KatzeArray*)item->parent);
267@@ -418,6 +421,9 @@
268 {
269 g_return_if_fail (KATZE_IS_ITEM (item));
270
271+ if (!g_strcmp0 (katze_item_get_meta_string (item, "icon"), icon))
272+ return;
273+
274 katze_item_set_meta_string (item, "icon", icon);
275 if (item->parent)
276 katze_array_update ((KatzeArray*)item->parent);
277
278=== modified file 'midori/midori-array.c'
279--- midori/midori-array.c 2013-08-05 12:50:34 +0000
280+++ midori/midori-array.c 2013-09-17 19:35:27 +0000
281@@ -986,7 +986,17 @@
282 return FALSE;
283 }
284
285-static void
286+/**
287+ * katze_item_set_value_from_columne:
288+ * @stmt: prepared statement
289+ * @column: column to read
290+ * @item: #KatzeItem to populate
291+ *
292+ * Stores the column in the given #KatzeItem.
293+ *
294+ * Since: 0.2.7
295+ **/
296+void
297 katze_item_set_value_from_column (sqlite3_stmt* stmt,
298 gint column,
299 KatzeItem* item)
300
301=== modified file 'midori/midori-bookmarks-db.c'
302--- midori/midori-bookmarks-db.c 2013-09-08 10:53:32 +0000
303+++ midori/midori-bookmarks-db.c 2013-09-17 19:35:27 +0000
304@@ -25,14 +25,324 @@
305 #include <unistd.h>
306 #endif
307
308-static gboolean
309-midori_bookmarks_update_item_db (sqlite3* db,
310- KatzeItem* item);
311-
312-gint64
313-midori_bookmarks_insert_item_db (sqlite3* db,
314- KatzeItem* item,
315- gint64 parentid)
316+/**
317+ * SECTION:midory-bookmarks-db
318+ * @short_description: A #KatzeArray connected to a database
319+ * @see_also: #KatzeArray
320+ *
321+ * #MidoriBookmarksDb is a #KatzeArray specialized for database
322+ * interraction.
323+ */
324+
325+struct _MidoriBookmarksDb
326+{
327+ KatzeArray parent_instance;
328+
329+ sqlite3* db;
330+};
331+
332+struct _MidoriBookmarksDbClass
333+{
334+ KatzeArrayClass parent_class;
335+
336+ /* Signals */
337+ void
338+ (*update_item) (MidoriBookmarksDb* bookmarks,
339+ gpointer item);
340+};
341+
342+G_DEFINE_TYPE (MidoriBookmarksDb, midori_bookmarks_db, KATZE_TYPE_ARRAY);
343+
344+enum {
345+ UPDATE_ITEM,
346+
347+ LAST_SIGNAL
348+};
349+
350+static guint signals[LAST_SIGNAL];
351+
352+static void
353+_midori_bookmarks_db_add_item (KatzeArray* array,
354+ gpointer item);
355+
356+static void
357+_midori_bookmarks_db_update_item (MidoriBookmarksDb* bookmarks,
358+ gpointer item);
359+
360+static void
361+_midori_bookmarks_db_remove_item (KatzeArray* array,
362+ gpointer item);
363+
364+static void
365+_midori_bookmarks_db_move_item (KatzeArray* array,
366+ gpointer item,
367+ gint position);
368+
369+static void
370+_midori_bookmarks_db_clear (KatzeArray* array);
371+
372+static void
373+midori_bookmarks_db_finalize (GObject* object);
374+
375+static gint64
376+midori_bookmarks_db_insert_item_db (sqlite3* db,
377+ KatzeItem* item,
378+ gint64 parentid);
379+
380+static gboolean
381+midori_bookmarks_db_update_item_db (sqlite3* db,
382+ KatzeItem* item);
383+
384+static gboolean
385+midori_bookmarks_db_remove_item_db (sqlite3* db,
386+ KatzeItem* item);
387+
388+static void
389+midori_bookmarks_db_class_init (MidoriBookmarksDbClass* class)
390+{
391+ GObjectClass* gobject_class;
392+ KatzeArrayClass* katze_array_class;
393+
394+ gobject_class = G_OBJECT_CLASS (class);
395+ gobject_class->finalize = midori_bookmarks_db_finalize;
396+
397+ signals[UPDATE_ITEM] = g_signal_new (
398+ "update-item",
399+ G_TYPE_FROM_CLASS (class),
400+ (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
401+ G_STRUCT_OFFSET (MidoriBookmarksDbClass, update_item),
402+ 0,
403+ NULL,
404+ g_cclosure_marshal_VOID__POINTER,
405+ G_TYPE_NONE, 1,
406+ G_TYPE_POINTER);
407+
408+ katze_array_class = KATZE_ARRAY_CLASS (class);
409+
410+ katze_array_class->add_item = _midori_bookmarks_db_add_item;
411+ katze_array_class->remove_item = _midori_bookmarks_db_remove_item;
412+ katze_array_class->move_item = _midori_bookmarks_db_move_item;
413+ katze_array_class->clear = _midori_bookmarks_db_clear;
414+
415+ class->update_item = _midori_bookmarks_db_update_item;
416+}
417+
418+static void
419+midori_bookmarks_db_init (MidoriBookmarksDb* bookmarks)
420+{
421+ bookmarks->db = NULL;
422+
423+ katze_item_set_meta_integer (KATZE_ITEM (bookmarks), "id", 0);
424+ katze_item_set_name (KATZE_ITEM (bookmarks), _("Bookmarks"));
425+ /* g_object_ref (bookmarks); */
426+}
427+
428+static void
429+midori_bookmarks_db_finalize (GObject* object)
430+{
431+ MidoriBookmarksDb* bookmarks = MIDORI_BOOKMARKS_DB (object);
432+
433+ if (bookmarks->db)
434+ {
435+ sqlite3_close (bookmarks->db);
436+ }
437+
438+ G_OBJECT_CLASS (midori_bookmarks_db_parent_class)->finalize (object);
439+}
440+
441+/**
442+ * midori_bookmarks_db_get_item_parent:
443+ * @bookmarks: the main bookmarks array
444+ * @item: a #KatzeItem
445+ *
446+ * Internal function that find the parent of the @item thanks to its %parentid
447+ **/
448+static KatzeArray*
449+midori_bookmarks_db_get_item_parent (MidoriBookmarksDb* bookmarks,
450+ gpointer item)
451+{
452+ KatzeArray* parent;
453+ gint64 parentid;
454+
455+ parentid = katze_item_get_meta_integer (KATZE_ITEM (item), "parentid");
456+
457+ if (parentid == 0)
458+ {
459+ parent = KATZE_ARRAY (bookmarks);
460+ }
461+ else
462+ {
463+ parent = NULL;
464+ }
465+
466+ return parent;
467+}
468+
469+/**
470+ * _midori_bookmarks_db_add_item:
471+ * @array: the main bookmarks array
472+ * @item: a #KatzeItem
473+ *
474+ * Internal function that overloads the #KatzeArray %katze_array_add_item().
475+ * It relays the add item to the appropriate #KatzeArray.
476+ **/
477+static void
478+_midori_bookmarks_db_add_item (KatzeArray* array,
479+ gpointer item)
480+{
481+ MidoriBookmarksDb *bookmarks;
482+ KatzeArray* parent;
483+ KatzeArray* db_parent;
484+
485+ g_return_if_fail (IS_MIDORI_BOOKMARKS_DB (array));
486+ g_return_if_fail (KATZE_IS_ITEM (item));
487+
488+ bookmarks = MIDORI_BOOKMARKS_DB (array);
489+
490+ parent = katze_item_get_parent (KATZE_ITEM (item));
491+
492+ db_parent = midori_bookmarks_db_get_item_parent (bookmarks, item);
493+
494+ g_return_if_fail (db_parent);
495+
496+ if (parent == db_parent)
497+ {
498+ if (IS_MIDORI_BOOKMARKS_DB (parent))
499+ KATZE_ARRAY_CLASS (midori_bookmarks_db_parent_class)->update (parent);
500+ else
501+ katze_array_update (parent);
502+ return;
503+ }
504+
505+ if (IS_MIDORI_BOOKMARKS_DB (parent))
506+ KATZE_ARRAY_CLASS (midori_bookmarks_db_parent_class)->add_item (parent, item);
507+ else
508+ katze_array_add_item (parent, item);
509+}
510+
511+/**
512+ * _midori_bookmarks_db_update_item:
513+ * @array: the main bookmarks array
514+ * @item: a #KatzeItem
515+ *
516+ * Internal function that implements the %midori_bookmarks_db_update_item() post-processing.
517+ * It relays an update to the appropriate #KatzeArray.
518+ **/
519+static void
520+_midori_bookmarks_db_update_item (MidoriBookmarksDb* bookmarks,
521+ gpointer item)
522+{
523+ KatzeArray* parent;
524+
525+ g_return_if_fail (IS_MIDORI_BOOKMARKS_DB (bookmarks));
526+ g_return_if_fail (KATZE_IS_ITEM (item));
527+
528+ parent = katze_item_get_parent (KATZE_ITEM (item));
529+
530+ g_return_if_fail (parent);
531+
532+ katze_array_update (parent);
533+}
534+
535+/**
536+ * _midori_bookmarks_db_remove_item:
537+ * @array: the main bookmarks array
538+ * @item: a #KatzeItem
539+ *
540+ * Internal function that overloads the #KatzeArray %katze_array_remove_item().
541+ * It relays the remove item to the appropriate #KatzeArray.
542+ **/
543+static void
544+_midori_bookmarks_db_remove_item (KatzeArray* array,
545+ gpointer item)
546+{
547+ KatzeArray* parent;
548+
549+ g_return_if_fail (IS_MIDORI_BOOKMARKS_DB (array));
550+ g_return_if_fail (KATZE_IS_ITEM (item));
551+
552+ parent = katze_item_get_parent (KATZE_ITEM (item));
553+
554+ g_return_if_fail (parent);
555+
556+ if (IS_MIDORI_BOOKMARKS_DB (parent))
557+ KATZE_ARRAY_CLASS (midori_bookmarks_db_parent_class)->remove_item (parent, item);
558+ else
559+ katze_array_remove_item (parent, item);
560+}
561+
562+/**
563+ * _midori_bookmarks_db_move_item:
564+ * @array: the main bookmarks array
565+ * @item: a #KatzeItem
566+ * @position: the new @item position
567+ *
568+ * Internal function that overloads the #KatzeArray %katze_array_move_item().
569+ * It relays the move @item to the appropriate #KatzeArray.
570+ **/
571+static void
572+_midori_bookmarks_db_move_item (KatzeArray* array,
573+ gpointer item,
574+ gint position)
575+{
576+ MidoriBookmarksDb *bookmarks;
577+ KatzeArray* parent;
578+
579+ g_return_if_fail (IS_MIDORI_BOOKMARKS_DB (array));
580+ g_return_if_fail (KATZE_IS_ITEM (item));
581+
582+ parent = katze_item_get_parent (KATZE_ITEM (item));
583+
584+ g_return_if_fail (parent);
585+
586+ KATZE_ARRAY_CLASS (midori_bookmarks_db_parent_class)->move_item (parent, item, position);
587+}
588+
589+/**
590+ * _midori_bookmarks_db_clear:
591+ * @array: the main bookmarks array
592+ *
593+ * Internal function that overloads the #KatzeArray %katze_array_clear().
594+ * It deletes the whole bookmarks data.
595+ **/
596+static void
597+_midori_bookmarks_db_clear (KatzeArray* array)
598+{
599+ g_return_if_fail (IS_MIDORI_BOOKMARKS_DB (array));
600+
601+ g_critical ("_midori_bookmarks_db_clear: not implemented\n");
602+}
603+
604+/**
605+ * midori_bookmarks_db_signal_update_item:
606+ * @array: a #KatzeArray
607+ * @item: an item
608+ *
609+ * Notify an update of the item of the array.
610+ *
611+ **/
612+static void
613+midori_bookmarks_db_signal_update_item (MidoriBookmarksDb* array,
614+ gpointer item)
615+{
616+ g_return_if_fail (IS_MIDORI_BOOKMARKS_DB (array));
617+
618+ g_signal_emit (array, signals[UPDATE_ITEM], 0, item);
619+}
620+
621+/**
622+ * midori_bookmarks_db_insert_item_db:
623+ * @db: the #sqlite3
624+ * @item: #KatzeItem the item to insert
625+ *
626+ * Internal function that does the actual SQL INSERT of the @item in @db.
627+ *
628+ * Since: 0.5.2
629+ **/
630+static gint64
631+midori_bookmarks_db_insert_item_db (sqlite3* db,
632+ KatzeItem* item,
633+ gint64 parentid)
634 {
635 gchar* sqlcmd;
636 char* errmsg = NULL;
637@@ -70,15 +380,15 @@
638 new_parentid = g_strdup_printf ("NULL");
639
640 sqlcmd = sqlite3_mprintf (
641- "INSERT INTO bookmarks (id, parentid, title, uri, desc, toolbar, app) "
642- "VALUES (%q, %q, '%q', '%q', '%q', %d, %d)",
643- id,
644- new_parentid,
645- katze_item_get_name (item),
646- katze_str_non_null (uri),
647- katze_str_non_null (desc),
648- katze_item_get_meta_boolean (item, "toolbar"),
649- katze_item_get_meta_boolean (item, "app"));
650+ "INSERT INTO bookmarks (id, parentid, title, uri, desc, toolbar, app) "
651+ "VALUES (%q, %q, '%q', '%q', '%q', %d, %d)",
652+ id,
653+ new_parentid,
654+ katze_item_get_name (item),
655+ katze_str_non_null (uri),
656+ katze_str_non_null (desc),
657+ katze_item_get_meta_boolean (item, "toolbar"),
658+ katze_item_get_meta_boolean (item, "app"));
659
660 if (sqlite3_exec (db, sqlcmd, NULL, NULL, &errmsg) == SQLITE_OK)
661 {
662@@ -89,7 +399,7 @@
663
664 sqlite3_free (sqlcmd);
665 sqlcmd = sqlite3_mprintf (
666- "SELECT seq FROM sqlite_sequence WHERE name = 'bookmarks'");
667+ "SELECT seq FROM sqlite_sequence WHERE name = 'bookmarks'");
668
669 seq_array = katze_array_from_sqlite (db, sqlcmd);
670 if (katze_array_get_nth_item (seq_array, 0))
671@@ -115,8 +425,17 @@
672 return seq;
673 }
674
675-gboolean
676-midori_bookmarks_update_item_db (sqlite3* db,
677+/**
678+ * midori_bookmarks_db_update_item_db:
679+ * @db: the #sqlite3
680+ * @item: #KatzeItem the item to update
681+ *
682+ * Internal function that does the actual SQL UPDATE of the @item in @db.
683+ *
684+ * Since: 0.5.2
685+ **/
686+static gboolean
687+midori_bookmarks_db_update_item_db (sqlite3* db,
688 KatzeItem* item)
689 {
690 gchar* sqlcmd;
691@@ -126,7 +445,7 @@
692 gchar* id;
693
694 id = g_strdup_printf ("%" G_GINT64_FORMAT,
695- katze_item_get_meta_integer (item, "id"));
696+ katze_item_get_meta_integer (item, "id"));
697
698 if (katze_item_get_meta_integer (item, "parentid") > 0)
699 parentid = g_strdup_printf ("%" G_GINT64_FORMAT,
700@@ -135,16 +454,16 @@
701 parentid = g_strdup_printf ("NULL");
702
703 sqlcmd = sqlite3_mprintf (
704- "UPDATE bookmarks SET "
705- "parentid=%q, title='%q', uri='%q', desc='%q', toolbar=%d, app=%d "
706- "WHERE id = %q ;",
707- parentid,
708- katze_item_get_name (item),
709- katze_str_non_null (katze_item_get_uri (item)),
710- katze_str_non_null (katze_item_get_meta_string (item, "desc")),
711- katze_item_get_meta_boolean (item, "toolbar"),
712- katze_item_get_meta_boolean (item, "app"),
713- id);
714+ "UPDATE bookmarks SET "
715+ "parentid=%q, title='%q', uri='%q', desc='%q', toolbar=%d, app=%d "
716+ "WHERE id = %q ;",
717+ parentid,
718+ katze_item_get_name (item),
719+ katze_str_non_null (katze_item_get_uri (item)),
720+ katze_str_non_null (katze_item_get_meta_string (item, "desc")),
721+ katze_item_get_meta_boolean (item, "toolbar"),
722+ katze_item_get_meta_boolean (item, "app"),
723+ id);
724
725 updated = TRUE;
726 if (sqlite3_exec (db, sqlcmd, NULL, NULL, &errmsg) != SQLITE_OK)
727@@ -162,68 +481,104 @@
728 }
729
730 /**
731+ * midori_bookmarks_db_remove_item_db:
732+ * @db: the #sqlite3
733+ * @item: #KatzeItem the item to delete
734+ *
735+ * Internal function that does the actual SQL DELETE of the @item in @db.
736+ *
737+ * Since: 0.5.2
738+ **/
739+static gboolean
740+midori_bookmarks_db_remove_item_db (sqlite3* db,
741+ KatzeItem* item)
742+{
743+ char* errmsg = NULL;
744+ gchar* sqlcmd;
745+ gboolean removed = TRUE;
746+ gchar* id;
747+
748+ id = g_strdup_printf ("%" G_GINT64_FORMAT,
749+ katze_item_get_meta_integer (item, "id"));
750+
751+ sqlcmd = sqlite3_mprintf ("DELETE FROM bookmarks WHERE id = %q", id);
752+
753+ if (sqlite3_exec (db, sqlcmd, NULL, NULL, &errmsg) != SQLITE_OK)
754+ {
755+ g_printerr (_("Failed to remove bookmark item: %s\n"), errmsg);
756+ sqlite3_free (errmsg);
757+ removed = FALSE;
758+ }
759+
760+ sqlite3_free (sqlcmd);
761+ g_free (id);
762+ return removed;
763+}
764+
765+/**
766+ * midori_bookmarks_db_add_item:
767+ * @bookmarks: the main bookmark array
768+ * @item: #KatzeItem the item to update
769+ *
770+ * Adds the @item in the bookmark data base.
771+ *
772+ * Since: 0.5.2
773+ **/
774+void
775+midori_bookmarks_db_add_item (MidoriBookmarksDb* bookmarks, KatzeItem* item)
776+{
777+ g_return_if_fail (IS_MIDORI_BOOKMARKS_DB (bookmarks));
778+ g_return_if_fail (KATZE_IS_ITEM (item));
779+ g_return_if_fail (NULL == katze_item_get_meta_string (item, "id"));
780+
781+ midori_bookmarks_db_insert_item_db (bookmarks->db, item,
782+ katze_item_get_meta_integer (item, "parentid"));
783+
784+ katze_array_add_item (KATZE_ARRAY (bookmarks), item);
785+}
786+
787+/**
788 * midori_bookmarks_db_update_item:
789 * @bookmarks: the main bookmark array
790 * @item: #KatzeItem the item to update
791 *
792 * Updates the @item in the bookmark data base.
793 *
794- * Since: 0.5.5
795- **/
796-void
797-midori_array_update_item (KatzeArray* bookmarks,
798- KatzeItem* item)
799-{
800- g_return_if_fail (KATZE_IS_ARRAY (bookmarks));
801- g_return_if_fail (KATZE_IS_ITEM (item));
802- g_return_if_fail (katze_item_get_meta_string (item, "id"));
803- g_return_if_fail (0 != katze_item_get_meta_integer (item, "id"));
804-
805- sqlite3* db = g_object_get_data (G_OBJECT (bookmarks), "db");
806-
807- g_return_if_fail (db);
808-
809- midori_bookmarks_update_item_db (db, item);
810-}
811-
812-void
813-midori_bookmarks_dbtracer (void* dummy,
814- const char* query)
815-{
816- g_printerr ("%s\n", query);
817-}
818-
819-static void
820-midori_bookmarks_add_item_cb (KatzeArray* array,
821- KatzeItem* item,
822- sqlite3* db)
823-{
824- midori_bookmarks_insert_item_db (db, item,
825- katze_item_get_meta_integer (item, "parentid"));
826-}
827-
828-static void
829-midori_bookmarks_remove_item_cb (KatzeArray* array,
830- KatzeItem* item,
831- sqlite3* db)
832-{
833- gchar* sqlcmd;
834- char* errmsg = NULL;
835- gchar* id;
836-
837- id = g_strdup_printf ("%" G_GINT64_FORMAT,
838- katze_item_get_meta_integer (item, "id"));
839-
840- sqlcmd = sqlite3_mprintf ("DELETE FROM bookmarks WHERE id = %q", id);
841-
842- if (sqlite3_exec (db, sqlcmd, NULL, NULL, &errmsg) != SQLITE_OK)
843- {
844- g_printerr (_("Failed to remove bookmark item: %s\n"), errmsg);
845- sqlite3_free (errmsg);
846- }
847-
848- sqlite3_free (sqlcmd);
849- g_free (id);
850+ * Since: 0.5.2
851+ **/
852+void
853+midori_bookmarks_db_update_item (MidoriBookmarksDb* bookmarks, KatzeItem* item)
854+{
855+ g_return_if_fail (IS_MIDORI_BOOKMARKS_DB (bookmarks));
856+ g_return_if_fail (KATZE_IS_ITEM (item));
857+ g_return_if_fail (katze_item_get_meta_string (item, "id"));
858+ g_return_if_fail (0 != katze_item_get_meta_integer (item, "id"));
859+
860+ midori_bookmarks_db_update_item_db (bookmarks->db, item);
861+
862+ midori_bookmarks_db_signal_update_item (bookmarks, item);
863+}
864+
865+/**
866+ * midori_bookmarks_db_remove_item:
867+ * @bookmarks: the main bookmark array
868+ * @item: #KatzeItem the item to remove
869+ *
870+ * Removes the @item from the bookmark data base.
871+ *
872+ * Since: 0.5.2
873+ **/
874+void
875+midori_bookmarks_db_remove_item (MidoriBookmarksDb* bookmarks, KatzeItem* item)
876+{
877+ g_return_if_fail (IS_MIDORI_BOOKMARKS_DB (bookmarks));
878+ g_return_if_fail (KATZE_IS_ITEM (item));
879+ g_return_if_fail (katze_item_get_meta_string (item, "id"));
880+ g_return_if_fail (0 != katze_item_get_meta_integer (item, "id"));
881+
882+ midori_bookmarks_db_remove_item_db (bookmarks->db, item);
883+
884+ katze_array_remove_item (KATZE_ARRAY (bookmarks), item);
885 }
886
887 #define _APPEND_TO_SQL_ERRORMSG(custom_errmsg) \
888@@ -237,8 +592,8 @@
889 g_string_append (errmsg_str, custom_errmsg); \
890 } while (0)
891
892-gboolean
893-midori_bookmarks_import_from_old_db (sqlite3* db,
894+static gboolean
895+midori_bookmarks_db_import_from_old_db (sqlite3* db,
896 const gchar* oldfile,
897 gchar** errmsg)
898 {
899@@ -293,8 +648,24 @@
900 }
901 #undef _APPEND_TO_SQL_ERRORMSG
902
903-KatzeArray*
904-midori_bookmarks_new (char** errmsg)
905+static void
906+midori_bookmarks_db_dbtracer (void* dummy,
907+ const char* query)
908+{
909+ g_printerr ("%s\n", query);
910+}
911+
912+/**
913+ * midori_bookmarks_db_new:
914+ *
915+ * Initializes the bookmark data base.
916+ *
917+ * Returns: the main bookmarks array
918+ *
919+ * Since: 0.5.2
920+ **/
921+MidoriBookmarksDb*
922+midori_bookmarks_db_new (char** errmsg)
923 {
924 sqlite3* db;
925 gchar* oldfile;
926@@ -304,6 +675,7 @@
927 gchar* sql_errmsg = NULL;
928 gchar* import_errmsg = NULL;
929 KatzeArray* array;
930+ MidoriBookmarksDb* bookmarks;
931
932 g_return_val_if_fail (errmsg != NULL, NULL);
933
934@@ -321,7 +693,7 @@
935 }
936
937 if (midori_debug ("bookmarks"))
938- sqlite3_trace (db, midori_bookmarks_dbtracer, NULL);
939+ sqlite3_trace (db, midori_bookmarks_db_dbtracer, NULL);
940
941 create_stmt = /* Table structure */
942 "CREATE TABLE IF NOT EXISTS bookmarks "
943@@ -442,7 +814,7 @@
944
945 if (oldfile_exists)
946 /* import from old db */
947- if (!midori_bookmarks_import_from_old_db (db, oldfile, &import_errmsg))
948+ if (!midori_bookmarks_db_import_from_old_db (db, oldfile, &import_errmsg))
949 {
950 *errmsg = g_strdup_printf (_("Couldn't import from old database: %s\n"),
951 import_errmsg ? import_errmsg : "(err = NULL)");
952@@ -452,13 +824,11 @@
953 init_success:
954 g_free (newfile);
955 g_free (oldfile);
956- array = katze_array_new (KATZE_TYPE_ARRAY);
957- g_signal_connect (array, "add-item",
958- G_CALLBACK (midori_bookmarks_add_item_cb), db);
959- g_signal_connect (array, "remove-item",
960- G_CALLBACK (midori_bookmarks_remove_item_cb), db);
961- g_object_set_data (G_OBJECT (array), "db", db);
962- return array;
963+ bookmarks = MIDORI_BOOKMARKS_DB (g_object_new (TYPE_MIDORI_BOOKMARKS_DB, NULL));
964+ bookmarks->db = db;
965+
966+ g_object_set_data (G_OBJECT (bookmarks), "db", db);
967+ return bookmarks;
968
969 init_failed:
970 g_free (newfile);
971@@ -470,40 +840,140 @@
972 return NULL;
973 }
974
975+/**
976+ * midori_bookmarks_db_on_quit:
977+ * @bookmarks: the main bookmark array
978+ *
979+ * Delete the main bookmark array.
980+ *
981+ * Since: 0.5.2
982+ **/
983 void
984-midori_bookmarks_on_quit (KatzeArray* array)
985+midori_bookmarks_db_on_quit (MidoriBookmarksDb* bookmarks)
986 {
987- g_return_if_fail (KATZE_IS_ARRAY (array));
988+ g_return_if_fail (IS_MIDORI_BOOKMARKS_DB (bookmarks));
989
990- sqlite3* db = g_object_get_data (G_OBJECT (array), "db");
991- g_return_if_fail (db != NULL);
992- sqlite3_close (db);
993+ g_object_unref (bookmarks);
994 }
995
996+/**
997+ * midori_bookmarks_db_import_array:
998+ * @array: the main bookmark array
999+ * @array: #KatzeArray containing the items to import
1000+ * @parentid: the id of folder
1001+ *
1002+ * Imports the items of @array as childs of the folder
1003+ * identfied by @parentid.
1004+ *
1005+ * Since: 0.5.2
1006+ **/
1007 void
1008-midori_bookmarks_import_array (KatzeArray* bookmarks,
1009+midori_bookmarks_db_import_array (MidoriBookmarksDb* bookmarks,
1010 KatzeArray* array,
1011 gint64 parentid)
1012 {
1013 GList* list;
1014 KatzeItem* item;
1015
1016- if (!bookmarks)
1017- return;
1018+ g_return_if_fail (IS_MIDORI_BOOKMARKS_DB (bookmarks));
1019+ g_return_if_fail (KATZE_IS_ARRAY (array));
1020
1021 KATZE_ARRAY_FOREACH_ITEM_L (item, array, list)
1022 {
1023 katze_item_set_meta_integer (item, "parentid", parentid);
1024- katze_array_add_item (bookmarks, item);
1025+ midori_bookmarks_db_add_item (bookmarks, item);
1026 if (KATZE_IS_ARRAY (item))
1027- midori_bookmarks_import_array (bookmarks, KATZE_ARRAY (item),
1028- katze_item_get_meta_integer(item, "id"));
1029+ midori_bookmarks_db_import_array (bookmarks, KATZE_ARRAY (item),
1030+ katze_item_get_meta_integer(item, "id"));
1031 }
1032 g_list_free (list);
1033 }
1034
1035 /**
1036- * midori_array_query_recursive:
1037+ * midori_bookmarks_db_array_from_statement:
1038+ * @stmt: the sqlite returned statement
1039+ * @bookmarks: the database controller
1040+ *
1041+ * Internal function that populate a #KatzeArray by processing the @stmt
1042+ * rows identifying:
1043+ * a- if the item is already in memory
1044+ * in this case the item data is updated with retreived database content
1045+ * and the already existing item is populated in the returned #KatzeArray
1046+ * b- if the data is a folder
1047+ * a new #KatzeArray item is populated in the returned #KatzeArray and
1048+ * memorized for future use.
1049+ * c- if the data is a bookmark
1050+ * a new #KatzeItem item is populated in the returned #KatzeArray and
1051+ * memorized for furure use.
1052+ *
1053+ * Return value: the populated #KatzeArray
1054+ **/
1055+static KatzeArray*
1056+midori_bookmarks_db_array_from_statement (sqlite3_stmt* stmt,
1057+ MidoriBookmarksDb* bookmarks)
1058+{
1059+ KatzeArray *array;
1060+ gint result;
1061+ gint cols;
1062+
1063+ array = katze_array_new (KATZE_TYPE_ITEM);
1064+ cols = sqlite3_column_count (stmt);
1065+
1066+ while ((result = sqlite3_step (stmt)) == SQLITE_ROW)
1067+ {
1068+ gint i;
1069+ KatzeItem* item;
1070+ KatzeItem* found;
1071+
1072+ item = katze_item_new ();
1073+ for (i = 0; i < cols; i++)
1074+ katze_item_set_value_from_column (stmt, i, item);
1075+
1076+ if (KATZE_ITEM_IS_FOLDER (item))
1077+ {
1078+ g_object_unref (item);
1079+
1080+ item = KATZE_ITEM (katze_array_new (KATZE_TYPE_ITEM));
1081+
1082+ for (i = 0; i < cols; i++)
1083+ katze_item_set_value_from_column (stmt, i, item);
1084+ }
1085+
1086+ katze_array_add_item (array, item);
1087+ }
1088+
1089+ sqlite3_clear_bindings (stmt);
1090+ sqlite3_reset (stmt);
1091+ return array;
1092+}
1093+
1094+/**
1095+ * midori_bookmarks_db_array_from_sqlite:
1096+ * @array: the main bookmark array
1097+ * @sqlcmd: the sqlcmd to execute
1098+ *
1099+ * Internal function that process the requested @sqlcmd.
1100+ *
1101+ * Return value: a #KatzeArray on success, %NULL otherwise
1102+ **/
1103+static KatzeArray*
1104+midori_bookmarks_db_array_from_sqlite (MidoriBookmarksDb* bookmarks,
1105+ const gchar* sqlcmd)
1106+{
1107+ sqlite3_stmt* stmt;
1108+ gint result;
1109+
1110+ g_return_val_if_fail (bookmarks->db != NULL, NULL);
1111+
1112+ result = sqlite3_prepare_v2 (bookmarks->db, sqlcmd, -1, &stmt, NULL);
1113+ if (result != SQLITE_OK)
1114+ return NULL;
1115+
1116+ return midori_bookmarks_db_array_from_statement (stmt, bookmarks);
1117+}
1118+
1119+/**
1120+ * midori_bookmarks_db_query_recursive:
1121 * @array: the main bookmark array
1122 * @fields: comma separated list of fields
1123 * @condition: condition, like "folder = '%q'"
1124@@ -514,38 +984,35 @@
1125 *
1126 * Return value: a #KatzeArray on success, %NULL otherwise
1127 *
1128- * Since: 0.4.4
1129+ * Since: 0.5.2
1130 **/
1131 KatzeArray*
1132-midori_array_query_recursive (KatzeArray* bookmarks,
1133- const gchar* fields,
1134- const gchar* condition,
1135- const gchar* value,
1136- gboolean recursive)
1137+midori_bookmarks_db_query_recursive (MidoriBookmarksDb* bookmarks,
1138+ const gchar* fields,
1139+ const gchar* condition,
1140+ const gchar* value,
1141+ gboolean recursive)
1142 {
1143- sqlite3* db;
1144 gchar* sqlcmd;
1145 char* sqlcmd_value;
1146 KatzeArray* array;
1147 KatzeItem* item;
1148 GList* list;
1149
1150- g_return_val_if_fail (KATZE_IS_ARRAY (bookmarks), NULL);
1151+ g_return_val_if_fail (IS_MIDORI_BOOKMARKS_DB (bookmarks), NULL);
1152 g_return_val_if_fail (fields, NULL);
1153 g_return_val_if_fail (condition, NULL);
1154- db = g_object_get_data (G_OBJECT (bookmarks), "db");
1155- g_return_val_if_fail (db != NULL, NULL);
1156
1157 sqlcmd = g_strdup_printf ("SELECT %s FROM bookmarks WHERE %s "
1158 "ORDER BY (uri='') ASC, title DESC", fields, condition);
1159 if (strstr (condition, "%q"))
1160 {
1161 sqlcmd_value = sqlite3_mprintf (sqlcmd, value ? value : "");
1162- array = katze_array_from_sqlite (db, sqlcmd_value);
1163+ array = midori_bookmarks_db_array_from_sqlite (bookmarks, sqlcmd_value);
1164 sqlite3_free (sqlcmd_value);
1165 }
1166 else
1167- array = katze_array_from_sqlite (db, sqlcmd);
1168+ array = midori_bookmarks_db_array_from_sqlite (bookmarks, sqlcmd);
1169 g_free (sqlcmd);
1170
1171 if (!recursive)
1172@@ -556,9 +1023,9 @@
1173 if (KATZE_ITEM_IS_FOLDER (item))
1174 {
1175 gchar* parentid = g_strdup_printf ("%" G_GINT64_FORMAT,
1176- katze_item_get_meta_integer (item, "id"));
1177- KatzeArray* subarray = midori_array_query_recursive (bookmarks,
1178- fields, "parentid=%q", parentid, TRUE);
1179+ katze_item_get_meta_integer (item, "id"));
1180+ KatzeArray* subarray = midori_bookmarks_db_query_recursive (bookmarks,
1181+ fields, "parentid=%q", parentid, TRUE);
1182 KatzeItem* subitem;
1183 GList* sublist;
1184
1185@@ -576,21 +1043,21 @@
1186 }
1187
1188 static gint64
1189-count_from_sqlite (sqlite3* db,
1190- const gchar* sqlcmd)
1191+midori_bookmarks_db_count_from_sqlite (sqlite3* db,
1192+ const gchar* sqlcmd)
1193 {
1194 gint64 count = -1;
1195 sqlite3_stmt* stmt;
1196 gint result;
1197-
1198+
1199 result = sqlite3_prepare_v2 (db, sqlcmd, -1, &stmt, NULL);
1200 if (result != SQLITE_OK)
1201 return -1;
1202
1203 g_assert (sqlite3_column_count (stmt) == 1);
1204-
1205+
1206 if ((result = sqlite3_step (stmt)) == SQLITE_ROW)
1207- count = sqlite3_column_int64(stmt, 0);
1208+ count = sqlite3_column_int64(stmt, 0);
1209
1210 sqlite3_clear_bindings (stmt);
1211 sqlite3_reset (stmt);
1212@@ -599,14 +1066,13 @@
1213 }
1214
1215 static gint64
1216-midori_array_count_recursive_by_id (KatzeArray* bookmarks,
1217- const gchar* condition,
1218- const gchar* value,
1219- gint64 id,
1220- gboolean recursive)
1221+midori_bookmarks_db_count_recursive_by_id (MidoriBookmarksDb* bookmarks,
1222+ const gchar* condition,
1223+ const gchar* value,
1224+ gint64 id,
1225+ gboolean recursive)
1226 {
1227 gint64 count = -1;
1228- sqlite3* db;
1229 gchar* sqlcmd;
1230 char* sqlcmd_value;
1231 sqlite3_stmt* stmt;
1232@@ -615,30 +1081,29 @@
1233 GList* iter_ids;
1234
1235 g_return_val_if_fail (condition, -1);
1236- g_return_val_if_fail (KATZE_IS_ARRAY (bookmarks), -1);
1237- db = g_object_get_data (G_OBJECT (bookmarks), "db");
1238- g_return_val_if_fail (db != NULL, -1);
1239+ g_return_val_if_fail (MIDORI_BOOKMARKS_DB (bookmarks), -1);
1240+ g_return_val_if_fail (bookmarks->db != NULL, -1);
1241
1242 g_assert(!strstr("parentid", condition));
1243
1244 if (id > 0)
1245- sqlcmd = g_strdup_printf ("SELECT COUNT(*) FROM bookmarks "
1246- "WHERE parentid = %" G_GINT64_FORMAT " AND %s",
1247- id,
1248- condition);
1249+ sqlcmd = g_strdup_printf ("SELECT COUNT(*) FROM bookmarks "
1250+ "WHERE parentid = %" G_GINT64_FORMAT " AND %s",
1251+ id,
1252+ condition);
1253 else
1254- sqlcmd = g_strdup_printf ("SELECT COUNT(*) FROM bookmarks "
1255- "WHERE parentid IS NULL AND %s ",
1256- condition);
1257+ sqlcmd = g_strdup_printf ("SELECT COUNT(*) FROM bookmarks "
1258+ "WHERE parentid IS NULL AND %s ",
1259+ condition);
1260
1261 if (strstr (condition, "%q"))
1262 {
1263 sqlcmd_value = sqlite3_mprintf (sqlcmd, value ? value : "");
1264- count = count_from_sqlite (db, sqlcmd_value);
1265+ count = midori_bookmarks_db_count_from_sqlite (bookmarks->db, sqlcmd_value);
1266 sqlite3_free (sqlcmd_value);
1267 }
1268 else
1269- count = count_from_sqlite (db, sqlcmd);
1270+ count = midori_bookmarks_db_count_from_sqlite (bookmarks->db, sqlcmd);
1271
1272 g_free (sqlcmd);
1273
1274@@ -648,28 +1113,28 @@
1275 ids = NULL;
1276
1277 if (id > 0)
1278- sqlcmd_value = sqlite3_mprintf (
1279- "SELECT id FROM bookmarks "
1280- "WHERE parentid = %" G_GINT64_FORMAT " AND uri = ''", id);
1281+ sqlcmd_value = sqlite3_mprintf (
1282+ "SELECT id FROM bookmarks "
1283+ "WHERE parentid = %" G_GINT64_FORMAT " AND uri = ''", id);
1284 else
1285- sqlcmd_value = sqlite3_mprintf (
1286- "SELECT id FROM bookmarks "
1287- "WHERE parentid IS NULL AND uri = ''");
1288+ sqlcmd_value = sqlite3_mprintf (
1289+ "SELECT id FROM bookmarks "
1290+ "WHERE parentid IS NULL AND uri = ''");
1291
1292- if (sqlite3_prepare_v2 (db, sqlcmd_value, -1, &stmt, NULL) == SQLITE_OK)
1293+ if (sqlite3_prepare_v2 (bookmarks->db, sqlcmd_value, -1, &stmt, NULL) == SQLITE_OK)
1294 {
1295- g_assert (sqlite3_column_count (stmt) == 1);
1296-
1297- if ((result = sqlite3_step (stmt)) == SQLITE_ROW)
1298- {
1299- gint64* pid = g_new (gint64, 1);
1300-
1301- *pid = sqlite3_column_int64(stmt, 0);
1302- ids = g_list_append (ids, pid);
1303- }
1304-
1305- sqlite3_clear_bindings (stmt);
1306- sqlite3_reset (stmt);
1307+ g_assert (sqlite3_column_count (stmt) == 1);
1308+
1309+ if ((result = sqlite3_step (stmt)) == SQLITE_ROW)
1310+ {
1311+ gint64* pid = g_new (gint64, 1);
1312+
1313+ *pid = sqlite3_column_int64(stmt, 0);
1314+ ids = g_list_append (ids, pid);
1315+ }
1316+
1317+ sqlite3_clear_bindings (stmt);
1318+ sqlite3_reset (stmt);
1319 }
1320
1321 sqlite3_free (sqlcmd_value);
1322@@ -677,29 +1142,29 @@
1323 iter_ids = ids;
1324 while (iter_ids)
1325 {
1326- gint64 sub_count = midori_array_count_recursive_by_id (bookmarks,
1327- condition,
1328- value,
1329- *(gint64*)(iter_ids->data),
1330- recursive);
1331-
1332- if (sub_count < 0)
1333- {
1334- g_list_free_full (ids, g_free);
1335- return -1;
1336- }
1337-
1338- count += sub_count;
1339- iter_ids = g_list_next (iter_ids);
1340+ gint64 sub_count = midori_bookmarks_db_count_recursive_by_id (bookmarks,
1341+ condition,
1342+ value,
1343+ *(gint64*)(iter_ids->data),
1344+ recursive);
1345+
1346+ if (sub_count < 0)
1347+ {
1348+ g_list_free_full (ids, g_free);
1349+ return -1;
1350+ }
1351+
1352+ count += sub_count;
1353+ iter_ids = g_list_next (iter_ids);
1354 }
1355-
1356+
1357 g_list_free_full (ids, g_free);
1358 return count;
1359 }
1360
1361 /**
1362- * midori_array_count_recursive:
1363- * @array: the main bookmark array
1364+ * midori_bookmarks_db_count_recursive:
1365+ * @bookmarks: the main bookmark array
1366 * @condition: condition, like "folder = '%q'"
1367 * @value: a value to be inserted if @condition contains %q
1368 * @recursive: if %TRUE include children
1369@@ -709,19 +1174,19 @@
1370 * Since: 0.5.2
1371 **/
1372 gint64
1373-midori_array_count_recursive (KatzeArray* bookmarks,
1374- const gchar* condition,
1375- const gchar* value,
1376- KatzeItem* folder,
1377- gboolean recursive)
1378+midori_bookmarks_db_count_recursive (MidoriBookmarksDb* bookmarks,
1379+ const gchar* condition,
1380+ const gchar* value,
1381+ KatzeItem* folder,
1382+ gboolean recursive)
1383 {
1384 gint64 id = -1;
1385
1386 g_return_val_if_fail (!folder || KATZE_ITEM_IS_FOLDER (folder), -1);
1387-
1388+
1389 id = folder ? katze_item_get_meta_integer (folder, "id") : 0;
1390
1391- return midori_array_count_recursive_by_id (bookmarks, condition,
1392- value, id,
1393- recursive);
1394+ return midori_bookmarks_db_count_recursive_by_id (bookmarks, condition,
1395+ value, id,
1396+ recursive);
1397 }
1398
1399=== modified file 'midori/midori-bookmarks-db.h'
1400--- midori/midori-bookmarks-db.h 2013-09-08 10:53:32 +0000
1401+++ midori/midori-bookmarks-db.h 2013-09-17 19:35:27 +0000
1402@@ -16,33 +16,60 @@
1403 #include <sqlite3.h>
1404 #include <katze/katze.h>
1405
1406-KatzeArray*
1407-midori_bookmarks_new (char** errmsg);
1408-
1409-void
1410-midori_bookmarks_on_quit (KatzeArray* array);
1411-
1412-void
1413-midori_array_update_item (KatzeArray* bookmarks, KatzeItem* item);
1414-
1415-void
1416-midori_bookmarks_import_array (KatzeArray* bookmarks,
1417- KatzeArray* array,
1418- gint64 parentid);
1419-
1420-KatzeArray*
1421-midori_array_query_recursive (KatzeArray* bookmarks,
1422- const gchar* fields,
1423- const gchar* condition,
1424- const gchar* value,
1425- gboolean recursive);
1426+G_BEGIN_DECLS
1427+
1428+#define TYPE_MIDORI_BOOKMARKS_DB \
1429+ (midori_bookmarks_db_get_type ())
1430+#define MIDORI_BOOKMARKS_DB(obj) \
1431+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_MIDORI_BOOKMARKS_DB, MidoriBookmarksDb))
1432+#define MIDORI_BOOKMARKS_DB_CLASS(klass) \
1433+ (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_MIDORI_BOOKMARKS_DB, MidoriBookmarksDbClass))
1434+#define IS_MIDORI_BOOKMARKS_DB(obj) \
1435+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_MIDORI_BOOKMARKS_DB))
1436+#define IS_MIDORI_BOOKMARKS_DB_CLASS(klass) \
1437+ (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_MIDORI_BOOKMARKS_DB))
1438+#define MIDORI_BOOKMARKS_DB_GET_CLASS(obj) \
1439+ (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_MIDORI_BOOKMARKS_DB, MidoriBookmarksDbClass))
1440+
1441+typedef struct _MidoriBookmarksDb MidoriBookmarksDb;
1442+typedef struct _MidoriBookmarksDbClass MidoriBookmarksDbClass;
1443+
1444+GType
1445+midori_bookmarks_db_get_type (void) G_GNUC_CONST;
1446+
1447+MidoriBookmarksDb*
1448+midori_bookmarks_db_new (char** errmsg);
1449+
1450+void
1451+midori_bookmarks_db_on_quit (MidoriBookmarksDb* array);
1452+
1453+void
1454+midori_bookmarks_db_add_item (MidoriBookmarksDb* bookmarks, KatzeItem* item);
1455+
1456+void
1457+midori_bookmarks_db_update_item (MidoriBookmarksDb* bookmarks, KatzeItem* item);
1458+
1459+void
1460+midori_bookmarks_db_remove_item (MidoriBookmarksDb* bookmarks, KatzeItem* item);
1461+
1462+void
1463+midori_bookmarks_db_import_array (MidoriBookmarksDb* bookmarks,
1464+ KatzeArray* array,
1465+ gint64 parentid);
1466+
1467+KatzeArray*
1468+midori_bookmarks_db_query_recursive (MidoriBookmarksDb* bookmarks,
1469+ const gchar* fields,
1470+ const gchar* condition,
1471+ const gchar* value,
1472+ gboolean recursive);
1473
1474 gint64
1475-midori_array_count_recursive (KatzeArray* bookmarks,
1476- const gchar* condition,
1477- const gchar* value,
1478- KatzeItem* folder,
1479- gboolean recursive);
1480+midori_bookmarks_db_count_recursive (MidoriBookmarksDb* bookmarks,
1481+ const gchar* condition,
1482+ const gchar* value,
1483+ KatzeItem* folder,
1484+ gboolean recursive);
1485
1486 gint64
1487 midori_bookmarks_insert_item_db (sqlite3* db,
1488
1489=== modified file 'midori/midori-browser.c'
1490--- midori/midori-browser.c 2013-09-16 22:00:41 +0000
1491+++ midori/midori-browser.c 2013-09-17 19:35:27 +0000
1492@@ -87,7 +87,7 @@
1493
1494 MidoriWebSettings* settings;
1495 KatzeArray* proxy_array;
1496- KatzeArray* bookmarks;
1497+ MidoriBookmarksDb* bookmarks;
1498 KatzeArray* trash;
1499 KatzeArray* search_engines;
1500 KatzeArray* history;
1501@@ -195,8 +195,8 @@
1502 GtkToolbarStyle style);
1503
1504 static void
1505-midori_browser_set_bookmarks (MidoriBrowser* browser,
1506- KatzeArray* bookmarks);
1507+midori_browser_set_bookmarks (MidoriBrowser* browser,
1508+ MidoriBookmarksDb* bookmarks);
1509
1510 static void
1511 midori_browser_add_speed_dial (MidoriBrowser* browser);
1512@@ -863,7 +863,7 @@
1513 }
1514
1515 static GtkWidget*
1516-midori_bookmark_folder_button_new (KatzeArray* array,
1517+midori_bookmark_folder_button_new (MidoriBookmarksDb* array,
1518 gint64 selected_parentid)
1519 {
1520 GtkTreeStore* model;
1521@@ -1231,18 +1231,9 @@
1522 katze_item_set_meta_integer (bookmark, "parentid", selected);
1523
1524 if (new_bookmark)
1525- katze_array_add_item (browser->bookmarks, bookmark);
1526+ midori_bookmarks_db_add_item (browser->bookmarks, bookmark);
1527 else
1528- {
1529- midori_array_update_item (browser->bookmarks, bookmark);
1530- midori_browser_update_history (bookmark, "bookmark", "modify");
1531-
1532- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check_toolbar)))
1533- if (!gtk_widget_get_visible (browser->bookmarkbar))
1534- _action_set_active (browser, "Bookmarkbar", TRUE);
1535- if (gtk_widget_get_visible (browser->bookmarkbar))
1536- midori_bookmarkbar_populate (browser);
1537- }
1538+ midori_bookmarks_db_update_item (browser->bookmarks, bookmark);
1539
1540 return_status = TRUE;
1541 }
1542@@ -2545,7 +2536,7 @@
1543 "bookmarks",
1544 "Bookmarks",
1545 "The bookmarks folder, containing all bookmarks",
1546- KATZE_TYPE_ARRAY,
1547+ TYPE_MIDORI_BOOKMARKS_DB,
1548 G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
1549
1550 /**
1551@@ -3273,8 +3264,8 @@
1552 else
1553 condition = "parentid = %q";
1554
1555- bookmarks = midori_array_query_recursive (browser->bookmarks,
1556- "id, title, parentid, uri, app, pos_panel, pos_bar", condition, id, FALSE);
1557+ bookmarks = midori_bookmarks_db_query_recursive (browser->bookmarks,
1558+ "id, title, parentid, uri, app, pos_panel, pos_bar", condition, id, FALSE);
1559 if (!bookmarks)
1560 return FALSE;
1561
1562@@ -4308,7 +4299,7 @@
1563 KatzeItem* item;
1564
1565 item = (KatzeItem*)g_object_get_data (G_OBJECT (menuitem), "KatzeItem");
1566- katze_array_remove_item (browser->bookmarks, item);
1567+ midori_bookmarks_db_remove_item (browser->bookmarks, item);
1568 }
1569
1570 static void
1571@@ -4320,7 +4311,7 @@
1572 MidoriContextAction* menu = midori_context_action_new ("BookmarkContextMenu", NULL, NULL, NULL);
1573 if (KATZE_ITEM_IS_FOLDER (item))
1574 {
1575- gint child_bookmarks_count = midori_array_count_recursive (browser->bookmarks,
1576+ gint child_bookmarks_count = midori_bookmarks_db_count_recursive (browser->bookmarks,
1577 "uri <> ''", NULL, item, FALSE);
1578
1579 GtkAction* action = gtk_action_new ("BookmarkOpenAllTabs", _("Open all in _Tabs"), NULL, STOCK_TAB_NEW);
1580@@ -4590,8 +4581,7 @@
1581 if (error)
1582 g_error_free (error);
1583 }
1584- midori_bookmarks_import_array (browser->bookmarks, bookmarks, selected);
1585-
1586+ midori_bookmarks_db_import_array (browser->bookmarks, bookmarks, selected);
1587 g_object_unref (bookmarks);
1588 g_free (path);
1589 }
1590@@ -4645,7 +4635,7 @@
1591 return;
1592
1593 error = NULL;
1594- bookmarks = midori_array_query_recursive (browser->bookmarks,
1595+ bookmarks = midori_bookmarks_db_query_recursive (browser->bookmarks,
1596 "*", "parentid IS NULL", NULL, TRUE);
1597 if (!midori_array_to_file (bookmarks, path, format, &error))
1598 {
1599@@ -7060,6 +7050,16 @@
1600 }
1601
1602 static void
1603+midori_bookmarkbar_update_item_cb (KatzeArray* bookmarks,
1604+ KatzeItem* item,
1605+ MidoriBrowser* browser)
1606+{
1607+ if (gtk_widget_get_visible (browser->bookmarkbar))
1608+ midori_bookmarkbar_populate (browser);
1609+ midori_browser_update_history (item, "bookmark", "modify");
1610+}
1611+
1612+static void
1613 midori_bookmarkbar_remove_item_cb (KatzeArray* bookmarks,
1614 KatzeItem* item,
1615 MidoriBrowser* browser)
1616@@ -7091,8 +7091,8 @@
1617 gtk_toolbar_insert (GTK_TOOLBAR (browser->bookmarkbar),
1618 gtk_separator_tool_item_new (), -1);
1619
1620- array = midori_array_query_recursive (browser->bookmarks,
1621- "id, parentid, title, uri, desc, app, toolbar, pos_panel, pos_bar", "toolbar = 1", NULL, FALSE);
1622+ array = midori_bookmarks_db_query_recursive (browser->bookmarks,
1623+ "id, parentid, title, uri, desc, app, toolbar, pos_panel, pos_bar", "toolbar = 1", NULL, FALSE);
1624 if (!array)
1625 {
1626 _action_set_sensitive (browser, "BookmarkAdd", FALSE);
1627@@ -7132,7 +7132,7 @@
1628
1629 static void
1630 midori_browser_set_bookmarks (MidoriBrowser* browser,
1631- KatzeArray* bookmarks)
1632+ MidoriBookmarksDb* bookmarks)
1633 {
1634 MidoriWebSettings* settings;
1635
1636@@ -7141,6 +7141,8 @@
1637 g_signal_handlers_disconnect_by_func (browser->bookmarks,
1638 midori_bookmarkbar_add_item_cb, browser);
1639 g_signal_handlers_disconnect_by_func (browser->bookmarks,
1640+ midori_bookmarkbar_update_item_cb, browser);
1641+ g_signal_handlers_disconnect_by_func (browser->bookmarks,
1642 midori_bookmarkbar_remove_item_cb, browser);
1643 }
1644
1645@@ -7174,6 +7176,8 @@
1646 g_object_notify (G_OBJECT (settings), "show-bookmarkbar");
1647 g_signal_connect_after (bookmarks, "add-item",
1648 G_CALLBACK (midori_bookmarkbar_add_item_cb), browser);
1649+ g_signal_connect_after (bookmarks, "update-item",
1650+ G_CALLBACK (midori_bookmarkbar_update_item_cb), browser);
1651 g_signal_connect_after (bookmarks, "remove-item",
1652 G_CALLBACK (midori_bookmarkbar_remove_item_cb), browser);
1653 }
1654
1655=== modified file 'midori/midori-frontend.c'
1656--- midori/midori-frontend.c 2013-09-08 11:09:40 +0000
1657+++ midori/midori-frontend.c 2013-09-17 19:35:27 +0000
1658@@ -487,9 +487,9 @@
1659 }
1660 g_free (uri);
1661
1662- KatzeArray* bookmarks;
1663+ MidoriBookmarksDb* bookmarks;
1664 gchar* errmsg = NULL;
1665- if (!(bookmarks = midori_bookmarks_new (&errmsg)))
1666+ if (!(bookmarks = midori_bookmarks_db_new (&errmsg)))
1667 {
1668 g_string_append_printf (error_messages,
1669 _("Bookmarks couldn't be loaded: %s\n"), errmsg);
1670@@ -596,11 +596,11 @@
1671 midori_normal_app_on_quit (MidoriApp* app)
1672 {
1673 MidoriWebSettings* settings = katze_object_get_object (app, "settings");
1674- KatzeArray* bookmarks = katze_object_get_object (app, "bookmarks");
1675+ MidoriBookmarksDb* bookmarks = katze_object_get_object (app, "bookmarks");
1676 KatzeArray* history = katze_object_get_object (app, "history");
1677
1678 g_object_notify (G_OBJECT (settings), "load-on-startup");
1679- midori_bookmarks_on_quit (bookmarks);
1680+ midori_bookmarks_db_on_quit (bookmarks);
1681 midori_history_on_quit (history, settings);
1682 midori_private_data_on_quit (settings);
1683
1684
1685=== modified file 'panels/midori-bookmarks.c'
1686--- panels/midori-bookmarks.c 2013-09-08 11:09:40 +0000
1687+++ panels/midori-bookmarks.c 2013-09-17 19:35:27 +0000
1688@@ -45,7 +45,7 @@
1689 GtkWidget* delete;
1690 GtkWidget* treeview;
1691 MidoriApp* app;
1692- KatzeArray* array;
1693+ MidoriBookmarksDb* bookmarks_db;
1694
1695 gint filter_timeout;
1696 gchar* filter;
1697@@ -125,6 +125,7 @@
1698 return STOCK_BOOKMARKS;
1699 }
1700
1701+#if 0 /* Make sure the following function is never used */
1702 /* TODO: Function never used */
1703 void
1704 midori_bookmarks_export_array_db (sqlite3* db,
1705@@ -138,7 +139,7 @@
1706 gchar* parent_id;
1707
1708 parent_id = g_strdup_printf ("%" G_GINT64_FORMAT, parentid);
1709- if (!(root_array = midori_array_query_recursive (array, "*", "parentid = %q", parent_id, FALSE)))
1710+ if (!(root_array = midori_bookmarks_db_query_recursive (array, "*", "parentid = %q", parent_id, FALSE)))
1711 {
1712 g_free (parent_id);
1713 return;
1714@@ -160,6 +161,7 @@
1715 g_free (parent_id);
1716 g_list_free (list);
1717 }
1718+#endif /* 0 */
1719
1720 static KatzeArray*
1721 midori_bookmarks_read_from_db (MidoriBookmarks* bookmarks,
1722@@ -169,21 +171,21 @@
1723 KatzeArray* array;
1724
1725 if (keyword && *keyword)
1726- array = midori_array_query_recursive (bookmarks->array,
1727- "id, parentid, title, uri, desc, app, toolbar, pos_panel, pos_bar", "title LIKE '%%%q%%'", keyword, FALSE);
1728+ array = midori_bookmarks_db_query_recursive (bookmarks->bookmarks_db,
1729+ "id, parentid, title, uri, desc, app, toolbar, pos_panel, pos_bar", "title LIKE '%%%q%%'", keyword, FALSE);
1730 else
1731 {
1732 if (parentid > 0)
1733 {
1734 gchar* parent_id = g_strdup_printf ("%" G_GINT64_FORMAT, parentid);
1735- array = midori_array_query_recursive (bookmarks->array,
1736- "id, parentid, title, uri, desc, app, toolbar, pos_panel, pos_bar", "parentid = %q", parent_id, FALSE);
1737+ array = midori_bookmarks_db_query_recursive (bookmarks->bookmarks_db,
1738+ "id, parentid, title, uri, desc, app, toolbar, pos_panel, pos_bar", "parentid = %q", parent_id, FALSE);
1739
1740 g_free (parent_id);
1741 }
1742 else
1743- array = midori_array_query_recursive (bookmarks->array,
1744- "id, parentid, title, uri, desc, app, toolbar, pos_panel, pos_bar", "parentid IS NULL", NULL, FALSE);
1745+ array = midori_bookmarks_db_query_recursive (bookmarks->bookmarks_db,
1746+ "id, parentid, title, uri, desc, app, toolbar, pos_panel, pos_bar", "parentid IS NULL", NULL, FALSE);
1747 }
1748 return array ? array : katze_array_new (KATZE_TYPE_ITEM);
1749 }
1750@@ -274,9 +276,9 @@
1751 else
1752 parentid = 0;
1753
1754- katze_array_remove_item (bookmarks->array, item);
1755 katze_item_set_meta_integer (item, "parentid", parentid);
1756- katze_array_add_item (bookmarks->array, item);
1757+
1758+ midori_bookmarks_db_update_item (bookmarks->bookmarks_db, item);
1759
1760 g_object_unref (item);
1761 if (new_parent)
1762@@ -416,9 +418,9 @@
1763
1764 if (KATZE_ITEM_IS_FOLDER (item))
1765 {
1766- gint child_folders_count = midori_array_count_recursive (bookmarks->array,
1767+ gint child_folders_count = midori_bookmarks_db_count_recursive (bookmarks->bookmarks_db,
1768 "uri = ''", NULL, item, FALSE);
1769- gint child_bookmarks_count = midori_array_count_recursive (bookmarks->array,
1770+ gint child_bookmarks_count = midori_bookmarks_db_count_recursive (bookmarks->bookmarks_db,
1771 "uri <> ''", NULL, item, FALSE);
1772 gchar* child_folders_str = midori_bookmarks_statusbar_subfolders_str (child_folders_count);
1773 gchar* child_bookmarks_str = midori_bookmarks_statusbar_bookmarks_str (child_bookmarks_count);
1774@@ -451,9 +453,9 @@
1775 }
1776 else
1777 {
1778- gint child_folders_count = midori_array_count_recursive (bookmarks->array,
1779+ gint child_folders_count = midori_bookmarks_db_count_recursive (bookmarks->bookmarks_db,
1780 "uri = ''", NULL, NULL, FALSE);
1781- gint child_bookmarks_count = midori_array_count_recursive (bookmarks->array,
1782+ gint child_bookmarks_count = midori_bookmarks_db_count_recursive (bookmarks->bookmarks_db,
1783 "uri <> ''", NULL, NULL, FALSE);
1784 gchar* child_folders_str = midori_bookmarks_statusbar_subfolders_str (child_folders_count);
1785 gchar* child_bookmarks_str = midori_bookmarks_statusbar_bookmarks_str (child_bookmarks_count);
1786@@ -499,10 +501,10 @@
1787
1788 /* Manually remove the iter and block clearing the treeview */
1789 gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
1790- g_signal_handlers_block_by_func (bookmarks->array,
1791+ g_signal_handlers_block_by_func (bookmarks->bookmarks_db,
1792 midori_bookmarks_remove_item_cb, bookmarks);
1793- katze_array_remove_item (bookmarks->array, item);
1794- g_signal_handlers_unblock_by_func (bookmarks->array,
1795+ midori_bookmarks_db_remove_item (bookmarks->bookmarks_db, item);
1796+ g_signal_handlers_unblock_by_func (bookmarks->bookmarks_db,
1797 midori_bookmarks_remove_item_cb, bookmarks);
1798 g_object_unref (item);
1799 }
1800@@ -585,9 +587,9 @@
1801 GtkTreeModel* model;
1802
1803 model = gtk_tree_view_get_model (GTK_TREE_VIEW (bookmarks->treeview));
1804- if (bookmarks->array)
1805+ if (bookmarks->bookmarks_db)
1806 {
1807- g_object_unref (bookmarks->array);
1808+ g_object_unref (bookmarks->bookmarks_db);
1809 gtk_tree_store_clear (GTK_TREE_STORE (model));
1810 }
1811 katze_assign (bookmarks->app, app);
1812@@ -595,13 +597,13 @@
1813 return;
1814
1815 g_object_ref (app);
1816- bookmarks->array = katze_object_get_object (app, "bookmarks");
1817+ bookmarks->bookmarks_db = katze_object_get_object (app, "bookmarks");
1818 midori_bookmarks_read_from_db_to_model (bookmarks, GTK_TREE_STORE (model), NULL, 0, NULL);
1819- g_signal_connect_after (bookmarks->array, "add-item",
1820- G_CALLBACK (midori_bookmarks_add_item_cb), bookmarks);
1821- g_signal_connect (bookmarks->array, "remove-item",
1822+ g_signal_connect_after (bookmarks->bookmarks_db, "add-item",
1823+ G_CALLBACK (midori_bookmarks_add_item_cb), bookmarks);
1824+ g_signal_connect (bookmarks->bookmarks_db, "remove-item",
1825 G_CALLBACK (midori_bookmarks_remove_item_cb), bookmarks);
1826- g_signal_connect (bookmarks->array, "update",
1827+ g_signal_connect (bookmarks->bookmarks_db, "update",
1828 G_CALLBACK (midori_bookmarks_update_cb), bookmarks);
1829 g_signal_connect_after (model, "row-changed",
1830 G_CALLBACK (midori_bookmarks_row_changed_cb),
1831@@ -835,7 +837,7 @@
1832 menu = gtk_menu_new ();
1833 if (KATZE_ITEM_IS_FOLDER (item))
1834 {
1835- gint child_bookmarks_count = midori_array_count_recursive (bookmarks->array,
1836+ gint child_bookmarks_count = midori_bookmarks_db_count_recursive (bookmarks->bookmarks_db,
1837 "uri <> ''", NULL, item, FALSE);
1838
1839 midori_bookmarks_popup_item (menu,
1840
1841=== modified file 'tests/bookmarks.c'
1842--- tests/bookmarks.c 2012-11-25 15:37:41 +0000
1843+++ tests/bookmarks.c 2013-09-17 19:35:27 +0000
1844@@ -10,11 +10,11 @@
1845 */
1846
1847 #include "midori.h"
1848-#include "panels/midori-bookmarks.h"
1849+#include "midori-bookmarks-db.h"
1850
1851 typedef struct
1852 {
1853- KatzeArray* db_bookmarks;
1854+ MidoriBookmarksDb* db_bookmarks;
1855 KatzeArray* test_bookmarks;
1856 } BookmarksFixture;
1857
1858@@ -37,7 +37,7 @@
1859 KatzeArray* folder;
1860 gchar *errmsg = NULL;
1861
1862- if (!(fixture->db_bookmarks = midori_bookmarks_new (&errmsg)))
1863+ if (!(fixture->db_bookmarks = midori_bookmarks_db_new (&errmsg)))
1864 g_error ("Bookmarks couldn't be loaded: %s\n", errmsg);
1865 g_assert (errmsg == NULL);
1866 g_assert (g_object_get_data (G_OBJECT (fixture->db_bookmarks), "db"));
1867@@ -84,8 +84,8 @@
1868 fixture_teardown (BookmarksFixture* fixture,
1869 const TestParameters *params)
1870 {
1871- midori_bookmarks_on_quit (fixture->db_bookmarks);
1872- g_object_unref (fixture->db_bookmarks);
1873+ midori_bookmarks_db_on_quit (fixture->db_bookmarks);
1874+ /* g_object_unref (fixture->db_bookmarks); */
1875 g_object_unref (fixture->test_bookmarks);
1876 }
1877
1878@@ -112,7 +112,7 @@
1879 /* NB: assumes "title" is unique in a set */
1880 static void
1881 compare_test_and_db (KatzeArray* test_bookmarks,
1882- KatzeArray* db_bookmarks,
1883+ MidoriBookmarksDb* db_bookmarks,
1884 gboolean verbose)
1885 {
1886 KatzeArray* db_items;
1887@@ -127,7 +127,7 @@
1888 g_print ("----------\n");
1889 }
1890
1891- db_items = midori_array_query_recursive (db_bookmarks,
1892+ db_items = midori_bookmarks_db_query_recursive (db_bookmarks,
1893 "*", "title='%q'", katze_item_get_name (test_item), FALSE);
1894
1895 /* FIXME g_assert_cmpint (katze_array_get_length (db_items), ==, 1); */
1896@@ -142,28 +142,33 @@
1897 }
1898
1899 static void
1900+print_bookmarks (KatzeArray* test_bookmarks)
1901+{
1902+ KatzeItem* item;
1903+ GList* list;
1904+ KATZE_ARRAY_FOREACH_ITEM_L (item, test_bookmarks, list)
1905+ {
1906+ print_bookmark (item);
1907+ g_print ("----------\n");
1908+
1909+ if (KATZE_ITEM_IS_FOLDER(item))
1910+ print_bookmarks (KATZE_ARRAY (item));
1911+ }
1912+ g_list_free (list);
1913+}
1914+
1915+static void
1916 insert_bookmarks (KatzeArray* test_bookmarks,
1917- KatzeArray* db_bookmarks,
1918+ MidoriBookmarksDb* db_bookmarks,
1919 gboolean verbose)
1920 {
1921- KatzeItem* item;
1922- GList* list;
1923- sqlite3 *db = g_object_get_data (G_OBJECT (db_bookmarks), "db");
1924
1925- KATZE_ARRAY_FOREACH_ITEM_L (item, test_bookmarks, list)
1926+ if (verbose)
1927 {
1928- if (verbose)
1929- {
1930- print_bookmark (item);
1931- g_print ("----------\n");
1932- }
1933-
1934- midori_bookmarks_insert_item_db (db, item, 0);
1935-
1936- if (KATZE_ITEM_IS_FOLDER(item))
1937- insert_bookmarks (KATZE_ARRAY (item), db_bookmarks, verbose);
1938+ print_bookmarks (test_bookmarks);
1939 }
1940- g_list_free (list);
1941+
1942+ midori_bookmarks_db_import_array (db_bookmarks, test_bookmarks, 0);
1943 }
1944
1945 static void

Subscribers

People subscribed via source and target branches

to all changes: