Init commit
This commit is contained in:
58
server/core/lib/video.ts
Normal file
58
server/core/lib/video.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
import { VideoPrivacy } from '@peertube/peertube-models'
|
||||
import { MEMOIZE_LENGTH, MEMOIZE_TTL, VIDEO_PRIVACIES } from '@server/initializers/constants.js'
|
||||
import { TagModel } from '@server/models/video/tag.js'
|
||||
import { VideoModel } from '@server/models/video/video.js'
|
||||
import { MVideoTag } from '@server/types/models/index.js'
|
||||
import memoizee from 'memoizee'
|
||||
import { Transaction } from 'sequelize'
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export async function setVideoTags (options: {
|
||||
video: MVideoTag
|
||||
tags: string[]
|
||||
transaction?: Transaction
|
||||
}) {
|
||||
const { video, tags, transaction } = options
|
||||
|
||||
const internalTags = tags || []
|
||||
const tagInstances = await TagModel.findOrCreateMultiple({ tags: internalTags, transaction })
|
||||
|
||||
await video.$set('Tags', tagInstances, { transaction })
|
||||
video.Tags = tagInstances
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
async function getVideoDuration (videoId: number | string) {
|
||||
const video = await VideoModel.load(videoId)
|
||||
|
||||
const duration = video.isLive
|
||||
? undefined
|
||||
: video.duration
|
||||
|
||||
return { duration, isLive: video.isLive }
|
||||
}
|
||||
|
||||
export const getCachedVideoDuration = memoizee(getVideoDuration, {
|
||||
promise: true,
|
||||
max: MEMOIZE_LENGTH.VIDEO_DURATION,
|
||||
maxAge: MEMOIZE_TTL.VIDEO_DURATION
|
||||
})
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export function getLeastPrivatePrivacy () {
|
||||
const order = [
|
||||
VideoPrivacy.PUBLIC,
|
||||
VideoPrivacy.UNLISTED,
|
||||
VideoPrivacy.INTERNAL,
|
||||
VideoPrivacy.PRIVATE
|
||||
]
|
||||
|
||||
for (const privacy of order) {
|
||||
if (VIDEO_PRIVACIES[privacy]) return privacy
|
||||
}
|
||||
|
||||
throw new Error('No valid privacy found')
|
||||
}
|
||||
Reference in New Issue
Block a user