mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-07 02:21:23 +00:00
Co-authored-by: Storyteller <storyteller@MacBook-Pro-de-Storyteller.local>
88 lines
1.9 KiB
TypeScript
88 lines
1.9 KiB
TypeScript
import { fromEngineActions } from "~/pages/PageEnigma/Queue/fromEngineActions";
|
|
import { toEngineActions } from "~/pages/PageEnigma/Queue/toEngineActions";
|
|
|
|
import {
|
|
QueueClip,
|
|
QueueKeyframe,
|
|
UpdateTime,
|
|
MediaItem,
|
|
} from "~/pages/PageEnigma/models";
|
|
import { toTimelineActions } from "./toTimelineActions";
|
|
|
|
import { ClipUI } from "../datastructures/clips/clip_ui";
|
|
import { ToastTypes } from "~/contexts/ToasterContext";
|
|
import { GenerationOptions } from "../models/generationOptions";
|
|
|
|
export type ToastDataType = {
|
|
type: ToastTypes;
|
|
message: string;
|
|
}
|
|
|
|
type UnionedActionTypes =
|
|
| fromEngineActions
|
|
| toEngineActions
|
|
| toTimelineActions;
|
|
|
|
type UnionedDataTypes =
|
|
| QueueClip
|
|
| UpdateTime
|
|
| QueueKeyframe
|
|
| ClipUI[]
|
|
| MediaItem
|
|
| ToastDataType
|
|
| GenerationOptions
|
|
| null;
|
|
|
|
export type QueueSubscribeType = {
|
|
action: UnionedActionTypes;
|
|
data: UnionedDataTypes;
|
|
};
|
|
|
|
class Queue {
|
|
private _queue: Record<
|
|
string,
|
|
{
|
|
action: UnionedActionTypes;
|
|
data: UnionedDataTypes;
|
|
}[]
|
|
> = {};
|
|
private _subscribers: Record<
|
|
string,
|
|
(entry: { action: UnionedActionTypes; data: UnionedDataTypes }) => void
|
|
> = {};
|
|
|
|
public publish({
|
|
queueName,
|
|
action,
|
|
data,
|
|
}: {
|
|
queueName: string;
|
|
action: UnionedActionTypes;
|
|
data: UnionedDataTypes;
|
|
}) {
|
|
if (!this._queue[queueName]) {
|
|
this._queue[queueName] = [];
|
|
}
|
|
this._queue[queueName].push({ action, data });
|
|
console.log("Queued", queueName, action, data);
|
|
|
|
if (this._subscribers[queueName]) {
|
|
this._subscribers[queueName](this._queue[queueName].splice(0, 1)[0]);
|
|
}
|
|
}
|
|
|
|
public subscribe(
|
|
queueName: string,
|
|
onMessage: (entry: QueueSubscribeType) => void,
|
|
) {
|
|
this._subscribers[queueName] = onMessage;
|
|
while (this._queue[queueName]?.length) {
|
|
this._subscribers[queueName](this._queue[queueName].splice(0, 1)[0]);
|
|
}
|
|
}
|
|
}
|
|
|
|
const queue = new Queue();
|
|
|
|
export default queue;
|