OLD | NEW |
| (Empty) |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "sync/internal_api/public/simple_metadata_change_list.h" | |
6 | |
7 namespace syncer_v2 { | |
8 | |
9 SimpleMetadataChangeList::SimpleMetadataChangeList() {} | |
10 | |
11 SimpleMetadataChangeList::~SimpleMetadataChangeList() {} | |
12 | |
13 void SimpleMetadataChangeList::UpdateDataTypeState( | |
14 const sync_pb::DataTypeState& data_type_state) { | |
15 state_change_.reset(new DataTypeStateChange{UPDATE, data_type_state}); | |
16 } | |
17 | |
18 void SimpleMetadataChangeList::ClearDataTypeState() { | |
19 state_change_.reset(new DataTypeStateChange{CLEAR}); | |
20 } | |
21 | |
22 void SimpleMetadataChangeList::UpdateMetadata( | |
23 const std::string& client_tag, | |
24 const sync_pb::EntityMetadata& metadata) { | |
25 metadata_changes_[client_tag] = {UPDATE, metadata}; | |
26 } | |
27 | |
28 void SimpleMetadataChangeList::ClearMetadata(const std::string& client_tag) { | |
29 metadata_changes_[client_tag] = {CLEAR, sync_pb::EntityMetadata()}; | |
30 } | |
31 | |
32 const SimpleMetadataChangeList::MetadataChanges& | |
33 SimpleMetadataChangeList::GetMetadataChanges() const { | |
34 return metadata_changes_; | |
35 } | |
36 | |
37 bool SimpleMetadataChangeList::HasDataTypeStateChange() const { | |
38 return state_change_.get() != nullptr; | |
39 } | |
40 | |
41 const SimpleMetadataChangeList::DataTypeStateChange& | |
42 SimpleMetadataChangeList::GetDataTypeStateChange() const { | |
43 return *state_change_.get(); | |
44 } | |
45 | |
46 void SimpleMetadataChangeList::TransferChanges( | |
47 ModelTypeStore* store, | |
48 ModelTypeStore::WriteBatch* write_batch) { | |
49 DCHECK(write_batch); | |
50 DCHECK(store); | |
51 for (const auto& pair : metadata_changes_) { | |
52 const std::string& key = pair.first; | |
53 const MetadataChange& change = pair.second; | |
54 switch (change.type) { | |
55 case UPDATE: | |
56 store->WriteMetadata(write_batch, key, | |
57 change.metadata.SerializeAsString()); | |
58 break; | |
59 case CLEAR: | |
60 store->DeleteMetadata(write_batch, key); | |
61 break; | |
62 } | |
63 } | |
64 metadata_changes_.clear(); | |
65 if (HasDataTypeStateChange()) { | |
66 switch (state_change_->type) { | |
67 case UPDATE: | |
68 store->WriteGlobalMetadata(write_batch, | |
69 state_change_->state.SerializeAsString()); | |
70 break; | |
71 case CLEAR: | |
72 store->DeleteGlobalMetadata(write_batch); | |
73 break; | |
74 } | |
75 state_change_.reset(); | |
76 } | |
77 } | |
78 | |
79 } // namespace syncer_v2 | |
OLD | NEW |