50 lines
1.6 KiB
Rust
50 lines
1.6 KiB
Rust
use crate::download::download_asset_version;
|
|
use crate::nats_types::UploadSubmissionRequest;
|
|
|
|
#[allow(dead_code)]
|
|
#[derive(Debug)]
|
|
pub enum Error{
|
|
Download(crate::download::Error),
|
|
IO(std::io::Error),
|
|
Json(serde_json::Error),
|
|
Create(rbx_asset::cookie::CreateError),
|
|
SystemTime(std::time::SystemTimeError),
|
|
ApiActionSubmissionUploaded(submissions_api::Error),
|
|
}
|
|
impl std::fmt::Display for Error{
|
|
fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{
|
|
write!(f,"{self:?}")
|
|
}
|
|
}
|
|
impl std::error::Error for Error{}
|
|
|
|
impl crate::message_handler::MessageHandler{
|
|
pub async fn upload_submission(&self,upload_info:UploadSubmissionRequest)->Result<(),Error>{
|
|
// download the map model
|
|
let maybe_gzip=download_asset_version(&self.cloud_context,rbx_asset::cloud::GetAssetVersionRequest{
|
|
asset_id:upload_info.ModelID,
|
|
version:upload_info.ModelVersion,
|
|
}).await.map_err(Error::Download)?;
|
|
|
|
// transparently handle gzipped models
|
|
let model_data=maybe_gzip.to_vec().map_err(Error::IO)?;
|
|
|
|
// upload the map to the strafesnet group
|
|
let upload_response=self.cookie_context.create(rbx_asset::cookie::CreateRequest{
|
|
name:upload_info.ModelName.clone(),
|
|
description:"".to_owned(),
|
|
ispublic:false,
|
|
allowComments:false,
|
|
groupId:self.group_id,
|
|
},model_data).await.map_err(Error::Create)?;
|
|
|
|
// note the asset id of the created model for later release, and mark the submission as uploaded
|
|
self.api.action_submission_uploaded(submissions_api::types::ActionSubmissionUploadedRequest{
|
|
SubmissionID:upload_info.SubmissionID,
|
|
UploadedAssetID:upload_response.AssetId,
|
|
}).await.map_err(Error::ApiActionSubmissionUploaded)?;
|
|
|
|
Ok(())
|
|
}
|
|
}
|