diff --git a/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html b/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html index e01f5a18f..340fa91b5 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html +++ b/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html @@ -256,6 +256,18 @@ + +
+ + + Video playback starts automatically when opening a video (can be overridden by user's settings) + + +
+ diff --git a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts index 492c56842..e0f7bdd5d 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts +++ b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts @@ -219,7 +219,8 @@ export class EditCustomConfigComponent extends FormReactive implements OnInit { } }, videoQuota: USER_VIDEO_QUOTA_VALIDATOR, - videoQuotaDaily: USER_VIDEO_QUOTA_DAILY_VALIDATOR + videoQuotaDaily: USER_VIDEO_QUOTA_DAILY_VALIDATOR, + playbackAutoStart: null }, videoChannels: { maxPerUser: MAX_VIDEO_CHANNELS_PER_USER_VALIDATOR diff --git a/client/src/app/core/users/user-local-storage.service.ts b/client/src/app/core/users/user-local-storage.service.ts index 431a57343..9f8e1dc72 100644 --- a/client/src/app/core/users/user-local-storage.service.ts +++ b/client/src/app/core/users/user-local-storage.service.ts @@ -107,6 +107,7 @@ export class UserLocalStorageService { const defaultNSFWPolicy = htmlConfig.instance.defaultNSFWPolicy const defaultP2PEnabled = htmlConfig.defaults.p2p.webapp.enabled + const defaultPlaybackAutoStart = htmlConfig.user.playbackAutoStart return { nsfwPolicy: this.localStorageService.getItem(UserLocalStorageKeys.NSFW_POLICY) || defaultNSFWPolicy, @@ -114,7 +115,7 @@ export class UserLocalStorageService { theme: this.localStorageService.getItem(UserLocalStorageKeys.THEME) || 'instance-default', videoLanguages, - autoPlayVideo: getBoolOrDefault(this.localStorageService.getItem(UserLocalStorageKeys.AUTO_PLAY_VIDEO), true), + autoPlayVideo: getBoolOrDefault(this.localStorageService.getItem(UserLocalStorageKeys.AUTO_PLAY_VIDEO), defaultPlaybackAutoStart), autoPlayNextVideo: getBoolOrDefault(this.localStorageService.getItem(UserLocalStorageKeys.AUTO_PLAY_NEXT_VIDEO), false), autoPlayNextVideoPlaylist: getBoolOrDefault(this.localStorageService.getItem(UserLocalStorageKeys.AUTO_PLAY_VIDEO_PLAYLIST), true) } diff --git a/config/default.yaml b/config/default.yaml index e4496c15a..0e11252dc 100644 --- a/config/default.yaml +++ b/config/default.yaml @@ -571,6 +571,9 @@ user: default_channel_name: 'Main $1 channel' # The placeholder $1 is used to represent the user's username + # By default, playback starts automatically when opening a video for a new user or when anonymous + playback_auto_start: true + video_channels: max_per_user: 20 # Allows each user to create up to 20 video channels. diff --git a/packages/models/src/server/custom-config.model.ts b/packages/models/src/server/custom-config.model.ts index 00190828d..65e4def7e 100644 --- a/packages/models/src/server/custom-config.model.ts +++ b/packages/models/src/server/custom-config.model.ts @@ -109,6 +109,7 @@ export interface CustomConfig { videoQuota: number videoQuotaDaily: number defaultChannelName: string + playbackAutoStart: boolean } videoChannels: { diff --git a/packages/models/src/server/server-config.model.ts b/packages/models/src/server/server-config.model.ts index 9e7b451ba..35d13c3ab 100644 --- a/packages/models/src/server/server-config.model.ts +++ b/packages/models/src/server/server-config.model.ts @@ -285,6 +285,7 @@ export interface ServerConfig { user: { videoQuota: number videoQuotaDaily: number + playbackAutoStart: boolean } videoChannels: { diff --git a/packages/tests/src/api/server/config-defaults.ts b/packages/tests/src/api/server/config-defaults.ts index 42b517ba2..d6b8eed2b 100644 --- a/packages/tests/src/api/server/config-defaults.ts +++ b/packages/tests/src/api/server/config-defaults.ts @@ -236,6 +236,7 @@ describe('Test config defaults', function () { expect(config.user.videoQuota).to.equal(-1) expect(config.user.videoQuotaDaily).to.equal(-1) + expect(config.user.playbackAutoStart).to.equal(true) const user1Token = await server.users.generateUserAndToken('user1') const user1 = await server.users.getMyInfo({ token: user1Token }) @@ -263,7 +264,8 @@ describe('Test config defaults', function () { } }, videoQuota : 5242881, - videoQuotaDaily: 318742 + videoQuotaDaily: 318742, + playbackAutoStart: false }, signup: { enabled: true, @@ -285,6 +287,7 @@ describe('Test config defaults', function () { expect(user.videosHistoryEnabled).to.be.false expect(user.videoQuota).to.equal(5242881) expect(user.videoQuotaDaily).to.equal(318742) + expect(user.autoPlayVideo).to.equal(false) } }) diff --git a/packages/tests/src/api/server/config.ts b/packages/tests/src/api/server/config.ts index 9a0a26ba8..1ae97eb43 100644 --- a/packages/tests/src/api/server/config.ts +++ b/packages/tests/src/api/server/config.ts @@ -227,7 +227,8 @@ function buildNewCustomConfig (server: PeerTubeServer): CustomConfig { }, videoQuota: 5242881, videoQuotaDaily: 318742, - defaultChannelName: 'Main $1 channel' + defaultChannelName: 'Main $1 channel', + playbackAutoStart: true }, videoChannels: { maxPerUser: 24 diff --git a/server/core/controllers/api/config.ts b/server/core/controllers/api/config.ts index 4a6475f7e..ecc89fc21 100644 --- a/server/core/controllers/api/config.ts +++ b/server/core/controllers/api/config.ts @@ -313,7 +313,8 @@ function customConfig (): CustomConfig { }, videoQuota: CONFIG.USER.VIDEO_QUOTA, videoQuotaDaily: CONFIG.USER.VIDEO_QUOTA_DAILY, - defaultChannelName: CONFIG.USER.DEFAULT_CHANNEL_NAME + defaultChannelName: CONFIG.USER.DEFAULT_CHANNEL_NAME, + playbackAutoStart: CONFIG.USER.PLAYBACK_AUTO_START }, videoChannels: { maxPerUser: CONFIG.VIDEO_CHANNELS.MAX_PER_USER diff --git a/server/core/initializers/checker-before-init.ts b/server/core/initializers/checker-before-init.ts index fb1a5c0c2..368e0cb7e 100644 --- a/server/core/initializers/checker-before-init.ts +++ b/server/core/initializers/checker-before-init.ts @@ -23,7 +23,7 @@ function checkMissedConfig () { 'open_telemetry.metrics.prometheus_exporter.hostname', 'open_telemetry.metrics.prometheus_exporter.port', 'open_telemetry.tracing.enabled', 'open_telemetry.tracing.jaeger_exporter.endpoint', 'open_telemetry.metrics.http_request_duration.enabled', - 'user.history.videos.enabled', 'user.video_quota', 'user.video_quota_daily', + 'user.history.videos.enabled', 'user.video_quota', 'user.video_quota_daily', 'user.playback_auto_start', 'video_channels.max_per_user', 'csp.enabled', 'csp.report_only', 'csp.report_uri', 'security.frameguard.enabled', 'security.powered_by_header.enabled', diff --git a/server/core/initializers/config.ts b/server/core/initializers/config.ts index 73511b28d..789a4287e 100644 --- a/server/core/initializers/config.ts +++ b/server/core/initializers/config.ts @@ -425,7 +425,8 @@ const CONFIG = { }, get VIDEO_QUOTA () { return parseBytes(config.get('user.video_quota')) }, get VIDEO_QUOTA_DAILY () { return parseBytes(config.get('user.video_quota_daily')) }, - get DEFAULT_CHANNEL_NAME () { return config.get('user.default_channel_name') } + get DEFAULT_CHANNEL_NAME () { return config.get('user.default_channel_name') }, + get PLAYBACK_AUTO_START () { return config.has('user.playback_auto_start') ? config.get('user.playback_auto_start') : true } }, VIDEO_CHANNELS: { get MAX_PER_USER () { return config.get('video_channels.max_per_user') } diff --git a/server/core/lib/server-config-manager.ts b/server/core/lib/server-config-manager.ts index ac5818d2c..aaccd44e8 100644 --- a/server/core/lib/server-config-manager.ts +++ b/server/core/lib/server-config-manager.ts @@ -265,7 +265,8 @@ class ServerConfigManager { }, user: { videoQuota: CONFIG.USER.VIDEO_QUOTA, - videoQuotaDaily: CONFIG.USER.VIDEO_QUOTA_DAILY + videoQuotaDaily: CONFIG.USER.VIDEO_QUOTA_DAILY, + playbackAutoStart: CONFIG.USER.PLAYBACK_AUTO_START }, videoChannels: { maxPerUser: CONFIG.VIDEO_CHANNELS.MAX_PER_USER diff --git a/server/core/lib/user.ts b/server/core/lib/user.ts index 39ec281a6..6039e4e79 100644 --- a/server/core/lib/user.ts +++ b/server/core/lib/user.ts @@ -65,7 +65,7 @@ function buildUser (options: { p2pEnabled: CONFIG.DEFAULTS.P2P.WEBAPP.ENABLED, videosHistoryEnabled: CONFIG.USER.HISTORY.VIDEOS.ENABLED, - autoPlayVideo: true, + autoPlayVideo: CONFIG.USER.PLAYBACK_AUTO_START, role, emailVerified,