allow removal of Damoose account
Signed-off-by: kernelkind <kernelkind@gmail.com>
This commit is contained in:
@@ -6,6 +6,7 @@ use crate::{SingleUnkIdAction, UserAccount};
|
|||||||
pub struct AccountCache {
|
pub struct AccountCache {
|
||||||
selected: Pubkey,
|
selected: Pubkey,
|
||||||
fallback: Pubkey,
|
fallback: Pubkey,
|
||||||
|
fallback_account: UserAccount,
|
||||||
|
|
||||||
// never empty at rest
|
// never empty at rest
|
||||||
accounts: HashMap<Pubkey, UserAccount>,
|
accounts: HashMap<Pubkey, UserAccount>,
|
||||||
@@ -16,12 +17,13 @@ impl AccountCache {
|
|||||||
let mut accounts = HashMap::with_capacity(1);
|
let mut accounts = HashMap::with_capacity(1);
|
||||||
|
|
||||||
let pk = fallback.key.pubkey;
|
let pk = fallback.key.pubkey;
|
||||||
accounts.insert(pk, fallback);
|
accounts.insert(pk, fallback.clone());
|
||||||
|
|
||||||
(
|
(
|
||||||
Self {
|
Self {
|
||||||
selected: pk,
|
selected: pk,
|
||||||
fallback: pk,
|
fallback: pk,
|
||||||
|
fallback_account: fallback,
|
||||||
accounts,
|
accounts,
|
||||||
},
|
},
|
||||||
SingleUnkIdAction::pubkey(pk),
|
SingleUnkIdAction::pubkey(pk),
|
||||||
@@ -49,13 +51,18 @@ impl AccountCache {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(super) fn remove(&mut self, pk: &Pubkey) -> Option<UserAccount> {
|
pub(super) fn remove(&mut self, pk: &Pubkey) -> Option<UserAccount> {
|
||||||
// fallback account should never be removed
|
if *pk == self.fallback && self.accounts.len() == 1 {
|
||||||
if *pk == self.fallback {
|
// no point in removing it since it'll just get re-added anyway
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
let removed = self.accounts.remove(pk);
|
let removed = self.accounts.remove(pk);
|
||||||
|
|
||||||
|
if self.accounts.is_empty() {
|
||||||
|
self.accounts
|
||||||
|
.insert(self.fallback, self.fallback_account.clone());
|
||||||
|
}
|
||||||
|
|
||||||
if removed.is_some() && self.selected == *pk {
|
if removed.is_some() && self.selected == *pk {
|
||||||
// TODO(kernelkind): choose next better
|
// TODO(kernelkind): choose next better
|
||||||
let (next, _) = self
|
let (next, _) = self
|
||||||
|
|||||||
Reference in New Issue
Block a user