From: Ian Jackson Date: Thu, 12 Nov 2020 12:12:30 +0000 (+0000) Subject: wip move TokensRevealed X-Git-Tag: otter-0.2.0~535 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=d9e4530ddd2ec2072a1a7957151041d2acaa58c9;p=otter.git wip move TokensRevealed Signed-off-by: Ian Jackson --- diff --git a/src/accounts.rs b/src/accounts.rs index cbc277a6..d7003090 100644 --- a/src/accounts.rs +++ b/src/accounts.rs @@ -57,13 +57,19 @@ pub struct AccountRecord { pub account: Arc, pub nick: String, pub timezone: String, - pub tokens_revealed: HashMap, pub access: AccessRecord, } -#[derive(Copy,Clone,Debug,Ord,PartialOrd,Eq,PartialEq)] +#[derive(Clone,Debug,Hash,Ord,PartialOrd,Eq,PartialEq)] #[derive(Serialize,Deserialize)] -pub struct TokenRevelation { +pub struct TokenRevelationKey { + pub account: AccountName, + pub desc: Html, +} + +#[derive(Copy,Clone,Debug)] +#[derive(Serialize,Deserialize)] +pub struct TokenRevelationValue { pub earliest: Timestamp, pub latest: Timestamp, } diff --git a/src/cmdlistener.rs b/src/cmdlistener.rs index 00c47ae4..df56424a 100644 --- a/src/cmdlistener.rs +++ b/src/cmdlistener.rs @@ -99,7 +99,6 @@ fn execute(cs: &mut CommandStream, cmd: MgmtCommand) -> MgmtResponse { let record = AccountRecord { account, nick, access, timezone: timezone.unwrap_or_default(), - tokens_revealed: default(), }; ag.insert_entry(record, auth)?; Fine @@ -315,6 +314,7 @@ fn execute_game_insn<'cs, 'igr, 'ig : 'igr>( let ipl = IPlayerState { acctid, tz, + tokens_revealed: default(), }; let (player, logentry) = ig.player_new(gpl, ipl, logentry)?; diff --git a/src/global.rs b/src/global.rs index 2d2ea9b4..4b703b9c 100644 --- a/src/global.rs +++ b/src/global.rs @@ -56,6 +56,7 @@ pub struct PlayerRecord { #[derive(Debug,Clone,Serialize,Deserialize)] pub struct IPlayerState { pub acctid: AccountId, + pub tokens_revealed: HashMap, pub tz: Timezone, } @@ -641,7 +642,7 @@ impl<'ig> InstanceGuard<'ig> { authorised: Authorisation, reset: bool) -> Option { - let acctid = self.c.g.iplayers.byid(player)?.ipl.acctid; + let acctid = self.iplayers.byid(player)?.ipl.acctid; let (access, acctid) = accounts.with_entry_mut( acctid, authorised, None, @@ -650,16 +651,19 @@ impl<'ig> InstanceGuard<'ig> { let access = acct.access.clone(); let desc = access.describe_html(); let now = Timestamp::now(); - acct.tokens_revealed.entry(desc) - .or_insert(TokenRevelation { + let revk = TokenRevelationKey { + account: (*acct.account).clone(), + desc, + }; + self.iplayers.byid_mut(player)?.ipl.tokens_revealed.entry(revk) + .or_insert(TokenRevelationValue { latest: now, earliest: now, }) .latest = now; - acct.expire_tokens_revealed(); Ok::<_,MgmtError>((access, acctid)) })?.map_err(|(e,_)|e)??; - + if reset { self.save_access_now()?; }