| // Copyright 2014 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "buffet/dbus_command_proxy.h" |
| |
| #include <chromeos/dbus/async_event_sequencer.h> |
| #include <chromeos/dbus/exported_object_manager.h> |
| |
| #include "buffet/dbus_conversion.h" |
| #include "weave/enum_to_string.h" |
| |
| using chromeos::dbus_utils::AsyncEventSequencer; |
| using chromeos::dbus_utils::ExportedObjectManager; |
| |
| namespace buffet { |
| |
| DBusCommandProxy::DBusCommandProxy(ExportedObjectManager* object_manager, |
| const scoped_refptr<dbus::Bus>& bus, |
| weave::Command* command, |
| std::string object_path) |
| : command_{command}, |
| dbus_object_{object_manager, bus, dbus::ObjectPath{object_path}} { |
| observer_.Add(command); |
| } |
| |
| void DBusCommandProxy::RegisterAsync( |
| const AsyncEventSequencer::CompletionAction& completion_callback) { |
| dbus_adaptor_.RegisterWithDBusObject(&dbus_object_); |
| |
| // Set the initial property values before registering the DBus object. |
| dbus_adaptor_.SetName(command_->GetName()); |
| dbus_adaptor_.SetCategory(command_->GetCategory()); |
| dbus_adaptor_.SetId(command_->GetID()); |
| dbus_adaptor_.SetStatus(EnumToString(command_->GetStatus())); |
| dbus_adaptor_.SetProgress( |
| DictionaryToDBusVariantDictionary(*command_->GetProgress())); |
| dbus_adaptor_.SetOrigin(EnumToString(command_->GetOrigin())); |
| dbus_adaptor_.SetParameters( |
| DictionaryToDBusVariantDictionary(*command_->GetParameters())); |
| dbus_adaptor_.SetResults( |
| DictionaryToDBusVariantDictionary(*command_->GetResults())); |
| |
| // Register the command DBus object and expose its methods and properties. |
| dbus_object_.RegisterAsync(completion_callback); |
| } |
| |
| void DBusCommandProxy::OnResultsChanged() { |
| dbus_adaptor_.SetResults( |
| DictionaryToDBusVariantDictionary(*command_->GetResults())); |
| } |
| |
| void DBusCommandProxy::OnStatusChanged() { |
| dbus_adaptor_.SetStatus(EnumToString(command_->GetStatus())); |
| } |
| |
| void DBusCommandProxy::OnProgressChanged() { |
| dbus_adaptor_.SetProgress( |
| DictionaryToDBusVariantDictionary(*command_->GetProgress())); |
| } |
| |
| void DBusCommandProxy::OnCommandDestroyed() { |
| delete this; |
| } |
| |
| bool DBusCommandProxy::SetProgress( |
| chromeos::ErrorPtr* error, |
| const chromeos::VariantDictionary& progress) { |
| LOG(INFO) << "Received call to Command<" << command_->GetName() |
| << ">::SetProgress()"; |
| auto dictionary = DictionaryFromDBusVariantDictionary(progress, error); |
| if (!dictionary) |
| return false; |
| return command_->SetProgress(*dictionary, error); |
| } |
| |
| bool DBusCommandProxy::SetResults(chromeos::ErrorPtr* error, |
| const chromeos::VariantDictionary& results) { |
| LOG(INFO) << "Received call to Command<" << command_->GetName() |
| << ">::SetResults()"; |
| auto dictionary = DictionaryFromDBusVariantDictionary(results, error); |
| if (!dictionary) |
| return false; |
| return command_->SetResults(*dictionary, error); |
| } |
| |
| void DBusCommandProxy::Abort() { |
| LOG(INFO) << "Received call to Command<" << command_->GetName() |
| << ">::Abort()"; |
| command_->Abort(); |
| } |
| |
| void DBusCommandProxy::Cancel() { |
| LOG(INFO) << "Received call to Command<" << command_->GetName() |
| << ">::Cancel()"; |
| command_->Cancel(); |
| } |
| |
| void DBusCommandProxy::Done() { |
| LOG(INFO) << "Received call to Command<" << command_->GetName() |
| << ">::Done()"; |
| command_->Done(); |
| } |
| |
| } // namespace buffet |