mirror of https://github.com/Chocobozzz/PeerTube
				
				
				
			
		
			
				
	
	
		
			37 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
| import { Transaction } from 'sequelize/types'
 | |
| import { isArray } from '@server/helpers/custom-validators/misc'
 | |
| import { MVideoAP, MVideoAPWithoutCaption } from '@server/types/models'
 | |
| import { sendCreateVideo, sendUpdateVideo } from '../send'
 | |
| import { shareVideoByServerAndChannel } from '../share'
 | |
| 
 | |
| async function federateVideoIfNeeded (videoArg: MVideoAPWithoutCaption, isNewVideo: boolean, transaction?: Transaction) {
 | |
|   const video = videoArg as MVideoAP
 | |
| 
 | |
|   if (
 | |
|     // Check this is not a blacklisted video, or unfederated blacklisted video
 | |
|     (video.isBlacklisted() === false || (isNewVideo === false && video.VideoBlacklist.unfederated === false)) &&
 | |
|     // Check the video is public/unlisted and published
 | |
|     video.hasPrivacyForFederation() && video.hasStateForFederation()
 | |
|   ) {
 | |
|     // Fetch more attributes that we will need to serialize in AP object
 | |
|     if (isArray(video.VideoCaptions) === false) {
 | |
|       video.VideoCaptions = await video.$get('VideoCaptions', {
 | |
|         attributes: [ 'filename', 'language' ],
 | |
|         transaction
 | |
|       })
 | |
|     }
 | |
| 
 | |
|     if (isNewVideo) {
 | |
|       // Now we'll add the video's meta data to our followers
 | |
|       await sendCreateVideo(video, transaction)
 | |
|       await shareVideoByServerAndChannel(video, transaction)
 | |
|     } else {
 | |
|       await sendUpdateVideo(video, transaction)
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| export {
 | |
|   federateVideoIfNeeded
 | |
| }
 |