paperbox r131 - in trunk: . src
- From: markoa svn gnome org
- To: svn-commits-list gnome org
- Subject: paperbox r131 - in trunk: . src
- Date: Fri, 25 Apr 2008 15:56:43 +0100 (BST)
Author: markoa
Date: Fri Apr 25 14:56:42 2008
New Revision: 131
URL: http://svn.gnome.org/viewvc/paperbox?rev=131&view=rev
Log:
Connect to Tracker.KeywordAdded/Removed
Added:
trunk/src/tracker-phone-signals-marshal.c
trunk/src/tracker-phone-signals-marshal.h
Modified:
trunk/ChangeLog
trunk/src/Makefile.am
trunk/src/browser.cc
trunk/src/tracker-phone.cc
trunk/src/tracker-phone.hh
Modified: trunk/src/Makefile.am
==============================================================================
--- trunk/src/Makefile.am (original)
+++ trunk/src/Makefile.am Fri Apr 25 14:56:42 2008
@@ -52,7 +52,9 @@
thumbnailer.cc \
thumbnailer.hh \
tracker-phone.cc \
- tracker-phone.hh
+ tracker-phone.hh \
+ tracker-phone-signals-marshal.c \
+ tracker-phone-signals-marshal.h
global_defines = \
-DPREFIX=\""$(prefix)"\" \
Modified: trunk/src/browser.cc
==============================================================================
--- trunk/src/browser.cc (original)
+++ trunk/src/browser.cc Fri Apr 25 14:56:42 2008
@@ -82,10 +82,10 @@
tracker_client_->signal_documents_request_completed().connect(
sigc::mem_fun(*this, &Browser::on_documents));
- tracker_client_->signal_add_tags_request_completed().connect(
+ tracker_client_->signal_tags_added().connect(
sigc::mem_fun(*this, &Browser::on_add_tags_request_completed));
- tracker_client_->signal_remove_tags_request_completed().connect(
+ tracker_client_->signal_tags_removed().connect(
sigc::mem_fun(*this, &Browser::on_remove_tags_request_completed));
}
Added: trunk/src/tracker-phone-signals-marshal.c
==============================================================================
--- (empty file)
+++ trunk/src/tracker-phone-signals-marshal.c Fri Apr 25 14:56:42 2008
@@ -0,0 +1,88 @@
+
+#include <glib-object.h>
+
+
+#ifdef G_ENABLE_DEBUG
+#define g_marshal_value_peek_boolean(v) g_value_get_boolean (v)
+#define g_marshal_value_peek_char(v) g_value_get_char (v)
+#define g_marshal_value_peek_uchar(v) g_value_get_uchar (v)
+#define g_marshal_value_peek_int(v) g_value_get_int (v)
+#define g_marshal_value_peek_uint(v) g_value_get_uint (v)
+#define g_marshal_value_peek_long(v) g_value_get_long (v)
+#define g_marshal_value_peek_ulong(v) g_value_get_ulong (v)
+#define g_marshal_value_peek_int64(v) g_value_get_int64 (v)
+#define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v)
+#define g_marshal_value_peek_enum(v) g_value_get_enum (v)
+#define g_marshal_value_peek_flags(v) g_value_get_flags (v)
+#define g_marshal_value_peek_float(v) g_value_get_float (v)
+#define g_marshal_value_peek_double(v) g_value_get_double (v)
+#define g_marshal_value_peek_string(v) (char*) g_value_get_string (v)
+#define g_marshal_value_peek_param(v) g_value_get_param (v)
+#define g_marshal_value_peek_boxed(v) g_value_get_boxed (v)
+#define g_marshal_value_peek_pointer(v) g_value_get_pointer (v)
+#define g_marshal_value_peek_object(v) g_value_get_object (v)
+#else /* !G_ENABLE_DEBUG */
+/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
+ * Do not access GValues directly in your code. Instead, use the
+ * g_value_get_*() functions
+ */
+#define g_marshal_value_peek_boolean(v) (v)->data[0].v_int
+#define g_marshal_value_peek_char(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_int(v) (v)->data[0].v_int
+#define g_marshal_value_peek_uint(v) (v)->data[0].v_uint
+#define g_marshal_value_peek_long(v) (v)->data[0].v_long
+#define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_int64(v) (v)->data[0].v_int64
+#define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64
+#define g_marshal_value_peek_enum(v) (v)->data[0].v_long
+#define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong
+#define g_marshal_value_peek_float(v) (v)->data[0].v_float
+#define g_marshal_value_peek_double(v) (v)->data[0].v_double
+#define g_marshal_value_peek_string(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_param(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer
+#define g_marshal_value_peek_object(v) (v)->data[0].v_pointer
+#endif /* !G_ENABLE_DEBUG */
+
+
+/* VOID:STRING,STRING,STRING */
+void
+TRACKER_PHONE__VOID__STRING_STRING_STRING (GClosure *closure,
+ GValue *return_value G_GNUC_UNUSED,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint G_GNUC_UNUSED,
+ gpointer marshal_data)
+{
+ typedef void (*GMarshalFunc_VOID__STRING_STRING_STRING) (gpointer data1,
+ gpointer arg_1,
+ gpointer arg_2,
+ gpointer arg_3,
+ gpointer data2);
+ register GMarshalFunc_VOID__STRING_STRING_STRING callback;
+ register GCClosure *cc = (GCClosure*) closure;
+ register gpointer data1, data2;
+
+ g_return_if_fail (n_param_values == 4);
+
+ if (G_CCLOSURE_SWAP_DATA (closure))
+ {
+ data1 = closure->data;
+ data2 = g_value_peek_pointer (param_values + 0);
+ }
+ else
+ {
+ data1 = g_value_peek_pointer (param_values + 0);
+ data2 = closure->data;
+ }
+ callback = (GMarshalFunc_VOID__STRING_STRING_STRING) (marshal_data ? marshal_data : cc->callback);
+
+ callback (data1,
+ g_marshal_value_peek_string (param_values + 1),
+ g_marshal_value_peek_string (param_values + 2),
+ g_marshal_value_peek_string (param_values + 3),
+ data2);
+}
+
Added: trunk/src/tracker-phone-signals-marshal.h
==============================================================================
--- (empty file)
+++ trunk/src/tracker-phone-signals-marshal.h Fri Apr 25 14:56:42 2008
@@ -0,0 +1,20 @@
+
+#ifndef __TRACKER_PHONE__MARSHAL_H__
+#define __TRACKER_PHONE__MARSHAL_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+/* VOID:STRING,STRING,STRING */
+extern void TRACKER_PHONE__VOID__STRING_STRING_STRING (GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data);
+
+G_END_DECLS
+
+#endif /* __TRACKER_PHONE__MARSHAL_H__ */
+
Modified: trunk/src/tracker-phone.cc
==============================================================================
--- trunk/src/tracker-phone.cc (original)
+++ trunk/src/tracker-phone.cc Fri Apr 25 14:56:42 2008
@@ -28,6 +28,7 @@
#include "file-utils.hh"
#include "tag-request.hh"
#include "tracker-phone.hh"
+#include "tracker-phone-signals-marshal.h"
namespace {
@@ -155,6 +156,7 @@
void
on_tracker_void_reply(GError* error, paperbox::AsyncTagPack* pack)
{
+/*
bool success = true;
if (error) {
@@ -173,17 +175,50 @@
ustring_array_to_vector(pack->tags, cpp_tags);
if (pack->req_type == paperbox::ASYNC_REQUEST_TYPE_ADD) {
- pack->phone->signal_add_tags_request_completed().emit(
- success, pack->uri, cpp_tags);
+ pack->phone->signal_tags_added().emit(success,
+ pack->uri,
+ cpp_tags);
+
} else if (pack->req_type == paperbox::ASYNC_REQUEST_TYPE_REMOVE) {
- pack->phone->signal_remove_tags_request_completed().emit(
- success, pack->uri, cpp_tags);
+ pack->phone->signal_tags_removed().emit(success,
+ pack->uri,
+ cpp_tags);
}
-
+*/
g_strfreev(pack->tags);
delete pack;
}
+ // Handler for D-Bus signal Tracker.Keywords/KeywordAdded
+ void
+ on_tracker_keyword_added(DBusGProxy* /*proxy*/,
+ const char* /*service*/,
+ const char* curi,
+ const char* ckeyword,
+ paperbox::TrackerPhone* phone)
+ {
+ Glib::ustring uri(curi);
+ std::vector<Glib::ustring> tags;
+ tags.push_back(Glib::ustring(ckeyword));
+
+ phone->signal_tags_added().emit(true, uri, tags);
+ }
+
+ // Handler for D-Bus signal Tracker.Keywords/KeywordRemoved
+ void
+ on_tracker_keyword_removed(DBusGProxy* /*proxy*/,
+ const char* /*service*/,
+ const char* curi,
+ const char* ckeyword,
+ paperbox::TrackerPhone* phone)
+ {
+ Glib::ustring uri(curi);
+ std::vector<Glib::ustring> tags;
+ tags.push_back(Glib::ustring(ckeyword));
+
+ phone->signal_tags_removed().emit(true, uri, tags);
+ }
+
} // anonymous namespace
namespace paperbox {
@@ -193,13 +228,17 @@
TrackerPhone::TrackerPhone() throw (std::runtime_error)
:
- tracker_connection_(0)
+ tracker_connection_(0),
+ bus_(0),
+ remote_kw_object_(0)
{
gboolean enable_warnings = TRUE;
tracker_connection_ = tracker_connect(enable_warnings);
if (! tracker_connection_)
throw std::runtime_error("Unable to connect to Tracker daemon.");
+
+ connect_to_dbus_signals();
}
TrackerPhone::~TrackerPhone()
@@ -213,16 +252,16 @@
return signal_documents_;
}
- TrackerPhone::SignalTagRequest&
- TrackerPhone::signal_add_tags_request_completed()
+ TrackerPhone::SignalTags&
+ TrackerPhone::signal_tags_added()
{
- return signal_add_completed_;
+ return signal_tags_added_;
}
- TrackerPhone::SignalTagRequest&
- TrackerPhone::signal_remove_tags_request_completed()
+ TrackerPhone::SignalTags&
+ TrackerPhone::signal_tags_removed()
{
- return signal_remove_completed_;
+ return signal_tags_removed_;
}
bool
@@ -237,6 +276,53 @@
}
void
+ TrackerPhone::connect_to_dbus_signals()
+ {
+ GError* error = 0;
+
+ // get a bus and proxy
+ bus_ = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
+ if (!bus_) throw std::runtime_error("Couldn't connect to session bus.");
+
+ remote_kw_object_ =
+ dbus_g_proxy_new_for_name (bus_,
+ "org.freedesktop.Tracker",
+ "/org/freedesktop/tracker",
+ "org.freedesktop.Tracker.Keywords");
+ if (! remote_kw_object_)
+ throw std::runtime_error("Failed to get a Tracker.Keywords proxy.");
+
+ // register a marshaller
+ dbus_g_object_register_marshaller(
+ TRACKER_PHONE__VOID__STRING_STRING_STRING,
+ G_TYPE_NONE,
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
+
+ // tell DBus what the type signature is,
+ // for each of the signal callbacks
+ dbus_g_proxy_add_signal(remote_kw_object_,
+ "KeywordAdded",
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+ G_TYPE_INVALID);
+
+ dbus_g_proxy_add_signal(remote_kw_object_,
+ "KeywordRemoved",
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
+ G_TYPE_INVALID);
+
+ // connect to signals
+ dbus_g_proxy_connect_signal(remote_kw_object_,
+ "KeywordAdded",
+ G_CALLBACK(on_tracker_keyword_added),
+ this, NULL);
+
+ dbus_g_proxy_connect_signal(remote_kw_object_,
+ "KeywordRemoved",
+ G_CALLBACK(on_tracker_keyword_removed),
+ this, NULL);
+ }
+
+ void
TrackerPhone::request_all_documents()
{
int live_query_id = -1;
Modified: trunk/src/tracker-phone.hh
==============================================================================
--- trunk/src/tracker-phone.hh (original)
+++ trunk/src/tracker-phone.hh Fri Apr 25 14:56:42 2008
@@ -45,11 +45,13 @@
const std::queue<Glib::ustring>& >
SignalDocuments;
+ // Tags can be added or removed after the application request
+ // or externally. success may be false only in the former case.
typedef sigc::signal<void,
bool, // success
const Glib::ustring&, // uri
const std::vector<Glib::ustring>& > // tags
- SignalTagRequest;
+ SignalTags;
explicit TrackerPhone() throw (std::runtime_error);
virtual ~TrackerPhone();
@@ -69,11 +71,13 @@
SignalDocuments& signal_documents_request_completed();
- SignalTagRequest& signal_add_tags_request_completed();
+ SignalTags& signal_tags_added();
- SignalTagRequest& signal_remove_tags_request_completed();
+ SignalTags& signal_tags_removed();
protected:
+ void connect_to_dbus_signals();
+
void prepare_document(const Glib::ustring& uri,
char** keys,
boost::shared_ptr<Document>& document);
@@ -81,10 +85,12 @@
void attach_tags(boost::shared_ptr<Document>& document);
TrackerClient* tracker_connection_;
+ DBusGConnection* bus_;
+ DBusGProxy* remote_kw_object_;
- SignalDocuments signal_documents_;
- SignalTagRequest signal_add_completed_;
- SignalTagRequest signal_remove_completed_;
+ SignalDocuments signal_documents_;
+ SignalTags signal_tags_added_;
+ SignalTags signal_tags_removed_;
};
} // namespace paperbox
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]