X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fsync-channel.ts;h=35af91429c1218bc08ffba4eb3440a4952b13321;hb=b7faa8372ed598118305b760f7c1ddf537ca7f0d;hp=f91599c14dffdeba7c64880c7e5c30e561e9f0b0;hpb=9a3a23a834679e072c15960903e05e667ef14481;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/sync-channel.ts b/server/lib/sync-channel.ts index f91599c14..35af91429 100644 --- a/server/lib/sync-channel.ts +++ b/server/lib/sync-channel.ts @@ -24,56 +24,62 @@ export async function synchronizeChannel (options: { await channelSync.save() } - const user = await UserModel.loadByChannelActorId(channel.actorId) - const youtubeDL = new YoutubeDLWrapper( - externalChannelUrl, - ServerConfigManager.Instance.getEnabledResolutions('vod'), - CONFIG.TRANSCODING.ALWAYS_TRANSCODE_ORIGINAL_RESOLUTION - ) - - const targetUrls = await youtubeDL.getInfoForListImport({ latestVideosCount: videosCountLimit }) - - logger.info( - 'Fetched %d candidate URLs for sync channel %s.', - targetUrls.length, channel.Actor.preferredUsername, { targetUrls } - ) - - if (targetUrls.length === 0) { - if (channelSync) { - channelSync.state = VideoChannelSyncState.SYNCED - await channelSync.save() - } - - return - } + try { + const user = await UserModel.loadByChannelActorId(channel.actorId) + const youtubeDL = new YoutubeDLWrapper( + externalChannelUrl, + ServerConfigManager.Instance.getEnabledResolutions('vod'), + CONFIG.TRANSCODING.ALWAYS_TRANSCODE_ORIGINAL_RESOLUTION + ) - const children: CreateJobArgument[] = [] + const targetUrls = await youtubeDL.getInfoForListImport({ latestVideosCount: videosCountLimit }) - for (const targetUrl of targetUrls) { - if (await skipImport(channel, targetUrl, onlyAfter)) continue + logger.info( + 'Fetched %d candidate URLs for sync channel %s.', + targetUrls.length, channel.Actor.preferredUsername, { targetUrls } + ) - const { job } = await buildYoutubeDLImport({ - user, - channel, - targetUrl, - channelSync, - importDataOverride: { - privacy: VideoPrivacy.PUBLIC + if (targetUrls.length === 0) { + if (channelSync) { + channelSync.state = VideoChannelSyncState.SYNCED + await channelSync.save() } - }) - children.push(job) - } + return + } + + const children: CreateJobArgument[] = [] + + for (const targetUrl of targetUrls) { + if (await skipImport(channel, targetUrl, onlyAfter)) continue - // Will update the channel sync status - const parent: CreateJobArgument = { - type: 'after-video-channel-import', - payload: { - channelSyncId: channelSync?.id + const { job } = await buildYoutubeDLImport({ + user, + channel, + targetUrl, + channelSync, + importDataOverride: { + privacy: VideoPrivacy.PUBLIC + } + }) + + children.push(job) } - } - await JobQueue.Instance.createJobWithChildren(parent, children) + // Will update the channel sync status + const parent: CreateJobArgument = { + type: 'after-video-channel-import', + payload: { + channelSyncId: channelSync?.id + } + } + + await JobQueue.Instance.createJobWithChildren(parent, children) + } catch (err) { + logger.error(`Failed to import channel ${channel.name}`, { err }) + channelSync.state = VideoChannelSyncState.FAILED + await channelSync.save() + } } // ---------------------------------------------------------------------------