diff --git a/crates/api_clients/storyteller_client/src/media_files/upload_image_media_file_from_file.rs b/crates/api_clients/storyteller_client/src/media_files/upload_image_media_file_from_file.rs index 211ed98cfd..8cc97063b2 100644 --- a/crates/api_clients/storyteller_client/src/media_files/upload_image_media_file_from_file.rs +++ b/crates/api_clients/storyteller_client/src/media_files/upload_image_media_file_from_file.rs @@ -84,8 +84,8 @@ pub async fn upload_image_media_file_from_file>( } fn get_route(api_host: &ApiHost) -> String { - let api_hostname = api_host.to_api_hostname(); - format!("https://{}/v1/media_files/upload/image", api_hostname) + let api_hostname_and_scheme = api_host.to_api_hostname_and_scheme(); + format!("{}/v1/media_files/upload/image", api_hostname_and_scheme) } // TODO(bt,2025-04-22): Share API definitions between client and server in common crate. diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/gpt_image_1/handle_gpt_image_1_sora.rs b/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/gpt_image_1/handle_gpt_image_1_sora.rs index ac0029f326..78e5856a69 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/gpt_image_1/handle_gpt_image_1_sora.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/image_edit/gpt_image_1/handle_gpt_image_1_sora.rs @@ -52,7 +52,7 @@ pub async fn handle_gpt_image_1_sora( app_env_configs: &AppEnvConfigs, sora_creds_manager: &SoraCredentialManager, sora_task_queue: &SoraTaskQueue, - + ) -> Result { let sora_creds = match sora_creds_manager.get_credentials() { @@ -66,7 +66,7 @@ pub async fn handle_gpt_image_1_sora( return Err(InternalContextualEditImageError::AnyhowError(err)); } }; - + // TODO(bt,2025-07-08): Handle many images. // TODO(bt,2025-07-08): Handle authenticated sessions (for private images). // TODO(bt,2025-07-08): Handle HTTP batch get requests. @@ -78,7 +78,7 @@ pub async fn handle_gpt_image_1_sora( })?; info!("Calling get media file API: {:?}", app_env_configs.storyteller_host); - + let response = get_media_file( &app_env_configs.storyteller_host, first_image_token diff --git a/crates/desktop/artcraft/src/lib.rs b/crates/desktop/artcraft/src/lib.rs index 04036fcaf9..23f15ba847 100644 --- a/crates/desktop/artcraft/src/lib.rs +++ b/crates/desktop/artcraft/src/lib.rs @@ -82,6 +82,8 @@ pub fn run() { let app_env_configs = AppEnvConfigs::load_from_filesystem(&app_data_root) .expect("AppEnvConfigs should be loaded from disk"); + let app_env_configs_2 = app_env_configs.clone(); + let provider_priority = match ProviderPriorityStore::from_filesystem_configs(&app_data_root) { Ok(Some(priority)) => { println!("Loaded provider priority from disk: {:?}", priority.get_priority()); @@ -173,7 +175,7 @@ pub fn run() { } tauri::async_runtime::spawn(main_window_thread(app_3, app_data_root_3, storyteller_creds_manager_2)); - tauri::async_runtime::spawn(sora_task_polling_thread(app_4, app_data_root_4, sora_creds_manager_3, storyteller_creds_manager_3, sora_task_queue_2)); + tauri::async_runtime::spawn(sora_task_polling_thread(app_4, app_env_configs_2, app_data_root_4, sora_creds_manager_3, storyteller_creds_manager_3, sora_task_queue_2)); tauri::async_runtime::spawn(discord_presence_thread()); tauri::async_runtime::spawn(fal_task_polling_thread(app_5, app_data_root_5, fal_creds_manager_3, storyteller_creds_manager_4, fal_task_queue_3)); diff --git a/crates/desktop/artcraft/src/services/sora/threads/sora_task_polling_thread.rs b/crates/desktop/artcraft/src/services/sora/threads/sora_task_polling_thread.rs index c5e92df493..4f136b8611 100644 --- a/crates/desktop/artcraft/src/services/sora/threads/sora_task_polling_thread.rs +++ b/crates/desktop/artcraft/src/services/sora/threads/sora_task_polling_thread.rs @@ -3,6 +3,7 @@ use crate::core::events::generation_events::common::{GenerationAction, Generatio use crate::core::events::generation_events::generation_complete_event::GenerationCompleteEvent; use crate::core::events::generation_events::generation_failed_event::GenerationFailedEvent; use crate::core::events::sendable_event_trait::SendableEvent; +use crate::core::state::app_env_configs::app_env_configs::AppEnvConfigs; use crate::core::state::data_dir::app_data_root::AppDataRoot; use crate::core::state::data_dir::trait_data_subdir::DataSubdir; use crate::services::sora::state::sora_credential_manager::SoraCredentialManager; @@ -17,12 +18,12 @@ use std::fs::File; use std::io::Write; use std::path::PathBuf; use storyteller_client::media_files::upload_image_media_file_from_file::upload_image_media_file_from_file; -use storyteller_client::utils::api_host::ApiHost; use tauri::AppHandle; use tempdir::TempDir; pub async fn sora_task_polling_thread( app_handle: AppHandle, + app_env_configs: AppEnvConfigs, app_data_root: AppDataRoot, sora_creds_manager: SoraCredentialManager, storyteller_creds_manager: StorytellerCredentialManager, @@ -31,6 +32,7 @@ pub async fn sora_task_polling_thread( loop { let res = polling_loop( &app_handle, + &app_env_configs, &sora_creds_manager, &storyteller_creds_manager, &sora_task_queue, @@ -45,6 +47,7 @@ pub async fn sora_task_polling_thread( async fn polling_loop( app_handle: &AppHandle, + app_env_configs: &AppEnvConfigs, sora_creds_manager: &SoraCredentialManager, storyteller_creds_manager: &StorytellerCredentialManager, sora_task_queue: &SoraTaskQueue, @@ -119,7 +122,6 @@ async fn polling_loop( sora_task_queue.remove_list(&failed_task_ids)?; let creds = storyteller_creds_manager.get_credentials_required()?; - let api_host = ApiHost::Storyteller; for task in succeeded_tasks.iter() { if !sora_task_queue.contains_key(&task.id)? { @@ -132,7 +134,11 @@ async fn polling_loop( let download_path = download_generation(generation, &app_data_root).await?; info!("Uploading to backend..."); - let result = upload_image_media_file_from_file(&api_host, Some(&creds), download_path).await?; + let result = upload_image_media_file_from_file( + &app_env_configs.storyteller_host, + Some(&creds), + download_path + ).await?; info!("Uploaded to API backend: {:?}", result.media_file_token);