From 0556506b03cb3b5b3f072a08fb611dd0d5c2f2fa Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Fri, 8 Aug 2025 04:17:52 -0400 Subject: [PATCH] command to load media files --- .../src/media_files/get_media_file.rs | 8 +- .../media_files/get_media_file_command.rs | 78 +++++++++++-------- crates/desktop/artcraft/src/lib.rs | 6 +- .../fal_background_removal_command.rs | 3 +- 4 files changed, 58 insertions(+), 37 deletions(-) diff --git a/crates/api_clients/storyteller_client/src/media_files/get_media_file.rs b/crates/api_clients/storyteller_client/src/media_files/get_media_file.rs index 511ba72321..4b66540c97 100644 --- a/crates/api_clients/storyteller_client/src/media_files/get_media_file.rs +++ b/crates/api_clients/storyteller_client/src/media_files/get_media_file.rs @@ -25,7 +25,11 @@ use tokens::tokens::model_weights::ModelWeightToken; use tokens::tokens::prompts::PromptToken; /// Get details about a media file from our backend -pub async fn get_media_file(api_host: &ApiHost, media_file_token: &MediaFileToken) -> Result { +pub async fn get_media_file( + api_host: &ApiHost, + media_file_token: &MediaFileToken +) -> Result { + let url = get_media_file_token_route(api_host, media_file_token); debug!("Requesting {:?}", &url); @@ -47,8 +51,6 @@ fn get_media_file_token_route(api_host: &ApiHost, media_file_token: &MediaFileTo format!("{}/v1/media_files/file/{}", api_hostname_and_scheme, media_file_token) } -// TODO(bt,2025-04-22): Share API definitions between client and server in common crate. - #[cfg(test)] mod tests { diff --git a/crates/desktop/artcraft/src/core/commands/media_files/get_media_file_command.rs b/crates/desktop/artcraft/src/core/commands/media_files/get_media_file_command.rs index c49d1780ea..1fc25dbbbd 100644 --- a/crates/desktop/artcraft/src/core/commands/media_files/get_media_file_command.rs +++ b/crates/desktop/artcraft/src/core/commands/media_files/get_media_file_command.rs @@ -1,54 +1,70 @@ -use crate::core::commands::response::shorthand::InfallibleResponse; +use crate::core::commands::enqueue::image_inpaint::enqueue_image_inpaint_command::EnqueueImageInpaintSuccessResponse; +use crate::core::commands::response::shorthand::{InfallibleResponse, ResponseOrErrorType}; use crate::core::commands::response::success_response_wrapper::SerializeMarker; use crate::core::model::image_models::ImageModel; use crate::core::state::app_env_configs::app_env_configs::AppEnvConfigs; -use chrono::{DateTime, Utc}; -use log::info; -use serde_derive::{Deserialize, Serialize}; -use tauri::{AppHandle, State}; -use tokens::tokens::media_files::MediaFileToken; use crate::core::state::data_dir::app_data_root::AppDataRoot; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; +use artcraft_api_defs::media_files::get_media_file::MediaFileInfo; +use chrono::{DateTime, Utc}; +use log::{error, info}; +use serde_derive::{Deserialize, Serialize}; +use storyteller_client::generate::image::edit::gpt_image_1_edit_image::gpt_image_1_edit_image; +use storyteller_client::media_files::get_media_file::get_media_file; +use tauri::{AppHandle, State}; +use tokens::tokens::media_files::MediaFileToken; +use crate::core::commands::response::failure_response_wrapper::{CommandErrorResponseWrapper, CommandErrorStatus}; #[derive(Deserialize)] pub struct GetMediaFileRequest { pub token: MediaFileToken, } -#[derive(Debug, Serialize)] -pub struct AppInfoResponse { - pub build_timestamp: DateTime, - pub git_commit_id: Option, - pub git_commit_short_id: Option, - pub git_commit_timestamp: Option>, - pub storyteller_host: String, +#[derive(Serialize, Debug)] +#[serde(rename_all = "snake_case")] +pub enum GetMediaFileErrorType { + NotFound, + NotAuthorized, + ServerError, } -impl SerializeMarker for AppInfoResponse {} +#[derive(Debug, Serialize)] +pub struct GetMediaFileResponse { + pub success: bool, + pub media_file: MediaFileInfo, +} + +impl SerializeMarker for GetMediaFileResponse {} #[tauri::command] -pub fn get_media_file_command( +pub async fn get_media_file_command( request: GetMediaFileRequest, - app: AppHandle, - app_data_root: State<'_, AppDataRoot>, app_env_configs: State<'_, AppEnvConfigs>, storyteller_creds_manager: State<'_, StorytellerCredentialManager>, -) -> InfallibleResponse { +) -> ResponseOrErrorType { info!("get_media_file_command called..."); - let build_timestamp = build_metadata::build_timestamp(); - let git_commit_id = build_metadata::git_commit_id(); - let git_commit_short_id = build_metadata::git_commit_short_id(); - let git_commit_timestamp = build_metadata::git_commit_timestamp(); + let result = get_media_file( + &app_env_configs.storyteller_host, + //Some(&creds), + &request.token, + ).await; - let storyteller_host = app_env_configs.storyteller_host.to_api_hostname_and_scheme(); + let result = match result { + Ok(result) => result, + Err(err) => { + error!("Failed to get media file: {:?}", err); + return Err(CommandErrorResponseWrapper { + status: CommandErrorStatus::ServerError, + error_message: None, + error_type: Some(GetMediaFileErrorType::ServerError), + error_details: None, + }); + } + }; - AppInfoResponse { - build_timestamp, - git_commit_id: git_commit_id.map(|s| s.to_string()), - git_commit_short_id: git_commit_short_id.map(|s| s.to_string()), - git_commit_timestamp, - storyteller_host, - }.into() + Ok(GetMediaFileResponse { + success: true, + media_file: result.media_file + }.into()) } - diff --git a/crates/desktop/artcraft/src/lib.rs b/crates/desktop/artcraft/src/lib.rs index 22a0323ba5..10f3dc7bbe 100644 --- a/crates/desktop/artcraft/src/lib.rs +++ b/crates/desktop/artcraft/src/lib.rs @@ -1,19 +1,21 @@ pub mod core; pub mod services; +use log::error; use tauri::Manager; use crate::core::commands::app_preferences::get_app_preferences_command::get_app_preferences_command; use crate::core::commands::app_preferences::update_app_preference_command::update_app_preferences_command; use crate::core::commands::enqueue::image::enqueue_text_to_image_command::enqueue_text_to_image_command; use crate::core::commands::enqueue::image_bg_removal::enqueue_image_bg_removal_command::enqueue_image_bg_removal_command; -use crate::core::commands::enqueue::image_inpaint::enqueue_image_inpaint_command::enqueue_image_inpaint_command; use crate::core::commands::enqueue::image_edit::enqueue_contextual_edit_image_command::enqueue_contextual_edit_image_command; +use crate::core::commands::enqueue::image_inpaint::enqueue_image_inpaint_command::enqueue_image_inpaint_command; use crate::core::commands::enqueue::object::enqueue_image_to_3d_object_command::enqueue_image_to_3d_object_command; use crate::core::commands::enqueue::video::enqueue_image_to_video_command::enqueue_image_to_video_command; use crate::core::commands::flip_image::flip_image; use crate::core::commands::get_app_info_command::get_app_info_command; use crate::core::commands::load_without_cors_command::load_without_cors_command; +use crate::core::commands::media_files::get_media_file_command::get_media_file_command; use crate::core::commands::platform_info_command::platform_info_command; use crate::core::commands::providers::get_provider_order_command::get_provider_order_command; use crate::core::commands::providers::set_provider_order_command::set_provider_order_command; @@ -41,7 +43,6 @@ use crate::services::sora::state::sora_credential_manager::SoraCredentialManager use crate::services::sora::state::sora_task_queue::SoraTaskQueue; use crate::services::sora::threads::sora_task_polling_thread::sora_task_polling_thread; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; -use log::error; use tauri_plugin_dialog; use tauri_plugin_http; @@ -156,6 +157,7 @@ pub fn run() { get_app_info_command, get_app_preferences_command, get_fal_api_key_command, + get_media_file_command, get_provider_order_command, load_without_cors_command, open_sora_login_command, diff --git a/crates/desktop/artcraft/src/services/fal/commands/fal_background_removal_command.rs b/crates/desktop/artcraft/src/services/fal/commands/fal_background_removal_command.rs index b39ff45417..b8c9f7c1c0 100644 --- a/crates/desktop/artcraft/src/services/fal/commands/fal_background_removal_command.rs +++ b/crates/desktop/artcraft/src/services/fal/commands/fal_background_removal_command.rs @@ -17,6 +17,7 @@ use crate::core::utils::simple_http_download_to_tempfile::simple_http_download_t use crate::services::fal::state::fal_credential_manager::FalCredentialManager; use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager; use anyhow::anyhow; +use artcraft_api_defs::media_files::get_media_file::GetMediaFileSuccessResponse; use base64::prelude::BASE64_STANDARD; use base64::{DecodeError, Engine}; use errors::AnyhowError; @@ -28,7 +29,7 @@ use log::{error, info, warn}; use reqwest::Url; use serde_derive::{Deserialize, Serialize}; use storyteller_client::error::storyteller_error::StorytellerError; -use storyteller_client::media_files::get_media_file::{get_media_file, GetMediaFileSuccessResponse}; +use storyteller_client::media_files::get_media_file::get_media_file; use storyteller_client::media_files::upload_image_media_file_from_file::{upload_image_media_file_from_file, UploadImageFromFileArgs}; use storyteller_client::utils::api_host::ApiHost; use tauri::{AppHandle, Manager, State};