On суб, 2007-03-10 at 15:20 +0000, jamie wrote:
> On Sat, 2007-03-10 at 02:41 +0100, Marko Anastasov wrote:
> > Hi,
> > 
> > Tonight I got a little bit into the code for the first time
> > and tried to add the Emails category results to 
> > tracker_dbus_method_get_stats (), by merging the results of
> > tracker_exec_proc () for data and emails databases. I didn't
> > finish though, it's really late now so I'm just posting a
> > non-working patch hoping to hear some suggestion tomorrow.
> > 
> > Is there anything special with these rows that make up the
> > char *** result of tracker_exec_proc () or they're just string
> > arrays?
> > 
> 
> nope - they are just null terminated array of array of strings.
> 
> I guess I should add a tracker_concatenate_result function to
> tracker-utils.c that appends on result set onto another.
> 
> If you have time today feel free to implement above and amend your
> patch. 

Done - now the stats read the email db too.

I'm not sure about all other functions that need this merging;
I suppose tracker_get_metadata and tracker_dbus_method_get_services ?

Marko
Index: src/trackerd/tracker-utils.h
===================================================================
--- src/trackerd/tracker-utils.h	(revision 537)
+++ src/trackerd/tracker-utils.h	(working copy)
@@ -494,4 +494,6 @@
 
 char*	 	tracker_string_replace 		(const char *haystack, char *needle, char *replacement);
 
+char ***	tracker_concatenate_result	(char ***lhs, char ***rhs);
+
 #endif
Index: src/trackerd/tracker-dbus-methods.c
===================================================================
--- src/trackerd/tracker-dbus-methods.c	(revision 537)
+++ src/trackerd/tracker-dbus-methods.c	(working copy)
@@ -23,6 +23,7 @@
 #include "tracker-dbus-methods.h"
 #include "tracker-metadata.h"
 #include "tracker-rdf-query.h"
+#include "tracker-utils.h"
 
 
 void
@@ -403,6 +404,8 @@
 tracker_dbus_method_get_stats (DBusRec *rec)
 {
 	DBConnection	*db_con;
+	char		***res_data;
+	char		***res_emails;
 	char		***res;
 
 	g_return_if_fail (rec && rec->user_data);
@@ -411,12 +414,17 @@
 
 	tracker_log ("Executing GetStats Dbus Call");
 
-	res = tracker_exec_proc (db_con, "GetStats", 0);
-	
+	res_data = tracker_exec_proc (db_con, "GetStats", 0);
+	res_emails = tracker_exec_proc (db_con->emails, "GetStats", 0);
+
+	res = tracker_concatenate_result (res_data, res_emails);
+
+	tracker_db_free_result (res_data);
+	tracker_db_free_result (res_emails);
+
 	tracker_dbus_reply_with_query_result (rec, res);
 
 	tracker_db_free_result (res);
-
 }
 
 
Index: src/trackerd/tracker-utils.c
===================================================================
--- src/trackerd/tracker-utils.c	(revision 537)
+++ src/trackerd/tracker-utils.c	(working copy)
@@ -30,6 +30,7 @@
 #include <sys/resource.h>
 #include <zlib.h>
 #include <magic.h>
+#include "tracker-db-sqlite.h"
 #include "tracker-dbus.h"
 #include "tracker-utils.h"
 #include "tracker-indexer.h"
@@ -3231,4 +3232,42 @@
 
 }
 
+/* concatenate results from tracker_exec_proc () */
+char ***
+tracker_concatenate_result (char ***lhs, char ***rhs)
+{
+	char  **res;
+	char  **row, **new_row;
+	int   res_length;
+	int   i, j;
+	guint row_length;
 
+	g_return_val_if_fail (lhs && rhs, NULL);
+
+	res_length = tracker_get_row_count (lhs) + tracker_get_row_count (rhs);
+
+	res = g_new0 (char *, res_length+1);
+	res[res_length] = NULL;
+	
+	i = 0;
+
+	for (j = 0; (row = tracker_db_get_row (lhs, j)); ++i, ++j) {
+		row_length = g_strv_length (row);
+
+		new_row = g_strdupv (row);
+		new_row[row_length] = NULL;
+
+		res[i] = (gpointer) new_row;
+	}
+
+	for (j = 0; (row = tracker_db_get_row (rhs, j)); ++i, ++j) {
+		row_length = g_strv_length (row);
+
+		new_row = g_strdupv (row);
+		new_row[row_length] = NULL;
+
+		res[i] = (gpointer) new_row;
+	}
+
+	return (char ***) res;
+}
_______________________________________________
tracker-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/tracker-list

Reply via email to