From 02873e82b6d22b9d0d4300a62178dcda82eb208c Mon Sep 17 00:00:00 2001 From: itzaname Date: Sun, 1 Mar 2026 17:10:53 -0500 Subject: [PATCH] Just use normal asset download --- combobulator/src/main.rs | 7 +------ combobulator/src/process.rs | 42 +++++++++++-------------------------- 2 files changed, 13 insertions(+), 36 deletions(-) diff --git a/combobulator/src/main.rs b/combobulator/src/main.rs index d1dbea4..529bf2f 100644 --- a/combobulator/src/main.rs +++ b/combobulator/src/main.rs @@ -82,11 +82,7 @@ async fn handle_message( #[tokio::main] async fn main()->Result<(),StartupError>{ - // roblox cloud api for downloading models - let api_key=std::env::var("RBX_API_KEY").expect("RBX_API_KEY env required"); - let cloud_context=rbx_asset::cloud::Context::new(rbx_asset::cloud::ApiKey::new(api_key)); - - // roblox cookie api for downloading assets (textures, meshes, unions) + // roblox cookie api for downloading assets let cookie=std::env::var("RBXCOOKIE").expect("RBXCOOKIE env required"); let cookie_context=rbx_asset::cookie::Context::new(rbx_asset::cookie::Cookie::new(cookie)); @@ -97,7 +93,6 @@ async fn main()->Result<(),StartupError>{ let s3_cache=s3::S3Cache::new(s3_client,s3_bucket); let processor=process::Processor{ - cloud_context, cookie_context, s3:s3_cache, }; diff --git a/combobulator/src/process.rs b/combobulator/src/process.rs index 79fb5fc..356f099 100644 --- a/combobulator/src/process.rs +++ b/combobulator/src/process.rs @@ -4,9 +4,7 @@ use crate::s3::S3Cache; #[expect(dead_code)] #[derive(Debug)] pub enum Error{ - Download(rbx_asset::cloud::GetError), - Decompress(std::io::Error), - NonFreeModel, + ArchivedModel, GetAssets(map_tool::roblox::UniqueAssetError), DownloadAsset(map_tool::roblox::DownloadAssetError), ConvertTexture(map_tool::roblox::ConvertTextureError), @@ -22,28 +20,11 @@ impl std::fmt::Display for Error{ impl std::error::Error for Error{} pub struct Processor{ - pub cloud_context:rbx_asset::cloud::Context, pub cookie_context:rbx_asset::cookie::Context, pub s3:S3Cache, } impl Processor{ - /// Download a model version from Roblox cloud API. - async fn download_model(&self,model_id:u64,model_version:u64)->Result,Error>{ - let location=self.cloud_context.get_asset_version_location( - rbx_asset::cloud::GetAssetVersionRequest{ - asset_id:model_id, - version:model_version, - } - ).await.map_err(Error::Download)?; - - let location=location.location.ok_or(Error::NonFreeModel)?; - - let maybe_gzip=self.cloud_context.get_asset(&location).await.map_err(Error::Download)?; - - Ok(maybe_gzip.to_vec().map_err(Error::Decompress)?) - } - /// Download an asset, returning None if the asset is archived. async fn download_asset(&self,asset_id:u64)->Result>,Error>{ match map_tool::roblox::download_asset(&self.cookie_context,asset_id).await{ @@ -61,9 +42,10 @@ impl Processor{ } /// Process a single model: extract assets, cache to S3, build SNF. - async fn process_model(&self,model_id:u64,model_version:u64)->Result<(),Error>{ - println!("[combobulator] Downloading model {model_id} v{model_version}"); - let rbxl_bytes=self.download_model(model_id,model_version).await?; + async fn process_model(&self,asset_id:u64)->Result<(),Error>{ + println!("[combobulator] Downloading model {asset_id}"); + let rbxl_bytes=self.download_asset(asset_id).await? + .ok_or(Error::ArchivedModel)?; // extract unique assets from the file let assets=map_tool::roblox::get_unique_assets_from_file(&rbxl_bytes) @@ -135,7 +117,7 @@ impl Processor{ println!("[combobulator] Converting to SNF"); let output=map_tool::roblox::convert_to_snf(&rbxl_bytes) .map_err(Error::ConvertSnf)?; - let snf_key=S3Cache::snf_key(model_id); + let snf_key=S3Cache::snf_key(asset_id); self.s3.put(&snf_key,output.snf).await.map_err(Error::S3Put)?; println!("[combobulator] SNF uploaded to {snf_key}"); @@ -144,15 +126,15 @@ impl Processor{ /// Handle a mapfix release message. pub async fn handle_mapfix_release(&self,request:ReleaseMapfixRequest)->Result<(),Error>{ - println!("[combobulator] Processing mapfix {} (model {} v{})", - request.MapfixID,request.ModelID,request.ModelVersion); - self.process_model(request.ModelID,request.ModelVersion).await + println!("[combobulator] Processing mapfix {} (asset {})", + request.MapfixID,request.TargetAssetID); + self.process_model(request.TargetAssetID).await } /// Handle an individual submission release message. pub async fn handle_submission_release(&self,request:crate::nats_types::ReleaseSubmissionRequest)->Result<(),Error>{ - println!("[combobulator] Processing submission {} (model {} v{})", - request.SubmissionID,request.ModelID,request.ModelVersion); - self.process_model(request.ModelID,request.ModelVersion).await + println!("[combobulator] Processing submission {} (asset {})", + request.SubmissionID,request.UploadedAssetID); + self.process_model(request.UploadedAssetID).await } }