| Index: ios/chrome/browser/reading_list/reading_list_store.cc
|
| diff --git a/ios/chrome/browser/reading_list/reading_list_store.cc b/ios/chrome/browser/reading_list/reading_list_store.cc
|
| index 0c4ca2b0314d69ded9ffadecb5e40c2ea90d8438..18c9151d76d13d0b222fa2811f3ce1e8dd8dcb34 100644
|
| --- a/ios/chrome/browser/reading_list/reading_list_store.cc
|
| +++ b/ios/chrome/browser/reading_list/reading_list_store.cc
|
| @@ -72,20 +72,20 @@ void ReadingListStore::CommitTransaction() {
|
| }
|
| }
|
|
|
| -void ReadingListStore::SaveEntry(const ReadingListEntry& entry, bool read) {
|
| +void ReadingListStore::SaveEntry(const ReadingListEntry* entry) {
|
| DCHECK(CalledOnValidThread());
|
| auto token = EnsureBatchCreated();
|
|
|
| std::unique_ptr<reading_list::ReadingListLocal> pb_entry =
|
| - entry.AsReadingListLocal(read);
|
| + entry->AsReadingListLocal();
|
|
|
| - batch_->WriteData(entry.URL().spec(), pb_entry->SerializeAsString());
|
| + batch_->WriteData(entry->URL().spec(), pb_entry->SerializeAsString());
|
|
|
| if (!change_processor()->IsTrackingMetadata()) {
|
| return;
|
| }
|
| std::unique_ptr<sync_pb::ReadingListSpecifics> pb_entry_sync =
|
| - entry.AsReadingListSpecifics(read);
|
| + entry->AsReadingListSpecifics();
|
|
|
| std::unique_ptr<syncer::MetadataChangeList> metadata_change_list =
|
| CreateMetadataChangeList();
|
| @@ -94,23 +94,23 @@ void ReadingListStore::SaveEntry(const ReadingListEntry& entry, bool read) {
|
| *entity_data->specifics.mutable_reading_list() = *pb_entry_sync;
|
| entity_data->non_unique_name = pb_entry_sync->entry_id();
|
|
|
| - change_processor()->Put(entry.URL().spec(), std::move(entity_data),
|
| + change_processor()->Put(entry->URL().spec(), std::move(entity_data),
|
| metadata_change_list.get());
|
| batch_->TransferMetadataChanges(std::move(metadata_change_list));
|
| }
|
|
|
| -void ReadingListStore::RemoveEntry(const ReadingListEntry& entry) {
|
| +void ReadingListStore::RemoveEntry(const ReadingListEntry* entry) {
|
| DCHECK(CalledOnValidThread());
|
| auto token = EnsureBatchCreated();
|
|
|
| - batch_->DeleteData(entry.URL().spec());
|
| + batch_->DeleteData(entry->URL().spec());
|
| if (!change_processor()->IsTrackingMetadata()) {
|
| return;
|
| }
|
| std::unique_ptr<syncer::MetadataChangeList> metadata_change_list =
|
| CreateMetadataChangeList();
|
|
|
| - change_processor()->Delete(entry.URL().spec(), metadata_change_list.get());
|
| + change_processor()->Delete(entry->URL().spec(), metadata_change_list.get());
|
| batch_->TransferMetadataChanges(std::move(metadata_change_list));
|
| }
|
|
|
| @@ -125,8 +125,7 @@ void ReadingListStore::OnDatabaseLoad(
|
| nullptr);
|
| return;
|
| }
|
| - auto read = base::MakeUnique<ReadingListEntries>();
|
| - auto unread = base::MakeUnique<ReadingListEntries>();
|
| + auto loaded_entries = base::MakeUnique<ReadingListEntries>();
|
|
|
| for (const syncer::ModelTypeStore::Record& r : *entries.get()) {
|
| // for (const reading_list::ReadingListLocal& pb_entry : *entries) {
|
| @@ -142,14 +141,12 @@ void ReadingListStore::OnDatabaseLoad(
|
| if (!entry) {
|
| continue;
|
| }
|
| - if (proto.status() == reading_list::ReadingListLocal::READ) {
|
| - read->push_back(std::move(*entry));
|
| - } else {
|
| - unread->push_back(std::move(*entry));
|
| - }
|
| + GURL url = entry->URL();
|
| + DCHECK(!loaded_entries->count(url));
|
| + loaded_entries->insert(std::make_pair(url, std::move(*entry)));
|
| }
|
|
|
| - delegate_->StoreLoaded(std::move(unread), std::move(read));
|
| + delegate_->StoreLoaded(std::move(loaded_entries));
|
|
|
| store_->ReadAllMetadata(
|
| base::Bind(&ReadingListStore::OnReadAllMetadata, base::AsWeakPtr(this)));
|
| @@ -220,38 +217,36 @@ syncer::SyncError ReadingListStore::MergeSyncData(
|
| const sync_pb::ReadingListSpecifics& specifics =
|
| kv.second.value().specifics.reading_list();
|
| // Deserialize entry.
|
| - bool read = specifics.status() == sync_pb::ReadingListSpecifics::READ;
|
| std::unique_ptr<ReadingListEntry> entry(
|
| ReadingListEntry::FromReadingListSpecifics(specifics));
|
|
|
| - bool was_read;
|
| const ReadingListEntry* existing_entry =
|
| - model_->GetEntryFromURL(entry->URL(), &was_read);
|
| + model_->GetEntryFromURL(entry->URL());
|
|
|
| if (!existing_entry) {
|
| // This entry is new. Add it to the store and model.
|
| // Convert to local store format and write to store.
|
| std::unique_ptr<reading_list::ReadingListLocal> entry_pb =
|
| - entry->AsReadingListLocal(read);
|
| + entry->AsReadingListLocal();
|
| batch_->WriteData(entry->URL().spec(), entry_pb->SerializeAsString());
|
|
|
| // Notify model about updated entry.
|
| - delegate_->SyncAddEntry(std::move(entry), read);
|
| + delegate_->SyncAddEntry(std::move(entry));
|
| } else if (existing_entry->UpdateTime() < entry->UpdateTime()) {
|
| // The entry from sync is more recent.
|
| // Merge the local data to it and store it.
|
| ReadingListEntry* merged_entry =
|
| - delegate_->SyncMergeEntry(std::move(entry), read);
|
| + delegate_->SyncMergeEntry(std::move(entry));
|
|
|
| // Write to the store.
|
| std::unique_ptr<reading_list::ReadingListLocal> entry_local_pb =
|
| - merged_entry->AsReadingListLocal(read);
|
| + merged_entry->AsReadingListLocal();
|
| batch_->WriteData(entry->URL().spec(),
|
| entry_local_pb->SerializeAsString());
|
|
|
| // Send to sync
|
| std::unique_ptr<sync_pb::ReadingListSpecifics> entry_sync_pb =
|
| - merged_entry->AsReadingListSpecifics(read);
|
| + merged_entry->AsReadingListSpecifics();
|
| auto entity_data = base::MakeUnique<syncer::EntityData>();
|
| *(entity_data->specifics.mutable_reading_list()) = *entry_sync_pb;
|
| entity_data->non_unique_name = entry_sync_pb->entry_id();
|
| @@ -266,7 +261,7 @@ syncer::SyncError ReadingListStore::MergeSyncData(
|
| // Send back the local more recent entry.
|
| // No need to update
|
| std::unique_ptr<sync_pb::ReadingListSpecifics> entry_pb =
|
| - existing_entry->AsReadingListSpecifics(was_read);
|
| + existing_entry->AsReadingListSpecifics();
|
| auto entity_data = base::MakeUnique<syncer::EntityData>();
|
| *(entity_data->specifics.mutable_reading_list()) = *entry_pb;
|
| entity_data->non_unique_name = entry_pb->entry_id();
|
| @@ -277,21 +272,17 @@ syncer::SyncError ReadingListStore::MergeSyncData(
|
| }
|
|
|
| // Commit local only entries to server.
|
| - int unread_count = model_->unread_size();
|
| - int read_count = model_->read_size();
|
| - for (int index = 0; index < unread_count + read_count; index++) {
|
| - bool read = index >= unread_count;
|
| - const ReadingListEntry& entry =
|
| - read ? model_->GetReadEntryAtIndex(index - unread_count)
|
| - : model_->GetUnreadEntryAtIndex(index);
|
| - if (synced_entries.count(entry.URL().spec())) {
|
| + int count = model_->size();
|
| + for (int index = 0; index < count; index++) {
|
| + const ReadingListEntry* entry = model_->GetEntryAt(index);
|
| + if (synced_entries.count(entry->URL().spec())) {
|
| // Entry already exists and has been merged above.
|
| continue;
|
| }
|
|
|
| // Local entry has later timestamp. It should be committed to server.
|
| std::unique_ptr<sync_pb::ReadingListSpecifics> entry_pb =
|
| - entry.AsReadingListSpecifics(read);
|
| + entry->AsReadingListSpecifics();
|
|
|
| auto entity_data = base::MakeUnique<syncer::EntityData>();
|
| *(entity_data->specifics.mutable_reading_list()) = *entry_pb;
|
| @@ -327,38 +318,36 @@ syncer::SyncError ReadingListStore::ApplySyncChanges(
|
| // Deserialize entry.
|
| const sync_pb::ReadingListSpecifics& specifics =
|
| change.data().specifics.reading_list();
|
| - bool read = specifics.status() == sync_pb::ReadingListSpecifics::READ;
|
| std::unique_ptr<ReadingListEntry> entry(
|
| ReadingListEntry::FromReadingListSpecifics(specifics));
|
|
|
| - bool was_read;
|
| const ReadingListEntry* existing_entry =
|
| - model_->GetEntryFromURL(entry->URL(), &was_read);
|
| + model_->GetEntryFromURL(entry->URL());
|
|
|
| if (!existing_entry) {
|
| // This entry is new. Add it to the store and model.
|
| // Convert to local store format and write to store.
|
| std::unique_ptr<reading_list::ReadingListLocal> entry_pb =
|
| - entry->AsReadingListLocal(read);
|
| + entry->AsReadingListLocal();
|
| batch_->WriteData(entry->URL().spec(), entry_pb->SerializeAsString());
|
|
|
| // Notify model about updated entry.
|
| - delegate_->SyncAddEntry(std::move(entry), read);
|
| + delegate_->SyncAddEntry(std::move(entry));
|
| } else if (existing_entry->UpdateTime() < entry->UpdateTime()) {
|
| // The entry from sync is more recent.
|
| // Merge the local data to it and store it.
|
| ReadingListEntry* merged_entry =
|
| - delegate_->SyncMergeEntry(std::move(entry), read);
|
| + delegate_->SyncMergeEntry(std::move(entry));
|
|
|
| // Write to the store.
|
| std::unique_ptr<reading_list::ReadingListLocal> entry_local_pb =
|
| - merged_entry->AsReadingListLocal(read);
|
| + merged_entry->AsReadingListLocal();
|
| batch_->WriteData(merged_entry->URL().spec(),
|
| entry_local_pb->SerializeAsString());
|
|
|
| // Send to sync
|
| std::unique_ptr<sync_pb::ReadingListSpecifics> entry_sync_pb =
|
| - merged_entry->AsReadingListSpecifics(read);
|
| + merged_entry->AsReadingListSpecifics();
|
| auto entity_data = base::MakeUnique<syncer::EntityData>();
|
| *(entity_data->specifics.mutable_reading_list()) = *entry_sync_pb;
|
| entity_data->non_unique_name = entry_sync_pb->entry_id();
|
| @@ -374,7 +363,7 @@ syncer::SyncError ReadingListStore::ApplySyncChanges(
|
| // Send back the local more recent entry.
|
| // No need to update
|
| std::unique_ptr<sync_pb::ReadingListSpecifics> entry_pb =
|
| - existing_entry->AsReadingListSpecifics(was_read);
|
| + existing_entry->AsReadingListSpecifics();
|
| auto entity_data = base::MakeUnique<syncer::EntityData>();
|
| *(entity_data->specifics.mutable_reading_list()) = *entry_pb;
|
| entity_data->non_unique_name = entry_pb->entry_id();
|
| @@ -394,11 +383,9 @@ void ReadingListStore::GetData(StorageKeyList storage_keys,
|
| DCHECK(CalledOnValidThread());
|
| auto batch = base::MakeUnique<syncer::MutableDataBatch>();
|
| for (std::string url_string : storage_keys) {
|
| - bool read;
|
| - const ReadingListEntry* entry =
|
| - model_->GetEntryFromURL(GURL(url_string), &read);
|
| + const ReadingListEntry* entry = model_->GetEntryFromURL(GURL(url_string));
|
| if (entry) {
|
| - AddEntryToBatch(batch.get(), *entry, read);
|
| + AddEntryToBatch(batch.get(), entry);
|
| }
|
| }
|
|
|
| @@ -408,25 +395,20 @@ void ReadingListStore::GetData(StorageKeyList storage_keys,
|
| void ReadingListStore::GetAllData(DataCallback callback) {
|
| DCHECK(CalledOnValidThread());
|
| auto batch = base::MakeUnique<syncer::MutableDataBatch>();
|
| - int unread_count = model_->unread_size();
|
| - int read_count = model_->read_size();
|
| - for (int index = 0; index < unread_count + read_count; index++) {
|
| - bool read = index >= unread_count;
|
| - const ReadingListEntry& entry =
|
| - read ? model_->GetReadEntryAtIndex(index - unread_count)
|
| - : model_->GetUnreadEntryAtIndex(index);
|
| - AddEntryToBatch(batch.get(), entry, read);
|
| + int count = model_->size();
|
| + for (int index = 0; index < count; index++) {
|
| + const ReadingListEntry* entry = model_->GetEntryAt(index);
|
| + AddEntryToBatch(batch.get(), entry);
|
| }
|
|
|
| callback.Run(syncer::SyncError(), std::move(batch));
|
| }
|
|
|
| void ReadingListStore::AddEntryToBatch(syncer::MutableDataBatch* batch,
|
| - const ReadingListEntry& entry,
|
| - bool read) {
|
| + const ReadingListEntry* entry) {
|
| DCHECK(CalledOnValidThread());
|
| std::unique_ptr<sync_pb::ReadingListSpecifics> entry_pb =
|
| - entry.AsReadingListSpecifics(read);
|
| + entry->AsReadingListSpecifics();
|
|
|
| std::unique_ptr<syncer::EntityData> entity_data(new syncer::EntityData());
|
| *(entity_data->specifics.mutable_reading_list()) = *entry_pb;
|
|
|