prepare_game(&self.su().ds, &self.prctx, TABLE)?;
let command = self.su().ds.ss(
- "library-list wikimedia chess-yellow-?"
+ "library-list @table@ wikimedia chess-yellow-?"
)?;
let output: String = self.otter(&command)?.into();
assert!( Regex::new("(?m)^chess-yellow-K *the yellow king$")?
Fine
}
- MC::LibraryListByGlob { glob: spec } => {
- let libs = shapelib::lib_name_lookup(&spec.lib)?;
- let mut results: Vec<shapelib::ItemEnquiryData> = default();
- for lib in &*libs {
- results.extend(lib.list_glob(&spec.item)?);
- }
+ MC::LibraryListByGlob { game, glob: spec } => {
+ let (ag, gref) = start_access_game(&game)?;
+ let (results, _auth) =
+ access_bundles(
+ cs,&ag,&gref, &[TP::UploadBundles],
+ &mut |mut _ig, _| {
+ let libs = shapelib::lib_name_lookup(&spec.lib)?;
+ let mut results: Vec<shapelib::ItemEnquiryData> = default();
+ for lib in &*libs {
+ results.extend(lib.list_glob(&spec.item)?);
+ }
+ Ok(results)
+ })?;
MR::LibraryItems(results)
}
#[derive(Debug)]
struct LibGlobArgs {
+ table_name: String,
pat: shapelib::ItemSpec,
}
impl Default for LibGlobArgs { fn default() -> Self { Self {
+ table_name: default(),
pat: shapelib::ItemSpec { lib: default(), item: default() },
} } }
ap: &'_ mut ArgumentParser<'ap>
) {
use argparse::*;
+ ap.refer(&mut self.table_name).required()
+ .add_argument("TABLE-NAME",Store,"table name");
// xxx allow lack of library name to list library names
ap.refer(&mut self.pat.lib).required()
.add_argument("LIB-NAME",Store,"library name");
fn call(_sc: &Subcommand, ma: MainOpts, args: Vec<String>) ->Result<(),AE> {
let args = parse_args::<Args,_>(args, &subargs, &ok_id, None);
- let mut chan = connect(&ma)?;
+ let mut chan = access_game(&ma, &args.table_name)?;
let items = chan.list_items(&args.pat)?;
for it in &items {
#[derive(Default,Debug)]
struct Args {
- table_name: String,
tlg: LibGlobArgs,
adjust_markers: Option<bool>,
incremental: bool,
fn subargs(sa: &mut Args) -> ArgumentParser {
use argparse::*;
let mut ap = ArgumentParser::new();
- ap.refer(&mut sa.table_name).required()
- .add_argument("TABLE-NAME",Store,"table name");
+ sa.tlg.add_arguments(&mut ap);
ap.refer(&mut sa.adjust_markers)
.add_option(&["--no-adjust-markers"],StoreConst(Some(false)),
"do not adjust the number of insertion markers, just fail")
"do not place pieces already on the board; \
if they don't all fit, place as many as possible")
.add_option(&["--no-incremental"],StoreConst(false),"");
- sa.tlg.add_arguments(&mut ap);
ap
}
const MAGIC: &str = "mgmt-library-load-marker";
let args = parse_args::<Args,_>(args, &subargs, &ok_id, None);
- let mut chan = access_game(&ma, &args.table_name)?;
+ let mut chan = access_game(&ma, &args.tlg.table_name)?;
let (pieces, _pcaliases) = chan.list_pieces()?;
let markers = pieces.iter().filter(|p| p.itemname.as_str() == MAGIC)
.collect::<Vec<_>>();
},
LibraryListByGlob {
+ game: InstanceName,
glob: shapelib::ItemSpec,
},
self.cmd_withbulk(cmd, &mut io::empty(), &mut io::sink(), &mut |_|Ok(()))?
}
- #[throws(AE)]
- pub fn list_items(&mut self, pat: &shapelib::ItemSpec)
- -> Vec<shapelib::ItemEnquiryData> {
- // xxx allow globbing of library names
- let cmd = MgmtCommand::LibraryListByGlob { glob: pat.clone() };
- let mut items = match self.cmd(&cmd)? {
- MgmtResponse::LibraryItems(items) => items,
- wat => Err(anyhow!("unexpected LibraryListByGlob response: {:?}",
- &wat))?,
- };
- items.sort();
- items
- }
-
pub fn for_game(self, game: InstanceName, how: MgmtGameUpdateMode)
-> MgmtChannelForGame {
MgmtChannelForGame {
wat => Err(anyhow!("ListPieces => {:?}", &wat))?,
}
}
+
+ #[throws(AE)]
+ pub fn list_items(&mut self, pat: &shapelib::ItemSpec)
+ -> Vec<shapelib::ItemEnquiryData> {
+ // xxx allow globbing of library names
+ let cmd = MgmtCommand::LibraryListByGlob {
+ game: self.game.clone(),
+ glob: pat.clone(),
+ };
+ let mut items = match self.cmd(&cmd)? {
+ MgmtResponse::LibraryItems(items) => items,
+ wat => Err(anyhow!("unexpected LibraryListByGlob response: {:?}",
+ &wat))?,
+ };
+ items.sort();
+ items
+ }
+
/*
fn get_info(&mut self) -> Result<
(MgmtGameResponseGameInfo, HashMap<String,PlayerId>