X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Flive%2Flive-utils.ts;h=bba8766428aa409a9daaff816ac1136d060cd0eb;hb=39d117a47d313637cf3ded4c6fa915aa9fd469ee;hp=e4526c7a574fb8fe60a15633309a5c4486cdc168;hpb=cf21b2cbef61929177b9c09b5e017c3b7eb8535d;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/live/live-utils.ts b/server/lib/live/live-utils.ts index e4526c7a5..bba876642 100644 --- a/server/lib/live/live-utils.ts +++ b/server/lib/live/live-utils.ts @@ -1,7 +1,9 @@ -import { remove } from 'fs-extra' -import { basename } from 'path' +import { pathExists, readdir, remove } from 'fs-extra' +import { basename, join } from 'path' +import { logger } from '@server/helpers/logger' import { MStreamingPlaylist, MVideo } from '@server/types/models' -import { getHLSDirectory } from '../video-paths' +import { getLiveDirectory } from '../paths' +import { LiveSegmentShaStore } from './live-segment-sha-store' function buildConcatenatedName (segmentOrPlaylistPath: string) { const num = basename(segmentOrPlaylistPath).match(/^(\d+)(-|\.)/) @@ -9,15 +11,52 @@ function buildConcatenatedName (segmentOrPlaylistPath: string) { return 'concat-' + num[1] + '.ts' } -async function cleanupLive (video: MVideo, streamingPlaylist: MStreamingPlaylist) { - const hlsDirectory = getHLSDirectory(video) +async function cleanupPermanentLive (video: MVideo, streamingPlaylist: MStreamingPlaylist) { + await cleanupTMPLiveFiles(video) + + await streamingPlaylist.destroy() +} + +async function cleanupUnsavedNormalLive (video: MVideo, streamingPlaylist: MStreamingPlaylist) { + const hlsDirectory = getLiveDirectory(video) await remove(hlsDirectory) await streamingPlaylist.destroy() + + LiveSegmentShaStore.Instance.cleanupShaSegments(video.uuid) +} + +async function cleanupTMPLiveFiles (video: MVideo) { + const hlsDirectory = getLiveDirectory(video) + + LiveSegmentShaStore.Instance.cleanupShaSegments(video.uuid) + + if (!await pathExists(hlsDirectory)) return + + logger.info('Cleanup TMP live files of %s.', hlsDirectory) + + const files = await readdir(hlsDirectory) + + for (const filename of files) { + if ( + filename.endsWith('.ts') || + filename.endsWith('.m3u8') || + filename.endsWith('.mpd') || + filename.endsWith('.m4s') || + filename.endsWith('.tmp') + ) { + const p = join(hlsDirectory, filename) + + remove(p) + .catch(err => logger.error('Cannot remove %s.', p, { err })) + } + } } export { - cleanupLive, + cleanupPermanentLive, + cleanupUnsavedNormalLive, + cleanupTMPLiveFiles, buildConcatenatedName }