mirror of
https://github.com/Chocobozzz/PeerTube.git
synced 2025-10-03 09:49:20 +02:00
Refractoring and add thumbnails support (without tests)
This commit is contained in:
parent
f1dae01868
commit
cbe2f7c348
19 changed files with 312 additions and 162 deletions
|
@ -3,21 +3,39 @@
|
|||
const async = require('async')
|
||||
const config = require('config')
|
||||
const ffmpeg = require('fluent-ffmpeg')
|
||||
const fs = require('fs')
|
||||
const map = require('lodash/map')
|
||||
const pathUtils = require('path')
|
||||
|
||||
const constants = require('../initializers/constants')
|
||||
const logger = require('../helpers/logger')
|
||||
const utils = require('../helpers/utils')
|
||||
const Videos = require('../models/videos')
|
||||
const webtorrent = require('../lib/webtorrent')
|
||||
|
||||
const logger = require('../helpers/logger')
|
||||
const Videos = require('../models/videos')
|
||||
|
||||
const uploadDir = pathUtils.join(__dirname, '..', '..', config.get('storage.uploads'))
|
||||
const thumbnailsDir = pathUtils.join(__dirname, '..', '..', config.get('storage.thumbnails'))
|
||||
|
||||
const videos = {
|
||||
createRemoteVideos: createRemoteVideos,
|
||||
getVideoDuration: getVideoDuration,
|
||||
getVideoState: getVideoState,
|
||||
getVideoThumbnail: getVideoThumbnail,
|
||||
removeVideosDataFromDisk: removeVideosDataFromDisk,
|
||||
removeRemoteVideos: removeRemoteVideos,
|
||||
seed: seed,
|
||||
seedAllExisting: seedAllExisting
|
||||
}
|
||||
|
||||
function createRemoteVideos (videos, callback) {
|
||||
// Create the remote videos from the new pod
|
||||
createRemoteVideoObjects(videos, function (err, remote_videos) {
|
||||
if (err) return callback(err)
|
||||
|
||||
Videos.addRemotes(remote_videos, callback)
|
||||
})
|
||||
}
|
||||
|
||||
function getVideoDuration (video_path, callback) {
|
||||
ffmpeg.ffprobe(video_path, function (err, metadata) {
|
||||
if (err) return callback(err)
|
||||
|
@ -36,6 +54,51 @@ function getVideoState (video) {
|
|||
return { exist: exist, owned: owned }
|
||||
}
|
||||
|
||||
function getVideoThumbnail (video_path, callback) {
|
||||
const filename = pathUtils.basename(video_path) + '.jpg'
|
||||
ffmpeg(video_path)
|
||||
.on('error', callback)
|
||||
.on('end', function () {
|
||||
callback(null, filename)
|
||||
})
|
||||
.thumbnail({
|
||||
count: 1,
|
||||
folder: thumbnailsDir,
|
||||
size: constants.THUMBNAILS_SIZE,
|
||||
filename: filename
|
||||
})
|
||||
}
|
||||
|
||||
// Remove video datas from disk (video file, thumbnail...)
|
||||
function removeVideosDataFromDisk (videos, callback) {
|
||||
async.each(videos, function (video, callback_each) {
|
||||
fs.unlink(thumbnailsDir + video.thumbnail, function (err) {
|
||||
if (err) logger.error('Cannot remove the video thumbnail')
|
||||
|
||||
if (getVideoState(video).owned === true) {
|
||||
fs.unlink(uploadDir + video.namePath, function (err) {
|
||||
if (err) {
|
||||
logger.error('Cannot remove this video file.')
|
||||
return callback_each(err)
|
||||
}
|
||||
|
||||
callback_each(null)
|
||||
})
|
||||
} else {
|
||||
callback_each(null)
|
||||
}
|
||||
})
|
||||
}, callback)
|
||||
}
|
||||
|
||||
function removeRemoteVideos (videos, callback) {
|
||||
Videos.removeByIds(map(videos, '_id'), function (err) {
|
||||
if (err) return callback(err)
|
||||
|
||||
removeVideosDataFromDisk(videos, callback)
|
||||
})
|
||||
}
|
||||
|
||||
function seed (path, callback) {
|
||||
logger.info('Seeding %s...', path)
|
||||
|
||||
|
@ -69,3 +132,42 @@ function seedAllExisting (callback) {
|
|||
// ---------------------------------------------------------------------------
|
||||
|
||||
module.exports = videos
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
function createRemoteVideoObjects (videos, callback) {
|
||||
const remote_videos = []
|
||||
|
||||
async.each(videos, function (video, callback_each) {
|
||||
// Creating the thumbnail for this remote video
|
||||
utils.generateRandomString(16, function (err, random_string) {
|
||||
if (err) return callback_each(err)
|
||||
|
||||
const thumbnail_name = random_string + '.jpg'
|
||||
createThumbnailFromBase64(thumbnail_name, video.thumbnail_base64, function (err) {
|
||||
if (err) return callback_each(err)
|
||||
|
||||
const params = {
|
||||
name: video.name,
|
||||
description: video.description,
|
||||
magnetUri: video.magnetUri,
|
||||
podUrl: video.podUrl,
|
||||
duration: video.duration,
|
||||
thumbnail: thumbnail_name
|
||||
}
|
||||
remote_videos.push(params)
|
||||
|
||||
callback_each(null)
|
||||
})
|
||||
})
|
||||
},
|
||||
function (err) {
|
||||
if (err) return callback(err)
|
||||
|
||||
callback(null, remote_videos)
|
||||
})
|
||||
}
|
||||
|
||||
function createThumbnailFromBase64 (thumbnail_name, data, callback) {
|
||||
fs.writeFile(thumbnailsDir + thumbnail_name, data, { encoding: 'base64' }, callback)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue