diff --git a/combobulator/src/process.rs b/combobulator/src/process.rs index 79bcbf9..8327ba0 100644 --- a/combobulator/src/process.rs +++ b/combobulator/src/process.rs @@ -131,19 +131,22 @@ impl Processor{ }else{ // check raw cache, download if missing let raw_key=S3Cache::texture_raw_key(asset_id); - let raw_data=match self.s3.get(&raw_key).await.map_err(Error::S3Get)?{ - Some(cached)=>cached, - None=>{ - println!("[combobulator] Downloading texture {asset_id}"); - let Some(data)=self.download_asset(asset_id).await? else{continue}; - self.s3.put(&raw_key,data.clone()).await.map_err(Error::S3Put)?; - data - }, + let dds_result=if let Some(data)=self.s3.get(&raw_key).await.map_err(Error::S3Get)?{ + map_tool::roblox::convert_texture_to_dds(&data) + }else{ + println!("[combobulator] Downloading texture {asset_id}"); + let Some(data)=self.download_asset(asset_id).await? else{continue}; + + // decode while we have ownership + let dds_result=map_tool::roblox::convert_texture_to_dds(&data); + + self.s3.put(&raw_key,data).await.map_err(Error::S3Put)?; + dds_result }; - // convert to DDS and upload - let dds=map_tool::roblox::convert_texture_to_dds(&raw_data) - .map_err(Error::ConvertTexture)?; + // handle error after caching data + let dds=dds_result.map_err(Error::ConvertTexture)?; + self.s3.put(&dds_key,dds.clone()).await.map_err(Error::S3Put)?; dds