[vala] D-Bus: Support cached property values in GDBus clients
- From: Jürg Billeter <juergbi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala] D-Bus: Support cached property values in GDBus clients
- Date: Wed, 20 Oct 2010 20:52:29 +0000 (UTC)
commit 25e10d1004b910b186e53e1efaf0100b9530fcc7
Author: Jürg Billeter <j bitron ch>
Date: Wed Oct 20 22:17:12 2010 +0200
D-Bus: Support cached property values in GDBus clients
codegen/valagdbusclientmodule.vala | 43 ++++++++++++++++++++++-------------
1 files changed, 27 insertions(+), 16 deletions(-)
---
diff --git a/codegen/valagdbusclientmodule.vala b/codegen/valagdbusclientmodule.vala
index 4333034..42d3e12 100644
--- a/codegen/valagdbusclientmodule.vala
+++ b/codegen/valagdbusclientmodule.vala
@@ -659,10 +659,19 @@ public class Vala.GDBusClientModule : GDBusModule {
push_function (function);
- ccode.add_declaration ("GVariant", new CCodeVariableDeclarator ("*_arguments"));
- ccode.add_declaration ("GVariant", new CCodeVariableDeclarator ("*_reply"));
ccode.add_declaration ("GVariant", new CCodeVariableDeclarator ("*_inner_reply"));
+ // first try cached value
+ var ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_dbus_proxy_get_cached_property"));
+ ccall.add_argument (new CCodeCastExpression (new CCodeIdentifier ("self"), "GDBusProxy *"));
+ ccall.add_argument (new CCodeConstant ("\"%s\"".printf (get_dbus_name_for_member (prop))));
+ ccode.add_expression (new CCodeAssignment (new CCodeIdentifier ("_inner_reply"), ccall));
+
+ // if not successful, retrieve value via D-Bus
+ ccode.open_if (new CCodeUnaryExpression (CCodeUnaryOperator.LOGICAL_NEGATION, new CCodeIdentifier ("_inner_reply")));
+
+ ccode.add_declaration ("GVariant", new CCodeVariableDeclarator ("*_arguments"));
+ ccode.add_declaration ("GVariant", new CCodeVariableDeclarator ("*_reply"));
ccode.add_declaration ("GVariantBuilder", new CCodeVariableDeclarator ("_arguments_builder"));
var builder_init = new CCodeFunctionCall (new CCodeIdentifier ("g_variant_builder_init"));
@@ -679,7 +688,7 @@ public class Vala.GDBusClientModule : GDBusModule {
builder_end.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_arguments_builder")));
ccode.add_expression (new CCodeAssignment (new CCodeIdentifier ("_arguments"), builder_end));
- var ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_dbus_proxy_call_sync"));
+ ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_dbus_proxy_call_sync"));
ccall.add_argument (new CCodeCastExpression (new CCodeIdentifier ("self"), "GDBusProxy *"));
ccall.add_argument (new CCodeConstant ("\"org.freedesktop.DBus.Properties.Get\""));
ccall.add_argument (new CCodeIdentifier ("_arguments"));
@@ -695,21 +704,22 @@ public class Vala.GDBusClientModule : GDBusModule {
return_default_value (prop.property_type);
ccode.close ();
- ccode.add_declaration ("GVariantIter", new CCodeVariableDeclarator ("_reply_iter"));
-
- var get_variant = new CCodeFunctionCall (new CCodeIdentifier ("g_variant_get_child_value"));
+ var get_variant = new CCodeFunctionCall (new CCodeIdentifier ("g_variant_get"));
get_variant.add_argument (new CCodeIdentifier ("_reply"));
- get_variant.add_argument (new CCodeConstant ("0"));
- ccode.add_expression (new CCodeAssignment (new CCodeIdentifier ("_inner_reply"), get_variant));
+ get_variant.add_argument (new CCodeConstant ("\"(v)\""));
+ get_variant.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_inner_reply")));
+ ccode.add_expression (get_variant);
- var iter_init = new CCodeFunctionCall (new CCodeIdentifier ("g_variant_iter_init"));
- iter_init.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("_reply_iter")));
- iter_init.add_argument (new CCodeIdentifier ("_inner_reply"));
- ccode.add_expression (iter_init);
+ var unref_reply = new CCodeFunctionCall (new CCodeIdentifier ("g_variant_unref"));
+ unref_reply.add_argument (new CCodeIdentifier ("_reply"));
+ ccode.add_expression (unref_reply);
+
+ ccode.close ();
if (prop.property_type.is_real_non_null_struct_type ()) {
var target = new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, new CCodeIdentifier ("result"));
- read_expression (prop.get_accessor.value_type, new CCodeIdentifier ("_reply_iter"), target, prop);
+ var result = deserialize_expression (prop.get_accessor.value_type, new CCodeIdentifier ("_inner_reply"), target);
+ ccode.add_expression (new CCodeAssignment (target, result));
} else {
ccode.add_declaration (prop.get_accessor.value_type.get_cname (), new CCodeVariableDeclarator ("_result"));
@@ -719,7 +729,8 @@ public class Vala.GDBusClientModule : GDBusModule {
}
}
- read_expression (prop.get_accessor.value_type, new CCodeIdentifier ("_reply_iter"), new CCodeIdentifier ("_result"), prop);
+ var result = deserialize_expression (prop.get_accessor.value_type, new CCodeIdentifier ("_inner_reply"), new CCodeIdentifier ("_result"));
+ ccode.add_expression (new CCodeAssignment (new CCodeIdentifier ("_result"), result));
if (array_type != null) {
for (int dim = 1; dim <= array_type.rank; dim++) {
@@ -729,8 +740,8 @@ public class Vala.GDBusClientModule : GDBusModule {
}
}
- var unref_reply = new CCodeFunctionCall (new CCodeIdentifier ("g_variant_unref"));
- unref_reply.add_argument (new CCodeIdentifier ("_reply"));
+ unref_reply = new CCodeFunctionCall (new CCodeIdentifier ("g_variant_unref"));
+ unref_reply.add_argument (new CCodeIdentifier ("_inner_reply"));
ccode.add_expression (unref_reply);
if (prop.property_type.is_real_non_null_struct_type ()) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]