blob: fa7e2c802f13e0508e818036fb96e5056665a740 [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/sync/engine/cycle/sync_cycle_snapshot.h"
#include <string>
#include <utility>
#include "base/base64.h"
#include "base/i18n/time_formatting.h"
#include "base/json/json_writer.h"
#include "base/values.h"
#include "components/sync/protocol/proto_enum_conversions.h"
namespace syncer {
namespace {
std::u16string FormatTimeDelta(base::TimeDelta delta) {
std::u16string value;
bool ok =
base::TimeDurationFormat(delta, base::DURATION_WIDTH_NARROW, &value);
DCHECK(ok);
return value;
}
} // namespace
SyncCycleSnapshot::SyncCycleSnapshot()
: is_silenced_(false),
num_server_conflicts_(0),
notifications_enabled_(false),
has_remaining_local_changes_(false),
is_initialized_(false) {}
SyncCycleSnapshot::SyncCycleSnapshot(
const std::string& birthday,
const std::string& bag_of_chips,
const ModelNeutralState& model_neutral_state,
const ProgressMarkerMap& download_progress_markers,
bool is_silenced,
int num_server_conflicts,
bool notifications_enabled,
base::Time sync_start_time,
base::Time poll_finish_time,
sync_pb::SyncEnums::GetUpdatesOrigin get_updates_origin,
base::TimeDelta poll_interval,
bool has_remaining_local_changes)
: birthday_(birthday),
bag_of_chips_(bag_of_chips),
model_neutral_state_(model_neutral_state),
download_progress_markers_(download_progress_markers),
is_silenced_(is_silenced),
num_server_conflicts_(num_server_conflicts),
notifications_enabled_(notifications_enabled),
sync_start_time_(sync_start_time),
poll_finish_time_(poll_finish_time),
get_updates_origin_(get_updates_origin),
poll_interval_(poll_interval),
has_remaining_local_changes_(has_remaining_local_changes),
is_initialized_(true) {}
SyncCycleSnapshot::SyncCycleSnapshot(const SyncCycleSnapshot& other) = default;
SyncCycleSnapshot::~SyncCycleSnapshot() = default;
base::Value::Dict SyncCycleSnapshot::ToValue() const {
std::string encoded_bag_of_chips = base::Base64Encode(bag_of_chips_);
return base::Value::Dict()
.Set("birthday", birthday_)
.Set("bagOfChips", encoded_bag_of_chips)
.Set("numSuccessfulCommits", model_neutral_state_.num_successful_commits)
.Set("numSuccessfulBookmarkCommits",
model_neutral_state_.num_successful_bookmark_commits)
.Set("numUpdatesDownloadedTotal",
model_neutral_state_.num_updates_downloaded_total)
.Set("numTombstoneUpdatesDownloadedTotal",
model_neutral_state_.num_tombstone_updates_downloaded_total)
.Set("downloadProgressMarkers",
ProgressMarkerMapToValueDict(download_progress_markers_))
.Set("isSilenced", is_silenced_)
// We don't care too much if we lose precision here, also.
.Set("numServerConflicts", num_server_conflicts_)
.Set("getUpdatesOrigin", ProtoEnumToString(get_updates_origin_))
.Set("notificationsEnabled", notifications_enabled_)
.Set("hasRemainingLocalChanges", has_remaining_local_changes_)
.Set("poll_interval", FormatTimeDelta(poll_interval_))
.Set("poll_finish_time",
base::TimeFormatShortDateAndTimeWithTimeZone(poll_finish_time_));
}
std::string SyncCycleSnapshot::ToString() const {
std::string json;
base::JSONWriter::WriteWithOptions(
ToValue(), base::JSONWriter::OPTIONS_PRETTY_PRINT, &json);
return json;
}
const ProgressMarkerMap& SyncCycleSnapshot::download_progress_markers() const {
return download_progress_markers_;
}
bool SyncCycleSnapshot::is_silenced() const {
return is_silenced_;
}
int SyncCycleSnapshot::num_server_conflicts() const {
return num_server_conflicts_;
}
bool SyncCycleSnapshot::notifications_enabled() const {
return notifications_enabled_;
}
base::Time SyncCycleSnapshot::sync_start_time() const {
return sync_start_time_;
}
base::Time SyncCycleSnapshot::poll_finish_time() const {
return poll_finish_time_;
}
bool SyncCycleSnapshot::has_remaining_local_changes() const {
return has_remaining_local_changes_;
}
bool SyncCycleSnapshot::is_initialized() const {
return is_initialized_;
}
sync_pb::SyncEnums::GetUpdatesOrigin SyncCycleSnapshot::get_updates_origin()
const {
return get_updates_origin_;
}
base::TimeDelta SyncCycleSnapshot::poll_interval() const {
return poll_interval_;
}
} // namespace syncer