// Copyright (c) 2012 The Chromium 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 "sync/sessions/sync_session.h" #include <algorithm> #include <iterator> #include "base/logging.h" #include "sync/internal_api/public/base/model_type.h" #include "sync/internal_api/public/engine/model_safe_worker.h" #include "sync/syncable/directory.h" namespace syncer { namespace sessions { // static SyncSession* SyncSession::Build(SyncSessionContext* context, Delegate* delegate) { return new SyncSession(context, delegate); } SyncSession::SyncSession( SyncSessionContext* context, Delegate* delegate) : context_(context), delegate_(delegate) { status_controller_.reset(new StatusController()); } SyncSession::~SyncSession() {} SyncSessionSnapshot SyncSession::TakeSnapshot() const { return TakeSnapshotWithSource(sync_pb::GetUpdatesCallerInfo::UNKNOWN); } SyncSessionSnapshot SyncSession::TakeSnapshotWithSource( sync_pb::GetUpdatesCallerInfo::GetUpdatesSource legacy_updates_source) const { syncable::Directory* dir = context_->directory(); ProgressMarkerMap download_progress_markers; for (int i = FIRST_REAL_MODEL_TYPE; i < MODEL_TYPE_COUNT; ++i) { ModelType type(ModelTypeFromInt(i)); dir->GetDownloadProgressAsString(type, &download_progress_markers[type]); } std::vector<int> num_entries_by_type(MODEL_TYPE_COUNT, 0); std::vector<int> num_to_delete_entries_by_type(MODEL_TYPE_COUNT, 0); dir->CollectMetaHandleCounts(&num_entries_by_type, &num_to_delete_entries_by_type); SyncSessionSnapshot snapshot( status_controller_->model_neutral_state(), download_progress_markers, delegate_->IsCurrentlyThrottled(), status_controller_->num_encryption_conflicts(), status_controller_->num_hierarchy_conflicts(), status_controller_->num_server_conflicts(), context_->notifications_enabled(), dir->GetEntriesCount(), status_controller_->sync_start_time(), num_entries_by_type, num_to_delete_entries_by_type, legacy_updates_source); return snapshot; } void SyncSession::SendSyncCycleEndEventNotification( sync_pb::GetUpdatesCallerInfo::GetUpdatesSource source) { SyncEngineEvent event(SyncEngineEvent::SYNC_CYCLE_ENDED); event.snapshot = TakeSnapshotWithSource(source); DVLOG(1) << "Sending cycle end event with snapshot: " << event.snapshot.ToString(); context()->NotifyListeners(event); } void SyncSession::SendEventNotification(SyncEngineEvent::EventCause cause) { SyncEngineEvent event(cause); event.snapshot = TakeSnapshot(); DVLOG(1) << "Sending event with snapshot: " << event.snapshot.ToString(); context()->NotifyListeners(event); } } // namespace sessions } // namespace syncer