Skip to content

Commit 2442605

Browse files
Merge pull request #1911 from MediaBrowser/dev
Dev
2 parents eaa17f4 + 9077689 commit 2442605

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+1272
-582
lines changed

MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/.bower.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@
1515
},
1616
"devDependencies": {},
1717
"ignore": [],
18-
"version": "1.4.60",
19-
"_release": "1.4.60",
18+
"version": "1.4.62",
19+
"_release": "1.4.62",
2020
"_resolution": {
2121
"type": "version",
22-
"tag": "1.4.60",
23-
"commit": "28747871beb1d800a18c86c5e30255ae6015489d"
22+
"tag": "1.4.62",
23+
"commit": "e8f6a2939a975c0ec2bb31b99e3c4e66b34db229"
2424
},
2525
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
2626
"_target": "^1.2.0",

MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,14 @@
448448

449449
dlg.classList.add('dialog');
450450

451-
if (options.scrollY !== false) {
451+
if (options.scrollX) {
452+
dlg.classList.add('smoothScrollX');
453+
454+
if (layoutManager.tv) {
455+
scrollHelper.centerFocus.on(dlg, true);
456+
}
457+
}
458+
else if (options.scrollY !== false) {
452459
dlg.classList.add('smoothScrollY');
453460

454461
if (layoutManager.tv) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
[is=emby-collapse] {
2+
margin: .5em 0;
3+
}
4+
5+
.collapseContent {
6+
border-width: 0 1px 1px 1px;
7+
padding: 1em 1.25em;
8+
height: 0;
9+
transition-property: height;
10+
transition-duration: 300ms;
11+
}
12+
13+
.emby-collapsible-button {
14+
margin: 0;
15+
display: flex;
16+
align-items: center;
17+
text-transform: none;
18+
width: 100%;
19+
}
20+
21+
.emby-collapse-expandIcon {
22+
transform-origin: 50% 50%;
23+
transition: transform 180ms ease-out;
24+
}
25+
26+
.emby-collapse-expandIcon.expanded {
27+
transform: rotate(180deg);
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
define(['browser', 'css!./emby-collapse', 'registerElement'], function (browser) {
2+
3+
var EmbyButtonPrototype = Object.create(HTMLDivElement.prototype);
4+
5+
function slideDownToShow(button, elem) {
6+
7+
elem.classList.remove('hide');
8+
elem.classList.add('expanded');
9+
elem.style.height = 'auto';
10+
var height = elem.offsetHeight + 'px';
11+
elem.style.height = '0';
12+
elem.offsetHeight;
13+
elem.style.height = height;
14+
15+
setTimeout(function () {
16+
if (elem.classList.contains('expanded')) {
17+
elem.classList.remove('hide');
18+
} else {
19+
elem.classList.add('hide');
20+
}
21+
}, 300);
22+
23+
var icon = button.querySelector('i');
24+
//icon.innerHTML = 'expand_less';
25+
icon.classList.add('expanded');
26+
}
27+
28+
function slideUpToHide(button, elem) {
29+
30+
elem.classList.remove('expanded');
31+
elem.style.height = '0';
32+
33+
setTimeout(function () {
34+
if (elem.classList.contains('expanded')) {
35+
elem.classList.remove('hide');
36+
} else {
37+
elem.classList.add('hide');
38+
}
39+
}, 300);
40+
41+
var icon = button.querySelector('i');
42+
//icon.innerHTML = 'expand_more';
43+
icon.classList.remove('expanded');
44+
}
45+
46+
function onButtonClick(e) {
47+
48+
var collapseContent = this.parentNode.querySelector('.collapseContent');
49+
50+
if (collapseContent.classList.contains('expanded')) {
51+
slideUpToHide(this, collapseContent);
52+
} else {
53+
slideDownToShow(this, collapseContent);
54+
}
55+
}
56+
57+
EmbyButtonPrototype.attachedCallback = function () {
58+
59+
if (this.getAttribute('data-embycollapse') == 'true') {
60+
return;
61+
}
62+
63+
this.setAttribute('data-embycollapse', 'true');
64+
65+
var collapseContent = this.querySelector('.collapseContent');
66+
if (collapseContent) {
67+
collapseContent.classList.add('hide');
68+
}
69+
70+
var title = this.getAttribute('title');
71+
72+
var html = '<button is="emby-button" type="button" on-click="toggleExpand" id="expandButton" class="emby-collapsible-button">\
73+
<h3 class="emby-collapsible-title" title="' + title + '">' + title + '</h3>\
74+
<i style="margin-left: auto; margin-right: .5em;" class="md-icon emby-collapse-expandIcon">expand_more</i>\
75+
</button>';
76+
77+
this.insertAdjacentHTML('afterbegin', html);
78+
79+
this.querySelector('.emby-collapsible-button').addEventListener('click', onButtonClick);
80+
};
81+
82+
document.registerElement('emby-collapse', {
83+
prototype: EmbyButtonPrototype,
84+
extends: 'div'
85+
});
86+
});

MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingcreator.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'connectionManager', 'require', 'loading', 'scrollHelper', 'emby-checkbox', 'emby-button', 'emby-collapsible', 'emby-input', 'paper-icon-button-light', 'css!./../formdialog', 'css!./recordingcreator', 'material-icons'], function (dialogHelper, globalize, layoutManager, mediaInfo, appHost, connectionManager, require, loading, scrollHelper) {
1+
define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'connectionManager', 'require', 'loading', 'scrollHelper', 'emby-checkbox', 'emby-button', 'emby-collapse', 'emby-input', 'paper-icon-button-light', 'css!./../formdialog', 'css!./recordingcreator', 'material-icons'], function (dialogHelper, globalize, layoutManager, mediaInfo, appHost, connectionManager, require, loading, scrollHelper) {
22

33
var currentProgramId;
44
var currentServerId;

MediaBrowser.WebDashboard/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingcreator.template.html

+44-42
Original file line numberDiff line numberDiff line change
@@ -48,51 +48,53 @@ <h1 class="itemName dialogContentTitle"></h1>
4848
</div>
4949
</div>
5050
<div class="advanced hide">
51-
<emby-collapsible title="${Advanced}">
52-
<div class="seriesDays hide">
53-
<div>
54-
<h1>${Days}</h1>
55-
</div>
56-
<div class="checkboxList">
57-
<label>
58-
<input type="checkbox" is="emby-checkbox" id="chkSunday" />
59-
<span>${Sunday}</span>
60-
</label>
61-
<label>
62-
<input type="checkbox" is="emby-checkbox" id="chkMonday" />
63-
<span>${Monday}</span>
64-
</label>
65-
<label>
66-
<input type="checkbox" is="emby-checkbox" id="chkTuesday" />
67-
<span>${Tuesday}</span>
68-
</label>
69-
<label>
70-
<input type="checkbox" is="emby-checkbox" id="chkWednesday" />
71-
<span>${Wednesday}</span>
72-
</label>
73-
<label>
74-
<input type="checkbox" is="emby-checkbox" id="chkThursday" />
75-
<span>${Thursday}</span>
76-
</label>
77-
<label>
78-
<input type="checkbox" is="emby-checkbox" id="chkFriday" />
79-
<span>${Friday}</span>
80-
</label>
81-
<label>
82-
<input type="checkbox" is="emby-checkbox" id="chkSaturday" />
83-
<span>${Saturday}</span>
84-
</label>
51+
<div is="emby-collapse" title="${Advanced}">
52+
<div class="collapseContent">
53+
<div class="seriesDays hide">
54+
<div>
55+
<h1>${Days}</h1>
56+
</div>
57+
<div class="checkboxList">
58+
<label>
59+
<input type="checkbox" is="emby-checkbox" id="chkSunday" />
60+
<span>${Sunday}</span>
61+
</label>
62+
<label>
63+
<input type="checkbox" is="emby-checkbox" id="chkMonday" />
64+
<span>${Monday}</span>
65+
</label>
66+
<label>
67+
<input type="checkbox" is="emby-checkbox" id="chkTuesday" />
68+
<span>${Tuesday}</span>
69+
</label>
70+
<label>
71+
<input type="checkbox" is="emby-checkbox" id="chkWednesday" />
72+
<span>${Wednesday}</span>
73+
</label>
74+
<label>
75+
<input type="checkbox" is="emby-checkbox" id="chkThursday" />
76+
<span>${Thursday}</span>
77+
</label>
78+
<label>
79+
<input type="checkbox" is="emby-checkbox" id="chkFriday" />
80+
<span>${Friday}</span>
81+
</label>
82+
<label>
83+
<input type="checkbox" is="emby-checkbox" id="chkSaturday" />
84+
<span>${Saturday}</span>
85+
</label>
86+
</div>
87+
<br />
8588
</div>
8689
<br />
90+
<div class="inputContainer">
91+
<input is="emby-input" type="number" id="txtPrePaddingMinutes" pattern="[0-9]*" required="required" min="0" step="1" label="${LabelPrePaddingMinutes}" />
92+
</div>
93+
<div class="inputContainer">
94+
<input is="emby-input" type="number" id="txtPostPaddingMinutes" pattern="[0-9]*" required="required" min="0" step="1" label="${LabelPostPaddingMinutes}" />
95+
</div>
8796
</div>
88-
<br />
89-
<div class="inputContainer">
90-
<input is="emby-input" type="number" id="txtPrePaddingMinutes" pattern="[0-9]*" required="required" min="0" step="1" label="${LabelPrePaddingMinutes}" />
91-
</div>
92-
<div class="inputContainer">
93-
<input is="emby-input" type="number" id="txtPostPaddingMinutes" pattern="[0-9]*" required="required" min="0" step="1" label="${LabelPostPaddingMinutes}" />
94-
</div>
95-
</emby-collapsible>
97+
</div>
9698
<br />
9799
</div>
98100
<br />

MediaBrowser.WebDashboard/dashboard-ui/bower_components/hls.js/.bower.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "hls.js",
3-
"version": "0.5.40",
3+
"version": "0.5.41",
44
"license": "Apache-2.0",
55
"description": "Media Source Extension - HLS library, by/for Dailymotion",
66
"homepage": "https://github.com/dailymotion/hls.js",
@@ -16,11 +16,11 @@
1616
"test",
1717
"tests"
1818
],
19-
"_release": "0.5.40",
19+
"_release": "0.5.41",
2020
"_resolution": {
2121
"type": "version",
22-
"tag": "v0.5.40",
23-
"commit": "878b91d51073a6f4d7b6528c204208c3e2a4cf48"
22+
"tag": "v0.5.41",
23+
"commit": "e8d85916067a06ab823d66bf291ace771b886478"
2424
},
2525
"_source": "git://github.com/dailymotion/hls.js.git",
2626
"_target": "~0.5.7",

MediaBrowser.WebDashboard/dashboard-ui/bower_components/hls.js/API.md

+28-7
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ configuration parameters could be provided to hls.js upon instantiation of Hls O
170170

171171
var config = {
172172
autoStartLoad : true,
173+
startPosition : -1,
173174
capLevelToPlayerSize: false,
174175
debug : false,
175176
defaultAudioCodec : undefined,
@@ -228,7 +229,14 @@ a logger object could also be provided for custom logging : ```config.debug=cust
228229
(default true)
229230
230231
- if set to true, start level playlist and first fragments will be loaded automatically, after triggering of ```Hls.Events.MANIFEST_PARSED``` event
231-
- if set to false, an explicit API call (```hls.startLoad()```) will be needed to start quality level/fragment loading.
232+
- if set to false, an explicit API call (```hls.startLoad(startPosition=-1)```) will be needed to start quality level/fragment loading.
233+
234+
#### ```startPosition```
235+
(default -1)
236+
237+
- if set to -1, playback will start from initialTime=0 for VoD and according to ```liveSyncDuration/liveSyncDurationCount``` config params for Live
238+
- Otherwise, playback will start from predefined value. (unless stated otherwise in ```autoStartLoad=false``` mode : in that case startPosition can be overrided using ```hls.startLoad(startPosition)```).
239+
232240
233241
#### ```defaultAudioCodec```
234242
(default undefined)
@@ -477,36 +485,46 @@ parameter should be a boolean
477485
#### ```abrEwmaFastLive```
478486
(default : 5.0)
479487
480-
Fast bitrate Exponential moving average half-life , used to compute average bitrate for Live streams
488+
Fast bitrate Exponential moving average half-life, used to compute average bitrate for Live streams
481489
Half of the estimate is based on the last abrEwmaFastLive seconds of sample history.
482490
Each of the sample is weighted by the fragment loading duration.
491+
483492
parameter should be a float greater than 0
484493
485494
#### ```abrEwmaSlowLive```
486495
(default : 9.0)
487496
488-
Slow bitrate Exponential moving average half-life , used to compute average bitrate for Live streams
497+
Slow bitrate Exponential moving average half-life, used to compute average bitrate for Live streams
489498
Half of the estimate is based on the last abrEwmaSlowLive seconds of sample history.
490499
Each of the sample is weighted by the fragment loading duration.
491-
parameter should be a float greater than abrEwmaFastLive
492500
501+
parameter should be a float greater than abrEwmaFastLive
493502
494503
#### ```abrEwmaFastVoD```
495504
(default : 4.0)
496505
497-
Fast bitrate Exponential moving average half-life , used to compute average bitrate for VoD streams
506+
Fast bitrate Exponential moving average half-life, used to compute average bitrate for VoD streams
498507
Half of the estimate is based on the last abrEwmaFastVoD seconds of sample history.
499508
Each of the sample is weighted by the fragment loading duration.
509+
500510
parameter should be a float greater than 0
501511
502512
#### ```abrEwmaSlowVoD```
503513
(default : 15.0)
504514
505-
Slow bitrate Exponential moving average half-life , used to compute average bitrate for VoD streams
515+
Slow bitrate Exponential moving average half-life, used to compute average bitrate for VoD streams
506516
Half of the estimate is based on the last abrEwmaSlowVoD seconds of sample history.
507517
Each of the sample is weighted by the fragment loading duration.
518+
508519
parameter should be a float greater than abrEwmaFastVoD
509520
521+
#### ```abrEwmaDefaultEstimate```
522+
(default : 500000)
523+
524+
Default bandwidth estimate in bits/second prior to collecting fragment bandwidth samples.
525+
526+
parameter should be a float
527+
510528
511529
#### ```abrBandWidthFactor```
512530
(default : 0.8)
@@ -599,9 +617,12 @@ by default, hls.js will automatically start loading quality level playlists, and
599617
600618
however if ```config.autoStartLoad``` is set to ```false```, the following method needs to be called to manually start playlist and fragments loading:
601619
602-
#### ```hls.startLoad()```
620+
#### ```hls.startLoad(startPosition=-1)```
603621
start/restart playlist/fragment loading. this is only effective if MANIFEST_PARSED event has been triggered and video element has been attached to hls object.
604622
623+
startPosition is the initial position in the playlist.
624+
if startPosition is not set to -1, it allows to override default startPosition to the one you want (it will bypass hls.config.liveSync* config params for Live for example, so that user can start playback from whatever position)
625+
605626
#### ```hls.stopLoad()```
606627
stop playlist/fragment loading. could be resumed later on by calling ```hls.startLoad()```
607628

MediaBrowser.WebDashboard/dashboard-ui/bower_components/hls.js/bower.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "hls.js",
3-
"version": "0.5.40",
3+
"version": "0.5.41",
44
"license": "Apache-2.0",
55
"description": "Media Source Extension - HLS library, by/for Dailymotion",
66
"homepage": "https://github.com/dailymotion/hls.js",

MediaBrowser.WebDashboard/dashboard-ui/bower_components/hls.js/design.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ design idea is pretty simple :
4848

4949
- [src/controller/abr-controller.js][]
5050
- in charge of determining auto quality level.
51-
- auto quality switch algorithm is bitrate based : fragment loading bitrate is monitored and smoothed using 2 exponential weighted moving average (a fast one, to adapt quickly on bandwidth drop and a slow one, to avoid ramping up to quickly on bandwidth increase)
51+
- auto quality switch algorithm is bitrate based : fragment loading bitrate is monitored and smoothed using 2 exponential weighted moving average (a fast one, to adapt quickly on bandwidth drop and a slow one, to avoid ramping up too quickly on bandwidth increase)
5252
- in charge of **monitoring fragment loading speed** (by monitoring data received from FRAG_LOAD_PROGRESS event)
5353
- "expected time of fragment load completion" is computed using "fragment loading instant bandwidth".
5454
- this time is compared to the "expected time of buffer starvation".

0 commit comments

Comments
 (0)