1
0
Fork 0

Refractor published date on video import

This commit is contained in:
Chocobozzz 2019-02-12 11:47:23 +01:00
parent 84929846e7
commit c74c9be934
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
5 changed files with 30 additions and 10 deletions

View File

@ -16,7 +16,7 @@ export type YoutubeDLInfo = {
nsfw?: boolean nsfw?: boolean
tags?: string[] tags?: string[]
thumbnailUrl?: string thumbnailUrl?: string
originallyPublishedAt?: string originallyPublishedAt?: Date
} }
const processOptions = { const processOptions = {
@ -143,13 +143,33 @@ async function safeGetYoutubeDL () {
return youtubeDL return youtubeDL
} }
function buildOriginallyPublishedAt (obj: any) {
let originallyPublishedAt: Date = null
const uploadDateMatcher = /^(\d{4})(\d{2})(\d{2})$/.exec(obj.upload_date)
if (uploadDateMatcher) {
originallyPublishedAt = new Date()
originallyPublishedAt.setHours(0, 0, 0, 0)
const year = parseInt(uploadDateMatcher[1], 10)
// Month starts from 0
const month = parseInt(uploadDateMatcher[2], 10) - 1
const day = parseInt(uploadDateMatcher[3], 10)
originallyPublishedAt.setFullYear(year, month, day)
}
return originallyPublishedAt
}
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
export { export {
updateYoutubeDLBinary, updateYoutubeDLBinary,
downloadYoutubeDLVideo, downloadYoutubeDLVideo,
getYoutubeDLInfo, getYoutubeDLInfo,
safeGetYoutubeDL safeGetYoutubeDL,
buildOriginallyPublishedAt
} }
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
@ -174,9 +194,6 @@ function normalizeObject (obj: any) {
} }
function buildVideoInfo (obj: any) { function buildVideoInfo (obj: any) {
const date = obj.upload_date.slice(0,4) + ',' + obj.upload_date.slice(4,6) + ',' + obj.upload_date.slice(6,8)
return { return {
name: titleTruncation(obj.title), name: titleTruncation(obj.title),
description: descriptionTruncation(obj.description), description: descriptionTruncation(obj.description),
@ -185,7 +202,7 @@ function buildVideoInfo (obj: any) {
nsfw: isNSFW(obj), nsfw: isNSFW(obj),
tags: getTags(obj.tags), tags: getTags(obj.tags),
thumbnailUrl: obj.thumbnail || undefined, thumbnailUrl: obj.thumbnail || undefined,
originallyPublishedAt: new Date(date).toISOString() originallyPublishedAt: buildOriginallyPublishedAt(obj)
} }
} }

View File

@ -10,6 +10,9 @@ const videosSearchValidator = [
query('startDate').optional().custom(isDateValid).withMessage('Should have a valid start date'), query('startDate').optional().custom(isDateValid).withMessage('Should have a valid start date'),
query('endDate').optional().custom(isDateValid).withMessage('Should have a valid end date'), query('endDate').optional().custom(isDateValid).withMessage('Should have a valid end date'),
query('originallyPublishedStartDate').optional().custom(isDateValid).withMessage('Should have a valid published start date'),
query('originallyPublishedEndDate').optional().custom(isDateValid).withMessage('Should have a valid published end date'),
query('durationMin').optional().isInt().withMessage('Should have a valid min duration'), query('durationMin').optional().isInt().withMessage('Should have a valid min duration'),
query('durationMax').optional().isInt().withMessage('Should have a valid max duration'), query('durationMax').optional().isInt().withMessage('Should have a valid max duration'),

View File

@ -37,6 +37,7 @@ describe('Test video imports', function () {
expect(videoHttp.description).to.equal('this is a super description') expect(videoHttp.description).to.equal('this is a super description')
expect(videoHttp.tags).to.deep.equal([ 'tag1', 'tag2' ]) expect(videoHttp.tags).to.deep.equal([ 'tag1', 'tag2' ])
expect(videoHttp.files).to.have.lengthOf(1) expect(videoHttp.files).to.have.lengthOf(1)
expect(videoHttp.originallyPublishedAt).to.equal('2019-01-13T23:00:00.000Z')
const resMagnet = await getVideo(url, idMagnet) const resMagnet = await getVideo(url, idMagnet)
const videoMagnet: VideoDetails = resMagnet.body const videoMagnet: VideoDetails = resMagnet.body

View File

@ -11,7 +11,7 @@ import { truncate } from 'lodash'
import * as prompt from 'prompt' import * as prompt from 'prompt'
import { remove } from 'fs-extra' import { remove } from 'fs-extra'
import { sha256 } from '../helpers/core-utils' import { sha256 } from '../helpers/core-utils'
import { safeGetYoutubeDL } from '../helpers/youtube-dl' import { safeGetYoutubeDL, buildOriginallyPublishedAt } from '../helpers/youtube-dl'
import { getSettings, netrc } from './cli' import { getSettings, netrc } from './cli'
let accessToken: string let accessToken: string
@ -212,7 +212,7 @@ async function uploadVideoOnPeerTube (videoInfo: any, videoPath: string, cwd: st
}, thumbnailfile) }, thumbnailfile)
} }
const date = videoInfo.upload_date.slice(0,4) + ',' + videoInfo.upload_date.slice(4,6) + ',' + videoInfo.upload_date.slice(6,8) const originallyPublishedAt = buildOriginallyPublishedAt(videoInfo)
const videoAttributes = { const videoAttributes = {
name: truncate(videoInfo.title, { name: truncate(videoInfo.title, {
@ -234,7 +234,7 @@ async function uploadVideoOnPeerTube (videoInfo: any, videoPath: string, cwd: st
fixture: videoPath, fixture: videoPath,
thumbnailfile, thumbnailfile,
previewfile: thumbnailfile, previewfile: thumbnailfile,
originallyPublishedAt: new Date(date).toISOString() originallyPublishedAt: originallyPublishedAt ? originallyPublishedAt.toISOString() : null
} }
console.log('\nUploading on PeerTube video "%s".', videoAttributes.name) console.log('\nUploading on PeerTube video "%s".', videoAttributes.name)

View File

@ -42,7 +42,6 @@ type VideoAttributes = {
updateAt: string updateAt: string
privacy?: VideoPrivacy privacy?: VideoPrivacy
} }
originallyPublishedAt?: string
} }
function getVideoCategories (url: string) { function getVideoCategories (url: string) {