[Xfce4-commits] <tumbler:master> Added `scheduler` parameter to DBus method Queue
Jannis Pohlmann
noreply at xfce.org
Tue Oct 6 20:54:03 CEST 2009
Updating branch refs/heads/master
to c8240e613fe2da8d7f4c3ee50b75e6fa1ab8ae67 (commit)
from bbb9f66d47f0fbb2028439a8eba32ffd794a9dd4 (commit)
commit c8240e613fe2da8d7f4c3ee50b75e6fa1ab8ae67
Author: Philip Van Hoof <philip at codeminded.be>
Date: Tue Oct 6 16:43:11 2009 +0200
Added `scheduler` parameter to DBus method Queue
Signed-off-by: Jannis Pohlmann <jannis at xfce.org>
tumblerd/tumbler-service-dbus.xml | 1 +
tumblerd/tumbler-service.c | 84 +++++++++++++++++++++++++------------
tumblerd/tumbler-service.h | 1 +
3 files changed, 59 insertions(+), 27 deletions(-)
diff --git a/tumblerd/tumbler-service-dbus.xml b/tumblerd/tumbler-service-dbus.xml
index c040ceb..e898e19 100644
--- a/tumblerd/tumbler-service-dbus.xml
+++ b/tumblerd/tumbler-service-dbus.xml
@@ -5,6 +5,7 @@
<annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
<arg type="as" name="uris" direction="in" />
<arg type="as" name="mime_hints" direction="in" />
+ <arg type="s" name="scheduler" direction="in" />
<arg type="u" name="handle_to_unqueue" direction="in" />
<arg type="u" name="handle" direction="out" />
</method>
diff --git a/tumblerd/tumbler-service.c b/tumblerd/tumbler-service.c
index 25ffc3c..eefd867 100644
--- a/tumblerd/tumbler-service.c
+++ b/tumblerd/tumbler-service.c
@@ -37,6 +37,7 @@
#include <tumblerd/tumbler-service.h>
#include <tumblerd/tumbler-service-dbus-bindings.h>
#include <tumblerd/tumbler-lifo-scheduler.h>
+#include <tumblerd/tumbler-group-scheduler.h>
#include <tumblerd/tumbler-utils.h>
@@ -100,7 +101,7 @@ struct _TumblerService
DBusGConnection *connection;
TumblerRegistry *registry;
- TumblerScheduler *scheduler;
+ GPtrArray *schedulers;
GMutex *mutex;
};
@@ -198,9 +199,23 @@ static void
tumbler_service_init (TumblerService *service)
{
service->mutex = g_mutex_new ();
+ service->schedulers = g_ptr_array_sized_new (2);
}
+static void
+tumbler_service_add_scheduler (TumblerService *service, TumblerScheduler *scheduler)
+{
+ g_ptr_array_add (service->schedulers, scheduler);
+ g_signal_connect (scheduler, "error",
+ G_CALLBACK (tumbler_service_scheduler_error), service);
+ g_signal_connect (scheduler, "finished",
+ G_CALLBACK (tumbler_service_scheduler_finished), service);
+ g_signal_connect (scheduler, "ready",
+ G_CALLBACK (tumbler_service_scheduler_ready), service);
+ g_signal_connect (scheduler, "started",
+ G_CALLBACK (tumbler_service_scheduler_started), service);
+}
static void
tumbler_service_constructed (GObject *object)
@@ -211,20 +226,8 @@ tumbler_service_constructed (GObject *object)
if (G_OBJECT_CLASS (tumbler_service_parent_class)->constructed != NULL)
(G_OBJECT_CLASS (tumbler_service_parent_class)->constructed) (object);
-#if 0
- service->scheduler = tumbler_naive_scheduler_new ();
-#else
- service->scheduler = tumbler_lifo_scheduler_new ("foreground");
-#endif
-
- g_signal_connect (service->scheduler, "error",
- G_CALLBACK (tumbler_service_scheduler_error), service);
- g_signal_connect (service->scheduler, "finished",
- G_CALLBACK (tumbler_service_scheduler_finished), service);
- g_signal_connect (service->scheduler, "ready",
- G_CALLBACK (tumbler_service_scheduler_ready), service);
- g_signal_connect (service->scheduler, "started",
- G_CALLBACK (tumbler_service_scheduler_started), service);
+ tumbler_service_add_scheduler (service, tumbler_lifo_scheduler_new ("foreground"));
+ tumbler_service_add_scheduler (service, tumbler_group_scheduler_new ("background"));
}
@@ -234,7 +237,9 @@ tumbler_service_finalize (GObject *object)
{
TumblerService *service = TUMBLER_SERVICE (object);
- g_object_unref (service->scheduler);
+ g_ptr_array_foreach (service->schedulers, (GFunc) g_object_unref, NULL);
+ g_ptr_array_free (service->schedulers, TRUE);
+
g_object_unref (service->registry);
dbus_g_connection_unref (service->connection);
@@ -367,7 +372,7 @@ tumbler_service_start (TumblerService *service,
connection = dbus_g_connection_get_connection (service->connection);
/* request ownership for the generic thumbnailer interface */
- result = dbus_bus_request_name (connection, "org.xfce.thumbnails.Thumbnailer",
+ result = dbus_bus_request_name (connection, "org.freedesktop.thumbnails.Thumbnailer",
DBUS_NAME_FLAG_DO_NOT_QUEUE, &dbus_error);
/* check if that failed */
@@ -398,7 +403,7 @@ tumbler_service_start (TumblerService *service,
/* register the service instance as a handler of this interface */
dbus_g_connection_register_g_object (service->connection,
- "/org/xfce/thumbnails/Thumbnailer",
+ "/org/freedesktop/thumbnails/Thumbnailer",
G_OBJECT (service));
g_mutex_unlock (service->mutex);
@@ -412,23 +417,25 @@ void
tumbler_service_queue (TumblerService *service,
const GStrv uris,
const GStrv mime_hints,
+ const gchar *s_scheduler,
guint handle_to_unqueue,
DBusGMethodInvocation *context)
{
+ TumblerScheduler *scheduler = NULL;
TumblerSchedulerRequest *scheduler_request;
TumblerThumbnailer **thumbnailers;
gint num_thumbnailers;
- guint handle;
+ guint handle, i;
dbus_async_return_if_fail (TUMBLER_IS_SERVICE (service), context);
dbus_async_return_if_fail (uris != NULL, context);
dbus_async_return_if_fail (mime_hints != NULL, context);
- g_mutex_lock (service->mutex);
+ if (!s_scheduler || s_scheduler[0] == '\0') {
+ s_scheduler = "default";
+ }
- /* unqueue the request with the given unqueue handle */
- if (handle_to_unqueue != 0)
- tumbler_scheduler_unqueue (service->scheduler, handle_to_unqueue);
+ g_mutex_lock (service->mutex);
/* get an array with one thumbnailer for each URI in the request */
thumbnailers = tumbler_registry_get_thumbnailer_array (service->registry,
@@ -442,8 +449,25 @@ tumbler_service_queue (TumblerService *service,
/* get the request handle */
handle = scheduler_request->handle;
+ for (i = 0; i < service->schedulers->len; i++) {
+ TumblerScheduler *sched = g_ptr_array_index (service->schedulers, i);
+ const gchar *kind = tumbler_scheduler_get_kind (sched);
+
+ /* unqueue the request with the given unqueue handle */
+ if (handle_to_unqueue != 0)
+ tumbler_scheduler_unqueue (sched, handle_to_unqueue);
+
+ if (g_ascii_strcasecmp (kind, s_scheduler) == 0)
+ scheduler = sched;
+
+ }
+
+ if (!scheduler) {
+ scheduler = g_ptr_array_index (service->schedulers, 0);
+ }
+
/* push the request to the scheduler */
- tumbler_scheduler_push (service->scheduler, scheduler_request);
+ tumbler_scheduler_push (scheduler, scheduler_request);
/* free the thumbnailer array */
tumbler_thumbnailer_array_free (thumbnailers, num_thumbnailers);
@@ -460,13 +484,19 @@ tumbler_service_unqueue (TumblerService *service,
guint handle,
DBusGMethodInvocation *context)
{
+ guint i;
+
dbus_async_return_if_fail (TUMBLER_IS_SERVICE (service), context);
g_mutex_lock (service->mutex);
- /* unqueue the request with the given unqueue handle */
- if (handle != 0)
- tumbler_scheduler_unqueue (service->scheduler, handle);
+ if (handle != 0) {
+ for (i = 0; i < service->schedulers->len; i++) {
+ TumblerScheduler *sched = g_ptr_array_index (service->schedulers, i);
+ /* unqueue the request with the given unqueue handle */
+ tumbler_scheduler_unqueue (sched, handle);
+ }
+ }
g_mutex_unlock (service->mutex);
diff --git a/tumblerd/tumbler-service.h b/tumblerd/tumbler-service.h
index 44dd5be..3d45d89 100644
--- a/tumblerd/tumbler-service.h
+++ b/tumblerd/tumbler-service.h
@@ -46,6 +46,7 @@ gboolean tumbler_service_start (TumblerService *service,
void tumbler_service_queue (TumblerService *service,
const GStrv uris,
const GStrv mime_hints,
+ const gchar *s_scheduler,
guint handle_to_unqueue,
DBusGMethodInvocation *context);
void tumbler_service_unqueue (TumblerService *service,
More information about the Xfce4-commits
mailing list