From 4bbfc8ccc567d17ed22c0a7b380f1c149e86f994 Mon Sep 17 00:00:00 2001 From: Emma Alexia Triphora Date: Sun, 24 Sep 2023 11:40:03 -0400 Subject: [PATCH] Add NeoForge modpack and autoupdater support (#707) --- src/models/pack.rs | 2 ++ src/routes/updates.rs | 21 +++++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/models/pack.rs b/src/models/pack.rs index c6feac604..67bb7c260 100644 --- a/src/models/pack.rs +++ b/src/models/pack.rs @@ -84,6 +84,7 @@ pub enum EnvType { #[serde(rename_all = "kebab-case")] pub enum PackDependency { Forge, + Neoforge, FabricLoader, QuiltLoader, Minecraft, @@ -100,6 +101,7 @@ impl PackDependency { pub fn as_str(&self) -> &'static str { match self { PackDependency::Forge => "forge", + PackDependency::Neoforge => "neoforge", PackDependency::FabricLoader => "fabric-loader", PackDependency::Minecraft => "minecraft", PackDependency::QuiltLoader => "quilt-loader", diff --git a/src/routes/updates.rs b/src/routes/updates.rs index 13c8e3972..d3674f35e 100644 --- a/src/routes/updates.rs +++ b/src/routes/updates.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; use actix_web::{get, web, HttpRequest, HttpResponse}; -use serde::Serialize; +use serde::{Deserialize, Serialize}; use sqlx::PgPool; use crate::auth::{filter_authorized_versions, get_user_from_headers, is_authorized}; @@ -16,9 +16,20 @@ pub fn config(cfg: &mut web::ServiceConfig) { cfg.service(forge_updates); } +#[derive(Serialize, Deserialize)] +pub struct NeoForge { + #[serde(default = "default_neoforge")] + pub neoforge: String, +} + +fn default_neoforge() -> String { + "none".into() +} + #[get("{id}/forge_updates.json")] pub async fn forge_updates( req: HttpRequest, + web::Query(neo): web::Query, info: web::Path<(String,)>, pool: web::Data, redis: web::Data, @@ -49,10 +60,16 @@ pub async fn forge_updates( let versions = database::models::Version::get_many(&project.versions, &**pool, &redis).await?; + let loaders = match &*neo.neoforge { + "only" => |x: &String| *x == "neoforge", + "include" => |x: &String| *x == "forge" || *x == "neoforge", + _ => |x: &String| *x == "forge", + }; + let mut versions = filter_authorized_versions( versions .into_iter() - .filter(|x| x.loaders.iter().any(|y| *y == "forge")) + .filter(|x| x.loaders.iter().any(loaders)) .collect(), &user_option, &pool,