Just use normal asset download
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2026-03-01 17:10:53 -05:00
parent 0e2ffcd570
commit 02873e82b6
2 changed files with 13 additions and 36 deletions

View File

@@ -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,
};

View File

@@ -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<Vec<u8>,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<Option<Vec<u8>>,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
}
}