| // Copyright 2018 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 "peridot/bin/ledger/sync_coordinator/impl/user_sync_impl.h" |
| |
| #include "peridot/bin/ledger/sync_coordinator/impl/ledger_sync_impl.h" |
| |
| namespace sync_coordinator { |
| |
| UserSyncImpl::UserSyncImpl(std::unique_ptr<cloud_sync::UserSync> cloud_sync, |
| std::unique_ptr<p2p_sync::UserCommunicator> p2p_sync) |
| : cloud_sync_(std::move(cloud_sync)), p2p_sync_(std::move(p2p_sync)) {} |
| |
| UserSyncImpl::~UserSyncImpl() {} |
| |
| void UserSyncImpl::Start() { |
| FXL_DCHECK(!started_); |
| started_ = true; |
| if (cloud_sync_) { |
| cloud_sync_->Start(); |
| } |
| if (p2p_sync_) { |
| p2p_sync_->Start(); |
| } |
| } |
| void UserSyncImpl::SetWatcher(SyncStateWatcher* watcher) { |
| watcher_ = std::make_unique<SyncWatcherConverter>(watcher); |
| cloud_sync_->SetSyncWatcher(watcher_.get()); |
| } |
| |
| std::unique_ptr<LedgerSync> UserSyncImpl::CreateLedgerSync( |
| fxl::StringView app_id, encryption::EncryptionService* encryption_service) { |
| FXL_DCHECK(started_); |
| std::unique_ptr<cloud_sync::LedgerSync> cloud_ledger_sync; |
| if (cloud_sync_) { |
| cloud_ledger_sync = |
| cloud_sync_->CreateLedgerSync(app_id, encryption_service); |
| } |
| std::unique_ptr<p2p_sync::LedgerCommunicator> p2p_ledger_sync; |
| if (p2p_sync_) { |
| // FIXME(etiennej): fix the API |
| p2p_ledger_sync = p2p_sync_->GetLedgerCommunicator(app_id.ToString()); |
| } |
| auto combined_sync = std::make_unique<LedgerSyncImpl>( |
| std::move(cloud_ledger_sync), std::move(p2p_ledger_sync)); |
| return combined_sync; |
| } |
| |
| } // namespace sync_coordinator |