Skip to content

Commit

Permalink
Improve NFT pinning queue
Browse files Browse the repository at this point in the history
  • Loading branch information
cypt4 committed Apr 13, 2023
1 parent ae593fe commit cdf57f2
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 19 deletions.
45 changes: 29 additions & 16 deletions components/brave_wallet/browser/brave_wallet_auto_pin_service.cc
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,12 @@ void BraveWalletAutoPinService::OnTokenAdded(BlockchainTokenPtr token) {
if (!BraveWalletPinService::IsTokenSupportedForPinning(token)) {
return;
}
PostPinToken(std::move(token));
tokens_.insert(token.Clone());
base::EraseIf(queue_, [&token](const std::unique_ptr<IntentData>& intent) {
return intent->token == token;
});
AddOrExecute(
std::make_unique<IntentData>(token, Operation::kAdd, absl::nullopt));
}

void BraveWalletAutoPinService::OnTokenRemoved(BlockchainTokenPtr token) {
Expand All @@ -97,10 +102,12 @@ void BraveWalletAutoPinService::OnTokenRemoved(BlockchainTokenPtr token) {
if (!BraveWalletPinService::IsTokenSupportedForPinning(token)) {
return;
}
tokens_.erase(token);
base::EraseIf(queue_, [&token](const std::unique_ptr<IntentData>& intent) {
return intent->token == token;
});
PostUnpinToken(std::move(token));
AddOrExecute(
std::make_unique<IntentData>(token, Operation::kDelete, absl::nullopt));
}

void BraveWalletAutoPinService::Restore() {
Expand All @@ -127,6 +134,9 @@ void BraveWalletAutoPinService::OnTokenListResolved(
if (!BraveWalletPinService::IsTokenSupportedForPinning(token)) {
continue;
}

tokens_.insert(token.Clone());

auto current_token_path =
BraveWalletPinService::GetTokenPrefPath(absl::nullopt, token);
if (!current_token_path) {
Expand Down Expand Up @@ -187,18 +197,6 @@ void BraveWalletAutoPinService::OnTokenListResolved(
CheckQueue();
}

void BraveWalletAutoPinService::PostPinToken(BlockchainTokenPtr token) {
queue_.push_back(
std::make_unique<IntentData>(token, Operation::kAdd, absl::nullopt));
CheckQueue();
}

void BraveWalletAutoPinService::PostUnpinToken(BlockchainTokenPtr token) {
queue_.push_back(
std::make_unique<IntentData>(token, Operation::kDelete, absl::nullopt));
CheckQueue();
}

void BraveWalletAutoPinService::ValidateToken(
const std::unique_ptr<IntentData>& data) {
brave_wallet_pin_service_->Validate(
Expand Down Expand Up @@ -229,14 +227,29 @@ void BraveWalletAutoPinService::AddOrExecute(std::unique_ptr<IntentData> data) {
}
DCHECK(data);
for (const auto& v : queue_) {
if (v->token == data->token && v->service == data->service) {
if (v->token == data->token && v->service == data->service &&
v->operation == data->operation) {
return;
}
}
if (current_ && current_->token == data->token &&
current_->service == data->service) {
current_->service == data->service &&
current_->operation == data->operation) {
return;
}

if (data->operation == Operation::kAdd ||
data->operation == Operation::kValidate) {
if (tokens_.find(data->token) == tokens_.end()) {
return;
}
}
if (data->operation == Operation::kDelete) {
if (tokens_.find(data->token) != tokens_.end()) {
return;
}
}

if (data->operation == Operation::kAdd) {
brave_wallet_pin_service_->MarkAsPendingForPinning(data->token,
data->service);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,6 @@ class BraveWalletAutoPinService

void OnAutoPinStatusChanged();

void PostPinToken(BlockchainTokenPtr token);
void PostUnpinToken(BlockchainTokenPtr token);

// Iterates through user tokens and manages their pin statuses.
void Restore();
void OnTokenListResolved(std::vector<BlockchainTokenPtr>);
Expand Down Expand Up @@ -108,6 +105,7 @@ class BraveWalletAutoPinService
raw_ptr<BraveWalletService> brave_wallet_service_;
raw_ptr<BraveWalletPinService> brave_wallet_pin_service_;

std::set<BlockchainTokenPtr> tokens_;
std::unique_ptr<IntentData> current_;
std::deque<std::unique_ptr<IntentData>> queue_;

Expand Down

0 comments on commit cdf57f2

Please sign in to comment.