fix(assets): 复用生成素材身份并保留空缓存同步前的编辑 (#690)
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -99,6 +99,12 @@ const queuedAssetPersists = new Map<string, QueuedAssetPersist>();
|
||||
const assetPersistTokens = new Map<string, number>();
|
||||
const assetOperations = new Set<Promise<unknown>>();
|
||||
const generationAssetFailures = new Map<string, unknown>();
|
||||
const generationAssetDefaults = new Map<string, Map<string, Asset>>();
|
||||
|
||||
// 只记录本次实际创建的生成输入,不能把重读的缓存(可能已编辑)当作默认值。
|
||||
export function getGenerationAssetDefaults(id: string): Asset | undefined {
|
||||
return generationAssetDefaults.get(getActiveUserScope())?.get(id);
|
||||
}
|
||||
|
||||
function recordAssetStorageDocument(scope: string, document: AssetStorageDocument) {
|
||||
observedAssetPersists.set(scope, {
|
||||
@@ -337,13 +343,17 @@ export const useAssetStore = create<AssetStore>()(
|
||||
assetId: id,
|
||||
createAsset: () => {
|
||||
const now = new Date().toISOString();
|
||||
return parseAssetRecord({
|
||||
const created = parseAssetRecord({
|
||||
...asset,
|
||||
id,
|
||||
createdAt: now,
|
||||
updatedAt: now,
|
||||
metadata: { ...asset.metadata, generationEffectKey: effectKey },
|
||||
});
|
||||
const defaults = generationAssetDefaults.get(scope) ?? new Map<string, Asset>();
|
||||
defaults.set(id, structuredClone(created));
|
||||
generationAssetDefaults.set(scope, defaults);
|
||||
return created;
|
||||
},
|
||||
updateAssets: (updater) => {
|
||||
withAssetStorePersistenceSuppressed(() => {
|
||||
@@ -408,6 +418,7 @@ export const useAssetStore = create<AssetStore>()(
|
||||
removeAsset: async (id) => get().removeAssets([id]),
|
||||
removeAssets: async (ids) => {
|
||||
const removedIds = new Set(ids);
|
||||
for (const id of ids) generationAssetDefaults.get(getActiveUserScope())?.delete(id);
|
||||
let remainingAssets: Asset[] = [];
|
||||
let hasLocalMedia = false;
|
||||
set((state) => {
|
||||
|
||||
Reference in New Issue
Block a user