diff --git a/mint_lib/src/mod_info.rs b/mint_lib/src/mod_info.rs index 4a2f111f..71219c81 100644 --- a/mint_lib/src/mod_info.rs +++ b/mint_lib/src/mod_info.rs @@ -3,7 +3,7 @@ use std::{collections::BTreeSet, fmt::Display}; use serde::{Deserialize, Serialize}; /// Tags from mod.io. -#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[derive(Debug, Clone)] pub struct ModioTags { pub qol: bool, pub gameplay: bool, @@ -15,13 +15,13 @@ pub struct ModioTags { pub approval_status: ApprovalStatus, } -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[derive(Debug, Copy, Clone)] pub enum RequiredStatus { RequiredByAll, Optional, } -#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize, Hash)] +#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] pub enum ApprovalStatus { Verified, Approved, @@ -36,7 +36,7 @@ pub enum ResolvableStatus { } /// Returned from ModStore -#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[derive(Debug, Clone)] pub struct ModInfo { pub provider: &'static str, pub name: String, @@ -75,7 +75,7 @@ impl ModSpecification { } /// Points to a specific version of a specific mod -#[derive(Debug, Clone, Eq, Ord, PartialEq, PartialOrd, Hash, Serialize, Deserialize)] +#[derive(Debug, Clone, Eq, Ord, PartialEq, PartialOrd, Hash)] pub struct ModResolution { pub url: ModIdentifier, pub status: ResolvableStatus, diff --git a/src/gui/message.rs b/src/gui/message.rs index 7f4e7516..9eb4b4b1 100644 --- a/src/gui/message.rs +++ b/src/gui/message.rs @@ -8,7 +8,7 @@ use std::{ }; use anyhow::Result; -use mint_lib::mod_info::MetaConfig; +use mint_lib::mod_info::{MetaConfig, ModIdentifier}; use tokio::{ sync::mpsc::{self, Sender}, task::JoinHandle, @@ -180,7 +180,7 @@ impl ResolveMods { #[derive(Debug)] pub struct Integrate { rid: RequestID, - result: Result, IntegrationErr>, + result: Result, IntegrationErr>, } impl Integrate { @@ -212,16 +212,12 @@ impl Integrate { if Some(self.rid) == app.integrate_rid.as_ref().map(|r| r.rid) { match self.result { Ok(res) => { - let resolution_gameplay_affecting_map = res - .iter() - .map(|(k, v)| (k.resolution.clone(), v)) - .collect::>(); + let resolution_gameplay_affecting_map = + res.into_iter().collect::>(); debug!(?resolution_gameplay_affecting_map); for (res, stat) in resolution_gameplay_affecting_map { - app.state - .store - .update_gameplay_affecting_status(res.url, *stat); + app.state.store.update_gameplay_affecting_status(res, stat); } info!("integration complete"); @@ -401,7 +397,7 @@ async fn integrate_async( config: MetaConfig, rid: RequestID, message_tx: Sender, -) -> Result, IntegrationErr> { +) -> Result, IntegrationErr> { let update = false; let mods = store diff --git a/src/gui/mod.rs b/src/gui/mod.rs index 5d99ef55..8b8fdc31 100644 --- a/src/gui/mod.rs +++ b/src/gui/mod.rs @@ -24,7 +24,7 @@ use eframe::{ epaint::{text::LayoutJob, Color32, Stroke}, }; use egui_commonmark::{CommonMarkCache, CommonMarkViewer}; -use mint_lib::mod_info::{ModioTags, RequiredStatus}; +use mint_lib::mod_info::{ModIdentifier, ModioTags, RequiredStatus}; use tokio::{ sync::mpsc::{self, Receiver, Sender}, task::JoinHandle, @@ -45,8 +45,6 @@ use find_string::FindString; use message::MessageHandle; use request_counter::{RequestCounter, RequestID}; -use mint_lib::mod_info::*; - use self::toggle_switch::toggle_switch; pub fn gui(dirs: Dirs, args: Option>) -> Result<()> { diff --git a/src/integrate.rs b/src/integrate.rs index b77d4f5b..046291aa 100644 --- a/src/integrate.rs +++ b/src/integrate.rs @@ -5,7 +5,9 @@ use std::io::{self, BufReader, BufWriter, Cursor, ErrorKind, Read, Seek}; use std::path::{Path, PathBuf}; use anyhow::{Context, Result}; -use mint_lib::mod_info::{ApprovalStatus, Meta, MetaConfig, MetaMod, ModioTags, SemverVersion}; +use mint_lib::mod_info::{ + ApprovalStatus, Meta, MetaConfig, MetaMod, ModIdentifier, ModioTags, SemverVersion, +}; use mint_lib::DRGInstallation; use repak::PakWriter; use serde::Deserialize; @@ -164,7 +166,7 @@ pub fn integrate>( path_pak: P, config: MetaConfig, mods: Vec<(ModInfo, PathBuf)>, -) -> Result, IntegrationErr> { +) -> Result, IntegrationErr> { let installation = DRGInstallation::from_pak_path(&path_pak).map_err(|e| IntegrationErr { mod_ctxt: None, kind: IntegrationErrKind::Generic(e), @@ -420,7 +422,7 @@ pub fn integrate>( debug!(?mod_info, ?gameplay_affecting); - gameplay_affecting_results.insert(mod_info.clone(), gameplay_affecting); + gameplay_affecting_results.insert(mod_info.resolution.url.clone(), gameplay_affecting); let mount = Path::new(pak.mount_point()); @@ -628,7 +630,9 @@ pub fn integrate>( Some(_) => true, None => gameplay_affecting_results .iter() - .find_map(|(mod_info, res)| (mod_info == info).then_some(*res)) + .find_map(|(ident, res)| { + (*ident == info.resolution.url).then_some(*res) + }) .unwrap_or(true), }, })