aboutsummaryrefslogblamecommitdiffhomepage
path: root/server/lib/activitypub/videos.ts
blob: 8bc928b935015cded14667fc998d4ef45e4e2e3d (plain) (tree)
1
2
3
4
5
6
7
8
9

                                  
                                       
                                                          
                                                                          


                                                                        
        

                                                                                                                                    
               
 
                                                                        
                   
                                                           

                                                                  


                                                                       

 
                                                                
                   
                                                           









                                                  
                                                                                 









                                                                          
                                               
                        
                    



                   

                             
                                                     

              
                                                                    
                 
                                                                          
 
         
                                                                
            
                                                                            

 
                                            
                        
                    



                   

                             
                                                     

              
                                                            
                 
                                                                  
 
         
                                                        
            
                                                                    

 


                              


                                 
 
import { join } from 'path'
import * as request from 'request'
import { Transaction } from 'sequelize'
import { ActivityIconObject } from '../../../shared/index'
import { doRequest, doRequestAndSaveToFile } from '../../helpers/requests'
import { CONFIG, REMOTE_SCHEME, STATIC_PATHS } from '../../initializers'
import { AccountModel } from '../../models/account/account'
import { VideoModel } from '../../models/video/video'
import {
  sendCreateDislikeToOrigin, sendCreateDislikeToVideoFollowers, sendLikeToOrigin, sendLikeToVideoFollowers, sendUndoDislikeToOrigin,
  sendUndoDislikeToVideoFollowers, sendUndoLikeToOrigin, sendUndoLikeToVideoFollowers
} from './send'

function fetchRemoteVideoPreview (video: VideoModel, reject: Function) {
  // FIXME: use url
  const host = video.VideoChannel.Account.Actor.Server.host
  const path = join(STATIC_PATHS.PREVIEWS, video.getPreviewName())

  return request.get(REMOTE_SCHEME.HTTP + '://' + host + path, err => {
    if (err) reject(err)
  })
}

async function fetchRemoteVideoDescription (video: VideoModel) {
  // FIXME: use url
  const host = video.VideoChannel.Account.Actor.Server.host
  const path = video.getDescriptionPath()
  const options = {
    uri: REMOTE_SCHEME.HTTP + '://' + host + path,
    json: true
  }

  const { body } = await doRequest(options)
  return body.description ? body.description : ''
}

function generateThumbnailFromUrl (video: VideoModel, icon: ActivityIconObject) {
  const thumbnailName = video.getThumbnailName()
  const thumbnailPath = join(CONFIG.STORAGE.THUMBNAILS_DIR, thumbnailName)

  const options = {
    method: 'GET',
    uri: icon.url
  }
  return doRequestAndSaveToFile(options, thumbnailPath)
}

async function sendVideoRateChangeToFollowers (
  account: AccountModel,
  video: VideoModel,
  likes: number,
  dislikes: number,
  t: Transaction
) {
  const actor = account.Actor

  // Keep the order: first we undo and then we create

  // Undo Like
  if (likes < 0) await sendUndoLikeToVideoFollowers(actor, video, t)
  // Undo Dislike
  if (dislikes < 0) await sendUndoDislikeToVideoFollowers(actor, video, t)

  // Like
  if (likes > 0) await sendLikeToVideoFollowers(actor, video, t)
  // Dislike
  if (dislikes > 0) await sendCreateDislikeToVideoFollowers(actor, video, t)
}

async function sendVideoRateChangeToOrigin (
  account: AccountModel,
  video: VideoModel,
  likes: number,
  dislikes: number,
  t: Transaction
) {
  const actor = account.Actor

  // Keep the order: first we undo and then we create

  // Undo Like
  if (likes < 0) await sendUndoLikeToOrigin(actor, video, t)
  // Undo Dislike
  if (dislikes < 0) await sendUndoDislikeToOrigin(actor, video, t)

  // Like
  if (likes > 0) await sendLikeToOrigin(actor, video, t)
  // Dislike
  if (dislikes > 0) await sendCreateDislikeToOrigin(actor, video, t)
}

export {
  fetchRemoteVideoPreview,
  fetchRemoteVideoDescription,
  generateThumbnailFromUrl,
  sendVideoRateChangeToFollowers,
  sendVideoRateChangeToOrigin
}