[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: [Tracker] add one feature to query tracker daemon's busy/idle status
- From: jerry tan <Jerry Tan Sun COM>
- To: jamie <jamiemcc blueyonder co uk>
- Cc: tracker-list gnome org
- Subject: Re: [Tracker] add one feature to query tracker daemon's busy/idle status
- Date: Tue, 03 Jul 2007 18:14:09 +0800
jamie 写道:
> On Mon, 2007-07-02 at 22:00 +0800, jerry tan wrote:
>
>> so when tracker->file_process_queue is not empty, and pending table is
>> not empty,
>> track daemon is busy, right?
>>
>
> almost but not quite cause it could still be in the process of indexing
> the last file
>
> see the tracker->status variable as I suggest
>
>
>
>
en, use tracker->status is more simple .
Index: src/trackerd/trackerd.c
===================================================================
--- src/trackerd/trackerd.c (revision 625)
+++ src/trackerd/trackerd.c (working copy)
@@ -1431,7 +1431,18 @@
break;
+ case DBUS_ACTION_IS_BUSY:
+ reply = dbus_message_new_method_return (rec->message);
+ gboolean is_busy = FALSE;
+ if (tracker->status != STATUS_IDLE)
+ is_busy = TRUE;
+ dbus_message_append_args (reply,
+ DBUS_TYPE_BOOLEAN, &is_busy,
+ DBUS_TYPE_INVALID);
+ dbus_connection_send (rec->connection, reply, NULL);
+ dbus_message_unref (reply);
+ break;
case DBUS_ACTION_METADATA_GET:
Index: src/trackerd/tracker-dbus.c
===================================================================
--- src/trackerd/tracker-dbus.c (revision 625)
+++ src/trackerd/tracker-dbus.c (working copy)
@@ -127,6 +127,12 @@
rec->action = DBUS_ACTION_PING;
+ } else if (dbus_message_is_method_call (message, TRACKER_INTERFACE, TRACKER_METHOD_IS_BUSY)) {
+
+ dbus_message_ref (message);
+ rec->action = DBUS_ACTION_IS_BUSY;
+
+
} else if (dbus_message_is_method_call (message, TRACKER_INTERFACE, TRACKER_METHOD_GET_STATS)) {
dbus_message_ref (message);
Index: src/trackerd/tracker-dbus.h
===================================================================
--- src/trackerd/tracker-dbus.h (revision 625)
+++ src/trackerd/tracker-dbus.h (working copy)
@@ -40,6 +40,7 @@
/* main service interface */
#define TRACKER_METHOD_PING "Ping"
+#define TRACKER_METHOD_IS_BUSY "IsBusy"
#define TRACKER_METHOD_GET_STATS "GetStats"
#define TRACKER_METHOD_GET_SERVICES "GetServices"
#define TRACKER_METHOD_GET_VERSION "GetVersion"
@@ -109,6 +110,7 @@
DBUS_ACTION_NONE,
DBUS_ACTION_PING,
+ DBUS_ACTION_IS_BUSY,
DBUS_ACTION_GET_SERVICES,
DBUS_ACTION_GET_STATS,
DBUS_ACTION_GET_VERSION,
Index: src/libtracker/tracker.h
===================================================================
--- src/libtracker/tracker.h (revision 625)
+++ src/libtracker/tracker.h (working copy)
@@ -101,6 +101,7 @@
/* synchronous calls */
int tracker_get_version (TrackerClient *client, GError **error);
+gboolean tracker_is_busy (TrackerClient *client, GError **error);
GHashTable * tracker_get_services (TrackerClient *client, gboolean main_services_only, GError **error);
GPtrArray * tracker_get_stats (TrackerClient *client, GError **error);
@@ -156,6 +157,7 @@
void tracker_get_version_async (TrackerClient *client, TrackerIntReply callback, gpointer user_data);
+void tracker_is_busy_async (TrackerClient *client, TrackerIntReply callback, gpointer user_data);
void tracker_get_services_async (TrackerClient *client, gboolean main_services_only, TrackerHashTableReply callback, gpointer user_data);
void tracker_get_stats_async (TrackerClient *client, TrackerGPtrArrayReply callback, gpointer user_data);
Index: src/libtracker/Makefile.am
===================================================================
--- src/libtracker/Makefile.am (revision 625)
+++ src/libtracker/Makefile.am (working copy)
@@ -14,7 +14,7 @@
include_HEADERS = tracker.h tracker-client.h
-bin_PROGRAMS = tracker-search tracker-query tracker-meta-folder tracker-stats tracker-tag tracker-files
+bin_PROGRAMS = tracker-search tracker-query tracker-meta-folder tracker-stats tracker-tag tracker-files tracker-busy
tracker_search_SOURCES = tracker-search.c
@@ -44,6 +44,14 @@
$(GOBJECT_LIBS) \
libtrackerclient.la
+tracker_busy_SOURCES = tracker-busy.c
+
+tracker_busy_LDADD = $(GLIB2_LIBS) \
+ $(DBUS_LIBS) \
+ $(GOBJECT_LIBS) \
+ libtrackerclient.la
+
+
tracker_tag_SOURCES = tracker-tag.c
tracker_tag_LDADD = $(GLIB2_LIBS) \
Index: src/libtracker/tracker.c
===================================================================
--- src/libtracker/tracker.c (revision 625)
+++ src/libtracker/tracker.c (working copy)
@@ -181,7 +181,7 @@
g_free (callback_struct);
}
-/*
+
static void
tracker_boolean_reply (DBusGProxy *proxy, gboolean OUT_result, GError *error, gpointer user_data)
{
@@ -194,9 +194,9 @@
g_free (callback_struct);
}
-*/
+
static void
tracker_void_reply (DBusGProxy *proxy, GError *error, gpointer user_data)
{
@@ -324,9 +324,18 @@
return version;
}
+gboolean
+tracker_is_busy (TrackerClient *client, GError **error)
+{
+ gboolean is_busy = FALSE;
+ org_freedesktop_Tracker_is_busy (client->proxy, &is_busy, &*error);
+ return is_busy;
+}
+
+
GHashTable *
tracker_get_services (TrackerClient *client, gboolean main_services_only, GError **error)
{
@@ -818,9 +827,21 @@
}
+void
+tracker_is_busy_async (TrackerClient *client, TrackerBooleanReply callback, gpointer user_data)
+{
+ BooleanCallBackStruct *callback_struct;
+ callback_struct = g_new (BooleanCallBackStruct, 1);
+ callback_struct->callback = callback;
+ callback_struct->data = user_data;
+ client->last_pending_call = org_freedesktop_Tracker_is_busy_async (client->proxy, tracker_boolean_reply, callback_struct);
+
+}
+
+
void
tracker_get_services_async (TrackerClient *client, gboolean main_services_only, TrackerHashTableReply callback, gpointer user_data)
{
Index: src/libtracker/tracker-client.h
===================================================================
--- src/libtracker/tracker-client.h (revision 625)
+++ src/libtracker/tracker-client.h (working copy)
@@ -52,6 +52,44 @@
inline
#endif
gboolean
+org_freedesktop_Tracker_is_busy (DBusGProxy *proxy, gboolean* OUT_is_busy, GError **error)
+
+{
+ return dbus_g_proxy_call (proxy, "IsBusy", error, G_TYPE_INVALID, G_TYPE_BOOLEAN, OUT_is_busy, G_TYPE_INVALID);
+}
+
+typedef void (*org_freedesktop_Tracker_is_busy_reply) (DBusGProxy *proxy, gboolean OUT_is_busy, GError *error, gpointer userdata);
+
+static void
+org_freedesktop_Tracker_is_busy_async_callback (DBusGProxy *proxy, DBusGProxyCall *call, void *user_data)
+{
+ DBusGAsyncData *data = (DBusGAsyncData*) user_data;
+ GError *error = NULL;
+ gboolean OUT_is_busy;
+ dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_BOOLEAN, &OUT_is_busy, G_TYPE_INVALID);
+ (*(org_freedesktop_Tracker_is_busy_reply)data->cb) (proxy, OUT_is_busy, error, data->userdata);
+ return;
+}
+
+static
+#ifdef G_HAVE_INLINE
+inline
+#endif
+DBusGProxyCall*
+org_freedesktop_Tracker_is_busy_async (DBusGProxy *proxy, org_freedesktop_Tracker_is_busy_reply callback, gpointer userdata)
+
+{
+ DBusGAsyncData *stuff;
+ stuff = g_new (DBusGAsyncData, 1);
+ stuff->cb = G_CALLBACK (callback);
+ stuff->userdata = userdata;
+ return dbus_g_proxy_begin_call (proxy, "IsBusy", org_freedesktop_Tracker_is_busy_async_callback, stuff, g_free, G_TYPE_INVALID);
+}
+static
+#ifdef G_HAVE_INLINE
+inline
+#endif
+gboolean
org_freedesktop_Tracker_get_services (DBusGProxy *proxy, const gboolean IN_main_services_only, GHashTable** OUT_result, GError **error)
{
Index: data/tracker-introspect.xml
===================================================================
--- data/tracker-introspect.xml (revision 625)
+++ data/tracker-introspect.xml (working copy)
@@ -71,7 +71,12 @@
<arg type="i" name="version" direction="out" />
</method>
+ <!-- Return the busy/idle status of tracker daemon, true means busy, false means idel -->
+ <method name="IsBusy">
+ <arg type="b" name="is_busy" direction="out" />
+ </method>
+
<!-- Gets all implemented services and also returns any corresponding metadata type class for the service (IE "File", "Doc", "Image" etc)
If main_services_only is set to true then only the major services are returned
Output is in dict format: (service -> metadata class, description) -->
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]