diff options
Diffstat (limited to 'dbus/property.cc')
-rw-r--r-- | dbus/property.cc | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/dbus/property.cc b/dbus/property.cc index b7a0c8b..234036c 100644 --- a/dbus/property.cc +++ b/dbus/property.cc @@ -133,6 +133,35 @@ void PropertySet::OnGet(PropertyBase* property, GetCallback callback, callback.Run(response); } +bool PropertySet::GetAndBlock(PropertyBase* property) { + MethodCall method_call(kPropertiesInterface, kPropertiesGet); + MessageWriter writer(&method_call); + writer.AppendString(interface()); + writer.AppendString(property->name()); + + DCHECK(object_proxy_); + scoped_ptr<dbus::Response> response( + object_proxy_->CallMethodAndBlock(&method_call, + ObjectProxy::TIMEOUT_USE_DEFAULT)); + + if (!response.get()) { + LOG(WARNING) << property->name() << ": GetAndBlock: failed."; + return false; + } + + MessageReader reader(response.get()); + if (property->PopValueFromReader(&reader)) { + property->set_valid(true); + NotifyPropertyChanged(property->name()); + } else { + if (property->is_valid()) { + property->set_valid(false); + NotifyPropertyChanged(property->name()); + } + } + return true; +} + void PropertySet::GetAll() { MethodCall method_call(kPropertiesInterface, kPropertiesGetAll); MessageWriter writer(&method_call); @@ -184,7 +213,7 @@ bool PropertySet::SetAndBlock(PropertyBase* property) { DCHECK(object_proxy_); scoped_ptr<dbus::Response> response( object_proxy_->CallMethodAndBlock(&method_call, - ObjectProxy::TIMEOUT_USE_DEFAULT)); + ObjectProxy::TIMEOUT_USE_DEFAULT)); if (response.get()) return true; return false; |