Added the list and remove command
This commit is contained in:
parent
56f659a182
commit
846b3d0edf
@ -1,17 +1,23 @@
|
||||
use crate::{config, modrinth::project::get_multiple_projects};
|
||||
use crate::{config, pack::Modpack};
|
||||
use colored::*;
|
||||
use comfy_table::{presets::NOTHING, Table};
|
||||
|
||||
pub async fn list() {
|
||||
let config = config::Config::get().unwrap();
|
||||
|
||||
let projects = get_multiple_projects(config.projects.keys().to_owned().collect())
|
||||
.await
|
||||
.unwrap();
|
||||
let modpack = Modpack::from_config(&config).await.unwrap();
|
||||
|
||||
let rows: Vec<Vec<ColoredString>> = projects
|
||||
.iter()
|
||||
.map(|p| vec![p.title.bold(), p.id.dimmed()])
|
||||
let rows: Vec<Vec<ColoredString>> = modpack
|
||||
.mods
|
||||
.values()
|
||||
.into_iter()
|
||||
.map(|p| {
|
||||
vec![
|
||||
p.title.bold(),
|
||||
p.project_id.dimmed(),
|
||||
p.version.as_ref().unwrap().version_number.normal(),
|
||||
]
|
||||
})
|
||||
.collect();
|
||||
|
||||
let mut table = Table::new();
|
||||
|
@ -1,3 +1,4 @@
|
||||
pub mod add;
|
||||
pub mod init;
|
||||
pub mod list;
|
||||
pub mod remove;
|
||||
|
17
src/commands/remove.rs
Normal file
17
src/commands/remove.rs
Normal file
@ -0,0 +1,17 @@
|
||||
use crate::{config, pack::Modpack};
|
||||
use colored::*;
|
||||
use inquire::Select;
|
||||
|
||||
pub async fn remove() {
|
||||
let mut config = config::Config::get().unwrap();
|
||||
|
||||
let modpack = Modpack::from_config(&config).await.unwrap();
|
||||
|
||||
let project = Select::new("Select a mod to remove", modpack.mods.values().collect())
|
||||
.prompt()
|
||||
.unwrap();
|
||||
|
||||
config.projects.remove(&project.project_id);
|
||||
|
||||
config.save().unwrap();
|
||||
}
|
@ -2,6 +2,7 @@ mod cli;
|
||||
mod commands;
|
||||
mod config;
|
||||
mod modrinth;
|
||||
mod pack;
|
||||
|
||||
use clap::Parser;
|
||||
|
||||
@ -17,7 +18,7 @@ async fn main() {
|
||||
commands::add::add().await;
|
||||
}
|
||||
cli::Commands::Remove => {
|
||||
// config::Config::remove().await;
|
||||
commands::remove::remove().await;
|
||||
}
|
||||
cli::Commands::List => {
|
||||
commands::list::list().await;
|
||||
|
@ -8,13 +8,13 @@ type Response = Vec<ProjectVersion>;
|
||||
pub struct ProjectVersion {
|
||||
pub name: String,
|
||||
pub version_number: String,
|
||||
game_versions: Vec<String>,
|
||||
version_type: String,
|
||||
loaders: Vec<String>,
|
||||
featured: bool,
|
||||
pub game_versions: Vec<String>,
|
||||
pub version_type: String,
|
||||
pub loaders: Vec<String>,
|
||||
pub featured: bool,
|
||||
pub id: String,
|
||||
project_id: String,
|
||||
downloads: i64,
|
||||
pub project_id: String,
|
||||
pub downloads: i64,
|
||||
}
|
||||
|
||||
pub async fn get_multiple_versions(version_ids: Vec<&String>) -> Result<Response> {
|
||||
|
68
src/pack.rs
Normal file
68
src/pack.rs
Normal file
@ -0,0 +1,68 @@
|
||||
use crate::{
|
||||
config,
|
||||
modrinth::{
|
||||
project::{get_multiple_projects, Project},
|
||||
versions::{get_multiple_versions, ProjectVersion},
|
||||
},
|
||||
};
|
||||
use anyhow::Result;
|
||||
use std::collections::HashMap;
|
||||
use std::fmt;
|
||||
|
||||
pub struct Modpack {
|
||||
pub game_version: String,
|
||||
pub loader: String,
|
||||
pub mods: HashMap<String, Mod>,
|
||||
}
|
||||
|
||||
pub struct Mod {
|
||||
pub project_id: String,
|
||||
pub title: String,
|
||||
pub description: String,
|
||||
pub version: Option<ProjectVersion>,
|
||||
}
|
||||
|
||||
impl Mod {
|
||||
fn from_project(project: Project) -> Self {
|
||||
Self {
|
||||
project_id: project.id,
|
||||
title: project.title,
|
||||
description: project.description,
|
||||
version: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for Mod {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "{}", self.title)
|
||||
}
|
||||
}
|
||||
|
||||
impl Modpack {
|
||||
pub async fn from_config(config: &config::Config) -> Result<Self> {
|
||||
let projects = get_multiple_projects(config.projects.keys().collect())
|
||||
.await
|
||||
.unwrap();
|
||||
let versions = get_multiple_versions(config.projects.values().collect())
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
let mut projects_map: HashMap<String, Mod> = projects
|
||||
.into_iter()
|
||||
.map(|p| (p.id.clone(), Mod::from_project(p)))
|
||||
.collect();
|
||||
|
||||
for version in versions {
|
||||
if let Some(p) = projects_map.get_mut(&version.project_id) {
|
||||
p.version = Some(version)
|
||||
}
|
||||
}
|
||||
|
||||
Ok(Modpack {
|
||||
game_version: config.game_version.clone(),
|
||||
loader: config.loader.clone(),
|
||||
mods: projects_map,
|
||||
})
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user