From 6b37d007c738c647d7c5726571ec0d2812d07721 Mon Sep 17 00:00:00 2001 From: spookdot Date: Mon, 12 Sep 2022 01:05:23 +0200 Subject: [PATCH 1/2] Added package type filter --- src/client.rs | 7 ++++++- src/config.rs | 28 +++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/client.rs b/src/client.rs index 018f794..dc05be2 100644 --- a/src/client.rs +++ b/src/client.rs @@ -24,14 +24,19 @@ impl HopperClient { let url = format!("https://{}/v2/search", self.config.upstream.server_address); let mut params = vec![("query", search_args.package_name.to_owned())]; + let mut facets: Vec = Vec::new(); if let Some(versions) = &search_args.version { let versions_facets = versions .iter() .map(|e| format!("[\"versions:{}\"]", e)) .collect::>() .join(","); - params.push(("facets", format!("[{}]", versions_facets))); + facets.push(format!("{}", versions_facets)); } + if let Some(package_type) = &search_args.package_type { + facets.push(format!("[\"project_type:{}\"]", package_type.to_string())); + } + params.push(("facets", format!("[{}]", facets.join(",")))); let url = reqwest::Url::parse_with_params(url.as_str(), ¶ms)?; info!("GET {}", url); diff --git a/src/config.rs b/src/config.rs index f6addbe..1d1b99a 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,4 +1,4 @@ -use clap::{Parser, Subcommand}; +use clap::{Parser, Subcommand, ValueEnum}; use serde::{Deserialize, Serialize}; use std::path::PathBuf; @@ -7,6 +7,10 @@ use std::path::PathBuf; pub struct SearchArgs { pub package_name: String, + /// Type of package to use + #[clap(short, long, value_enum)] + pub package_type: Option, + /// Restricts the target Minecraft version #[clap(short, long)] pub version: Option>, @@ -26,6 +30,28 @@ pub enum Command { Clean, } +#[derive(ValueEnum, Clone, Debug)] +pub enum PackageType { + Fabric, + Forge, + Quilt, + Resource, + Pack, +} + +impl ToString for PackageType { + fn to_string(&self) -> String { + match self { + PackageType::Fabric => "fabric", + PackageType::Forge => "forge", + PackageType::Quilt => "quilt", + PackageType::Resource => "resourcepack", + PackageType::Pack => "modpack", + } + .to_string() + } +} + // TODO move main body argument fields to substruct for ease of moving? #[derive(Parser, Clone, Debug)] #[clap(name = "hopper")] From ace6b25381ab143792882b8cf52ca565879b23f4 Mon Sep 17 00:00:00 2001 From: spookdot Date: Fri, 16 Sep 2022 18:51:55 +0200 Subject: [PATCH 2/2] Add plugins and modpack distinction --- src/client.rs | 19 +++++++++++++++++-- src/config.rs | 22 ++++++++-------------- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/client.rs b/src/client.rs index dc05be2..a0d9d31 100644 --- a/src/client.rs +++ b/src/client.rs @@ -1,5 +1,5 @@ use crate::api::{ModInfo, ModResult, ModVersion, ModVersionFile, SearchResponse}; -use crate::config::{Args, Config, SearchArgs}; +use crate::config::{Args, Config, PackageType, SearchArgs}; use futures_util::StreamExt; use log::*; use std::cmp::min; @@ -34,7 +34,22 @@ impl HopperClient { facets.push(format!("{}", versions_facets)); } if let Some(package_type) = &search_args.package_type { - facets.push(format!("[\"project_type:{}\"]", package_type.to_string())); + let package_type_facet = match package_type { + PackageType::Fabric => "[\"categories:fabric\"],[\"project_type:mod\"]", + PackageType::Forge => "[\"categories:forge\"],[\"project_type:mod\"]", + PackageType::Quilt => "[\"categories:quilt\"],[\"project_type:mod\"]", + PackageType::Resource => "[\"project_type:resourcepack\"]", + PackageType::FabricPack => "[\"project_type:modpack\"],[\"categories:fabric\"]", + PackageType::ForgePack => "[\"project_type:modpack\"],[\"categories:forge\"]", + PackageType::QuiltPack => "[\"project_type:modpack\"],[\"categories:quilt\"]", + PackageType::BukkitPlugin => "[\"project_type:mod\"],[\"categories:bukkit\"]", + PackageType::PaperPlugin => "[\"project_type:mod\"],[\"categories:paper\"]", + PackageType::PurpurPlugin => "[\"project_type:mod\"],[\"categories:purpur\"]", + PackageType::SpigotPlugin => "[\"project_type:mod\"],[\"categories:spigot\"]", + PackageType::SpongePlugin => "[\"project_type:mod\"],[\"categories:sponge\"]", + } + .to_string(); + facets.push(package_type_facet); } params.push(("facets", format!("[{}]", facets.join(",")))); diff --git a/src/config.rs b/src/config.rs index 1d1b99a..8ba1f47 100644 --- a/src/config.rs +++ b/src/config.rs @@ -36,20 +36,14 @@ pub enum PackageType { Forge, Quilt, Resource, - Pack, -} - -impl ToString for PackageType { - fn to_string(&self) -> String { - match self { - PackageType::Fabric => "fabric", - PackageType::Forge => "forge", - PackageType::Quilt => "quilt", - PackageType::Resource => "resourcepack", - PackageType::Pack => "modpack", - } - .to_string() - } + FabricPack, + ForgePack, + QuiltPack, + BukkitPlugin, + PaperPlugin, + PurpurPlugin, + SpigotPlugin, + SpongePlugin, } // TODO move main body argument fields to substruct for ease of moving?