accounts: update & optimised find
Signed-off-by: kernelkind <kernelkind@gmail.com>
This commit is contained in:
@@ -370,12 +370,22 @@ impl Accounts {
|
|||||||
self.accounts.get(ind)
|
self.accounts.get(ind)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_account_mut(&mut self, ind: usize) -> Option<&mut UserAccount> {
|
||||||
|
self.accounts.get_mut(ind)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn find_account(&self, pk: &[u8; 32]) -> Option<&UserAccount> {
|
pub fn find_account(&self, pk: &[u8; 32]) -> Option<&UserAccount> {
|
||||||
self.accounts
|
self.accounts
|
||||||
.iter()
|
.iter()
|
||||||
.find(|acc| acc.key.pubkey.bytes() == pk)
|
.find(|acc| acc.key.pubkey.bytes() == pk)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn find_account_mut(&mut self, pk: &[u8; 32]) -> Option<&mut UserAccount> {
|
||||||
|
self.accounts
|
||||||
|
.iter_mut()
|
||||||
|
.find(|acc| acc.key.pubkey.bytes() == pk)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn remove_account(&mut self, index: usize) {
|
pub fn remove_account(&mut self, index: usize) {
|
||||||
if let Some(account) = self.accounts.get(index) {
|
if let Some(account) = self.accounts.get(index) {
|
||||||
if let Some(key_store) = &self.key_store {
|
if let Some(key_store) = &self.key_store {
|
||||||
@@ -475,6 +485,28 @@ impl Accounts {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn update_current_account(&mut self, update: impl FnOnce(&mut UserAccount)) {
|
||||||
|
{
|
||||||
|
let Some(cur_account) = self.get_selected_account_mut() else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
update(cur_account);
|
||||||
|
}
|
||||||
|
|
||||||
|
let Some(cur_acc) = self.get_selected_account() else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
let Some(key_store) = &self.key_store else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
|
if let Err(err) = key_store.write_account(cur_acc) {
|
||||||
|
tracing::error!("Could not add account {:?} to storage: {err}", cur_acc.key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn num_accounts(&self) -> usize {
|
pub fn num_accounts(&self) -> usize {
|
||||||
self.accounts.len()
|
self.accounts.len()
|
||||||
}
|
}
|
||||||
@@ -504,6 +536,22 @@ impl Accounts {
|
|||||||
.map(|i| self.get_account(i))?
|
.map(|i| self.get_account(i))?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_selected_account_mut(&mut self) -> Option<&mut UserAccount> {
|
||||||
|
self.currently_selected_account
|
||||||
|
.map(|i| self.get_account_mut(i))?
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_account_mut_optimized(&mut self, pk: &[u8; 32]) -> Option<&mut UserAccount> {
|
||||||
|
if let Some(ind) = self.currently_selected_account {
|
||||||
|
if ind < self.accounts.len() {
|
||||||
|
return Some(&mut self.accounts[ind]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self.accounts
|
||||||
|
.iter_mut()
|
||||||
|
.find(|acc| acc.key.pubkey.bytes() == pk)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_selected_account_data(&mut self) -> Option<&mut AccountData> {
|
pub fn get_selected_account_data(&mut self) -> Option<&mut AccountData> {
|
||||||
let account_pubkey = *self.selected_account_pubkey_bytes()?;
|
let account_pubkey = *self.selected_account_pubkey_bytes()?;
|
||||||
self.account_data.get_mut(&account_pubkey)
|
self.account_data.get_mut(&account_pubkey)
|
||||||
|
|||||||
Reference in New Issue
Block a user