blob: db1decb42fe42ee3db39c44db592927944062713 [file] [log] [blame]
// Copyright 2020 The Fuchsia 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 "src/modular/bin/sessionmgr/element_controller_impl.h"
#include <lib/syslog/cpp/macros.h>
#include <unordered_set>
#include <utility>
#include "src/modular/bin/sessionmgr/annotations.h"
namespace modular {
ElementControllerImpl::ElementControllerImpl(std::string story_id,
SessionStorage* const session_storage)
: story_id_(std::move(story_id)),
session_storage_(session_storage),
annotation_controller_(
std::make_unique<AnnotationControllerImpl>(story_id_, session_storage_)),
weak_factory_(this) {
FX_DCHECK(session_storage_ != nullptr);
}
void ElementControllerImpl::Connect(fidl::InterfaceRequest<fuchsia::element::Controller> request) {
auto on_error = [weak_ptr = weak_factory_.GetWeakPtr()](zx_status_t status) {
if (!weak_ptr) {
return;
}
FX_PLOGS(INFO, status) << "Element proposer closed ElementController; deleting story: "
<< weak_ptr->story_id_;
weak_ptr->session_storage_->DeleteStory(weak_ptr->story_id_);
};
bindings_.AddBinding(this, std::move(request), /*dispatcher=*/nullptr, std::move(on_error));
}
void ElementControllerImpl::UpdateAnnotations(
std::vector<fuchsia::element::Annotation> annotations_to_set,
std::vector<fuchsia::element::AnnotationKey> annotations_to_delete,
UpdateAnnotationsCallback callback) {
annotation_controller_->UpdateAnnotations(std::move(annotations_to_set),
std::move(annotations_to_delete), std::move(callback));
}
void ElementControllerImpl::GetAnnotations(GetAnnotationsCallback callback) {
annotation_controller_->GetAnnotations(std::move(callback));
}
void ElementControllerImpl::WatchAnnotations(WatchAnnotationsCallback callback) {
annotation_controller_->WatchAnnotations(std::move(callback));
}
} // namespace modular