Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions src/commands/upload/dry_run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ use std::time::Instant;

use crate::auth;
use crate::media::ffmpeg::get_media_duration;
use crate::media::metadata::extract_media_metadata;
use crate::media::media_file_type::{is_audio_file, is_image_file, is_metadata_file};
use crate::media::transcode::{has_video_streams, is_mxf_file};
use crate::media::video_file_ext::has_video_ext;
Expand All @@ -17,6 +18,7 @@ pub fn run_dry_run(
in_app_path: &Option<String>,
auth_bearer: &Option<String>,
force_upload: bool,
disable_description_generation: bool,
) -> Result<(), String> {
let bearer_env = auth_bearer
.clone()
Expand Down Expand Up @@ -244,5 +246,34 @@ pub fn run_dry_run(
));
}

// Print what would be sent for preprocess for each file
output::plain("");
output::info("Preprocess payload (dry-run) per file:");
for file_path in &files_to_check {
let file_name = file_path
.file_name()
.unwrap_or_default()
.to_string_lossy()
.to_string();
let related_umids: Vec<String> = extract_media_metadata(file_path)
.map(|m| m.file_package_umids.iter().map(|u| u.umid.clone()).collect())
.unwrap_or_default();
let generate_time_based_media_description = !disable_description_generation;
output::plain(format!(" file: {}", file_name));
output::plain(format!(
" generate_time_based_media_description: {}",
generate_time_based_media_description
));
if related_umids.is_empty() {
output::plain(" related_umid_for_master_clip: null");
} else {
output::plain(" related_umid_for_master_clip:");
for umid in &related_umids {
output::plain(format!(" - {}", umid));
}
}
output::plain("");
}

Ok(())
}
90 changes: 45 additions & 45 deletions src/commands/upload/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,7 @@ fn run_upload(args: UploadCmdArgs) -> Result<(), String> {
&args.in_app_path,
&args.auth_bearer,
args.force_upload,
args.disable_description_generation,
);
}

Expand Down Expand Up @@ -503,6 +504,8 @@ fn run_upload(args: UploadCmdArgs) -> Result<(), String> {
&cfg,
&api_key,
bearer_header.as_deref(),
&related_umids_per_file,
args.disable_description_generation,
)
.await;

Expand All @@ -513,37 +516,6 @@ fn run_upload(args: UploadCmdArgs) -> Result<(), String> {

let _ = progress_handle.add_success("All uploads completed");

// Call preprocess for uploaded assets
let _ = progress_handle.add_info(format!(
"Triggering preprocessing for {} asset(s)...",
responses.len()
));
for (resp, file_related_umids) in responses.iter().zip(related_umids_per_file.iter()) {
let mut preproc_req = ProcessAssetsRequest::new(
vec![resp.clone()],
None::<tellers_api_client::models::VersionReference>,
);
preproc_req.generate_time_based_media_description =
Some(!args.disable_description_generation);
if !file_related_umids.is_empty() {
preproc_req.related_umid_for_master_clip =
Some(Some(file_related_umids.clone()));
}
let preproc_tasks = api::process_assets_users_assets_preprocess_post(
&cfg,
preproc_req,
None,
Some(&api_key),
bearer_header.as_deref(),
)
.await
.map_err(|e| format!("failed to trigger preprocess: {}", e))?;
let _ = progress_handle.add_success(format!(
"Preprocess tasks queued: {}",
preproc_tasks.len()
));
}

crate::tui::InlineProgress::stop_render_loop(render_handle).await;
progress.finish()?;

Expand Down Expand Up @@ -756,8 +728,6 @@ fn run_two_queue_pipeline(
drop(upload_tx);

let consumer = async move {
let mut completed_responses: Vec<AssetUploadResponse> = Vec::new();
let mut completed_related_umids: Vec<Vec<String>> = Vec::new();
while let Some(file_info) = upload_rx.recv().await {
progress_handle.decrement_upload_queued();
progress_handle.pop_upload_pending();
Expand Down Expand Up @@ -813,26 +783,17 @@ fn run_two_queue_pipeline(
e
));
}
completed_responses.push(upload_resp);
completed_related_umids.push(file_related_umids);
progress_handle.set_upload_current(None::<&str>);
progress_handle.set_upload_current_pct(None);
}

for (resp, file_related_umids) in completed_responses
.iter()
.zip(completed_related_umids.iter())
{
// Call preprocess as soon as this upload finishes
let _ = progress_handle.add_info("Triggering preprocessing...");
let mut preproc_req = ProcessAssetsRequest::new(
vec![resp.clone()],
vec![upload_resp.clone()],
None::<tellers_api_client::models::VersionReference>,
);
preproc_req.generate_time_based_media_description =
Some(!disable_description_generation);
if !file_related_umids.is_empty() {
preproc_req.related_umid_for_master_clip =
Some(Some(file_related_umids.clone()));
Some(Some(file_related_umids));
}
let preproc_tasks = api::process_assets_users_assets_preprocess_post(
&cfg,
Expand All @@ -847,6 +808,9 @@ fn run_two_queue_pipeline(
"Preprocess tasks queued: {}",
preproc_tasks.len()
));

progress_handle.set_upload_current(None::<&str>);
progress_handle.set_upload_current_pct(None);
}

Ok(())
Expand Down Expand Up @@ -1002,6 +966,8 @@ async fn upload_to_presigned_urls(
cfg: &Configuration,
api_key: &str,
bearer_opt: Option<&str>,
related_umids_per_file: &[Vec<String>],
disable_description_generation: bool,
) -> Result<(), String> {
let http = Arc::new(
reqwest::Client::builder()
Expand All @@ -1024,6 +990,10 @@ async fn upload_to_presigned_urls(
.get(&upload_id)
.ok_or_else(|| format!("missing presigned url for upload_id {}", upload_id))?
.clone();
let file_related_umids = related_umids_per_file
.get(i)
.cloned()
.unwrap_or_default();
let http_clone = Arc::clone(&http);
let semaphore_clone = Arc::clone(&semaphore);
let progress_handle_clone = progress_handle.clone();
Expand Down Expand Up @@ -1070,6 +1040,36 @@ async fn upload_to_presigned_urls(

let success = result.is_ok();
let _ = progress_handle_clone.finish_task(task_id, success);

if success {
// Call preprocess as soon as this upload finishes
let mut preproc_req = ProcessAssetsRequest::new(
vec![upload_resp],
None::<tellers_api_client::models::VersionReference>,
);
preproc_req.generate_time_based_media_description =
Some(!disable_description_generation);
if !file_related_umids.is_empty() {
preproc_req.related_umid_for_master_clip =
Some(Some(file_related_umids));
}
if let Err(e) = api::process_assets_users_assets_preprocess_post(
&cfg_clone,
preproc_req,
None,
Some(&api_key_clone),
bearer_clone.as_deref(),
)
.await
{
let _ = progress_handle_clone.add_error(format!(
"Failed to trigger preprocess: {}",
e
));
return Err(format!("preprocess: {}", e));
}
}

result
});

Expand Down