From 7e9ee370ed62f73734820fb16dc08e65c8af1225 Mon Sep 17 00:00:00 2001 From: NejcZdovc Date: Wed, 13 May 2020 08:59:23 +0200 Subject: [PATCH] Migrates processed publishers into db --- .../publisher_info_schema_current.txt | 2 + vendor/bat-native-ledger/BUILD.gn | 2 + .../internal/contribution/unverified.cc | 46 ++++- .../ledger/internal/contribution/unverified.h | 10 ++ .../bat/ledger/internal/database/database.cc | 17 ++ .../bat/ledger/internal/database/database.h | 13 ++ .../internal/database/database_migration.cc | 7 + .../internal/database/database_migration.h | 2 + .../database/database_processed_publisher.cc | 163 ++++++++++++++++++ .../database/database_processed_publisher.h | 43 +++++ .../src/bat/ledger/internal/ledger_impl.cc | 18 +- .../src/bat/ledger/internal/ledger_impl.h | 10 +- .../bat/ledger/internal/ledger_impl_mock.h | 6 +- .../ledger/internal/state/state_migration.cc | 34 +++- .../ledger/internal/state/state_migration.h | 8 +- 15 files changed, 353 insertions(+), 28 deletions(-) create mode 100644 vendor/bat-native-ledger/src/bat/ledger/internal/database/database_processed_publisher.cc create mode 100644 vendor/bat-native-ledger/src/bat/ledger/internal/database/database_processed_publisher.h diff --git a/test/data/rewards-data/migration/publisher_info_schema_current.txt b/test/data/rewards-data/migration/publisher_info_schema_current.txt index d7582d68e45d..6761c42448d0 100644 --- a/test/data/rewards-data/migration/publisher_info_schema_current.txt +++ b/test/data/rewards-data/migration/publisher_info_schema_current.txt @@ -26,6 +26,7 @@ index|sqlite_autoindex_creds_batch_1|creds_batch| index|sqlite_autoindex_creds_batch_2|creds_batch| index|sqlite_autoindex_media_publisher_info_1|media_publisher_info| index|sqlite_autoindex_meta_1|meta| +index|sqlite_autoindex_processed_publisher_1|processed_publisher| index|sqlite_autoindex_promotion_1|promotion| index|sqlite_autoindex_publisher_info_1|publisher_info| index|sqlite_autoindex_recurring_donation_1|recurring_donation| @@ -48,6 +49,7 @@ table|creds_batch|creds_batch|CREATE TABLE creds_batch (creds_id TEXT PRIMARY KE table|media_publisher_info|media_publisher_info|CREATE TABLE media_publisher_info (media_key TEXT NOT NULL PRIMARY KEY UNIQUE,publisher_id LONGVARCHAR NOT NULL) table|meta|meta|CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY, value LONGVARCHAR) table|pending_contribution|pending_contribution|CREATE TABLE pending_contribution (pending_contribution_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,publisher_id LONGVARCHAR NOT NULL,amount DOUBLE DEFAULT 0 NOT NULL,added_date INTEGER DEFAULT 0 NOT NULL,viewing_id LONGVARCHAR NOT NULL,type INTEGER NOT NULL) +table|processed_publisher|processed_publisher|CREATE TABLE processed_publisher (publisher_key TEXT PRIMARY KEY NOT NULL,created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP) table|promotion|promotion|CREATE TABLE promotion (promotion_id TEXT NOT NULL,version INTEGER NOT NULL,type INTEGER NOT NULL,public_keys TEXT NOT NULL,suggestions INTEGER NOT NULL DEFAULT 0,approximate_value DOUBLE NOT NULL DEFAULT 0,status INTEGER NOT NULL DEFAULT 0,expires_at TIMESTAMP NOT NULL,created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, claimed_at TIMESTAMP, claim_id TEXT,PRIMARY KEY (promotion_id)) table|publisher_info|publisher_info|CREATE TABLE publisher_info(publisher_id LONGVARCHAR PRIMARY KEY NOT NULL UNIQUE,excluded INTEGER DEFAULT 0 NOT NULL,name TEXT NOT NULL,favIcon TEXT NOT NULL,url TEXT NOT NULL,provider TEXT NOT NULL) table|recurring_donation|recurring_donation|CREATE TABLE recurring_donation (publisher_id LONGVARCHAR NOT NULL PRIMARY KEY UNIQUE,amount DOUBLE DEFAULT 0 NOT NULL,added_date INTEGER DEFAULT 0 NOT NULL) diff --git a/vendor/bat-native-ledger/BUILD.gn b/vendor/bat-native-ledger/BUILD.gn index 26820e5d30c7..51e51936edb4 100644 --- a/vendor/bat-native-ledger/BUILD.gn +++ b/vendor/bat-native-ledger/BUILD.gn @@ -177,6 +177,8 @@ source_set("ledger") { "src/bat/ledger/internal/database/database_multi_tables.h", "src/bat/ledger/internal/database/database_pending_contribution.cc", "src/bat/ledger/internal/database/database_pending_contribution.h", + "src/bat/ledger/internal/database/database_processed_publisher.cc", + "src/bat/ledger/internal/database/database_processed_publisher.h", "src/bat/ledger/internal/database/database_promotion.cc", "src/bat/ledger/internal/database/database_promotion.h", "src/bat/ledger/internal/database/database_promotion_creds.cc", diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/unverified.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/unverified.cc index 596a85bbaa35..b27f0a66131e 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/unverified.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/unverified.cc @@ -88,13 +88,13 @@ void Unverified::OnContributeUnverifiedPublishers( return; } - if (!ledger_->WasPublisherAlreadyProcessed(current->publisher_key)) { - ledger_->OnContributeUnverifiedPublishers( - ledger::Result::VERIFIED_PUBLISHER, - current->publisher_key, - current->name); - ledger_->SavePublisherProcessed(current->publisher_key); - } + auto get_callback = std::bind(&Unverified::WasPublisherProcessed, + this, + _1, + current->publisher_key, + current->name); + + ledger_->WasPublisherProcessed(current->publisher_key, get_callback); // Trigger contribution if (balance >= current->amount) { @@ -129,6 +129,38 @@ void Unverified::OnContributeUnverifiedPublishers( } } +void Unverified::WasPublisherProcessed( + const ledger::Result result, + const std::string& publisher_key, + const std::string& name) { + if (result == ledger::Result::LEDGER_ERROR) { + BLOG(ledger_, ledger::LogLevel::LOG_ERROR) << "Coudn't get processed data"; + return; + } + + if (result == ledger::Result::LEDGER_OK) { + // Nothing to do here as publisher was already processed + return; + } + + auto save_callback = std::bind(&Unverified::ProcessedPublisherSaved, + this, + _1, + publisher_key, + name); + ledger_->SaveProcessedPublisherList({publisher_key}, save_callback); +} + +void Unverified::ProcessedPublisherSaved( + const ledger::Result result, + const std::string& publisher_key, + const std::string& name) { + ledger_->OnContributeUnverifiedPublishers( + ledger::Result::VERIFIED_PUBLISHER, + publisher_key, + name); +} + void Unverified::OnRemovePendingContribution( ledger::Result result) { if (result == ledger::Result::LEDGER_OK) { diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/unverified.h b/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/unverified.h index 212d69f4cb60..07f7e54bd427 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/unverified.h +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/contribution/unverified.h @@ -34,6 +34,16 @@ class Unverified { void OnTimer(uint32_t timer_id); private: + void WasPublisherProcessed( + const ledger::Result result, + const std::string& publisher_key, + const std::string& name); + + void ProcessedPublisherSaved( + const ledger::Result result, + const std::string& publisher_key, + const std::string& name); + void OnRemovePendingContribution(ledger::Result result); void OnContributeUnverifiedBalance( diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/database/database.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/database/database.cc index 10298d02da23..a0ac97d59f86 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/database/database.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/database/database.cc @@ -15,6 +15,7 @@ #include "bat/ledger/internal/database/database_media_publisher_info.h" #include "bat/ledger/internal/database/database_multi_tables.h" #include "bat/ledger/internal/database/database_pending_contribution.h" +#include "bat/ledger/internal/database/database_processed_publisher.h" #include "bat/ledger/internal/database/database_promotion.h" #include "bat/ledger/internal/database/database_publisher_info.h" #include "bat/ledger/internal/database/database_recurring_tip.h" @@ -41,6 +42,7 @@ Database::Database(bat_ledger::LedgerImpl* ledger) : multi_tables_ = std::make_unique(ledger_); pending_contribution_ = std::make_unique(ledger_); + processed_publisher_ = std::make_unique(ledger_); promotion_ = std::make_unique(ledger_); publisher_info_ = std::make_unique(ledger_); recurring_tip_ = std::make_unique(ledger_); @@ -325,6 +327,21 @@ void Database::RemoveAllPendingContributions(ledger::ResultCallback callback) { pending_contribution_->DeleteAllRecords(callback); } +/** + * PROCESSED PUBLISHER + */ +void Database::SaveProcessedPublisherList( + const std::vector& list, + ledger::ResultCallback callback) { + processed_publisher_->InsertOrUpdateList(list, callback); +} + +void Database::WasPublisherProcessed( + const std::string& publisher_key, + ledger::ResultCallback callback) { + processed_publisher_->WasProcessed(publisher_key, callback); +} + /** * PROMOTION */ diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/database/database.h b/vendor/bat-native-ledger/src/bat/ledger/internal/database/database.h index 2da03ffe01f5..39f777e631e5 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/database/database.h +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/database/database.h @@ -29,6 +29,7 @@ class DatabaseContributionQueue; class DatabaseMediaPublisherInfo; class DatabaseMultiTables; class DatabasePendingContribution; +class DatabaseProcessedPublisher; class DatabasePromotion; class DatabasePublisherInfo; class DatabaseRecurringTip; @@ -220,6 +221,17 @@ class Database { void RemoveAllPendingContributions(ledger::ResultCallback callback); + /** + * PROCESSED PUBLISHER + */ + void SaveProcessedPublisherList( + const std::vector& list, + ledger::ResultCallback callback); + + void WasPublisherProcessed( + const std::string& publisher_key, + ledger::ResultCallback callback); + /** * PROMOTION */ @@ -385,6 +397,7 @@ class Database { std::unique_ptr contribution_queue_; std::unique_ptr creds_batch_; std::unique_ptr pending_contribution_; + std::unique_ptr processed_publisher_; std::unique_ptr promotion_; std::unique_ptr media_publisher_info_; std::unique_ptr multi_tables_; diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/database/database_migration.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/database/database_migration.cc index 82d7b000d0e8..5e4e2db59b16 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/database/database_migration.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/database/database_migration.cc @@ -14,6 +14,7 @@ #include "bat/ledger/internal/database/database_media_publisher_info.h" #include "bat/ledger/internal/database/database_migration.h" #include "bat/ledger/internal/database/database_pending_contribution.h" +#include "bat/ledger/internal/database/database_processed_publisher.h" #include "bat/ledger/internal/database/database_promotion.h" #include "bat/ledger/internal/database/database_publisher_info.h" #include "bat/ledger/internal/database/database_recurring_tip.h" @@ -39,6 +40,8 @@ DatabaseMigration::DatabaseMigration(bat_ledger::LedgerImpl* ledger) : media_publisher_info_ = std::make_unique(ledger_); pending_contribution_ = std::make_unique(ledger_); + processed_publisher_ = + std::make_unique(ledger_); promotion_ = std::make_unique(ledger_); publisher_info_ = std::make_unique(ledger_); recurring_tip_ = std::make_unique(ledger_); @@ -124,6 +127,10 @@ bool DatabaseMigration::Migrate( return false; } + if (!processed_publisher_->Migrate(transaction, target)) { + return false; + } + if (!promotion_->Migrate(transaction, target)) { return false; } diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/database/database_migration.h b/vendor/bat-native-ledger/src/bat/ledger/internal/database/database_migration.h index 1e631e436178..27cf8a489f82 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/database/database_migration.h +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/database/database_migration.h @@ -23,6 +23,7 @@ class DatabaseContributionQueue; class DatabaseCredsBatch; class DatabaseMediaPublisherInfo; class DatabasePendingContribution; +class DatabaseProcessedPublisher; class DatabasePromotion; class DatabasePublisherInfo; class DatabaseRecurringTip; @@ -50,6 +51,7 @@ class DatabaseMigration { std::unique_ptr creds_batch_; std::unique_ptr media_publisher_info_; std::unique_ptr pending_contribution_; + std::unique_ptr processed_publisher_; std::unique_ptr promotion_; std::unique_ptr publisher_info_; std::unique_ptr recurring_tip_; diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/database/database_processed_publisher.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/database/database_processed_publisher.cc new file mode 100644 index 000000000000..3be1c7f0388d --- /dev/null +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/database/database_processed_publisher.cc @@ -0,0 +1,163 @@ +/* Copyright (c) 2020 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include +#include + +#include "base/strings/stringprintf.h" +#include "bat/ledger/internal/database/database_processed_publisher.h" +#include "bat/ledger/internal/database/database_util.h" +#include "bat/ledger/internal/ledger_impl.h" + +using std::placeholders::_1; + +namespace { + +const char kTableName[] = "processed_publisher"; + +} // namespace + +namespace braveledger_database { + +DatabaseProcessedPublisher::DatabaseProcessedPublisher( + bat_ledger::LedgerImpl* ledger) : + DatabaseTable(ledger) { +} + +DatabaseProcessedPublisher::~DatabaseProcessedPublisher() = default; + +bool DatabaseProcessedPublisher::CreateTableV22( + ledger::DBTransaction* transaction) { + DCHECK(transaction); + + const std::string query = base::StringPrintf( + "CREATE TABLE %s (" + "publisher_key TEXT PRIMARY KEY NOT NULL," + "created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP" + ")", + kTableName); + + auto command = ledger::DBCommand::New(); + command->type = ledger::DBCommand::Type::EXECUTE; + command->command = query; + transaction->commands.push_back(std::move(command)); + + return true; +} + +bool DatabaseProcessedPublisher::Migrate( + ledger::DBTransaction* transaction, + const int target) { + DCHECK(transaction); + + switch (target) { + case 22: { + return MigrateToV22(transaction); + } + default: { + return true; + } + } +} + +bool DatabaseProcessedPublisher::MigrateToV22( + ledger::DBTransaction* transaction) { + DCHECK(transaction); + + if (!DropTable(transaction, kTableName)) { + return false; + } + + if (!CreateTableV22(transaction)) { + return false; + } + + return true; +} + +void DatabaseProcessedPublisher::InsertOrUpdateList( + const std::vector& list, + ledger::ResultCallback callback) { + if (list.empty()) { + callback(ledger::Result::LEDGER_OK); + return; + } + + auto transaction = ledger::DBTransaction::New(); + + const std::string query = base::StringPrintf( + "INSERT OR IGNORE INTO %s (publisher_key) VALUES (?);", + kTableName); + + for (const auto& publisher_key : list) { + auto command = ledger::DBCommand::New(); + command->type = ledger::DBCommand::Type::RUN; + command->command = query; + + BindString(command.get(), 0, publisher_key); + + transaction->commands.push_back(std::move(command)); + } + + auto transaction_callback = std::bind(&OnResultCallback, + _1, + callback); + + ledger_->RunDBTransaction(std::move(transaction), transaction_callback); +} + +void DatabaseProcessedPublisher::WasProcessed( + const std::string& publisher_key, + ledger::ResultCallback callback) { + if (publisher_key.empty()) { + callback(ledger::Result::LEDGER_ERROR); + return; + } + + auto transaction = ledger::DBTransaction::New(); + + const std::string query = base::StringPrintf( + "SELECT publisher_key FROM %s WHERE publisher_key = ?", + kTableName); + + auto command = ledger::DBCommand::New(); + command->type = ledger::DBCommand::Type::READ; + command->command = query; + + BindString(command.get(), 0, publisher_key); + + command->record_bindings = { + ledger::DBCommand::RecordBindingType::STRING_TYPE + }; + + transaction->commands.push_back(std::move(command)); + + auto transaction_callback = + std::bind(&DatabaseProcessedPublisher::OnWasProcessed, + this, + _1, + callback); + + ledger_->RunDBTransaction(std::move(transaction), transaction_callback); +} + +void DatabaseProcessedPublisher::OnWasProcessed( + ledger::DBCommandResponsePtr response, + ledger::ResultCallback callback) { + if (!response || + response->status != ledger::DBCommandResponse::Status::RESPONSE_OK) { + callback(ledger::Result::LEDGER_ERROR); + return; + } + + if (response->result->get_records().empty()) { + callback(ledger::Result::NOT_FOUND); + return; + } + + callback(ledger::Result::LEDGER_OK); +} + +} // namespace braveledger_database diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/database/database_processed_publisher.h b/vendor/bat-native-ledger/src/bat/ledger/internal/database/database_processed_publisher.h new file mode 100644 index 000000000000..d1fcba45043f --- /dev/null +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/database/database_processed_publisher.h @@ -0,0 +1,43 @@ +/* Copyright (c) 2020 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef BRAVELEDGER_DATABASE_DATABASE_PROCESSED_PUBLISHER_H_ +#define BRAVELEDGER_DATABASE_DATABASE_PROCESSED_PUBLISHER_H_ + +#include +#include + +#include "bat/ledger/internal/database/database_table.h" + +namespace braveledger_database { + +class DatabaseProcessedPublisher : public DatabaseTable { + public: + explicit DatabaseProcessedPublisher(bat_ledger::LedgerImpl* ledger); + ~DatabaseProcessedPublisher() override; + + bool Migrate(ledger::DBTransaction* transaction, const int target) override; + + void InsertOrUpdateList( + const std::vector& list, + ledger::ResultCallback callback); + + void WasProcessed( + const std::string& publisher_key, + ledger::ResultCallback callback); + + private: + bool CreateTableV22(ledger::DBTransaction* transaction); + + bool MigrateToV22(ledger::DBTransaction* transaction); + + void OnWasProcessed( + ledger::DBCommandResponsePtr response, + ledger::ResultCallback callback); +}; + +} // namespace braveledger_database + +#endif // BRAVELEDGER_DATABASE_DATABASE_PROCESSED_PUBLISHER_H_ diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.cc index 27a23c929791..aab01de36cca 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.cc @@ -1312,14 +1312,10 @@ void LedgerImpl::OnContributeUnverifiedPublishers( publisher_name); } -void LedgerImpl::SavePublisherProcessed(const std::string& publisher_key) { - // TODO(nejc): implement -} - -bool LedgerImpl::WasPublisherAlreadyProcessed( - const std::string& publisher_key) { - // TODO(nejc): implement - return false; +void LedgerImpl::WasPublisherProcessed( + const std::string& publisher_key, + ledger::ResultCallback callback) { + bat_database_->WasPublisherProcessed(publisher_key, callback); } void LedgerImpl::FetchBalance(ledger::FetchBalanceCallback callback) { @@ -1871,4 +1867,10 @@ void LedgerImpl::SaveBalanceReportInfoList( bat_database_->SaveBalanceReportInfoList(std::move(list), callback); } +void LedgerImpl::SaveProcessedPublisherList( + const std::vector& list, + ledger::ResultCallback callback) { + bat_database_->SaveProcessedPublisherList(list, callback); +} + } // namespace bat_ledger diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.h b/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.h index d15ac3329530..b91661099706 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.h +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.h @@ -438,9 +438,9 @@ class LedgerImpl : public ledger::Ledger { const std::string& publisher_key = "", const std::string& publisher_name = ""); - void SavePublisherProcessed(const std::string& publisher_key); - - bool WasPublisherAlreadyProcessed(const std::string& publisher_key); + void WasPublisherProcessed( + const std::string& publisher_key, + ledger::ResultCallback callback); void FetchBalance(ledger::FetchBalanceCallback callback) override; @@ -760,6 +760,10 @@ class LedgerImpl : public ledger::Ledger { ledger::BalanceReportInfoList list, ledger::ResultCallback callback); + void SaveProcessedPublisherList( + const std::vector& list, + ledger::ResultCallback callback); + private: void OnStateInitialized( const ledger::Result result, diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl_mock.h b/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl_mock.h index 16e67d62dbe7..c55fde233a96 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl_mock.h +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl_mock.h @@ -390,9 +390,9 @@ class MockLedgerImpl : public LedgerImpl { MOCK_METHOD3(OnContributeUnverifiedPublishers, void(ledger::Result, const std::string&, const std::string&)); - MOCK_METHOD1(SavePublisherProcessed, void(const std::string&)); - - MOCK_METHOD1(WasPublisherAlreadyProcessed, bool(const std::string&)); + MOCK_METHOD2(WasPublisherProcessed, void( + const std::string&, + ledger::ResultCallback)); MOCK_METHOD1(FetchBalance, void(ledger::FetchBalanceCallback)); diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/state/state_migration.cc b/vendor/bat-native-ledger/src/bat/ledger/internal/state/state_migration.cc index b57d718a1fd0..34f4e8c45438 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/state/state_migration.cc +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/state/state_migration.cc @@ -122,7 +122,7 @@ void StateMigration::OnLoadState( ledger::BalanceReportInfoList reports; legacy_publisher_->GetAllBalanceReports(&reports); if (!reports.empty()) { - auto save_callback = std::bind(&StateMigration::OnBalanceReportsSaved, + auto save_callback = std::bind(&StateMigration::BalanceReportsSaved, this, _1, callback); @@ -131,20 +131,42 @@ void StateMigration::OnLoadState( return; } - // TODO(nejc): migrate processed publishers in db - - callback(ledger::Result::LEDGER_OK); + SaveProcessedPublishers(callback); } -void StateMigration::OnBalanceReportsSaved( +void StateMigration::BalanceReportsSaved( const ledger::Result result, ledger::ResultCallback callback) { if (result != ledger::Result::LEDGER_OK) { + BLOG(ledger_, ledger::LogLevel::LOG_ERROR) << + "Balance report save failed"; callback(result); return; } - // TODO(nejc): migrate processed publishers in db + SaveProcessedPublishers(callback); +} + +void StateMigration::SaveProcessedPublishers(ledger::ResultCallback callback) { + auto save_callback = std::bind(&StateMigration::ProcessedPublisherSaved, + this, + _1, + callback); + + ledger_->SaveProcessedPublisherList( + legacy_publisher_->GetAlreadyProcessedPublishers(), + save_callback); +} + +void StateMigration::ProcessedPublisherSaved( + const ledger::Result result, + ledger::ResultCallback callback) { + if (result != ledger::Result::LEDGER_OK) { + BLOG(ledger_, ledger::LogLevel::LOG_ERROR) << + "Processed publisher save failed"; + callback(result); + return; + } callback(ledger::Result::LEDGER_OK); } diff --git a/vendor/bat-native-ledger/src/bat/ledger/internal/state/state_migration.h b/vendor/bat-native-ledger/src/bat/ledger/internal/state/state_migration.h index 6d5c70db05e7..d734d2cedef2 100644 --- a/vendor/bat-native-ledger/src/bat/ledger/internal/state/state_migration.h +++ b/vendor/bat-native-ledger/src/bat/ledger/internal/state/state_migration.h @@ -37,7 +37,13 @@ class StateMigration { const ledger::Result result, ledger::ResultCallback callback); - void OnBalanceReportsSaved( + void BalanceReportsSaved( + const ledger::Result result, + ledger::ResultCallback callback); + + void SaveProcessedPublishers(ledger::ResultCallback callback); + + void ProcessedPublisherSaved( const ledger::Result result, ledger::ResultCallback callback);