From 8ebf2a5d5d126e6ef9b89109124adf2a5e9e293d Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 16 Jun 2021 15:14:41 +0200 Subject: Refactor live manager --- server/lib/live/live-segment-sha-store.ts | 64 +++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 server/lib/live/live-segment-sha-store.ts (limited to 'server/lib/live/live-segment-sha-store.ts') diff --git a/server/lib/live/live-segment-sha-store.ts b/server/lib/live/live-segment-sha-store.ts new file mode 100644 index 000000000..4af6f3ebf --- /dev/null +++ b/server/lib/live/live-segment-sha-store.ts @@ -0,0 +1,64 @@ +import { basename } from 'path' +import { logger, loggerTagsFactory } from '@server/helpers/logger' +import { buildSha256Segment } from '../hls' + +const lTags = loggerTagsFactory('live') + +class LiveSegmentShaStore { + + private static instance: LiveSegmentShaStore + + private readonly segmentsSha256 = new Map>() + + private constructor () { + } + + getSegmentsSha256 (videoUUID: string) { + return this.segmentsSha256.get(videoUUID) + } + + async addSegmentSha (videoUUID: string, segmentPath: string) { + const segmentName = basename(segmentPath) + logger.debug('Adding live sha segment %s.', segmentPath, lTags(videoUUID)) + + const shaResult = await buildSha256Segment(segmentPath) + + if (!this.segmentsSha256.has(videoUUID)) { + this.segmentsSha256.set(videoUUID, new Map()) + } + + const filesMap = this.segmentsSha256.get(videoUUID) + filesMap.set(segmentName, shaResult) + } + + removeSegmentSha (videoUUID: string, segmentPath: string) { + const segmentName = basename(segmentPath) + + logger.debug('Removing live sha segment %s.', segmentPath, lTags(videoUUID)) + + const filesMap = this.segmentsSha256.get(videoUUID) + if (!filesMap) { + logger.warn('Unknown files map to remove sha for %s.', videoUUID, lTags(videoUUID)) + return + } + + if (!filesMap.has(segmentName)) { + logger.warn('Unknown segment in files map for video %s and segment %s.', videoUUID, segmentPath, lTags(videoUUID)) + return + } + + filesMap.delete(segmentName) + } + + cleanupShaSegments (videoUUID: string) { + this.segmentsSha256.delete(videoUUID) + } + + static get Instance () { + return this.instance || (this.instance = new this()) + } +} + +export { + LiveSegmentShaStore +} -- cgit v1.2.3