more review stuff

This commit is contained in:
steven-omaha
2023-01-30 16:55:45 +01:00
parent ebecbc6734
commit ff579fde3f
+28 -65
View File
@@ -47,7 +47,7 @@ pub(crate) fn review(todo_per_backend: ToDoPerBackend, groups: HashSet<Group>) -
let backend = Rc::new(backend); let backend = Rc::new(backend);
for package in packages { for package in packages {
println!("{}: {package}", backend.get_section()); println!("{}: {package}", backend.get_section());
get_action_for_package(package, &groups, &mut reviews, &backend)?; get_action_for_package(package, &mut groups, &mut reviews, &backend)?;
} }
} }
@@ -56,83 +56,45 @@ pub(crate) fn review(todo_per_backend: ToDoPerBackend, groups: HashSet<Group>) -
fn get_action_for_package( fn get_action_for_package(
package: Package, package: Package,
groups: &[Group], groups: &mut [Group],
reviews: &mut Reviews, reviews: &mut Reviews,
backend: &Rc<Box<dyn Backend>>, backend: &Rc<Box<dyn Backend>>,
) -> Result<()> { ) -> Result<()> {
todo!(); loop {
// loop { match ask_user_action_for_package()? {
// match ask_user_action_for_package()? { ReviewAction::AsDependency => todo!(),
// ReviewAction::AsDependency => todo!(), ReviewAction::AssignGroupBackend => {
// ReviewAction::AssignGroupBackend => { if let Ok(()) = assign_package_to_group(&package, groups) {
// if let Some(val) = assign_group_backend(&package, groups)? { break;
// break; };
// }; }
// } ReviewAction::Delete => {
// ReviewAction::Delete => { reviews.delete.push((backend.clone(), package));
// reviews.delete.push((backend.clone(), package)); break;
// break; }
// } ReviewAction::Info => backend.show_package_info(&package)?,
// ReviewAction::Info => backend.show_package_info(&package)?, ReviewAction::Invalid => (),
// ReviewAction::Invalid => (), ReviewAction::Skip => break,
// ReviewAction::Skip => break, ReviewAction::Quit => bail!("user wants to quit"),
// ReviewAction::Quit => bail!("user wants to quit"), }
// } }
// }
Ok(()) Ok(())
} }
fn ask_user_group_section(groups: &[Group]) -> Result<Option<GroupSectionReply>> { fn ask_user_group(groups: &[Group]) -> Result<Option<GroupReply>> {
let group = match ask_group(groups)? { let group = match ask_group(groups)? {
Some(group) => group, Some(group) => group,
None => return Ok(None), None => return Ok(None),
}; };
let section_reply = match ask_section(&group.sections)? { Ok(Some(GroupReply::Existing(group)))
Some(reply) => reply,
None => return Ok(None),
};
let section = match section_reply {
SectionReply::Existing(section) => section,
SectionReply::New => return Ok(Some(GroupSectionReply::New)),
};
Ok(Some(GroupSectionReply::Existing((group, section))))
} }
enum GroupSectionReply<'a> { enum GroupReply<'a> {
Existing((&'a Group, &'a Section)), Existing(&'a Group),
New, New,
} }
enum SectionReply<'a> {
Existing(&'a Section),
New,
}
fn ask_section(sections: &HashSet<Section>) -> Result<Option<SectionReply>> {
let sections: Vec<_> = sections.iter().collect();
let mut buf = String::new();
stdin().read_line(&mut buf)?;
let reply = buf.trim();
let idx: usize = if let Ok(idx) = reply.parse() {
idx
} else {
return Ok(None);
};
if idx < sections.len() {
Ok(Some(SectionReply::Existing(&sections[idx])))
} else if idx == sections.len() {
Ok(Some(SectionReply::New))
} else {
Ok(None)
}
}
fn ask_new_section_name() -> Result<String> { fn ask_new_section_name() -> Result<String> {
print!("new section name: "); print!("new section name: ");
let reply = stdin().lines().next().context("reading line from stdin")?; let reply = stdin().lines().next().context("reading line from stdin")?;
@@ -202,10 +164,11 @@ fn ask_group(groups: &[Group]) -> Result<Option<&Group>> {
} }
} }
fn assign_group_backend(package: &Package, groups: &[Group]) -> Result<()> { fn assign_package_to_group(package: &Package, groups: &mut [Group]) -> Result<()> {
let reply = ask_user_group_section(groups)?; let reply = ask_user_group(groups)?;
match reply { match reply {
Some(val) => todo!(), Some(GroupReply::Existing(group)) => todo!(),
Some(GroupReply::New) => todo!(),
None => todo!(), None => todo!(),
} }