moved group prompt constructor
This commit is contained in:
@@ -7,11 +7,7 @@ use crate::fomod::{
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct InstallerState {
|
||||
/// Flags set by plugin selections throughout the install
|
||||
flags: HashMap<String, String>,
|
||||
|
||||
/// Files to install, keyed by destination path.
|
||||
/// Higher priority value wins when destinations conflict.
|
||||
selected_files: Vec<FileTypeEnum>,
|
||||
}
|
||||
|
||||
@@ -99,6 +95,29 @@ pub struct GroupPrompt {
|
||||
pub options: Vec<InstallOption>,
|
||||
}
|
||||
|
||||
impl GroupPrompt {
|
||||
fn new(group: &Group, state: &InstallerState, installed_plugins: &[String]) -> Self {
|
||||
let options = group
|
||||
.plugins
|
||||
.plugin
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(idx, option)| InstallOption {
|
||||
name: option.name.trim().to_owned(),
|
||||
option_type: resolve_plugin_type(option, state, installed_plugins),
|
||||
description: option.description.trim().to_owned(),
|
||||
idx,
|
||||
})
|
||||
.collect();
|
||||
|
||||
Self {
|
||||
name: group.name.clone(),
|
||||
select_type: group.typ,
|
||||
options,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct InstallOption {
|
||||
pub name: String,
|
||||
pub option_type: PluginTypeEnum,
|
||||
@@ -112,31 +131,6 @@ impl Display for InstallOption {
|
||||
}
|
||||
}
|
||||
|
||||
fn create_group_prompt(
|
||||
group: &Group,
|
||||
state: &InstallerState,
|
||||
installed_plugins: &[String],
|
||||
) -> GroupPrompt {
|
||||
let options = group
|
||||
.plugins
|
||||
.plugin
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(idx, option)| InstallOption {
|
||||
name: option.name.trim().to_owned(),
|
||||
option_type: resolve_plugin_type(option, state, installed_plugins),
|
||||
description: option.description.trim().to_owned(),
|
||||
idx,
|
||||
})
|
||||
.collect();
|
||||
|
||||
GroupPrompt {
|
||||
name: group.name.clone(),
|
||||
select_type: group.typ,
|
||||
options,
|
||||
}
|
||||
}
|
||||
|
||||
/// Each plugin in the install steps have a type. e.g.: Optional, Required, Recommended
|
||||
/// But the type depends on dependencies
|
||||
/// This function eveluates the plugin type
|
||||
@@ -207,7 +201,7 @@ impl FomodInstaller {
|
||||
for group in &step.optional_file_groups.group {
|
||||
// TODO: Skip groups where all plugins are NotUsable
|
||||
|
||||
let prompt = create_group_prompt(group, &state, &self.installed_plugins);
|
||||
let prompt = GroupPrompt::new(group, &state, &self.installed_plugins);
|
||||
|
||||
let selected_plugins = (self.group_prompt)(prompt);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user