Merge branch 'release/3.1.0' into develop

pull/3747/head
Chocobozzz 2021-04-08 15:16:01 +02:00
commit dc48fdbe68
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
10 changed files with 60 additions and 20 deletions

View File

@ -153,7 +153,7 @@
<my-select-options
id="liveTranscodingProfile"
formControlName="profile"
[items]="getAvailableTranscodingProfile()"
[items]="transcodingProfiles"
[clearable]="false"
>
</my-select-options>

View File

@ -1,6 +1,6 @@
import { SelectOptionsItem } from 'src/types/select-options-item.model'
import { Component, Input, OnInit } from '@angular/core'
import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core'
import { FormGroup } from '@angular/forms'
import { ServerConfig } from '@shared/models'
import { ConfigService } from '../shared/config.service'
@ -11,12 +11,14 @@ import { EditConfigurationService, ResolutionOption } from './edit-configuration
templateUrl: './edit-live-configuration.component.html',
styleUrls: [ './edit-custom-config.component.scss' ]
})
export class EditLiveConfigurationComponent implements OnInit {
export class EditLiveConfigurationComponent implements OnInit, OnChanges {
@Input() form: FormGroup
@Input() formErrors: any
@Input() serverConfig: ServerConfig
transcodingThreadOptions: SelectOptionsItem[] = []
transcodingProfiles: SelectOptionsItem[] = []
liveMaxDurationOptions: SelectOptionsItem[] = []
liveResolutions: ResolutionOption[] = []
@ -39,7 +41,13 @@ export class EditLiveConfigurationComponent implements OnInit {
this.liveResolutions = this.editConfigurationService.getLiveResolutions()
}
getAvailableTranscodingProfile () {
ngOnChanges (changes: SimpleChanges) {
if (changes['serverConfig']) {
this.transcodingProfiles = this.buildAvailableTranscodingProfile()
}
}
buildAvailableTranscodingProfile () {
const profiles = this.serverConfig.live.transcoding.availableProfiles
return profiles.map(p => {

View File

@ -181,7 +181,7 @@
<my-select-options
id="transcodingProfile"
formControlName="profile"
[items]="getAvailableTranscodingProfile()"
[items]="transcodingProfiles"
[clearable]="false"
></my-select-options>

View File

@ -1,6 +1,6 @@
import { SelectOptionsItem } from 'src/types/select-options-item.model'
import { Component, Input, OnInit } from '@angular/core'
import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core'
import { FormGroup } from '@angular/forms'
import { ServerConfig } from '@shared/models'
import { ConfigService } from '../shared/config.service'
@ -11,12 +11,13 @@ import { EditConfigurationService, ResolutionOption } from './edit-configuration
templateUrl: './edit-vod-transcoding.component.html',
styleUrls: [ './edit-custom-config.component.scss' ]
})
export class EditVODTranscodingComponent implements OnInit {
export class EditVODTranscodingComponent implements OnInit, OnChanges {
@Input() form: FormGroup
@Input() formErrors: any
@Input() serverConfig: ServerConfig
transcodingThreadOptions: SelectOptionsItem[] = []
transcodingProfiles: SelectOptionsItem[] = []
resolutions: ResolutionOption[] = []
constructor (
@ -31,7 +32,13 @@ export class EditVODTranscodingComponent implements OnInit {
this.checkTranscodingFields()
}
getAvailableTranscodingProfile () {
ngOnChanges (changes: SimpleChanges) {
if (changes['serverConfig']) {
this.transcodingProfiles = this.buildAvailableTranscodingProfile()
}
}
buildAvailableTranscodingProfile () {
const profiles = this.serverConfig.transcoding.availableProfiles
return profiles.map(p => {

View File

@ -1,5 +1,4 @@
import { DatePipe } from '@angular/common'
import { Component, Input, OnChanges, OnInit } from '@angular/core'
import { Component, Input, OnChanges } from '@angular/core'
import { FromNowPipe } from '../angular/from-now.pipe'
@Component({
@ -14,10 +13,7 @@ export class DateToggleComponent implements OnChanges {
dateRelative: string
dateAbsolute: string
constructor (
private datePipe: DatePipe,
private fromNowPipe: FromNowPipe
) { }
constructor (private fromNowPipe: FromNowPipe) { }
ngOnChanges () {
this.updateDates()

View File

@ -5,7 +5,8 @@ $playlist-menu-width: 350px;
right: 0;
height: 100%;
width: $playlist-menu-width;
background: rgba(0, 0, 0, 0.8);
// !important to prevent none background set on focus
background: rgba(0, 0, 0, 0.8) !important;
z-index: 101;
transition: right 0.2s;
overflow-y: scroll;

View File

@ -76,7 +76,7 @@ function getYoutubeDLSubs (url: string, opts?: object): Promise<YoutubeDLSubs> {
logger.debug('Get subtitles from youtube dl.', { url, files })
const subtitles = files.reduce((acc, filename) => {
const matched = filename.match(/\.([a-z]{2})\.(vtt|ttml)/i)
const matched = filename.match(/\.([a-z]{2})(-[a-z]+)?\.(vtt|ttml)/i)
if (!matched || !matched[1]) return acc
return [

View File

@ -0,0 +1,23 @@
import * as Sequelize from 'sequelize'
async function up (utils: {
transaction: Sequelize.Transaction
queryInterface: Sequelize.QueryInterface
sequelize: Sequelize.Sequelize
db: any
}): Promise<void> {
await utils.sequelize.query(
'DELETE FROM "videoCaption" v1 USING (SELECT MIN(id) as id, "filename" FROM "videoCaption" ' +
'GROUP BY "filename" HAVING COUNT(*) > 1) v2 WHERE v1."filename" = v2."filename" AND v1.id <> v2.id'
)
}
function down (options) {
throw new Error('Not implemented.')
}
export {
up,
down
}

View File

@ -917,7 +917,7 @@ export class VideoModel extends Model {
},
include: [
{
attributes: [ 'language', 'fileUrl' ],
attributes: [ 'filename', 'language', 'fileUrl' ],
model: VideoCaptionModel.unscoped(),
required: false
},

View File

@ -2646,9 +2646,14 @@ paths:
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/VideoChannel'
properties:
total:
type: integer
example: 1
data:
type: array
items:
$ref: '#/components/schemas/VideoChannel'
'/accounts/{name}/ratings':
get:
summary: List ratings of an account