From 3ea32ba891c0f0c667d92e491b9521d4ab6f686e Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 1 Sep 2025 09:30:05 +0200 Subject: [PATCH 1/3] Remove useless help for live transcoding --- .../config/pages/admin-config-live.component.ts | 4 ++-- .../config/pages/admin-config-vod.component.ts | 4 ++-- .../shared/shared-admin/admin-config.service.ts | 16 ++++++++++------ .../video-filters.model.ts | 3 --- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/client/src/app/+admin/config/pages/admin-config-live.component.ts b/client/src/app/+admin/config/pages/admin-config-live.component.ts index 5bfc83115..086169cc7 100644 --- a/client/src/app/+admin/config/pages/admin-config-live.component.ts +++ b/client/src/app/+admin/config/pages/admin-config-live.component.ts @@ -107,7 +107,7 @@ export class AdminConfigLiveComponent implements OnInit, OnDestroy, CanComponent { id: 1000 * 3600 * 10, label: $localize`10 hours` } ] - this.liveResolutions = this.adminConfigService.transcodingResolutionOptions + this.liveResolutions = this.adminConfigService.getTranscodingOptions('live') this.transcodingProfiles = this.adminConfigService.buildTranscodingProfiles( this.server.getHTMLConfig().live.transcoding.availableProfiles ) @@ -143,7 +143,7 @@ export class AdminConfigLiveComponent implements OnInit, OnDestroy, CanComponent enabled: null, threads: TRANSCODING_THREADS_VALIDATOR, profile: null, - resolutions: this.adminConfigService.buildFormResolutions(), + resolutions: this.adminConfigService.buildFormResolutions('live'), alwaysTranscodeOriginalResolution: null, remoteRunners: { enabled: null diff --git a/client/src/app/+admin/config/pages/admin-config-vod.component.ts b/client/src/app/+admin/config/pages/admin-config-vod.component.ts index e817dad67..1a5f14037 100644 --- a/client/src/app/+admin/config/pages/admin-config-vod.component.ts +++ b/client/src/app/+admin/config/pages/admin-config-vod.component.ts @@ -112,7 +112,7 @@ export class AdminConfigVODComponent implements OnInit, OnDestroy, CanComponentD this.customConfig = this.route.parent.snapshot.data['customConfig'] this.transcodingThreadOptions = this.configService.transcodingThreadOptions - this.resolutions = this.adminConfigService.transcodingResolutionOptions + this.resolutions = this.adminConfigService.getTranscodingOptions('vod') this.additionalVideoExtensions = serverConfig.video.file.extensions.join(' ') this.transcodingProfiles = this.adminConfigService.buildTranscodingProfiles(serverConfig.transcoding.availableProfiles) @@ -156,7 +156,7 @@ export class AdminConfigVODComponent implements OnInit, OnDestroy, CanComponentD max: TRANSCODING_MAX_FPS_VALIDATOR }, - resolutions: this.adminConfigService.buildFormResolutions(), + resolutions: this.adminConfigService.buildFormResolutions('vod'), alwaysTranscodeOriginalResolution: null, remoteRunners: { diff --git a/client/src/app/shared/shared-admin/admin-config.service.ts b/client/src/app/shared/shared-admin/admin-config.service.ts index eff9d0fba..922bc5d13 100644 --- a/client/src/app/shared/shared-admin/admin-config.service.ts +++ b/client/src/app/shared/shared-admin/admin-config.service.ts @@ -35,7 +35,6 @@ export class AdminConfigService { private static BASE_APPLICATION_URL = environment.apiUrl + '/api/v1/config' transcodingThreadOptions: SelectOptionsItem[] = [] - transcodingResolutionOptions: ResolutionOption[] = [] constructor () { this.transcodingThreadOptions = [ @@ -48,13 +47,18 @@ export class AdminConfigService { { id: 16, label: '16' }, { id: 32, label: '32' } ] + } - this.transcodingResolutionOptions = [ + // --------------------------------------------------------------------------- + + getTranscodingOptions (type: 'live' | 'vod'): ResolutionOption[] { + return [ { id: '0p', label: $localize`Audio-only`, - description: - $localize`"Split audio and video" must be enabled for the PeerTube player to propose an "Audio only" resolution to users` + description: type === 'vod' + ? $localize`"Split audio and video" must be enabled for the PeerTube player to propose an "Audio only" resolution to users` + : undefined }, { id: '144p', @@ -141,10 +145,10 @@ export class AdminConfigService { // --------------------------------------------------------------------------- - buildFormResolutions () { + buildFormResolutions (type: 'live' | 'vod') { const formResolutions = {} as Record - for (const resolution of this.transcodingResolutionOptions) { + for (const resolution of this.getTranscodingOptions(type)) { formResolutions[resolution.id] = null } diff --git a/client/src/app/shared/shared-video-miniature/video-filters.model.ts b/client/src/app/shared/shared-video-miniature/video-filters.model.ts index 36576743d..28e987d36 100644 --- a/client/src/app/shared/shared-video-miniature/video-filters.model.ts +++ b/client/src/app/shared/shared-video-miniature/video-filters.model.ts @@ -95,9 +95,6 @@ export class VideoFilters { if (noChanges) return - console.log(currentFormObjectString) - console.log(this.oldFormObjectString) - this.oldFormObjectString = currentFormObjectString for (const cb of this.onChangeCallbacks) { From 0882d9662464f988170e4c8d43523df8109849c3 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 3 Sep 2025 07:13:12 +0200 Subject: [PATCH 2/3] Do not override privacy for imports and live --- .../import/video-import-torrent.component.ts | 2 +- .../import/video-import-url.component.ts | 2 +- .../live/video-go-live.component.ts | 2 +- .../shared-manage/common/video-edit.model.ts | 27 ++++++++++++------- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/client/src/app/+videos-publish-manage/+video-publish/import/video-import-torrent.component.ts b/client/src/app/+videos-publish-manage/+video-publish/import/video-import-torrent.component.ts index 9fc12a238..2158ab55a 100644 --- a/client/src/app/+videos-publish-manage/+video-publish/import/video-import-torrent.component.ts +++ b/client/src/app/+videos-publish-manage/+video-publish/import/video-import-torrent.component.ts @@ -132,7 +132,7 @@ export class VideoImportTorrentComponent implements OnInit, AfterViewInit, CanCo .pipe(switchMap(({ video }) => this.videoService.getVideo({ videoId: video.uuid }))) .subscribe({ next: async video => { - await videoEdit.loadFromAPI({ video }) + await videoEdit.loadFromAPI({ video, loadPrivacy: false }) this.loadingBar.useRef().complete() diff --git a/client/src/app/+videos-publish-manage/+video-publish/import/video-import-url.component.ts b/client/src/app/+videos-publish-manage/+video-publish/import/video-import-url.component.ts index cf221ba93..6fe9106ff 100644 --- a/client/src/app/+videos-publish-manage/+video-publish/import/video-import-url.component.ts +++ b/client/src/app/+videos-publish-manage/+video-publish/import/video-import-url.component.ts @@ -130,7 +130,7 @@ export class VideoImportUrlComponent implements OnInit, AfterViewInit, CanCompon ) .subscribe({ next: async ({ video, captions, chapters }) => { - await videoEdit.loadFromAPI({ video, captions, chapters }) + await videoEdit.loadFromAPI({ video, captions, chapters, loadPrivacy: false }) this.loadingBar.useRef().complete() diff --git a/client/src/app/+videos-publish-manage/+video-publish/live/video-go-live.component.ts b/client/src/app/+videos-publish-manage/+video-publish/live/video-go-live.component.ts index fb91731f9..e6d75e4f5 100644 --- a/client/src/app/+videos-publish-manage/+video-publish/live/video-go-live.component.ts +++ b/client/src/app/+videos-publish-manage/+video-publish/live/video-go-live.component.ts @@ -105,7 +105,7 @@ export class VideoGoLiveComponent implements OnInit, AfterViewInit, CanComponent .subscribe({ next: async ({ video: { id, uuid, shortUUID }, live }) => { videoEdit.loadAfterPublish({ video: { id, uuid, shortUUID } }) - await videoEdit.loadFromAPI({ live }) + await videoEdit.loadFromAPI({ live, loadPrivacy: false }) debugLogger(`Live published`) diff --git a/client/src/app/+videos-publish-manage/shared-manage/common/video-edit.model.ts b/client/src/app/+videos-publish-manage/shared-manage/common/video-edit.model.ts index a2976728c..edce9c255 100644 --- a/client/src/app/+videos-publish-manage/shared-manage/common/video-edit.model.ts +++ b/client/src/app/+videos-publish-manage/shared-manage/common/video-edit.model.ts @@ -293,12 +293,12 @@ export class VideoEdit { return videoEdit } - async loadFromAPI (options: UpdateFromAPIOptions) { - const { video, videoPasswords, live, chapters, captions, videoSource } = options + async loadFromAPI (options: UpdateFromAPIOptions & { loadPrivacy?: boolean }) { + const { video, videoPasswords, live, chapters, captions, videoSource, loadPrivacy = true } = options debugLogger('Load from API', options) - this.loadVideo({ video, videoPasswords, saveInStore: true }) + this.loadVideo({ video, videoPasswords, saveInStore: true, loadPrivacy }) this.loadLive(live) if (captions !== undefined) { @@ -322,18 +322,21 @@ export class VideoEdit { private loadVideo (options: { video: UpdateFromAPIOptions['video'] videoPasswords?: string[] + loadPrivacy?: boolean // default true saveInStore: boolean }) { - const { video, saveInStore, videoPasswords = [] } = options + const { video, saveInStore, loadPrivacy = true, videoPasswords = [] } = options if (video === undefined) return - const buildObj: () => CommonUpdate = () => { - return { + const buildObj: (options: { loadPrivacy: boolean }) => CommonUpdate = () => { + const { loadPrivacy } = options + + const base = { ...this.common, name: video.name || '', - privacy: video.privacy?.id ?? null, + channelId: video.channel?.id ?? null, category: video.category?.id ?? null, licence: video.licence?.id ?? null, @@ -361,12 +364,18 @@ export class VideoEdit { videoPasswords: videoPasswords ?? [] } + + if (loadPrivacy) { + return { ...base, privacy: video.privacy?.id ?? null } + } + + return base } - this.common = buildObj() + this.common = buildObj({ loadPrivacy }) if (saveInStore) { - const obj = buildObj() + const obj = buildObj({ loadPrivacy: true }) this.saveStore.common = omit(obj, [ 'pluginData', 'previewfile' ]) // Apply plugin defaults so we correctly detect changes From 91afa1004e6736e0d023643a917177c92973ccfc Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 3 Sep 2025 08:46:38 +0200 Subject: [PATCH 3/3] Fill video support on channel sync --- packages/tests/src/api/videos/video-channel-syncs.ts | 8 +++++++- server/core/lib/sync-channel.ts | 3 ++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/tests/src/api/videos/video-channel-syncs.ts b/packages/tests/src/api/videos/video-channel-syncs.ts index 771b935ad..c79b15651 100644 --- a/packages/tests/src/api/videos/video-channel-syncs.ts +++ b/packages/tests/src/api/videos/video-channel-syncs.ts @@ -285,7 +285,8 @@ describe('Test channel synchronizations', function () { const { id: channelId } = await servers[0].channels.create({ attributes: { - name: 'channel2' + name: 'channel2', + support: 'my support test' } }) @@ -306,6 +307,11 @@ describe('Test channel synchronizations', function () { expect(data[1].name).to.equal('small video - youtube') videoToDelete = data[1].id + + for (const { uuid } of data) { + const video = await servers[0].videos.get({ id: uuid }) + expect(video.support).to.equal('my support test') + } } }) diff --git a/server/core/lib/sync-channel.ts b/server/core/lib/sync-channel.ts index ad642e481..fdd2963a3 100644 --- a/server/core/lib/sync-channel.ts +++ b/server/core/lib/sync-channel.ts @@ -66,7 +66,8 @@ export async function synchronizeChannel (options: { targetUrl, channelSync, importDataOverride: { - privacy: VideoPrivacy.PUBLIC + privacy: VideoPrivacy.PUBLIC, + support: channel.support } })