mirror of https://github.com/immich-app/immich.git
refactor(web): websocket events (#7152)
parent
bbf7a54c65
commit
c84c0bae6c
@ -1,15 +1,18 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { websocketStore } from '$lib/stores/websocket';
|
import { websocketEvents } from '$lib/stores/websocket';
|
||||||
import type { AssetStore } from '$lib/stores/assets.store';
|
import type { AssetStore } from '$lib/stores/assets.store';
|
||||||
|
import { onMount } from 'svelte';
|
||||||
|
|
||||||
export let assetStore: AssetStore | null;
|
export let assetStore: AssetStore | null;
|
||||||
|
|
||||||
websocketStore.onAssetUpdate.subscribe((asset) => {
|
onMount(() => {
|
||||||
if (asset && asset.originalFileName && assetStore) {
|
return websocketEvents.on('on_asset_update', (asset) => {
|
||||||
assetStore.updateAsset(asset, true);
|
if (asset.originalFileName && assetStore) {
|
||||||
|
assetStore.updateAsset(asset, true);
|
||||||
|
|
||||||
assetStore.removeAsset(asset.id); // Update timeline
|
assetStore.removeAsset(asset.id); // Update timeline
|
||||||
assetStore.addAsset(asset);
|
assetStore.addAsset(asset);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -0,0 +1,42 @@
|
|||||||
|
import type {
|
||||||
|
DefaultEventsMap,
|
||||||
|
EventsMap,
|
||||||
|
ReservedOrUserEventNames,
|
||||||
|
ReservedOrUserListener,
|
||||||
|
} from '@socket.io/component-emitter';
|
||||||
|
import type { Socket } from 'socket.io-client';
|
||||||
|
|
||||||
|
export function createEventEmitter<
|
||||||
|
ListenEvents extends EventsMap = DefaultEventsMap,
|
||||||
|
EmitEvents extends EventsMap = ListenEvents,
|
||||||
|
ReservedEvents extends EventsMap = NonNullable<unknown>,
|
||||||
|
>(socket: Socket<ListenEvents, EmitEvents>) {
|
||||||
|
function on<Ev extends ReservedOrUserEventNames<ReservedEvents, ListenEvents>>(
|
||||||
|
ev: Ev,
|
||||||
|
listener: ReservedOrUserListener<ReservedEvents, ListenEvents, Ev>,
|
||||||
|
) {
|
||||||
|
socket.on(ev, listener);
|
||||||
|
return () => {
|
||||||
|
socket.off(ev, listener);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function once<Ev extends ReservedOrUserEventNames<ReservedEvents, ListenEvents>>(
|
||||||
|
ev: Ev,
|
||||||
|
listener: ReservedOrUserListener<ReservedEvents, ListenEvents, Ev>,
|
||||||
|
) {
|
||||||
|
socket.once(ev, listener);
|
||||||
|
return () => {
|
||||||
|
socket.off(ev, listener);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function off<Ev extends ReservedOrUserEventNames<ReservedEvents, ListenEvents>>(
|
||||||
|
ev: Ev,
|
||||||
|
listener: ReservedOrUserListener<ReservedEvents, ListenEvents, Ev>,
|
||||||
|
) {
|
||||||
|
socket.off(ev, listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
return { on, once, off };
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue