Table,
UpdatedAt
} from 'sequelize-typescript'
-import { UserRight, VideoPrivacy, VideoState } from '../../../shared'
+import { UserRight, VideoPrivacy, VideoState, ResultList } from '../../../shared'
import { VideoTorrentObject } from '../../../shared/models/activitypub/objects'
import { Video, VideoDetails } from '../../../shared/models/videos'
import { VideoFilter } from '../../../shared/models/videos/video-query.type'
} from '../../helpers/custom-validators/videos'
import { getVideoFileResolution } from '../../helpers/ffmpeg-utils'
import { logger } from '../../helpers/logger'
-import { getServerActor } from '../../helpers/utils'
import {
ACTIVITY_PUB,
API_VERSION,
import { VideoCaptionModel } from './video-caption'
import { VideoBlacklistModel } from './video-blacklist'
import { remove } from 'fs-extra'
-import { VideoViewModel } from './video-views'
+import { VideoViewModel } from './video-view'
import { VideoRedundancyModel } from '../redundancy/video-redundancy'
import {
videoFilesModelToFormattedJSON,
import { ModelCache } from '@server/models/model-cache'
import { buildListQuery, BuildVideosQueryOptions, wrapForAPIResults } from './video-query-builder'
import { buildNSFWFilter } from '@server/helpers/express-utils'
+import { getServerActor } from '@server/models/application/application'
+import { getPrivaciesForFederation, isPrivacyForFederation } from "@server/helpers/video"
export enum ScopeNames {
AVAILABLE_FOR_LIST_IDS = 'AVAILABLE_FOR_LIST_IDS',
@AllowNull(false)
@Is('VideoPrivacy', value => throwIfNotValid(value, isVideoPrivacyValid, 'privacy'))
@Column
- privacy: number
+ privacy: VideoPrivacy
@AllowNull(false)
@Is('VideoNSFW', value => throwIfNotValid(value, isBooleanValid, 'NSFW boolean'))
distinct: true,
offset: start,
limit: count,
- order: getVideoSort('createdAt', [ 'Tags', 'name', 'ASC' ] as any), // FIXME: sequelize typings
+ order: getVideoSort('-createdAt', [ 'Tags', 'name', 'ASC' ] as any), // FIXME: sequelize typings
where: {
id: {
[Op.in]: Sequelize.literal('(' + rawQuery + ')')
},
- [Op.or]: [
- { privacy: VideoPrivacy.PUBLIC },
- { privacy: VideoPrivacy.UNLISTED }
- ]
+ [Op.or]: getPrivaciesForFederation()
},
include: [
{
// Instances only share videos
const query = 'SELECT 1 FROM "videoShare" ' +
'INNER JOIN "actorFollow" ON "actorFollow"."targetActorId" = "videoShare"."actorId" ' +
- 'WHERE "actorFollow"."actorId" = $followerActorId AND "videoShare"."videoId" = $videoId ' +
+ 'WHERE "actorFollow"."actorId" = $followerActorId AND "actorFollow"."state" = \'accepted\' AND "videoShare"."videoId" = $videoId ' +
'LIMIT 1'
const options = {
private static async getAvailableForApi (
options: BuildVideosQueryOptions,
countVideos = true
- ) {
+ ): Promise<ResultList<VideoModel>> {
function getCount () {
if (countVideos !== true) return Promise.resolve(undefined)
return videos
}
- private static isPrivacyForFederation (privacy: VideoPrivacy) {
- const castedPrivacy = parseInt(privacy + '', 10)
-
- return castedPrivacy === VideoPrivacy.PUBLIC || castedPrivacy === VideoPrivacy.UNLISTED
- }
-
static getCategoryLabel (id: number) {
return VIDEO_CATEGORIES[id] || 'Misc'
}
}
hasPrivacyForFederation () {
- return VideoModel.isPrivacyForFederation(this.privacy)
+ return isPrivacyForFederation(this.privacy)
}
isNewVideo (newPrivacy: VideoPrivacy) {
- return this.hasPrivacyForFederation() === false && VideoModel.isPrivacyForFederation(newPrivacy) === true
+ return this.hasPrivacyForFederation() === false && isPrivacyForFederation(newPrivacy) === true
}
setAsRefreshed () {