aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/lib
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2019-11-21 12:16:27 +0100
committerChocobozzz <me@florianbigard.com>2019-11-25 10:59:44 +0100
commit66fb2aa39b6f8e4677f80128c27fbafd3a8fe2e7 (patch)
tree9d2f21e81cc42d8d51ac7ae35d91c30f143f0be0 /server/lib
parentd7a25329f9e607894d29ab342b9cb66638b56dc0 (diff)
downloadPeerTube-66fb2aa39b6f8e4677f80128c27fbafd3a8fe2e7.tar.gz
PeerTube-66fb2aa39b6f8e4677f80128c27fbafd3a8fe2e7.tar.zst
PeerTube-66fb2aa39b6f8e4677f80128c27fbafd3a8fe2e7.zip
Don't always replace actor avatar
Diffstat (limited to 'server/lib')
-rw-r--r--server/lib/activitypub/actor.ts33
-rw-r--r--server/lib/schedulers/videos-redundancy-scheduler.ts15
-rw-r--r--server/lib/video-paths.ts16
3 files changed, 40 insertions, 24 deletions
diff --git a/server/lib/activitypub/actor.ts b/server/lib/activitypub/actor.ts
index 74241aba9..14dd1b9b9 100644
--- a/server/lib/activitypub/actor.ts
+++ b/server/lib/activitypub/actor.ts
@@ -173,25 +173,28 @@ async function updateActorInstance (actorInstance: ActorModel, attributes: Activ
173 173
174type AvatarInfo = { name: string, onDisk: boolean, fileUrl: string } 174type AvatarInfo = { name: string, onDisk: boolean, fileUrl: string }
175async function updateActorAvatarInstance (actor: MActorDefault, info: AvatarInfo, t: Transaction) { 175async function updateActorAvatarInstance (actor: MActorDefault, info: AvatarInfo, t: Transaction) {
176 if (info.name !== undefined) { 176 if (!info.name) return actor
177 if (actor.avatarId) {
178 try {
179 await actor.Avatar.destroy({ transaction: t })
180 } catch (err) {
181 logger.error('Cannot remove old avatar of actor %s.', actor.url, { err })
182 }
183 }
184 177
185 const avatar = await AvatarModel.create({ 178 if (actor.Avatar) {
186 filename: info.name, 179 // Don't update the avatar if the filename did not change
187 onDisk: info.onDisk, 180 if (actor.Avatar.filename === info.name) return actor
188 fileUrl: info.fileUrl
189 }, { transaction: t })
190 181
191 actor.avatarId = avatar.id 182 try {
192 actor.Avatar = avatar 183 await actor.Avatar.destroy({ transaction: t })
184 } catch (err) {
185 logger.error('Cannot remove old avatar of actor %s.', actor.url, { err })
186 }
193 } 187 }
194 188
189 const avatar = await AvatarModel.create({
190 filename: info.name,
191 onDisk: info.onDisk,
192 fileUrl: info.fileUrl
193 }, { transaction: t })
194
195 actor.avatarId = avatar.id
196 actor.Avatar = avatar
197
195 return actor 198 return actor
196} 199}
197 200
diff --git a/server/lib/schedulers/videos-redundancy-scheduler.ts b/server/lib/schedulers/videos-redundancy-scheduler.ts
index f2bd75cb4..c1c91b656 100644
--- a/server/lib/schedulers/videos-redundancy-scheduler.ts
+++ b/server/lib/schedulers/videos-redundancy-scheduler.ts
@@ -14,7 +14,7 @@ import { getOrCreateVideoAndAccountAndChannel } from '../activitypub'
14import { downloadPlaylistSegments } from '../hls' 14import { downloadPlaylistSegments } from '../hls'
15import { CONFIG } from '../../initializers/config' 15import { CONFIG } from '../../initializers/config'
16import { 16import {
17 MStreamingPlaylist, 17 MStreamingPlaylist, MStreamingPlaylistFiles,
18 MStreamingPlaylistVideo, 18 MStreamingPlaylistVideo,
19 MVideoAccountLight, 19 MVideoAccountLight,
20 MVideoFile, 20 MVideoFile,
@@ -30,7 +30,7 @@ type CandidateToDuplicate = {
30 redundancy: VideosRedundancy, 30 redundancy: VideosRedundancy,
31 video: MVideoWithAllFiles, 31 video: MVideoWithAllFiles,
32 files: MVideoFile[], 32 files: MVideoFile[],
33 streamingPlaylists: MStreamingPlaylist[] 33 streamingPlaylists: MStreamingPlaylistFiles[]
34} 34}
35 35
36function isMVideoRedundancyFileVideo ( 36function isMVideoRedundancyFileVideo (
@@ -196,7 +196,7 @@ export class VideosRedundancyScheduler extends AbstractScheduler {
196 logger.info('Duplicating %s - %d in videos redundancy with "%s" strategy.', video.url, file.resolution, redundancy.strategy) 196 logger.info('Duplicating %s - %d in videos redundancy with "%s" strategy.', video.url, file.resolution, redundancy.strategy)
197 197
198 const { baseUrlHttp, baseUrlWs } = video.getBaseUrls() 198 const { baseUrlHttp, baseUrlWs } = video.getBaseUrls()
199 const magnetUri = await generateMagnetUri(video, file, baseUrlHttp, baseUrlWs) 199 const magnetUri = generateMagnetUri(video, file, baseUrlHttp, baseUrlWs)
200 200
201 const tmpPath = await downloadWebTorrentVideo({ magnetUri }, VIDEO_IMPORT_TIMEOUT) 201 const tmpPath = await downloadWebTorrentVideo({ magnetUri }, VIDEO_IMPORT_TIMEOUT)
202 202
@@ -290,12 +290,15 @@ export class VideosRedundancyScheduler extends AbstractScheduler {
290 return `${object.VideoStreamingPlaylist.playlistUrl}` 290 return `${object.VideoStreamingPlaylist.playlistUrl}`
291 } 291 }
292 292
293 private getTotalFileSizes (files: MVideoFile[], playlists: MStreamingPlaylist[]) { 293 private getTotalFileSizes (files: MVideoFile[], playlists: MStreamingPlaylistFiles[]) {
294 const fileReducer = (previous: number, current: MVideoFile) => previous + current.size 294 const fileReducer = (previous: number, current: MVideoFile) => previous + current.size
295 295
296 const totalSize = files.reduce(fileReducer, 0) 296 let allFiles = files
297 for (const p of playlists) {
298 allFiles = allFiles.concat(p.VideoFiles)
299 }
297 300
298 return totalSize + (totalSize * playlists.length) 301 return allFiles.reduce(fileReducer, 0)
299 } 302 }
300 303
301 private async loadAndRefreshVideo (videoUrl: string) { 304 private async loadAndRefreshVideo (videoUrl: string) {
diff --git a/server/lib/video-paths.ts b/server/lib/video-paths.ts
index 63011cdb2..fe0a004e4 100644
--- a/server/lib/video-paths.ts
+++ b/server/lib/video-paths.ts
@@ -1,8 +1,8 @@
1import { isStreamingPlaylist, MStreamingPlaylistVideo, MVideo, MVideoFile } from '@server/typings/models' 1import { isStreamingPlaylist, MStreamingPlaylistVideo, MVideo, MVideoFile, MVideoUUID } from '@server/typings/models'
2import { extractVideo } from './videos' 2import { extractVideo } from './videos'
3import { join } from 'path' 3import { join } from 'path'
4import { CONFIG } from '@server/initializers/config' 4import { CONFIG } from '@server/initializers/config'
5import { HLS_STREAMING_PLAYLIST_DIRECTORY } from '@server/initializers/constants' 5import { HLS_REDUNDANCY_DIRECTORY, HLS_STREAMING_PLAYLIST_DIRECTORY } from '@server/initializers/constants'
6 6
7// ################## Video file name ################## 7// ################## Video file name ##################
8 8
@@ -34,6 +34,14 @@ function getVideoFilePath (videoOrPlaylist: MVideo | MStreamingPlaylistVideo, vi
34 return join(baseDir, getVideoFilename(videoOrPlaylist, videoFile)) 34 return join(baseDir, getVideoFilename(videoOrPlaylist, videoFile))
35} 35}
36 36
37// ################## Streaming playlist ##################
38
39function getHLSDirectory (video: MVideoUUID, isRedundancy = false) {
40 const baseDir = isRedundancy ? HLS_REDUNDANCY_DIRECTORY : HLS_STREAMING_PLAYLIST_DIRECTORY
41
42 return join(baseDir, video.uuid)
43}
44
37// ################## Torrents ################## 45// ################## Torrents ##################
38 46
39function getTorrentFileName (videoOrPlaylist: MVideo | MStreamingPlaylistVideo, videoFile: MVideoFile) { 47function getTorrentFileName (videoOrPlaylist: MVideo | MStreamingPlaylistVideo, videoFile: MVideoFile) {
@@ -60,5 +68,7 @@ export {
60 getVideoFilePath, 68 getVideoFilePath,
61 69
62 getTorrentFileName, 70 getTorrentFileName,
63 getTorrentFilePath 71 getTorrentFilePath,
72
73 getHLSDirectory
64} 74}