2018-06-06 08:23:40 -04:00
|
|
|
import { is18nLocale, isDefaultLocale } from '../../../../shared/models/i18n/i18n'
|
2018-06-07 10:50:33 -04:00
|
|
|
import { VideoFile } from '../../../../shared/models/videos'
|
2018-06-06 08:23:40 -04:00
|
|
|
|
2018-03-30 11:40:00 -04:00
|
|
|
function toTitleCase (str: string) {
|
|
|
|
return str.charAt(0).toUpperCase() + str.slice(1)
|
|
|
|
}
|
|
|
|
|
|
|
|
// https://github.com/danrevah/ngx-pipes/blob/master/src/pipes/math/bytes.ts
|
|
|
|
// Don't import all Angular stuff, just copy the code with shame
|
|
|
|
const dictionaryBytes: Array<{max: number, type: string}> = [
|
|
|
|
{ max: 1024, type: 'B' },
|
|
|
|
{ max: 1048576, type: 'KB' },
|
|
|
|
{ max: 1073741824, type: 'MB' },
|
|
|
|
{ max: 1.0995116e12, type: 'GB' }
|
|
|
|
]
|
|
|
|
function bytes (value) {
|
|
|
|
const format = dictionaryBytes.find(d => value < d.max) || dictionaryBytes[dictionaryBytes.length - 1]
|
|
|
|
const calc = Math.floor(value / (format.max / 1024)).toString()
|
|
|
|
|
|
|
|
return [ calc, format.type ]
|
|
|
|
}
|
|
|
|
|
|
|
|
function getStoredVolume () {
|
|
|
|
const value = getLocalStorage('volume')
|
|
|
|
if (value !== null && value !== undefined) {
|
|
|
|
const valueNumber = parseFloat(value)
|
|
|
|
if (isNaN(valueNumber)) return undefined
|
|
|
|
|
|
|
|
return valueNumber
|
|
|
|
}
|
|
|
|
|
|
|
|
return undefined
|
|
|
|
}
|
|
|
|
|
|
|
|
function getStoredMute () {
|
|
|
|
const value = getLocalStorage('mute')
|
|
|
|
if (value !== null && value !== undefined) return value === 'true'
|
|
|
|
|
|
|
|
return undefined
|
|
|
|
}
|
|
|
|
|
2018-04-05 10:15:51 -04:00
|
|
|
function getAverageBandwidth () {
|
|
|
|
const value = getLocalStorage('average-bandwidth')
|
|
|
|
if (value !== null && value !== undefined) {
|
|
|
|
const valueNumber = parseInt(value, 10)
|
|
|
|
if (isNaN(valueNumber)) return undefined
|
|
|
|
|
|
|
|
return valueNumber
|
|
|
|
}
|
|
|
|
|
|
|
|
return undefined
|
|
|
|
}
|
|
|
|
|
2018-06-11 10:49:56 -04:00
|
|
|
function getStoredTheater () {
|
|
|
|
const value = getLocalStorage('theater-enabled')
|
|
|
|
if (value !== null && value !== undefined) return value === 'true'
|
|
|
|
|
|
|
|
return undefined
|
|
|
|
}
|
|
|
|
|
2018-03-30 11:40:00 -04:00
|
|
|
function saveVolumeInStore (value: number) {
|
|
|
|
return setLocalStorage('volume', value.toString())
|
|
|
|
}
|
|
|
|
|
|
|
|
function saveMuteInStore (value: boolean) {
|
|
|
|
return setLocalStorage('mute', value.toString())
|
|
|
|
}
|
|
|
|
|
2018-06-11 10:49:56 -04:00
|
|
|
function saveTheaterInStore (enabled: boolean) {
|
|
|
|
return setLocalStorage('theater-enabled', enabled.toString())
|
|
|
|
}
|
|
|
|
|
2018-04-05 10:15:51 -04:00
|
|
|
function saveAverageBandwidth (value: number) {
|
|
|
|
return setLocalStorage('average-bandwidth', value.toString())
|
|
|
|
}
|
|
|
|
|
2018-05-22 10:02:29 -04:00
|
|
|
function isMobile () {
|
|
|
|
return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent)
|
|
|
|
}
|
|
|
|
|
2018-05-30 11:10:00 -04:00
|
|
|
function buildVideoLink (time?: number) {
|
|
|
|
let href = window.location.href.replace('/embed/', '/watch/')
|
|
|
|
if (time) {
|
|
|
|
const timeInt = Math.floor(time)
|
|
|
|
|
|
|
|
if (window.location.search) href += '&start=' + timeInt
|
|
|
|
else href += '?start=' + timeInt
|
|
|
|
}
|
|
|
|
|
|
|
|
return href
|
|
|
|
}
|
|
|
|
|
|
|
|
function buildVideoEmbed (embedUrl: string) {
|
|
|
|
return '<iframe width="560" height="315" ' +
|
|
|
|
'src="' + embedUrl + '" ' +
|
|
|
|
'frameborder="0" allowfullscreen>' +
|
|
|
|
'</iframe>'
|
|
|
|
}
|
|
|
|
|
|
|
|
function copyToClipboard (text: string) {
|
|
|
|
const el = document.createElement('textarea')
|
|
|
|
el.value = text
|
|
|
|
el.setAttribute('readonly', '')
|
|
|
|
el.style.position = 'absolute'
|
|
|
|
el.style.left = '-9999px'
|
|
|
|
document.body.appendChild(el)
|
|
|
|
el.select()
|
|
|
|
document.execCommand('copy')
|
|
|
|
document.body.removeChild(el)
|
|
|
|
}
|
|
|
|
|
2018-06-07 10:50:33 -04:00
|
|
|
function videoFileMaxByResolution (files: VideoFile[]) {
|
|
|
|
let max = files[0]
|
|
|
|
|
|
|
|
for (let i = 1; i < files.length; i++) {
|
|
|
|
const file = files[i]
|
|
|
|
if (max.resolution.id < file.resolution.id) max = file
|
|
|
|
}
|
|
|
|
|
|
|
|
return max
|
|
|
|
}
|
|
|
|
|
|
|
|
function videoFileMinByResolution (files: VideoFile[]) {
|
|
|
|
let min = files[0]
|
|
|
|
|
|
|
|
for (let i = 1; i < files.length; i++) {
|
|
|
|
const file = files[i]
|
|
|
|
if (min.resolution.id > file.resolution.id) min = file
|
|
|
|
}
|
|
|
|
|
|
|
|
return min
|
|
|
|
}
|
|
|
|
|
2018-03-30 11:40:00 -04:00
|
|
|
export {
|
|
|
|
toTitleCase,
|
2018-05-30 11:10:00 -04:00
|
|
|
buildVideoLink,
|
2018-03-30 11:40:00 -04:00
|
|
|
getStoredVolume,
|
|
|
|
saveVolumeInStore,
|
2018-04-05 10:15:51 -04:00
|
|
|
saveAverageBandwidth,
|
|
|
|
getAverageBandwidth,
|
2018-03-30 11:40:00 -04:00
|
|
|
saveMuteInStore,
|
2018-05-30 11:10:00 -04:00
|
|
|
buildVideoEmbed,
|
2018-03-30 11:40:00 -04:00
|
|
|
getStoredMute,
|
2018-06-07 10:50:33 -04:00
|
|
|
videoFileMaxByResolution,
|
|
|
|
videoFileMinByResolution,
|
2018-05-30 11:10:00 -04:00
|
|
|
copyToClipboard,
|
2018-06-11 10:49:56 -04:00
|
|
|
getStoredTheater,
|
|
|
|
saveTheaterInStore,
|
2018-05-22 10:02:29 -04:00
|
|
|
isMobile,
|
2018-03-30 11:40:00 -04:00
|
|
|
bytes
|
|
|
|
}
|
|
|
|
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
const KEY_PREFIX = 'peertube-videojs-'
|
|
|
|
|
|
|
|
function getLocalStorage (key: string) {
|
|
|
|
try {
|
|
|
|
return localStorage.getItem(KEY_PREFIX + key)
|
|
|
|
} catch {
|
|
|
|
return undefined
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function setLocalStorage (key: string, value: string) {
|
|
|
|
try {
|
|
|
|
localStorage.setItem(KEY_PREFIX + key, value)
|
|
|
|
} catch { /* empty */ }
|
|
|
|
}
|