Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(824)

Unified Diff: ios/chrome/browser/reading_list/reading_list_store.cc

Issue 2525663002: Refactor Reading List Model to use URL as key. (Closed)
Patch Set: format Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698