mirror of
https://github.com/imgfloat/server.git
synced 2026-02-05 03:39:26 +00:00
Fix visibility
This commit is contained in:
@@ -1955,15 +1955,20 @@ function updateVisibility(asset, hidden) {
|
|||||||
return r.json();
|
return r.json();
|
||||||
}).then((updated) => {
|
}).then((updated) => {
|
||||||
storeAsset(updated);
|
storeAsset(updated);
|
||||||
|
let visibilityMessage = null;
|
||||||
if (updated.hidden) {
|
if (updated.hidden) {
|
||||||
loopPlaybackState.set(updated.id, false);
|
loopPlaybackState.set(updated.id, false);
|
||||||
stopAudio(updated.id);
|
stopAudio(updated.id);
|
||||||
showToast('Asset hidden from broadcast.', 'info');
|
showToast('Asset hidden from broadcast.', 'info');
|
||||||
} else if (isAudioAsset(updated)) {
|
} else if (isAudioAsset(updated)) {
|
||||||
playAudioFromCanvas(updated, true);
|
playAudioFromCanvas(updated, true);
|
||||||
showToast('Asset is now visible and active.', 'success');
|
visibilityMessage = 'Asset is now visible and active.';
|
||||||
|
} else {
|
||||||
|
visibilityMessage = 'Asset is now visible.';
|
||||||
|
}
|
||||||
|
if (visibilityMessage) {
|
||||||
|
showToast(visibilityMessage, 'success');
|
||||||
}
|
}
|
||||||
showToast('Asset is now visible.', 'success');
|
|
||||||
updateRenderState(updated);
|
updateRenderState(updated);
|
||||||
drawAndList();
|
drawAndList();
|
||||||
}).catch(() => showToast('Unable to change visibility right now.', 'error'));
|
}).catch(() => showToast('Unable to change visibility right now.', 'error'));
|
||||||
|
|||||||
@@ -136,6 +136,10 @@ function resizeCanvas() {
|
|||||||
|
|
||||||
function handleEvent(event) {
|
function handleEvent(event) {
|
||||||
const assetId = event.assetId || event?.patch?.id || event?.payload?.id;
|
const assetId = event.assetId || event?.patch?.id || event?.payload?.id;
|
||||||
|
if (event.type === 'VISIBILITY') {
|
||||||
|
handleVisibilityEvent(event);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (event.type === 'DELETED') {
|
if (event.type === 'DELETED') {
|
||||||
assets.delete(assetId);
|
assets.delete(assetId);
|
||||||
layerOrder = layerOrder.filter((id) => id !== assetId);
|
layerOrder = layerOrder.filter((id) => id !== assetId);
|
||||||
@@ -143,6 +147,21 @@ function handleEvent(event) {
|
|||||||
renderStates.delete(assetId);
|
renderStates.delete(assetId);
|
||||||
} else if (event.patch) {
|
} else if (event.patch) {
|
||||||
applyPatch(assetId, event.patch);
|
applyPatch(assetId, event.patch);
|
||||||
|
if (event.payload) {
|
||||||
|
const payload = normalizePayload(event.payload);
|
||||||
|
if (payload.hidden) {
|
||||||
|
assets.delete(payload.id);
|
||||||
|
layerOrder = layerOrder.filter((id) => id !== payload.id);
|
||||||
|
clearMedia(payload.id);
|
||||||
|
renderStates.delete(payload.id);
|
||||||
|
} else if (!assets.has(payload.id)) {
|
||||||
|
storeAsset(payload, 'append');
|
||||||
|
ensureMedia(payload);
|
||||||
|
if (isAudioAsset(payload)) {
|
||||||
|
playAudioImmediately(payload);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (event.type === 'PLAY' && event.payload) {
|
} else if (event.type === 'PLAY' && event.payload) {
|
||||||
const payload = normalizePayload(event.payload);
|
const payload = normalizePayload(event.payload);
|
||||||
storeAsset(payload);
|
storeAsset(payload);
|
||||||
@@ -169,17 +188,50 @@ function normalizePayload(payload) {
|
|||||||
return { ...payload };
|
return { ...payload };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handleVisibilityEvent(event) {
|
||||||
|
const payload = event.payload ? normalizePayload(event.payload) : null;
|
||||||
|
const patch = event.patch;
|
||||||
|
const id = payload?.id || patch?.id || event.assetId;
|
||||||
|
|
||||||
|
if (payload?.hidden || patch?.hidden) {
|
||||||
|
assets.delete(id);
|
||||||
|
layerOrder = layerOrder.filter((assetId) => assetId !== id);
|
||||||
|
clearMedia(id);
|
||||||
|
renderStates.delete(id);
|
||||||
|
draw();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (payload) {
|
||||||
|
const placement = assets.has(payload.id) ? 'keep' : 'append';
|
||||||
|
storeAsset(payload, placement);
|
||||||
|
ensureMedia(payload);
|
||||||
|
if (isAudioAsset(payload)) {
|
||||||
|
playAudioImmediately(payload);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (patch && id) {
|
||||||
|
applyPatch(id, patch);
|
||||||
|
}
|
||||||
|
|
||||||
|
draw();
|
||||||
|
}
|
||||||
|
|
||||||
function applyPatch(assetId, patch) {
|
function applyPatch(assetId, patch) {
|
||||||
if (!assetId || !patch) {
|
if (!assetId || !patch) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
const sanitizedPatch = Object.fromEntries(
|
||||||
|
Object.entries(patch).filter(([, value]) => value !== null && value !== undefined)
|
||||||
|
);
|
||||||
const existing = assets.get(assetId);
|
const existing = assets.get(assetId);
|
||||||
if (!existing) {
|
if (!existing) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const merged = normalizePayload({ ...existing, ...patch });
|
const merged = normalizePayload({ ...existing, ...sanitizedPatch });
|
||||||
const isAudio = isAudioAsset(merged);
|
const isAudio = isAudioAsset(merged);
|
||||||
if (patch.hidden) {
|
if (sanitizedPatch.hidden) {
|
||||||
assets.delete(assetId);
|
assets.delete(assetId);
|
||||||
layerOrder = layerOrder.filter((id) => id !== assetId);
|
layerOrder = layerOrder.filter((id) => id !== assetId);
|
||||||
clearMedia(assetId);
|
clearMedia(assetId);
|
||||||
|
|||||||
Reference in New Issue
Block a user