From: Ian Jackson Date: Fri, 6 Nov 2020 23:49:30 +0000 (+0000) Subject: wip cli for new accounts X-Git-Tag: otter-0.2.0~553 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=b2ab81a82c5b53e608129574b9236e71628bd330;p=otter.git wip cli for new accounts Signed-off-by: Ian Jackson --- diff --git a/src/accounts.rs b/src/accounts.rs index bf91e66b..3ca4d13f 100644 --- a/src/accounts.rs +++ b/src/accounts.rs @@ -104,9 +104,12 @@ impl AccountScope { } scope } +} +impl AccountName { pub fn default_nick(&self) -> String { - match self { + if self.subaccount != "" { return self.subaccount.clone() } + match &self.scope { AS::Server => "*SERVER*".into(), AS::Unix { user } => user.clone(), } diff --git a/src/bin/otter.rs b/src/bin/otter.rs index f0cac36f..01e2aec8 100644 --- a/src/bin/otter.rs +++ b/src/bin/otter.rs @@ -257,7 +257,7 @@ impl Conn { struct ConnForGame { pub conn: Conn, - pub name: String, + pub name: InstanceName, pub how: MgmtGameUpdateMode, } impl Deref for ConnForGame { @@ -346,12 +346,11 @@ impl ConnForGame { #[throws(E)] fn connect(ma: &MainOpts) -> Conn { - let socket_path = ma.socket_path.as_ref().unwrap(); - let unix = UnixStream::connect(&socket_path) - .with_context(||socket_path.clone()).context("connect to server")?; + let unix = UnixStream::connect(&ma.socket_path) + .with_context(||ma.socket_path.clone()).context("connect to server")?; let chan = MgmtChannel::new(unix)?; let mut chan = Conn { chan }; - chan.cmd(&MgmtCommand::SetAccount(ma.account.clone().unwrap()))?; + chan.cmd(&MgmtCommand::SetAccount(ma.account.clone()))?; chan } @@ -371,7 +370,7 @@ fn setup_table(ma: &MainOpts, chan: &mut ConnForGame, let mut insns = vec![]; for pspec in &spec.players { - let nick = pspec.unwrap_or(|| pspec.account.default_nick()); + let nick = pspec.nick.unwrap_or_else(|| pspec.account.default_nick()); let st = nick2st.entry(nick.clone()).or_default(); if st.new { Err(anyhow!("duplicate player nick {:?} in spec", &nick))?; @@ -383,9 +382,9 @@ fn setup_table(ma: &MainOpts, chan: &mut ConnForGame, // ^ todo use client program timezone? if !st.old { insns.push(MgmtGameInstruction::AddPlayer { - account: &spec.account, + account: pspec.account.clone(), details: MgmtPlayerDetails { - nick, + nick: Some(nick), timezone, }, }); diff --git a/src/spec.rs b/src/spec.rs index 6b192e2a..539e07f3 100644 --- a/src/spec.rs +++ b/src/spec.rs @@ -67,9 +67,9 @@ pub struct TableSpec { #[derive(Debug,Serialize,Deserialize)] pub struct TablePlayerSpec { - account: AccountName, - nick: Option, - timezone: Option, + pub account: AccountName, + pub nick: Option, + pub timezone: Option, } type RawAcl = Vec>;