add name and nexusid to mod
This commit is contained in:
@@ -3,7 +3,7 @@ use log::error;
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
nexus::{NXMUrl, download_nxm},
|
nexus::{NXMUrl, download_nxm},
|
||||||
types::RootConfig,
|
types::{ModConfig, RootConfig},
|
||||||
unpacker::unpack,
|
unpacker::unpack,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -32,11 +32,11 @@ pub fn handle_nxm(root_config: &mut RootConfig, raw_url: &str) -> anyhow::Result
|
|||||||
return Err(anyhow!("Mod with generated id already exists"));
|
return Err(anyhow!("Mod with generated id already exists"));
|
||||||
}
|
}
|
||||||
|
|
||||||
let new_mod = unpack(root_config, &mod_id, dl_file)?;
|
unpack(root_config, &mod_id, dl_file)?;
|
||||||
|
|
||||||
|
let new_mod = ModConfig::from_mod_info(&mod_id, &mod_id, &mod_info);
|
||||||
|
|
||||||
root_config.add_mod(&new_mod);
|
root_config.add_mod(&new_mod);
|
||||||
|
|
||||||
root_config.save_to_file()?;
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ use fomod_manager::{
|
|||||||
},
|
},
|
||||||
cli::{self, Args},
|
cli::{self, Args},
|
||||||
nexus::NexusAPI,
|
nexus::NexusAPI,
|
||||||
types::RootConfig,
|
types::{ModConfig, RootConfig},
|
||||||
unpacker::unpack,
|
unpacker::unpack,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -76,7 +76,9 @@ fn command_unpack(
|
|||||||
return Err(anyhow!("Mod already exists"));
|
return Err(anyhow!("Mod already exists"));
|
||||||
}
|
}
|
||||||
|
|
||||||
let new_mod = unpack(root_config, id, file)?;
|
unpack(root_config, id, file)?;
|
||||||
|
|
||||||
|
let new_mod = ModConfig::new(id, id);
|
||||||
|
|
||||||
root_config.add_mod(&new_mod);
|
root_config.add_mod(&new_mod);
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,6 @@ mod api;
|
|||||||
mod downloader;
|
mod downloader;
|
||||||
mod url;
|
mod url;
|
||||||
|
|
||||||
pub use api::NexusAPI;
|
pub use api::{ModInfo, NexusAPI};
|
||||||
pub use downloader::download_nxm;
|
pub use downloader::download_nxm;
|
||||||
pub use url::NXMUrl;
|
pub use url::NXMUrl;
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ use std::path::{Path, PathBuf};
|
|||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
use crate::nexus::ModInfo;
|
||||||
|
|
||||||
/// Config for an available mod
|
/// Config for an available mod
|
||||||
#[derive(Debug, Clone, Deserialize, Serialize)]
|
#[derive(Debug, Clone, Deserialize, Serialize)]
|
||||||
#[serde(deny_unknown_fields)]
|
#[serde(deny_unknown_fields)]
|
||||||
@@ -22,6 +24,9 @@ pub struct ModConfig {
|
|||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
#[serde(skip_serializing_if = "Vec::is_empty")]
|
#[serde(skip_serializing_if = "Vec::is_empty")]
|
||||||
ignore: Vec<String>,
|
ignore: Vec<String>,
|
||||||
|
|
||||||
|
name: Option<String>,
|
||||||
|
nexus_id: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ModConfig {
|
impl ModConfig {
|
||||||
@@ -31,9 +36,18 @@ impl ModConfig {
|
|||||||
path: source.as_ref().to_owned(),
|
path: source.as_ref().to_owned(),
|
||||||
root_mod: false,
|
root_mod: false,
|
||||||
ignore: Vec::new(),
|
ignore: Vec::new(),
|
||||||
|
name: None,
|
||||||
|
nexus_id: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn from_mod_info(id: &str, source: impl AsRef<Path>, mod_info: &ModInfo) -> Self {
|
||||||
|
let mut normal = Self::new(id, source);
|
||||||
|
normal.name = Some(mod_info.name.clone());
|
||||||
|
|
||||||
|
normal
|
||||||
|
}
|
||||||
|
|
||||||
pub fn add_id(mut self, id: &str) -> Self {
|
pub fn add_id(mut self, id: &str) -> Self {
|
||||||
self.id = id.to_owned();
|
self.id = id.to_owned();
|
||||||
self
|
self
|
||||||
|
|||||||
@@ -4,13 +4,9 @@ use anyhow::anyhow;
|
|||||||
use log::error;
|
use log::error;
|
||||||
use zip::ZipArchive;
|
use zip::ZipArchive;
|
||||||
|
|
||||||
use crate::types::{ModConfig, RootConfig};
|
use crate::types::RootConfig;
|
||||||
|
|
||||||
pub fn unpack(
|
pub fn unpack(root_config: &RootConfig, id: &str, path: impl AsRef<Path>) -> anyhow::Result<()> {
|
||||||
root_config: &RootConfig,
|
|
||||||
id: &str,
|
|
||||||
path: impl AsRef<Path>,
|
|
||||||
) -> anyhow::Result<ModConfig> {
|
|
||||||
let extract_to = root_config.mod_location().join(id);
|
let extract_to = root_config.mod_location().join(id);
|
||||||
|
|
||||||
if fs::exists(&extract_to)? {
|
if fs::exists(&extract_to)? {
|
||||||
@@ -37,9 +33,7 @@ pub fn unpack(
|
|||||||
}
|
}
|
||||||
}?;
|
}?;
|
||||||
|
|
||||||
let new_mod = ModConfig::new(id, id);
|
Ok(())
|
||||||
|
|
||||||
Ok(new_mod)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn unpack_7z_file(path: impl AsRef<Path>, to: impl AsRef<Path>) -> anyhow::Result<()> {
|
fn unpack_7z_file(path: impl AsRef<Path>, to: impl AsRef<Path>) -> anyhow::Result<()> {
|
||||||
|
|||||||
Reference in New Issue
Block a user