send event for background removal

This commit is contained in:
Brandon Thomas committed 2025-08-07 20:03:28 -04:00
1 parent 5d8aac6992
commit 3d3a8d9a66
10 files changed
+87 -10

No files matched your search

@@ -0,0 +1,16 @@
use crate::core::events::basic_sendable_event_trait::{BasicEventStatus, BasicSendableEvent};
use serde_derive::Serialize;
use url::Url;
use tokens::tokens::media_files::MediaFileToken;
#[derive(Clone, Debug, Serialize)]
#[serde(rename_all = "snake_case")]
pub struct CanvasBackgroundRemovalCompleteEvent {
pub media_token: MediaFileToken,
pub image_cdn_url: Url,
}
impl BasicSendableEvent for CanvasBackgroundRemovalCompleteEvent {
const FRONTEND_EVENT_NAME: &'static str = "canvas-background-removal-complete-event";
const EVENT_STATUS: BasicEventStatus = BasicEventStatus::Success;
}
@@ -0,0 +1 @@
pub mod canvas_background_removal_complete_event;
@@ -1,4 +1,5 @@
pub mod basic_sendable_event_trait;
pub mod generation_events;
pub mod sendable_event_error;
pub mod sendable_event_trait;
pub mod sendable_event_trait;
pub mod functional_events;
@@ -0,0 +1,42 @@
use crate::core::events::basic_sendable_event_trait::BasicSendableEvent;
use crate::core::events::functional_events::canvas_background_removal_complete_event::CanvasBackgroundRemovalCompleteEvent;
use crate::core::events::generation_events::generation_complete_event::GenerationCompleteEvent;
use artcraft_api_defs::jobs::list_session_jobs::ListSessionJobsItem;
use enums::tauri::tasks::task_type::TaskType;
use errors::AnyhowResult;
use log::error;
use sqlite_tasks::queries::list_tasks_by_provider_and_tokens::{list_tasks_by_provider_and_tokens, ListTasksArgs, Task};
use tokens::tokens::media_files::MediaFileToken;
pub async fn maybe_send_background_removal_complete_event(
app: &tauri::AppHandle,
task: &Task,
job: &ListSessionJobsItem,
) -> AnyhowResult<()> {
match task.task_type {
TaskType::BackgroundRemoval => {} // NB: Fall-through
_ => {
return Ok(())
},
}
let result = match job.maybe_result {
Some(ref res) => res,
None => {
error!("Job result is None for task: {:?}", task);
return Ok(()); // No result, nothing to do
},
};
let event = CanvasBackgroundRemovalCompleteEvent {
media_token: MediaFileToken::new_from_str(&result.entity_token),
image_cdn_url: result.media_links.cdn_url.clone(),
};
if let Err(err) = event.send(&app) {
error!("Failed to send CanvasBackgroundRemovalCompleteEvent: {:?}", err); // Fail open
}
Ok(())
}
@@ -0,0 +1 @@
pub mod maybe_send_background_removal_complete_event;
@@ -1 +1,2 @@
pub mod events;
pub mod storyteller_task_polling_thread;
@@ -12,10 +12,12 @@ use crate::core::utils::enum_conversion::task_type::to_generation_action;
use crate::services::sora::state::sora_credential_manager::SoraCredentialManager;
use crate::services::sora::state::sora_task_queue::SoraTaskQueue;
use crate::services::storyteller::state::storyteller_credential_manager::StorytellerCredentialManager;
use crate::services::storyteller::threads::events::maybe_send_background_removal_complete_event::maybe_send_background_removal_complete_event;
use anyhow::anyhow;
use enums::common::generation_provider::GenerationProvider;
use enums::common::job_status_plus::JobStatusPlus;
use enums::tauri::tasks::task_status::TaskStatus;
use enums::tauri::tasks::task_type::TaskType;
use errors::AnyhowResult;
use log::{error, info};
use reqwest::Url;
@@ -137,7 +139,17 @@ async fn polling_loop(
if !updated {
continue; // If anything breaks with queries, don't spam events.
}
let result = maybe_send_background_removal_complete_event(
&app_handle,
&task,
&job,
).await;
if let Err(err) = result {
error!("Failed to send background removal complete event: {:?}", err);
}
let service = to_generation_service_provider(task.provider);
let action = to_generation_action(task.task_type);
@@ -382,6 +382,9 @@ const PageDraw = () => {
return { success: false };
}
try {
// ...
// Call API, on success, return a File object parsed from base64.
// ...
const response = await FalBackgroundRemoval({
base64_image: image_base64,
});
@@ -10,7 +10,6 @@ import { setCanvasRenderBitmap } from "../../signals/canvasRenderBitmap"
import {
EnqueueImageInpaint,
EnqueueImageInpaintModel,
FalBackgroundRemoval,
} from "@storyteller/tauri-api";
import { ContextMenuContainer } from "../PageDraw/components/ui/ContextMenu";
import SideToolbar from "../PageDraw/components/ui/SideToolbar";
+8 -7
View File
@@ -1,9 +1,10 @@
export * from "./lib/common/CommandStatus.js";
export * from "./lib/enqueue/EnqueueContextualEditImage.js";
export * from "./lib/enqueue/EnqueueImageTo3dObject.js";
export * from "./lib/enqueue/EnqueueTextToImage.js";
export * from "./lib/enqueue/EnqueueImageToVideo.js";
export * from "./lib/enqueue/EnqueueImageBgRemovalCommand.js";
export * from "./lib/enqueue/EnqueueImageInpaint.js";
export * from "./lib/enqueue/EnqueueImageTo3dObject.js";
export * from "./lib/enqueue/EnqueueImageToVideo.js";
export * from "./lib/enqueue/EnqueueTextToImage.js";
export * from "./lib/fal/FalBackgroundRemoval.js";
export * from "./lib/fal/FalHunyuanImageTo3d.js";
export * from "./lib/fal/FalKlingImageToVideo.js";
@@ -11,6 +12,9 @@ export * from "./lib/fal/GetFalApiKey.js";
export * from "./lib/fal/SetFalApiKey.js";
export * from "./lib/openai/GetOpenAIApiKey.js";
export * from "./lib/openai/SetOpenAIApiKey.js";
export * from "./lib/providers/GetProviderOrder.js";
export * from "./lib/providers/Provider.js";
export * from "./lib/providers/SetProviderOrder.js";
export * from "./lib/settings/GetAppPreferences.js";
export * from "./lib/settings/UpdateAppPreference.js";
export * from "./lib/sora/CheckSoraSession.js";
@@ -19,7 +23,4 @@ export * from "./lib/sora/SoraImageRemix.js";
export * from "./lib/sora/useSoraLoginListener.js";
export * from "./lib/sora/waitForSoraLogin.js";
export * from "./lib/system/GetAppInfo.js";
export * from "./lib/providers/SetProviderOrder.js";
export * from "./lib/providers/Provider.js";
export * from "./lib/providers/GetProviderOrder.js";
export * from "./lib/util/LoadWithoutCors.js";
export * from "./lib/util/LoadWithoutCors.js";