Skip to content

Commit 779e8cd

Browse files
Improve interactive dialogues
1 parent 5e2a69d commit 779e8cd

File tree

13 files changed

+136
-129
lines changed

13 files changed

+136
-129
lines changed

Cargo.lock

Lines changed: 9 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ ferinth = "2.11"
5858
colored = "2.1"
5959
futures = "0.3"
6060
inquire = "0.7"
61-
libium = { git = "https://github.com/gorilla-devs/libium", rev = "b80b16412018e11ae7adde0727eb32065a32ddc7" }
61+
libium = { git = "https://github.com/gorilla-devs/libium", rev = "2fe13808755141b6169ed32013198a7ccfdf109b" }
6262
# libium = { path = "../libium" }
6363
# libium = "1.32"
6464
anyhow = "1.0"

src/subcommands/modpack/add.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use super::check_output_directory;
22
use crate::TICK;
3-
use anyhow::{anyhow, Result};
3+
use anyhow::{Context as _, Result};
44
use colored::Colorize as _;
55
use inquire::Confirm;
66
use libium::{
@@ -29,14 +29,15 @@ pub async fn curseforge(
2929
"Pick an output directory",
3030
"Output Directory",
3131
)?
32-
.ok_or_else(|| anyhow!("Please pick an output directory"))?,
32+
.context("Please pick an output directory")?,
3333
};
3434
check_output_directory(&output_dir)?;
3535
let install_overrides = match install_overrides {
3636
Some(some) => some,
3737
None => Confirm::new("Should overrides be installed?")
3838
.with_default(true)
39-
.prompt()?,
39+
.prompt()
40+
.unwrap_or_default(),
4041
};
4142
if install_overrides {
4243
println!(
@@ -74,14 +75,15 @@ pub async fn modrinth(
7475
"Pick an output directory",
7576
"Output Directory",
7677
)?
77-
.ok_or_else(|| anyhow!("Please pick an output directory"))?,
78+
.context("Please pick an output directory")?,
7879
};
7980
check_output_directory(&output_dir)?;
8081
let install_overrides = match install_overrides {
8182
Some(some) => some,
8283
None => Confirm::new("Should overrides be installed?")
8384
.with_default(true)
84-
.prompt()?,
85+
.prompt()
86+
.unwrap_or_default(),
8587
};
8688
if install_overrides {
8789
println!(

src/subcommands/modpack/configure.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ pub fn configure(
3131
} else {
3232
let install_overrides = Confirm::new("Should overrides be installed?")
3333
.with_default(modpack.install_overrides)
34-
.prompt()?;
34+
.prompt()
35+
.unwrap_or(modpack.install_overrides);
3536
if install_overrides {
3637
println!(
3738
"{}",

src/subcommands/modpack/delete.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
1-
use std::cmp::Ordering;
2-
31
use super::switch;
4-
use anyhow::{anyhow, Result};
2+
use anyhow::{Context as _, Result};
53
use colored::Colorize as _;
64
use inquire::Select;
75
use libium::{
86
config::structs::{Config, ModpackIdentifier},
97
iter_ext::IterExt as _,
108
};
9+
use std::cmp::Ordering;
1110

1211
pub fn delete(
1312
config: &mut Config,
@@ -20,7 +19,7 @@ pub fn delete(
2019
.modpacks
2120
.iter()
2221
.position(|modpack| modpack.name == modpack_name)
23-
.ok_or_else(|| anyhow!("The modpack name provided does not exist"))?
22+
.context("The modpack name provided does not exist")?
2423
} else {
2524
let modpack_names = config
2625
.modpacks
@@ -39,10 +38,14 @@ pub fn delete(
3938
})
4039
.collect_vec();
4140

42-
Select::new("Select which modpack to delete", modpack_names)
41+
if let Ok(selection) = Select::new("Select which modpack to delete", modpack_names)
4342
.with_starting_cursor(config.active_modpack)
44-
.raw_prompt()?
45-
.index
43+
.raw_prompt()
44+
{
45+
selection.index
46+
} else {
47+
return Ok(());
48+
}
4649
};
4750
config.modpacks.remove(selection);
4851

src/subcommands/modpack/mod.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ pub use info::info;
1010
pub use switch::switch;
1111
pub use upgrade::upgrade;
1212

13-
use anyhow::{anyhow, ensure, Context as _, Result};
13+
use anyhow::{ensure, Context as _, Result};
1414
use fs_extra::dir::{copy, CopyOptions};
1515
use inquire::Confirm;
1616
use libium::{file_picker::pick_folder, HOME};
@@ -38,13 +38,16 @@ pub fn check_output_directory(output_dir: &Path) -> Result<()> {
3838
"There are files in the {} folder in your output directory, these will be deleted when you upgrade.",
3939
check_dir.file_name().context("Unable to get folder name")?.to_string_lossy()
4040
);
41-
if Confirm::new("Would like to create a backup?").prompt()? {
41+
if Confirm::new("Would like to create a backup?")
42+
.prompt()
43+
.unwrap_or_default()
44+
{
4245
let backup_dir = pick_folder(
4346
&*HOME,
4447
"Where should the backup be made?",
4548
"Output Directory",
4649
)?
47-
.ok_or_else(|| anyhow!("Please pick an output directory"))?;
50+
.context("Please pick an output directory")?;
4851
copy(check_dir, backup_dir, &CopyOptions::new())?;
4952
}
5053
}

src/subcommands/modpack/switch.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,12 @@ pub fn switch(config: &mut Config, modpack_name: Option<String>) -> Result<()> {
4040
})
4141
.collect_vec();
4242

43-
config.active_modpack = Select::new("Select which modpack to switch to", modpack_info)
43+
if let Ok(selection) = Select::new("Select which modpack to switch to", modpack_info)
4444
.with_starting_cursor(config.active_modpack)
45-
.raw_prompt()?
46-
.index;
45+
.raw_prompt()
46+
{
47+
config.active_modpack = selection.index;
48+
}
4749
Ok(())
4850
}
4951
}

src/subcommands/profile/configure.rs

Lines changed: 41 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -56,60 +56,57 @@ pub async fn configure(
5656
"Quit",
5757
];
5858

59-
loop {
60-
// TODO: raw_prompt_skippable
61-
let selection = Select::new("Which setting would you like to change", items.clone())
62-
.raw_prompt()
63-
.ok()
64-
.map(|x| x.index);
65-
66-
if let Some(index) = selection {
67-
match index {
68-
0 => {
69-
if let Some(dir) = pick_folder(
70-
&profile.output_dir,
71-
"Pick an output directory",
72-
"Output Directory",
73-
)? {
74-
check_output_directory(&dir).await?;
75-
profile.output_dir = dir;
76-
}
59+
while let Ok(selection) =
60+
Select::new("Which setting would you like to change", items.clone()).raw_prompt()
61+
{
62+
match selection.index {
63+
0 => {
64+
if let Some(dir) = pick_folder(
65+
&profile.output_dir,
66+
"Pick an output directory",
67+
"Output Directory",
68+
)? {
69+
check_output_directory(&dir).await?;
70+
profile.output_dir = dir;
7771
}
78-
1 => {
79-
let Some(versions) = profile.filters.game_versions_mut() else {
80-
println!("Active profile does not filter by game version");
81-
continue;
82-
};
72+
}
73+
1 => {
74+
let Some(versions) = profile.filters.game_versions_mut() else {
75+
println!("Active profile does not filter by game version");
76+
continue;
77+
};
8378

84-
*versions = pick_minecraft_versions().await?;
79+
if let Ok(selection) = pick_minecraft_versions(versions).await {
80+
*versions = selection;
8581
}
86-
2 => {
87-
let Some(loaders) = profile.filters.mod_loaders_mut() else {
88-
println!("Active profile does not filter mod loader");
89-
continue;
90-
};
91-
*loaders = match pick_mod_loader(loaders.first())? {
82+
}
83+
2 => {
84+
let Some(loaders) = profile.filters.mod_loaders_mut() else {
85+
println!("Active profile does not filter mod loader");
86+
continue;
87+
};
88+
89+
if let Ok(selection) = pick_mod_loader(loaders.first()) {
90+
*loaders = match selection {
9291
ModLoader::Quilt => vec![ModLoader::Quilt, ModLoader::Fabric],
9392
loader => vec![loader],
9493
}
9594
}
96-
3 => {
97-
if let Ok(new_name) = Text::new("Change the profile's name")
98-
.with_default(&profile.name)
99-
.prompt()
100-
{
101-
profile.name = new_name;
102-
} else {
103-
continue;
104-
}
95+
}
96+
3 => {
97+
if let Ok(new_name) = Text::new("Change the profile's name")
98+
.with_default(&profile.name)
99+
.prompt()
100+
{
101+
profile.name = new_name;
102+
} else {
103+
continue;
105104
}
106-
4 => break,
107-
_ => unreachable!(),
108105
}
109-
println!();
110-
} else {
111-
break;
106+
4 => break,
107+
_ => unreachable!(),
112108
}
109+
println!();
113110
}
114111
}
115112

src/subcommands/profile/create.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ pub async fn create(
4646
);
4747
if Confirm::new("Would you like to specify a custom mods directory?")
4848
.prompt()
49-
.unwrap_or(false)
49+
.unwrap_or_default()
5050
{
5151
if let Some(dir) = pick_folder(
5252
&selected_mods_dir,
@@ -74,7 +74,7 @@ pub async fn create(
7474
Profile::new(
7575
name,
7676
selected_mods_dir,
77-
pick_minecraft_versions().await?,
77+
pick_minecraft_versions(&[]).await?,
7878
pick_mod_loader(None)?,
7979
)
8080
}

src/subcommands/profile/delete.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
use std::cmp::Ordering;
2-
31
use super::switch;
42
use anyhow::{Context as _, Result};
53
use colored::Colorize as _;
@@ -8,6 +6,7 @@ use libium::{
86
config::{filters::ProfileParameters as _, structs::Config},
97
iter_ext::IterExt as _,
108
};
9+
use std::cmp::Ordering;
1110

1211
pub fn delete(
1312
config: &mut Config,

0 commit comments

Comments
 (0)