import { TarFile } from 'js-untar'; import ListWalker from 'Player/common/ListWalker'; interface Snapshots { [timestamp: number]: TarFile; } type Timestamp = { time: number }; export default class SnapshotManager extends ListWalker { private snapshots: Snapshots = {}; public mapToSnapshots(files: TarFile[]) { const filenameRegexp = /(\d+)_1_(\d+)\.(jpeg|png|avif|webp)$/; const firstPair = files[0].name.match(filenameRegexp); const sessionStart = firstPair ? parseInt(firstPair[1], 10) : 0; files.forEach((file) => { const [_, _2, imageTimestamp] = file.name .match(filenameRegexp) ?.map((n) => parseInt(n, 10)) ?? [0, 0, 0]; const messageTime = imageTimestamp - sessionStart; this.snapshots[messageTime] = file; this.append({ time: messageTime }); }); } public moveReady(t: number) { const msg = this.moveGetLast(t); if (msg) { return this.snapshots[msg.time]; } } public clean() { this.snapshots = {}; this.reset(); } }