</div>
<div class="form-group">
- <label i18n for="webTorrentPolicy">Policy regarding P2P technologies</label>
+ <label i18n for="webTorrentEnabled">Policy regarding P2P technologies</label>
<div class="peertube-select-container">
- <select id="webTorrentPolicy" formControlName="webTorrentPolicy">
+ <select id="webTorrentEnabled" formControlName="webTorrentEnabled">
<option i18n value="enable">Enable WebTorrent</option>
- <option i18n value="disable">Disable WebTorrent globally</option>
- <option i18n value="disable_on_mobile" disabled>Disable WebTorrent on mobile devices (not yet available)</option>
+ <option i18n value="disable">Disable WebTorrent</option>
</select>
</div>
</div>
+ <my-peertube-checkbox
+ inputName="webTorrentEnabled" formControlName="webTorrentEnabled"
+ i18n-labelText labelText="Use WebTorrent to exchange parts of the video with others"
+ ></my-peertube-checkbox>
+
<my-peertube-checkbox
inputName="autoPlayVideo" formControlName="autoPlayVideo"
i18n-labelText labelText="Automatically plays video"
ngOnInit () {
this.buildForm({
nsfwPolicy: null,
- webTorrentPolicy: null,
+ webTorrentEnabled: null,
autoPlayVideo: null
})
this.userInformationLoaded.subscribe(() => {
this.form.patchValue({
nsfwPolicy: this.user.nsfwPolicy,
- webTorrentPolicy: this.user.webTorrentPolicy,
+ webTorrentEnabled: this.user.webTorrentEnabled,
autoPlayVideo: this.user.autoPlayVideo === true
})
})
updateDetails () {
const nsfwPolicy = this.form.value['nsfwPolicy']
- const webTorrentPolicy = this.form.value['webTorrentPolicy']
+ const webTorrentEnabled = this.form.value['webTorrentEnabled']
const autoPlayVideo = this.form.value['autoPlayVideo']
const details: UserUpdateMe = {
nsfwPolicy,
- webTorrentPolicy,
+ webTorrentEnabled,
autoPlayVideo
}
import { hasUserRight, UserRole } from '../../../../../shared/models/users/user-role'
import { User, UserConstructorHash } from '../../shared/users/user.model'
import { NSFWPolicyType } from '../../../../../shared/models/videos/nsfw-policy.type'
-import { WebTorrentPolicyType } from '../../../../../shared/models/users/user-webtorrent-policy.type'
export type TokenOptions = {
accessToken: string
EMAIL: 'email',
USERNAME: 'username',
NSFW_POLICY: 'nsfw_policy',
- WEBTORRENT_POLICY: 'peertube-videojs-' + 'webtorrent_policy',
+ WEBTORRENT_ENABLED: 'peertube-videojs-' + 'webtorrent_enabled',
AUTO_PLAY_VIDEO: 'auto_play_video'
}
email: peertubeLocalStorage.getItem(this.KEYS.EMAIL),
role: parseInt(peertubeLocalStorage.getItem(this.KEYS.ROLE), 10) as UserRole,
nsfwPolicy: peertubeLocalStorage.getItem(this.KEYS.NSFW_POLICY) as NSFWPolicyType,
- webTorrentPolicy: peertubeLocalStorage.getItem(this.KEYS.WEBTORRENT_POLICY) as WebTorrentPolicyType,
+ webTorrentEnabled: peertubeLocalStorage.getItem(this.KEYS.WEBTORRENT_ENABLED) === 'true',
autoPlayVideo: peertubeLocalStorage.getItem(this.KEYS.AUTO_PLAY_VIDEO) === 'true'
},
Tokens.load()
peertubeLocalStorage.removeItem(this.KEYS.ID)
peertubeLocalStorage.removeItem(this.KEYS.ROLE)
peertubeLocalStorage.removeItem(this.KEYS.NSFW_POLICY)
- peertubeLocalStorage.removeItem(this.KEYS.WEBTORRENT_POLICY)
+ peertubeLocalStorage.removeItem(this.KEYS.WEBTORRENT_ENABLED)
peertubeLocalStorage.removeItem(this.KEYS.AUTO_PLAY_VIDEO)
peertubeLocalStorage.removeItem(this.KEYS.EMAIL)
Tokens.flush()
peertubeLocalStorage.setItem(AuthUser.KEYS.EMAIL, this.email)
peertubeLocalStorage.setItem(AuthUser.KEYS.ROLE, this.role.toString())
peertubeLocalStorage.setItem(AuthUser.KEYS.NSFW_POLICY, this.nsfwPolicy.toString())
- peertubeLocalStorage.setItem(AuthUser.KEYS.WEBTORRENT_POLICY, this.webTorrentPolicy.toString())
+ peertubeLocalStorage.setItem(AuthUser.KEYS.WEBTORRENT_ENABLED, JSON.stringify(this.webTorrentEnabled))
peertubeLocalStorage.setItem(AuthUser.KEYS.AUTO_PLAY_VIDEO, JSON.stringify(this.autoPlayVideo))
this.tokens.save()
}
import { NSFWPolicyType } from '../../../../../shared/models/videos/nsfw-policy.type'
import { Account } from '@app/shared/account/account.model'
import { Avatar } from '../../../../../shared/models/avatars/avatar.model'
-import { WebTorrentPolicyType } from '../../../../../shared/models/users/user-webtorrent-policy.type'
export type UserConstructorHash = {
id: number,
videoQuota?: number,
videoQuotaDaily?: number,
nsfwPolicy?: NSFWPolicyType,
- webTorrentPolicy?: WebTorrentPolicyType,
+ webTorrentEnabled?: boolean,
autoPlayVideo?: boolean,
createdAt?: Date,
account?: AccountServerModel,
email: string
role: UserRole
nsfwPolicy: NSFWPolicyType
- webTorrentPolicy: WebTorrentPolicyType
+ webTorrentEnabled: boolean
autoPlayVideo: boolean
videoQuota: number
videoQuotaDaily: number
this.videoQuota = hash.videoQuota
this.videoQuotaDaily = hash.videoQuotaDaily
this.nsfwPolicy = hash.nsfwPolicy
- this.webTorrentPolicy = hash.webTorrentPolicy
+ this.webTorrentEnabled = hash.webTorrentEnabled
this.autoPlayVideo = hash.autoPlayVideo
this.createdAt = hash.createdAt
this.blocked = hash.blocked
return undefined
}
-function getStoredWebTorrentPolicy () {
- const value = getLocalStorage('webtorrent_policy')
- if (value !== null && value !== undefined) {
- if (value.toString() === 'disable') return true
- }
+function getStoredWebTorrentEnabled (): boolean {
+ const value = getLocalStorage('webtorrent_enabled')
+ if (value !== null && value !== undefined) return value === 'true'
- return undefined
+ return false
}
function getStoredMute () {
export {
getStoredVolume,
- getStoredWebTorrentPolicy,
+ getStoredWebTorrentEnabled,
getStoredMute,
getStoredTheater,
saveVolumeInStore,
import * as CacheChunkStore from 'cache-chunk-store'
import { PeertubeChunkStore } from './peertube-chunk-store'
import {
- getStoredWebTorrentPolicy,
+ getStoredWebTorrentEnabled,
getAverageBandwidthInStore,
getStoredMute,
getStoredVolume,
// Disable auto play on iOS
this.autoplay = options.autoplay && this.isIOS() === false
+ this.playerRefusedP2P = !getStoredWebTorrentEnabled()
this.startTime = timeToInt(options.startTime)
this.videoFiles = options.videoFiles
if (volume !== undefined) this.player.volume(volume)
const muted = getStoredMute()
if (muted !== undefined) this.player.muted(muted)
- this.playerRefusedP2P = getStoredWebTorrentPolicy() || false
this.initializePlayer()
this.runTorrentInfoScheduler()
renderVideo(torrent.files[ 0 ], this.playerElement, renderVideoOptions, (err, renderer) => {
this.renderer = renderer
- console.log('value this.playerRefusedP2P', this.playerRefusedP2P)
if (err || this.playerRefusedP2P) return this.fallbackToHttp(done)
return this.tryToPlay(err => {
if (body.password !== undefined) user.password = body.password
if (body.email !== undefined) user.email = body.email
if (body.nsfwPolicy !== undefined) user.nsfwPolicy = body.nsfwPolicy
- if (body.webTorrentPolicy !== undefined) user.webTorrentPolicy = body.webTorrentPolicy
+ if (body.webTorrentEnabled !== undefined) user.webTorrentEnabled = body.webTorrentEnabled
if (body.autoPlayVideo !== undefined) user.autoPlayVideo = body.autoPlayVideo
await sequelizeTypescript.transaction(async t => {
import 'express-validator'
import * as validator from 'validator'
import { UserRole } from '../../../shared'
-import { CONSTRAINTS_FIELDS, NSFW_POLICY_TYPES, WEBTORRENT_POLICY_TYPES } from '../../initializers'
+import { CONSTRAINTS_FIELDS, NSFW_POLICY_TYPES } from '../../initializers'
import { exists, isFileValid, isBooleanValid } from './misc'
import { values } from 'lodash'
return exists(value) && nsfwPolicies.indexOf(value) !== -1
}
-const webTorrentPolicies = values(WEBTORRENT_POLICY_TYPES)
-function isUserWebTorrentPolicyValid (value: any) {
- return exists(value) && webTorrentPolicies.indexOf(value) !== -1
+function isUserWebTorrentEnabledValid (value: any) {
+ return isBooleanValid(value)
}
function isUserAutoPlayVideoValid (value: any) {
isUserUsernameValid,
isUserEmailVerifiedValid,
isUserNSFWPolicyValid,
- isUserWebTorrentPolicyValid,
+ isUserWebTorrentEnabledValid,
isUserAutoPlayVideoValid,
isUserDisplayNameValid,
isUserDescriptionValid,
// Do not use barrels, remain constants as independent as possible
import { buildPath, isTestInstance, parseDuration, parseBytes, root, sanitizeHost, sanitizeUrl } from '../helpers/core-utils'
import { NSFWPolicyType } from '../../shared/models/videos/nsfw-policy.type'
-import { WebTorrentPolicyType } from '../../shared/models/users/user-webtorrent-policy.type'
import { invert } from 'lodash'
import { CronRepeatOptions, EveryRepeatOptions } from 'bull'
import * as bytes from 'bytes'
DISPLAY: 'display'
}
-const WEBTORRENT_POLICY_TYPES: { [ id: string]: WebTorrentPolicyType } = {
- ENABLE: 'enable',
- DISABLE: 'disable',
- DISABLE_ON_MOBILE: 'disable_on_mobile'
-}
-
// ---------------------------------------------------------------------------
// Express static paths (router)
FEEDS,
JOB_TTL,
NSFW_POLICY_TYPES,
- WEBTORRENT_POLICY_TYPES,
TORRENT_MIMETYPE_EXT,
STATIC_MAX_AGE,
STATIC_PATHS,
import * as Sequelize from 'sequelize'
-import { values } from 'lodash'
-import { WEBTORRENT_POLICY_TYPES } from '../constants'
async function up (utils: {
transaction: Sequelize.Transaction
}): Promise<any> {
{
const data = {
- type: Sequelize.ENUM(values(WEBTORRENT_POLICY_TYPES)),
+ type: Sequelize.BOOLEAN,
allowNull: false,
- defaultValue: 'enable'
+ defaultValue: true
}
- await utils.queryInterface.addColumn('user', 'webTorrentPolicy', data)
+ await utils.queryInterface.addColumn('user', 'webTorrentEnabled', data)
}
}
-function down (options) {
- throw new Error('Not implemented.')
+async function down (utils: {
+ transaction: Sequelize.Transaction
+ queryInterface: Sequelize.QueryInterface
+ sequelize: Sequelize.Sequelize
+}): Promise<any> {
+ await utils.queryInterface.removeColumn('user', 'webTorrentEnabled')
}
export { up, down }
isUserUsernameValid,
isUserVideoQuotaDailyValid,
isUserVideoQuotaValid,
- isUserWebTorrentPolicyValid
+ isUserWebTorrentEnabledValid
} from '../../helpers/custom-validators/users'
import { comparePassword, cryptPassword } from '../../helpers/peertube-crypto'
import { OAuthTokenModel } from '../oauth/oauth-token'
import { VideoChannelModel } from '../video/video-channel'
import { AccountModel } from './account'
import { NSFWPolicyType } from '../../../shared/models/videos/nsfw-policy.type'
-import { WebTorrentPolicyType } from '../../../shared/models/users/user-webtorrent-policy.type'
import { values } from 'lodash'
-import { NSFW_POLICY_TYPES, WEBTORRENT_POLICY_TYPES } from '../../initializers'
+import { NSFW_POLICY_TYPES } from '../../initializers'
import { clearCacheByUserId } from '../../lib/oauth-model'
enum ScopeNames {
nsfwPolicy: NSFWPolicyType
@AllowNull(false)
- @Is('UserWebTorrentPolicy', value => throwIfNotValid(value, isUserWebTorrentPolicyValid, 'WebTorrent policy'))
- @Column(DataType.ENUM(values(WEBTORRENT_POLICY_TYPES)))
- webTorrentPolicy: WebTorrentPolicyType
+ @Is('UserWebTorrentEnabled', value => throwIfNotValid(value, isUserWebTorrentEnabledValid, 'WebTorrent enabled'))
+ @Column
+ webTorrentEnabled: boolean
@AllowNull(false)
@Default(true)
email: this.email,
emailVerified: this.emailVerified,
nsfwPolicy: this.nsfwPolicy,
- webTorrentPolicy: this.webTorrentPolicy,
+ webTorrentEnabled: this.webTorrentEnabled,
autoPlayVideo: this.autoPlayVideo,
role: this.role,
roleLabel: USER_ROLE_LABELS[ this.role ],
import { NSFWPolicyType } from '../videos/nsfw-policy.type'
-import { WebTorrentPolicyType } from './user-webtorrent-policy.type'
export interface UserUpdateMe {
displayName?: string
description?: string
nsfwPolicy?: NSFWPolicyType,
- webTorrentPolicy?: WebTorrentPolicyType,
+ webTorrentEnabled?: boolean,
autoPlayVideo?: boolean
email?: string
currentPassword?: string
+++ /dev/null
-export type WebTorrentPolicyType = 'enable' | 'disable' | 'disable_on_mobile'