Skip to content

Commit

Permalink
Add warning and button to add missing dependencies
Browse files Browse the repository at this point in the history
  • Loading branch information
trumank committed Jun 25, 2023
1 parent 6c47024 commit 7cbe4e8
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 20 deletions.
4 changes: 3 additions & 1 deletion src/gui/message.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
use std::collections::HashMap;

use anyhow::Result;

use crate::providers::{ModInfo, ModSpecification};
Expand All @@ -6,7 +8,7 @@ use super::{request_counter::RequestID, SpecFetchProgress};

#[derive(Debug)]
pub enum Message {
ResolveMod(RequestID, Result<(ModSpecification, ModInfo)>),
ResolveMods(RequestID, Result<HashMap<ModSpecification, ModInfo>>),
FetchModProgress(RequestID, ModSpecification, SpecFetchProgress),
Integrate(RequestID, Result<()>),
UpdateCache(RequestID, Result<()>),
Expand Down
80 changes: 61 additions & 19 deletions src/gui/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ impl App {
let mods = &mut self.state.profiles.get_active_profile_mut().mods;
let mut needs_save = false;
let mut btn_remove = None;
let mut add_deps = None;

use egui_dnd::utils::shift_vec;
use egui_dnd::DragDropItem;
Expand All @@ -110,6 +111,12 @@ impl App {
}
}

let enabled_specs = mods
.iter()
.filter_map(|m| m.enabled.then_some(&m.spec))
.cloned()
.collect::<Vec<_>>();

let mut items = mods
.iter_mut()
.enumerate()
Expand Down Expand Up @@ -196,6 +203,31 @@ impl App {
}
});

// TODO starts_with is a great hack but it's still a hack
let missing_deps = info
.suggested_dependencies
.iter()
.filter(|d| !enabled_specs.iter().any(|s| d.url.starts_with(&s.url)))
.collect::<Vec<_>>();

if !missing_deps.is_empty() {
let mut msg = "Add missing dependencies:".to_string();
for dep in &missing_deps {
msg.push('\n');
msg.push_str(&dep.url);
}
if ui
.button(
egui::RichText::new("\u{26A0}")
.color(ui.visuals().warn_fg_color),
)
.on_hover_text(msg)
.clicked()
{
add_deps = Some(missing_deps.into_iter().cloned().collect());
}
}

let mut job = LayoutJob::default();
let mut is_match = false;
if let Some(search_string) = &self.search_string {
Expand Down Expand Up @@ -234,22 +266,22 @@ impl App {
mods.remove(remove);
needs_save = true;
}
if let Some(add_deps) = add_deps {
self.add_mods(ui.ctx(), add_deps);
}
if needs_save {
self.state.profiles.save().unwrap();
}
}

fn add_mod(&mut self, ctx: &egui::Context) {
fn add_mods(&mut self, ctx: &egui::Context, specs: Vec<ModSpecification>) {
let rid = self.request_counter.next();
let spec = ModSpecification {
url: self.resolve_mod.to_string(),
};
let store = self.state.store.clone();
let tx = self.tx.clone();
let ctx = ctx.clone();
tokio::spawn(async move {
let res = store.resolve_mod(spec, false).await;
tx.send(message::Message::ResolveMod(rid, res))
let res = store.resolve_mods(&specs, false).await;
tx.send(message::Message::ResolveMods(rid, res))
.await
.unwrap();
ctx.request_repaint();
Expand Down Expand Up @@ -469,19 +501,19 @@ impl eframe::App for App {
// message handling
while let Ok(msg) = self.rx.try_recv() {
match msg {
message::Message::ResolveMod(rid, res) => {
message::Message::ResolveMods(rid, res) => {
if Some(rid) == self.resolve_mod_rid {
match res {
Ok((_spec, mod_)) => {
self.state
.profiles
.get_active_profile_mut()
.mods
.push(ModConfig {
spec: mod_.spec,
required: mod_.suggested_require,
enabled: true,
});
Ok(mods) => {
for (_, mod_) in mods.into_iter() {
self.state.profiles.get_active_profile_mut().mods.push(
ModConfig {
spec: mod_.spec,
required: mod_.suggested_require,
enabled: true,
},
);
}
self.state.profiles.save().unwrap();
}
Err(e) => match e.downcast::<IntegrationError>() {
Expand Down Expand Up @@ -717,7 +749,12 @@ impl eframe::App for App {
egui::TextEdit::singleline(&mut self.resolve_mod).hint_text("Add mod..."),
);
if is_committed(&resolve) {
self.add_mod(ctx);
self.add_mods(
ctx,
vec![ModSpecification {
url: self.resolve_mod.to_string(),
}],
);
}
});
});
Expand Down Expand Up @@ -761,7 +798,12 @@ impl eframe::App for App {
&& ctx.memory(|m| m.focus().is_none())
{
self.resolve_mod = s.to_string();
self.add_mod(ctx);
self.add_mods(
ctx,
vec![ModSpecification {
url: self.resolve_mod.to_string(),
}],
);
}
}
egui::Event::Text(text) => {
Expand Down

0 comments on commit 7cbe4e8

Please sign in to comment.