mirror of https://github.com/Chocobozzz/PeerTube
				
				
				
			
		
			
				
	
	
		
			65 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
| 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<string, Map<string, string>>()
 | |
| 
 | |
|   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
 | |
| }
 |