mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
update translations
This commit is contained in:
parent
8030454e19
commit
22586c7a8f
41 changed files with 17432 additions and 17417 deletions
|
@ -138,16 +138,7 @@
|
|||
}]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps around jQuery ajax methods to add additional info to the request.
|
||||
*/
|
||||
self.ajax = function (request, includeAuthorization) {
|
||||
|
||||
if (!request) {
|
||||
throw new Error("Request cannot be null");
|
||||
}
|
||||
|
||||
if (includeAuthorization !== false) {
|
||||
self.setRequestHeaders = function(headers) {
|
||||
|
||||
var currentServerInfo = self.serverInfo();
|
||||
|
||||
|
@ -161,16 +152,29 @@
|
|||
auth += ', UserId="' + userId + '"';
|
||||
}
|
||||
|
||||
request.headers = {
|
||||
Authorization: auth
|
||||
};
|
||||
headers.Authorization = auth;
|
||||
}
|
||||
|
||||
var accessToken = currentServerInfo.AccessToken;
|
||||
|
||||
if (accessToken) {
|
||||
request.headers['X-MediaBrowser-Token'] = accessToken;
|
||||
headers['X-MediaBrowser-Token'] = accessToken;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Wraps around jQuery ajax methods to add additional info to the request.
|
||||
*/
|
||||
self.ajax = function (request, includeAuthorization) {
|
||||
|
||||
if (!request) {
|
||||
throw new Error("Request cannot be null");
|
||||
}
|
||||
|
||||
if (includeAuthorization !== false) {
|
||||
|
||||
request.headers = {};
|
||||
self.setRequestHeaders(request.headers);
|
||||
}
|
||||
|
||||
if (self.enableAutomaticNetworking === false || request.type != "GET") {
|
||||
|
@ -521,7 +525,7 @@
|
|||
} else {
|
||||
|
||||
// If that produced a fairly high speed, try again with a larger size to get a more accurate result
|
||||
self.getDownloadSpeed(2000000).done(function (bitrate) {
|
||||
self.getDownloadSpeed(3000000).done(function (bitrate) {
|
||||
|
||||
deferred.resolveWith(null, [Math.round(bitrate * .8)]);
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "iron-a11y-announcer",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.2",
|
||||
"description": "A singleton element that simplifies announcing text to screen readers.",
|
||||
"keywords": [
|
||||
"web-components",
|
||||
|
@ -30,11 +30,11 @@
|
|||
"web-component-tester": "*"
|
||||
},
|
||||
"homepage": "https://github.com/polymerelements/iron-a11y-announcer",
|
||||
"_release": "1.0.1",
|
||||
"_release": "1.0.2",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v1.0.1",
|
||||
"commit": "699697fe8935400ab11e3e33cd6a5a54d762300e"
|
||||
"tag": "v1.0.2",
|
||||
"commit": "6010b30a67a12333f76394a558c820db727f7c84"
|
||||
},
|
||||
"_source": "git://github.com/polymerelements/iron-a11y-announcer.git",
|
||||
"_target": "^1.0.0",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "iron-a11y-announcer",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.2",
|
||||
"description": "A singleton element that simplifies announcing text to screen readers.",
|
||||
"keywords": [
|
||||
"web-components",
|
||||
|
|
|
@ -114,7 +114,7 @@ Note: announcements are only audible if you have a screen reader enabled.
|
|||
|
||||
Polymer.IronA11yAnnouncer.requestAvailability = function() {
|
||||
if (!Polymer.IronA11yAnnouncer.instance) {
|
||||
document.createElement('iron-a11y-announcer');
|
||||
Polymer.IronA11yAnnouncer.instance = document.createElement('iron-a11y-announcer');
|
||||
}
|
||||
|
||||
document.body.appendChild(Polymer.IronA11yAnnouncer.instance);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "iron-form-element-behavior",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.2",
|
||||
"license": "http://polymer.github.io/LICENSE.txt",
|
||||
"private": true,
|
||||
"main": "iron-form-element-behavior",
|
||||
|
@ -22,14 +22,15 @@
|
|||
"iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
|
||||
"test-fixture": "PolymerElements/test-fixture#^1.0.0",
|
||||
"web-component-tester": "*",
|
||||
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
|
||||
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
|
||||
"paper-styles": "PolymerElements/paper-styles#^1.0.0"
|
||||
},
|
||||
"homepage": "https://github.com/PolymerElements/iron-form-element-behavior",
|
||||
"_release": "1.0.1",
|
||||
"_release": "1.0.2",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v1.0.1",
|
||||
"commit": "f386143e866c320025589f3d79798c12103377a4"
|
||||
"tag": "v1.0.2",
|
||||
"commit": "3d46178a7cd9e4025004476a8fd0eef7a5416cd3"
|
||||
},
|
||||
"_source": "git://github.com/PolymerElements/iron-form-element-behavior.git",
|
||||
"_target": "^1.0.0",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "iron-form-element-behavior",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.2",
|
||||
"license": "http://polymer.github.io/LICENSE.txt",
|
||||
"private": true,
|
||||
"main": "iron-form-element-behavior",
|
||||
|
@ -22,6 +22,7 @@
|
|||
"iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
|
||||
"test-fixture": "PolymerElements/test-fixture#^1.0.0",
|
||||
"web-component-tester": "*",
|
||||
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
|
||||
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
|
||||
"paper-styles": "PolymerElements/paper-styles#^1.0.0"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,35 +19,50 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
|
|||
|
||||
<script src="../../webcomponentsjs/webcomponents-lite.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="../../paper-styles/paper-styles.html">
|
||||
<link rel="import" href="../../paper-styles/demo-pages.html">
|
||||
<link rel="import" href="simple-form.html">
|
||||
<link rel="import" href="simple-element.html">
|
||||
|
||||
</head>
|
||||
<style>
|
||||
input {
|
||||
margin-bottom: 24px;
|
||||
width: 200px;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
|
||||
<div class="vertical-section-container centered">
|
||||
<div class="vertical-section">
|
||||
<form is="simple-form" id="form">
|
||||
Element the form is tracking: <input is="simple-element" type="text" name="one" value="one">
|
||||
Element with iron-form-element-behavior <input is="simple-element" type="text" name="one" value="one">
|
||||
<br>
|
||||
Element the form isn't tracking: <input type="text" name="two" value="two">
|
||||
Element without iron-form-element-behavior <input type="text" name="two" value="two">
|
||||
<br>
|
||||
Another one the form is tracking: <input is="simple-element" type="text" name="three" value="three">
|
||||
|
||||
Element with iron-form-element-behavior <input is="simple-element" type="text" name="three" value="three">
|
||||
</form>
|
||||
|
||||
<h4>Elements tracked by the form: </h4>
|
||||
<h4>Elements tracked by the form: <button onclick="update()">Update</button> </h4>
|
||||
|
||||
<ul id="output">
|
||||
</ul>
|
||||
</body>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function update() {
|
||||
var output = document.getElementById('output');
|
||||
var elements = document.getElementById('form').formElements;
|
||||
|
||||
document.getElementById('output').innerHTML = '';
|
||||
for (var i = 0; i < elements.length; i++) {
|
||||
var li = document.createElement('li');
|
||||
var text = document.createTextNode(elements[i].value);
|
||||
li.appendChild(text);
|
||||
output.appendChild(li);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
|
||||
</html>
|
||||
|
|
|
@ -25,7 +25,8 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
|
|||
},
|
||||
|
||||
listeners: {
|
||||
'iron-form-element-register': '_elementRegistered'
|
||||
'iron-form-element-register': '_elementRegistered',
|
||||
'iron-form-element-unregister': '_elementUnregistered'
|
||||
},
|
||||
|
||||
ready: function() {
|
||||
|
@ -34,7 +35,16 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
|
|||
|
||||
_elementRegistered: function(e) {
|
||||
this.formElements.push(e.target);
|
||||
this.fire('element-registered');
|
||||
},
|
||||
|
||||
_elementUnregistered: function(e) {
|
||||
var target = e.detail.target;
|
||||
if (target) {
|
||||
var index = this.formElements.indexOf(target);
|
||||
if (index > -1) {
|
||||
this.formElements.splice(index, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
|
|
@ -24,6 +24,17 @@ Enables a custom element to be included in an `iron-form`.
|
|||
Polymer.IronFormElementBehavior = {
|
||||
|
||||
properties: {
|
||||
/**
|
||||
* Fired when the element is added to an `iron-form`.
|
||||
*
|
||||
* @event iron-form-element-register
|
||||
*/
|
||||
|
||||
/**
|
||||
* Fired when the element is removed from an `iron-form`.
|
||||
*
|
||||
* @event iron-form-element-unregister
|
||||
*/
|
||||
|
||||
/**
|
||||
* The name of this element.
|
||||
|
@ -39,10 +50,25 @@ Enables a custom element to be included in an `iron-form`.
|
|||
notify: true,
|
||||
type: String
|
||||
},
|
||||
|
||||
/**
|
||||
* Need to keep a reference to the form this element is registered
|
||||
* to, so that it can unregister if detached.
|
||||
*/
|
||||
_parentForm: {
|
||||
type: Object
|
||||
}
|
||||
},
|
||||
|
||||
attached: function() {
|
||||
this._parentForm = Polymer.dom(this).parentNode;
|
||||
this.fire('iron-form-element-register');
|
||||
},
|
||||
|
||||
detached: function() {
|
||||
if (this._parentForm) {
|
||||
this._parentForm.fire('iron-form-element-unregister', {target: this});
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
"tag": "v1.0.1",
|
||||
"commit": "3809f0eb7461c8ca63640aaa238775b3a25aa578"
|
||||
},
|
||||
"_source": "git://github.com/PolymerElements/iron-menu-behavior.git",
|
||||
"_source": "git://github.com/polymerelements/iron-menu-behavior.git",
|
||||
"_target": "^1.0.0",
|
||||
"_originalSource": "PolymerElements/iron-menu-behavior"
|
||||
"_originalSource": "polymerelements/iron-menu-behavior"
|
||||
}
|
|
@ -28,14 +28,14 @@
|
|||
"web-component-tester": "*",
|
||||
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
|
||||
},
|
||||
"homepage": "https://github.com/polymerelements/iron-selector",
|
||||
"homepage": "https://github.com/PolymerElements/iron-selector",
|
||||
"_release": "1.0.2",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v1.0.2",
|
||||
"commit": "ea22d91d11ba6f72c01faa952d5e600f9d1773cf"
|
||||
},
|
||||
"_source": "git://github.com/polymerelements/iron-selector.git",
|
||||
"_source": "git://github.com/PolymerElements/iron-selector.git",
|
||||
"_target": "^1.0.0",
|
||||
"_originalSource": "polymerelements/iron-selector"
|
||||
"_originalSource": "PolymerElements/iron-selector"
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "neon-animation",
|
||||
"version": "1.0.4",
|
||||
"version": "1.0.5",
|
||||
"authors": [
|
||||
"The Polymer Authors"
|
||||
],
|
||||
|
@ -34,7 +34,7 @@
|
|||
"iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0",
|
||||
"iron-selector": "PolymerElements/iron-selector#^1.0.0",
|
||||
"paper-styles": "PolymerElements/paper-styles#^1.0.0",
|
||||
"web-animations-js": "web-animations/web-animations-js#^2.0.0"
|
||||
"web-animations-js": "web-animations/web-animations-js#2.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
|
||||
|
@ -48,11 +48,11 @@
|
|||
"iron-icons": "PolymerElements/iron-icons#^1.0.0",
|
||||
"paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0"
|
||||
},
|
||||
"_release": "1.0.4",
|
||||
"_release": "1.0.5",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v1.0.4",
|
||||
"commit": "8016c4f082250af41a08d30c2b8eae295c24f874"
|
||||
"tag": "v1.0.5",
|
||||
"commit": "d5305b9acc9924c5dd4fcb0098c21840d6ec5b7e"
|
||||
},
|
||||
"_source": "git://github.com/PolymerElements/neon-animation.git",
|
||||
"_target": "^1.0.0",
|
||||
|
|
|
@ -66,6 +66,7 @@ Configuration:
|
|||
return;
|
||||
}
|
||||
|
||||
this._animations = [];
|
||||
var nodes = config.nodes;
|
||||
var effects = [];
|
||||
var nodeDelay = config.nodeDelay || 50;
|
||||
|
@ -81,12 +82,19 @@ Configuration:
|
|||
var animation = new animationConstructor();
|
||||
var effect = animation.configure(config);
|
||||
|
||||
this._animations.push(animation);
|
||||
effects.push(effect);
|
||||
}
|
||||
config.timing.delay = oldDelay;
|
||||
|
||||
this._effect = new GroupEffect(effects);
|
||||
return this._effect;
|
||||
},
|
||||
|
||||
complete: function() {
|
||||
for (var animation, index = 0; animation = this._animations[index]; index++) {
|
||||
animation.complete(animation.config);
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
|
|
@ -43,8 +43,8 @@ Configuration:
|
|||
Polymer.NeonSharedElementAnimationBehavior
|
||||
],
|
||||
|
||||
configure: function(config, fromPage, toPage) {
|
||||
var shared = this.findSharedElements(config, fromPage, toPage);
|
||||
configure: function(config) {
|
||||
var shared = this.findSharedElements(config);
|
||||
if (!shared) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -13,13 +13,13 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
|
|||
<link rel="import" href="../web-animations.html">
|
||||
|
||||
<!--
|
||||
`<slide-down-animation>` animates a custom transform on an element. Use this to animate multiple
|
||||
`<transform-animation>` animates a custom transform on an element. Use this to animate multiple
|
||||
transform properties, or to apply a custom transform value.
|
||||
|
||||
Configuration:
|
||||
```
|
||||
{
|
||||
name: 'slide-down-animation',
|
||||
name: 'transform-animation',
|
||||
node: <node>,
|
||||
transformOrigin: <transform-origin>,
|
||||
transformFrom: <transform-from-string>,
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
"iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0",
|
||||
"iron-selector": "PolymerElements/iron-selector#^1.0.0",
|
||||
"paper-styles": "PolymerElements/paper-styles#^1.0.0",
|
||||
"web-animations-js": "web-animations/web-animations-js#^2.0.0"
|
||||
"web-animations-js": "web-animations/web-animations-js#2.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
|
||||
|
|
|
@ -9,7 +9,6 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
|
|||
<link rel="import" href="../polymer/polymer.html">
|
||||
<link rel="import" href="../iron-resizable-behavior/iron-resizable-behavior.html">
|
||||
<link rel="import" href="../iron-selector/iron-selectable.html">
|
||||
<link rel="import" href="../paper-styles/paper-styles.html">
|
||||
<link rel="import" href="neon-animation-runner-behavior.html">
|
||||
<link rel="import" href="animations/opaque-animation.html">
|
||||
|
||||
|
@ -33,7 +32,11 @@ animations to be run when switching to or switching out of the page.
|
|||
}
|
||||
|
||||
:host > ::content > * {
|
||||
@apply(--layout-fit);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
|
|
|
@ -28,14 +28,14 @@
|
|||
"web-animations-next-lite.dev.html",
|
||||
"web-animations-next-lite.dev.js"
|
||||
],
|
||||
"version": "2.1.1",
|
||||
"_release": "2.1.1",
|
||||
"version": "2.1.0",
|
||||
"_release": "2.1.0",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "2.1.1",
|
||||
"commit": "6ed4038f5793d9f024876911515d1826b3f07b1d"
|
||||
"tag": "2.1.0",
|
||||
"commit": "7215de49976c233fb7abe2c19ee31a1009acc655"
|
||||
},
|
||||
"_source": "git://github.com/web-animations/web-animations-js.git",
|
||||
"_target": "^2.0.0",
|
||||
"_target": "2.1.0",
|
||||
"_originalSource": "web-animations/web-animations-js"
|
||||
}
|
|
@ -1,28 +1,3 @@
|
|||
### 2.1.1 - *July 1 2015*
|
||||
* Add Animation.timeline getter
|
||||
* Add AnimationEffect.parent getter
|
||||
* Make AnimationEffectTiming (returned by AnimationEffect.timing) attributes mutable
|
||||
* Expose the Animation constructor
|
||||
* Change custom effects from AnimationEffects to onsample functions. Custom effects should now be created by setting the onsample attribute of a KeyframeEffect.
|
||||
|
||||
For example, this is deprecated:
|
||||
|
||||
var myEffect = new KeyframeEffect(
|
||||
element,
|
||||
function(timeFraction, target, effect) {
|
||||
target.style.opacity = timeFraction;
|
||||
},
|
||||
1000);
|
||||
var myAnimation = document.timeline.play(myEffect);
|
||||
|
||||
and this should be used insead:
|
||||
|
||||
var myEffect = new KeyframeEffect(element, [], 1000);
|
||||
effect.onsample = function(timeFraction, effect, animation) {
|
||||
effect.target.style.opacity = timeFraction;
|
||||
};
|
||||
var myAnimation = document.timeline.play(myEffect);
|
||||
|
||||
### 2.1.0 - *June 15 2015*
|
||||
* Fix bug affecting GroupEffects with infinite iteration children
|
||||
* Add GroupEffect.firstChild and GroupEffect.lastChild
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
59
dashboard-ui/cordova/android/vlcplayer.js
vendored
59
dashboard-ui/cordova/android/vlcplayer.js
vendored
|
@ -88,7 +88,44 @@
|
|||
}
|
||||
};
|
||||
|
||||
self.setCurrentSrc = function (val, tracks, item, mediaSource) {
|
||||
function getPlaybackStartInfoForVideoActivity(videoUrl, mediaSource, item) {
|
||||
|
||||
var state = {
|
||||
PlayState: {}
|
||||
};
|
||||
|
||||
var audioStreamIndex = getParameterByName('AudioStreamIndex', videoUrl);
|
||||
|
||||
if (audioStreamIndex) {
|
||||
state.PlayState.AudioStreamIndex = parseInt(audioStreamIndex);
|
||||
}
|
||||
state.PlayState.SubtitleStreamIndex = self.currentSubtitleStreamIndex;
|
||||
|
||||
state.PlayState.PlayMethod = getParameterByName('static', videoUrl) == 'true' ?
|
||||
'DirectStream' :
|
||||
'Transcode';
|
||||
|
||||
state.PlayState.LiveStreamId = getParameterByName('LiveStreamId', videoUrl);
|
||||
state.PlayState.PlaySessionId = getParameterByName('PlaySessionId', videoUrl);
|
||||
|
||||
state.PlayState.MediaSourceId = mediaSource.Id;
|
||||
|
||||
state.NowPlayingItem = {
|
||||
RunTimeTicks: mediaSource.RunTimeTicks
|
||||
};
|
||||
|
||||
state.PlayState.CanSeek = mediaSource.RunTimeTicks && mediaSource.RunTimeTicks > 0;
|
||||
|
||||
var playbackStartInfo = {
|
||||
QueueableMediaTypes: item.MediaType,
|
||||
ItemId: item.Id,
|
||||
NowPlayingItem: state.NowPlayingItem
|
||||
};
|
||||
|
||||
return $.extend(playbackStartInfo, state.PlayState);
|
||||
}
|
||||
|
||||
self.setCurrentSrc = function (val, item, mediaSource, tracks) {
|
||||
|
||||
if (!val) {
|
||||
self.destroy();
|
||||
|
@ -105,15 +142,22 @@
|
|||
|
||||
if (options.type == 'audio') {
|
||||
|
||||
AndroidVlcPlayer.playAudioVlc(val, JSON.stringify(item), JSON.stringify(mediaSource), posterUrl);
|
||||
AndroidVlcPlayer.playAudioVlc(val, JSON.stringify(item), JSON.stringify(mediaSource), options.poster);
|
||||
} else {
|
||||
|
||||
var playbackStartInfo = {};
|
||||
var playbackStartInfo = getPlaybackStartInfoForVideoActivity(val, mediaSource, item);
|
||||
|
||||
AndroidVlcPlayer.playVideoVlc(val, startPosMs, item.Name, JSON.stringify(mediaSource), JSON.stringify(playbackStartInfo));
|
||||
}
|
||||
var serverUrl = ApiClient.serverAddress();
|
||||
var requestHeaders = {};
|
||||
ApiClient.setRequestHeaders(requestHeaders);
|
||||
|
||||
AndroidVlcPlayer.playVideoVlc(val, startPosMs, item.Name, JSON.stringify(mediaSource), JSON.stringify(playbackStartInfo), serverUrl, JSON.stringify(requestHeaders));
|
||||
|
||||
playerState.currentSrc = val;
|
||||
self.report('playing', null, startPosMs, false, 100);
|
||||
|
||||
playerState.currentSrc = val;
|
||||
}
|
||||
};
|
||||
|
||||
self.currentSrc = function () {
|
||||
|
@ -145,11 +189,6 @@
|
|||
return false;
|
||||
};
|
||||
|
||||
var posterUrl;
|
||||
self.setPoster = function (url) {
|
||||
posterUrl = url;
|
||||
};
|
||||
|
||||
self.report = function (eventName, duration, position, isPaused, volume) {
|
||||
|
||||
var state = playerState;
|
||||
|
|
12
dashboard-ui/cordova/remotecontrols.js
vendored
12
dashboard-ui/cordova/remotecontrols.js
vendored
|
@ -64,8 +64,20 @@
|
|||
}
|
||||
}
|
||||
|
||||
var lastUpdateTime = 0;
|
||||
|
||||
function onStateChanged(e, state) {
|
||||
|
||||
if (e.type == 'positionchange') {
|
||||
// Try to avoid hammering the document with changes
|
||||
var now = new Date().getTime();
|
||||
if ((now - lastUpdateTime) < 700) {
|
||||
|
||||
return;
|
||||
}
|
||||
lastUpdateTime = now;
|
||||
}
|
||||
|
||||
updatePlayerState(state);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
.tvGuideHeader {
|
||||
white-space: nowrap;
|
||||
position: fixed;
|
||||
top: 98px;
|
||||
top: 96px;
|
||||
left: 0;
|
||||
z-index: 100;
|
||||
max-width: 100%;
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
}
|
||||
|
||||
.nowPlayingBar, .nowPlayingImage img {
|
||||
height: 90px;
|
||||
height: 80px;
|
||||
}
|
||||
|
||||
.nowPlayingBarText {
|
||||
|
@ -95,12 +95,12 @@
|
|||
.nowPlayingBarCenter {
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
margin-top: 17px;
|
||||
margin-top: 12px;
|
||||
}
|
||||
|
||||
.nowPlayingBarPositionContainer {
|
||||
position: absolute;
|
||||
left: 90px;
|
||||
left: 80px;
|
||||
top: 0;
|
||||
right: 0;
|
||||
z-index: 1;
|
||||
|
@ -138,7 +138,7 @@
|
|||
|
||||
.nowPlayingBarRight {
|
||||
position: absolute;
|
||||
bottom: 17px;
|
||||
bottom: 12px;
|
||||
right: 10px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
@ -151,7 +151,7 @@
|
|||
vertical-align: middle;
|
||||
font-weight: normal;
|
||||
position: absolute;
|
||||
bottom: 36px;
|
||||
bottom: 31px;
|
||||
text-align: center;
|
||||
display: inline-block;
|
||||
margin: 0 auto;
|
||||
|
@ -187,7 +187,7 @@
|
|||
}
|
||||
|
||||
.nowPlayingBarRight {
|
||||
bottom: 22px;
|
||||
bottom: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<title></title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="itemListPage" data-role="page" class="page libraryPage folderListPage noSecondaryNavPage" data-require="scripts/itemlistpage">
|
||||
<div id="itemListPage" data-role="page" class="page libraryPage folderListPage noSecondaryNavPage" data-require="scripts/itemlistpage,jqmicons">
|
||||
<div class="alphabetPicker">
|
||||
</div>
|
||||
<div data-role="content" class="itemListContent">
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
{ name: Globalize.translate('HeaderFavoriteShows'), types: "Series", id: "favoriteShows", shape: 'backdrop', preferThumb: true, showTitle: false },
|
||||
{ name: Globalize.translate('HeaderFavoriteEpisodes'), types: "Episode", id: "favoriteEpisode", shape: 'backdrop', preferThumb: false, showTitle: true, showParentTitle: true },
|
||||
{ name: Globalize.translate('HeaderFavoriteGames'), types: "Game", id: "favoriteGames", shape: 'autohome', preferThumb: false, showTitle: true },
|
||||
{ name: Globalize.translate('HeaderFavoriteAlbums'), types: "MusicAlbum", id: "favoriteAlbums", shape: 'square', preferThumb: false, showTitle: true, overlayText: false, showParentTitle: true }
|
||||
{ name: Globalize.translate('HeaderFavoriteAlbums'), types: "MusicAlbum", id: "favoriteAlbums", shape: 'square', preferThumb: false, showTitle: true, overlayText: false, showParentTitle: true, centerText: true, overlayPlayButton: true }
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -48,7 +48,9 @@
|
|||
showTitle: section.showTitle,
|
||||
showParentTitle: section.showParentTitle,
|
||||
lazy: true,
|
||||
showDetailsMenu: true
|
||||
showDetailsMenu: true,
|
||||
centerText: section.centerText,
|
||||
overlayPlayButton: section.overlayPlayButton
|
||||
});
|
||||
|
||||
html += '</div>';
|
||||
|
|
|
@ -234,7 +234,7 @@
|
|||
};
|
||||
|
||||
var currentSrc;
|
||||
self.setCurrentSrc = function (val, tracks, item, mediaSource) {
|
||||
self.setCurrentSrc = function (val, item, mediaSource, tracks) {
|
||||
|
||||
var elem = mediaElement;
|
||||
|
||||
|
@ -359,14 +359,6 @@
|
|||
}
|
||||
};
|
||||
|
||||
self.setPoster = function (url) {
|
||||
var elem = mediaElement;
|
||||
|
||||
if (elem) {
|
||||
elem.poster = url;
|
||||
}
|
||||
};
|
||||
|
||||
self.supportsTextTracks = function () {
|
||||
|
||||
if (supportsTextTracks == null) {
|
||||
|
|
|
@ -2,23 +2,47 @@
|
|||
|
||||
var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster');
|
||||
|
||||
// The base query options
|
||||
var query = {
|
||||
var currentItem;
|
||||
|
||||
var data = {};
|
||||
|
||||
function getQuery() {
|
||||
|
||||
var key = getSavedQueryKey();
|
||||
var pageData = data[key];
|
||||
|
||||
if (!pageData) {
|
||||
pageData = data[key] = {
|
||||
query: {
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending",
|
||||
Fields: "DateCreated,PrimaryImageAspectRatio,MediaSourceCount,SyncInfo",
|
||||
StartIndex: 0,
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb"
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
StartIndex: 0,
|
||||
Limit: LibraryBrowser.getDefaultPageSize()
|
||||
}
|
||||
};
|
||||
|
||||
var currentItem;
|
||||
pageData.query.Filters = "";
|
||||
pageData.query.NameStartsWithOrGreater = '';
|
||||
|
||||
pageData.query.ParentId = getParameterByName('parentId');
|
||||
LibraryBrowser.loadSavedQueryValues(key, pageData.query);
|
||||
}
|
||||
return pageData.query;
|
||||
}
|
||||
|
||||
function getSavedQueryKey() {
|
||||
|
||||
return getWindowUrl();
|
||||
}
|
||||
|
||||
function reloadItems(page) {
|
||||
|
||||
Dashboard.showLoadingMsg();
|
||||
|
||||
var query = getQuery();
|
||||
var userId = Dashboard.getCurrentUserId();
|
||||
|
||||
var parentItemPromise = query.ParentId ?
|
||||
|
@ -120,6 +144,7 @@
|
|||
item: item
|
||||
}]);
|
||||
|
||||
LibraryBrowser.setLastRefreshed(page);
|
||||
Dashboard.hideLoadingMsg();
|
||||
});
|
||||
|
||||
|
@ -136,6 +161,7 @@
|
|||
|
||||
function updateFilterControls(page) {
|
||||
|
||||
var query = getQuery();
|
||||
// Reset form values using the last used query
|
||||
$('.radioSortBy', page).each(function () {
|
||||
|
||||
|
@ -166,6 +192,7 @@
|
|||
|
||||
function onListItemClick(e) {
|
||||
|
||||
var query = getQuery();
|
||||
var page = $(this).parents('.page');
|
||||
var info = LibraryBrowser.getListItemInfo(this);
|
||||
|
||||
|
@ -180,12 +207,14 @@
|
|||
var page = this;
|
||||
|
||||
$('.radioSortBy', this).on('click', function () {
|
||||
var query = getQuery();
|
||||
query.StartIndex = 0;
|
||||
query.SortBy = this.getAttribute('data-sortby');
|
||||
reloadItems(page);
|
||||
});
|
||||
|
||||
$('.radioSortOrder', this).on('click', function () {
|
||||
var query = getQuery();
|
||||
query.StartIndex = 0;
|
||||
query.SortOrder = this.getAttribute('data-sortorder');
|
||||
reloadItems(page);
|
||||
|
@ -193,6 +222,7 @@
|
|||
|
||||
$('.chkStandardFilter', this).on('change', function () {
|
||||
|
||||
var query = getQuery();
|
||||
var filterName = this.getAttribute('data-filter');
|
||||
var filters = query.Filters || "";
|
||||
|
||||
|
@ -224,6 +254,7 @@
|
|||
|
||||
$('.alphabetPicker', this).on('alphaselect', function (e, character) {
|
||||
|
||||
var query = getQuery();
|
||||
query.NameStartsWithOrGreater = character;
|
||||
query.StartIndex = 0;
|
||||
|
||||
|
@ -231,12 +262,14 @@
|
|||
|
||||
}).on('alphaclear', function (e) {
|
||||
|
||||
var query = getQuery();
|
||||
query.NameStartsWithOrGreater = '';
|
||||
|
||||
reloadItems(page);
|
||||
});
|
||||
|
||||
$('#selectPageSize', page).on('change', function () {
|
||||
var query = getQuery();
|
||||
query.Limit = parseInt(this.value);
|
||||
query.StartIndex = 0;
|
||||
reloadItems(page);
|
||||
|
@ -248,18 +281,8 @@
|
|||
|
||||
var page = this;
|
||||
|
||||
query.Limit = LibraryBrowser.getDefaultPageSize();
|
||||
query.ParentId = getParameterByName('parentId');
|
||||
query.Filters = "";
|
||||
query.SortBy = "SortName";
|
||||
query.SortOrder = "Ascending";
|
||||
query.StartIndex = 0;
|
||||
query.NameStartsWithOrGreater = '';
|
||||
|
||||
var key = getParameterByName('parentId');
|
||||
LibraryBrowser.loadSavedQueryValues(key, query);
|
||||
|
||||
LibraryBrowser.getSavedViewSetting(key).done(function (val) {
|
||||
if (LibraryBrowser.needsRefresh(page)) {
|
||||
LibraryBrowser.getSavedViewSetting(getSavedQueryKey()).done(function (val) {
|
||||
|
||||
if (val) {
|
||||
$('#selectView', page).val(val).selectmenu('refresh').trigger('change');
|
||||
|
@ -267,6 +290,7 @@
|
|||
reloadItems(page);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
updateFilterControls(page);
|
||||
|
||||
|
|
|
@ -101,7 +101,7 @@
|
|||
}
|
||||
|
||||
else {
|
||||
cacheDuration = 60000;
|
||||
cacheDuration = 180000;
|
||||
}
|
||||
|
||||
if ((now - last) < cacheDuration) {
|
||||
|
|
|
@ -8,7 +8,10 @@
|
|||
var html = '<div class="viewMenuBar ui-bar-b">';
|
||||
|
||||
if (AppInfo.enableBackButton) {
|
||||
html += '<paper-icon-button icon="chevron-left" class="headerButton headerButtonLeft headerBackButton"></paper-icon-button>';
|
||||
|
||||
var icon = $.browser.safari ? 'chevron-left' : 'arrow-back';
|
||||
|
||||
html += '<paper-icon-button icon="' + icon + '" class="headerButton headerButtonLeft headerBackButton"></paper-icon-button>';
|
||||
}
|
||||
|
||||
html += '<paper-icon-button icon="menu" class="headerButton mainDrawerButton barsMenuButton headerButtonLeft"></paper-icon-button>';
|
||||
|
@ -38,7 +41,7 @@
|
|||
}
|
||||
|
||||
if (!$.browser.mobile && !AppInfo.isNativeApp) {
|
||||
html += '<paper-icon-button icon="settings" class="headerButton headerButtonRight dashboardEntryHeaderButton hide" onclick="Dashboard.navigate(\'dashboard.html\');"></paper-icon-button>';
|
||||
html += '<paper-icon-button icon="settings" class="headerButton headerButtonRight dashboardEntryHeaderButton hide" onclick="return LibraryMenu.onSettingsClicked(event);"></paper-icon-button>';
|
||||
}
|
||||
|
||||
html += '</div>';
|
||||
|
@ -277,18 +280,18 @@
|
|||
html += '</div>';
|
||||
html += '</div>';
|
||||
|
||||
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="remote" href="index.html" onclick="return LibraryMenu.onLinkClicked(this);"><iron-icon icon="home" class="sidebarLinkIcon" style="color:#2196F3;"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonHome') + '</span></a>';
|
||||
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="remote" href="index.html" onclick="return LibraryMenu.onLinkClicked(event, this);"><iron-icon icon="home" class="sidebarLinkIcon" style="color:#2196F3;"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonHome') + '</span></a>';
|
||||
|
||||
} else {
|
||||
html += '<div style="margin-top:5px;"></div>';
|
||||
|
||||
html += '<a class="lnkMediaFolder sidebarLink" href="' + homeHref + '" onclick="return LibraryMenu.onLinkClicked(this);">';
|
||||
html += '<a class="lnkMediaFolder sidebarLink" href="' + homeHref + '" onclick="return LibraryMenu.onLinkClicked(event, this);">';
|
||||
html += '<div style="background-image:url(\'css/images/mblogoicon.png\');width:' + 28 + 'px;height:' + 28 + 'px;background-size:contain;background-repeat:no-repeat;background-position:center center;border-radius:1000px;vertical-align:middle;margin:0 1.6em 0 1.5em;display:inline-block;"></div>';
|
||||
html += Globalize.translate('ButtonHome');
|
||||
html += '</a>';
|
||||
}
|
||||
|
||||
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="remote" href="nowplaying.html" onclick="return LibraryMenu.onLinkClicked(this);"><iron-icon icon="tablet-android" class="sidebarLinkIcon" style="color:#673AB7;"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonRemote') + '</span></a>';
|
||||
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="remote" href="nowplaying.html" onclick="return LibraryMenu.onLinkClicked(event, this);"><iron-icon icon="tablet-android" class="sidebarLinkIcon" style="color:#673AB7;"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonRemote') + '</span></a>';
|
||||
|
||||
var userHeader = drawer.querySelector('.userheader');
|
||||
|
||||
|
@ -317,7 +320,7 @@
|
|||
|
||||
html += Dashboard.getToolsMenuHtml(page);
|
||||
|
||||
html = html.split('href=').join('onclick="return LibraryMenu.onLinkClicked(this);" href=');
|
||||
html = html.split('href=').join('onclick="return LibraryMenu.onLinkClicked(event, this);" href=');
|
||||
|
||||
drawer.querySelector('.dashboardDrawerContent').innerHTML = html;
|
||||
}
|
||||
|
@ -338,29 +341,29 @@
|
|||
html += '</div>';
|
||||
|
||||
html += '<a class="sidebarLink lnkMediaFolder lnkManageServer" data-itemid="dashboard" href="#"><iron-icon icon="dashboard" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonManageServer') + '</span></a>';
|
||||
html += '<a class="sidebarLink lnkMediaFolder editorViewMenu" data-itemid="editor" onclick="return LibraryMenu.onLinkClicked(this);" href="edititemmetadata.html"><iron-icon icon="mode-edit" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonMetadataManager') + '</span></a>';
|
||||
html += '<a class="sidebarLink lnkMediaFolder editorViewMenu" data-itemid="editor" onclick="return LibraryMenu.onLinkClicked(event, this);" href="edititemmetadata.html"><iron-icon icon="mode-edit" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonMetadataManager') + '</span></a>';
|
||||
|
||||
if (!$.browser.mobile && !AppInfo.isTouchPreferred) {
|
||||
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="reports" onclick="return LibraryMenu.onLinkClicked(this);" href="reports.html"><iron-icon icon="insert-chart" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonReports') + '</span></a>';
|
||||
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="reports" onclick="return LibraryMenu.onLinkClicked(event, this);" href="reports.html"><iron-icon icon="insert-chart" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonReports') + '</span></a>';
|
||||
}
|
||||
html += '</div>';
|
||||
|
||||
html += '<div class="userMenuOptions">';
|
||||
html += '<div class="sidebarDivider"></div>';
|
||||
|
||||
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="inbox" onclick="return LibraryMenu.onLinkClicked(this);" href="notificationlist.html"><iron-icon icon="inbox" class="sidebarLinkIcon"></iron-icon>';
|
||||
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="inbox" onclick="return LibraryMenu.onLinkClicked(event, this);" href="notificationlist.html"><iron-icon icon="inbox" class="sidebarLinkIcon"></iron-icon>';
|
||||
html += Globalize.translate('ButtonInbox');
|
||||
html += '<div class="btnNotifications"><div class="btnNotificationsInner">0</div></div>';
|
||||
html += '</a>';
|
||||
|
||||
if (user.localUser && showUserAtTop()) {
|
||||
html += '<a class="sidebarLink lnkMediaFolder lnkMySettings" onclick="return LibraryMenu.onLinkClicked(this);" data-itemid="mysync" href="mypreferencesdisplay.html?userId=' + user.localUser.Id + '"><iron-icon icon="settings" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonSettings') + '</span></a>';
|
||||
html += '<a class="sidebarLink lnkMediaFolder lnkMySettings" onclick="return LibraryMenu.onLinkClicked(event, this);" data-itemid="mysync" href="mypreferencesdisplay.html?userId=' + user.localUser.Id + '"><iron-icon icon="settings" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonSettings') + '</span></a>';
|
||||
}
|
||||
|
||||
html += '<a class="sidebarLink lnkMediaFolder lnkMySync" data-itemid="mysync" onclick="return LibraryMenu.onLinkClicked(this);" href="mysync.html"><iron-icon icon="refresh" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonSync') + '</span></a>';
|
||||
html += '<a class="sidebarLink lnkMediaFolder lnkMySync" data-itemid="mysync" onclick="return LibraryMenu.onLinkClicked(event, this);" href="mysync.html"><iron-icon icon="refresh" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonSync') + '</span></a>';
|
||||
|
||||
if (Dashboard.isConnectMode()) {
|
||||
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="selectserver" onclick="return LibraryMenu.onLinkClicked(this);" href="selectserver.html"><span class="fa fa-globe sidebarLinkIcon"></span><span class="sidebarLinkText">' + Globalize.translate('ButtonSelectServer') + '</span></a>';
|
||||
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="selectserver" onclick="return LibraryMenu.onLinkClicked(event, this);" href="selectserver.html"><span class="fa fa-globe sidebarLinkIcon"></span><span class="sidebarLinkText">' + Globalize.translate('ButtonSelectServer') + '</span></a>';
|
||||
}
|
||||
|
||||
if (showUserAtTop()) {
|
||||
|
@ -457,7 +460,7 @@
|
|||
color = "#293AAE";
|
||||
}
|
||||
|
||||
return '<a data-itemid="' + itemId + '" class="lnkMediaFolder sidebarLink" onclick="return LibraryMenu.onLinkClicked(this);" href="' + getItemHref(i, i.CollectionType) + '"><iron-icon icon="' + icon + '" class="sidebarLinkIcon" style="color:' + color + '"></iron-icon><span class="sectionName">' + i.Name + '</span></a>';
|
||||
return '<a data-itemid="' + itemId + '" class="lnkMediaFolder sidebarLink" onclick="return LibraryMenu.onLinkClicked(event, this);" href="' + getItemHref(i, i.CollectionType) + '"><iron-icon icon="' + icon + '" class="sidebarLinkIcon" style="color:' + color + '"></iron-icon><span class="sectionName">' + i.Name + '</span></a>';
|
||||
|
||||
}).join('');
|
||||
|
||||
|
@ -516,7 +519,11 @@
|
|||
|
||||
setText: setLibraryMenuText,
|
||||
|
||||
onLinkClicked: function (link) {
|
||||
onLinkClicked: function (event, link) {
|
||||
|
||||
if (event.which != 1) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// There doesn't seem to be a way to detect if the drawer is in the process of opening, so try to handle that here
|
||||
if ((new Date().getTime() - lastOpenTime) > 200) {
|
||||
|
@ -549,6 +556,17 @@
|
|||
|
||||
onHardwareMenuButtonClick: function () {
|
||||
openMainDrawer();
|
||||
},
|
||||
|
||||
onSettingsClicked: function (event) {
|
||||
|
||||
if (event.which != 1) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// There doesn't seem to be a way to detect if the drawer is in the process of opening, so try to handle that here
|
||||
Dashboard.navigate('dashboard.html');
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -1163,7 +1163,7 @@
|
|||
});
|
||||
}
|
||||
|
||||
mediaRenderer.setCurrentSrc(videoUrl, tracks, item, mediaSource);
|
||||
mediaRenderer.setCurrentSrc(videoUrl, item, mediaSource, tracks);
|
||||
|
||||
// IE wont autoplay without this
|
||||
if (videoUrl.indexOf('.m3u8') == -1) {
|
||||
|
|
|
@ -481,6 +481,10 @@
|
|||
clearProgressInterval();
|
||||
|
||||
var intervalTime = ApiClient.isWebSocketOpen() ? 1200 : 5000;
|
||||
// Ease up with safari because it doesn't perform as well
|
||||
if ($.browser.safari) {
|
||||
intervalTime = Math.max(intervalTime, 5000);
|
||||
}
|
||||
self.lastProgressReport = 0;
|
||||
|
||||
currentProgressInterval = setInterval(function () {
|
||||
|
@ -1705,11 +1709,6 @@
|
|||
return true;
|
||||
};
|
||||
|
||||
function getAudioRenderer() {
|
||||
|
||||
return new AudioRenderer();
|
||||
}
|
||||
|
||||
function onTimeUpdate() {
|
||||
|
||||
var currentTicks = self.getCurrentTicks(this);
|
||||
|
@ -1735,11 +1734,12 @@
|
|||
|
||||
var initialVolume = self.getSavedVolume();
|
||||
|
||||
var mediaRenderer = getAudioRenderer();
|
||||
var mediaRenderer = new AudioRenderer({
|
||||
poster: self.getPosterUrl(item)
|
||||
});
|
||||
|
||||
// Set volume first to avoid an audible change
|
||||
mediaRenderer.volume(initialVolume);
|
||||
mediaRenderer.setPoster(self.getPosterUrl(item));
|
||||
mediaRenderer.setCurrentSrc(audioUrl, item, mediaSource);
|
||||
|
||||
Events.on(mediaRenderer, "volumechange.mediaplayerevent", function () {
|
||||
|
|
|
@ -4,27 +4,43 @@
|
|||
|
||||
var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster');
|
||||
|
||||
// The base query options
|
||||
var query = {
|
||||
var data = {};
|
||||
|
||||
function getQuery() {
|
||||
|
||||
var key = getSavedQueryKey();
|
||||
var pageData = data[key];
|
||||
|
||||
if (!pageData) {
|
||||
pageData = data[key] = {
|
||||
query: {
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending",
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,SortName,DateCreated,SyncInfo,ItemCounts",
|
||||
StartIndex: 0,
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb"
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
Limit: LibraryBrowser.getDefaultPageSize()
|
||||
}
|
||||
};
|
||||
|
||||
pageData.query.ParentId = LibraryMenu.getTopParentId();
|
||||
LibraryBrowser.loadSavedQueryValues(key, pageData.query);
|
||||
}
|
||||
return pageData.query;
|
||||
}
|
||||
|
||||
function getSavedQueryKey() {
|
||||
|
||||
return 'musicartists' + (query.ParentId || '');
|
||||
return getWindowUrl();
|
||||
}
|
||||
|
||||
function reloadItems(page) {
|
||||
|
||||
Dashboard.showLoadingMsg();
|
||||
|
||||
var query = getQuery();
|
||||
ApiClient.getArtists(Dashboard.getCurrentUserId(), query).done(function (result) {
|
||||
|
||||
// Scroll back up so they can see the results from the beginning
|
||||
|
@ -101,13 +117,14 @@
|
|||
});
|
||||
|
||||
LibraryBrowser.saveQueryValues(getSavedQueryKey(), query);
|
||||
|
||||
LibraryBrowser.setLastRefreshed(page);
|
||||
Dashboard.hideLoadingMsg();
|
||||
});
|
||||
}
|
||||
|
||||
function updateFilterControls(page) {
|
||||
|
||||
var query = getQuery();
|
||||
$('.chkStandardFilter', page).each(function () {
|
||||
|
||||
var filters = "," + (query.Filters || "");
|
||||
|
@ -126,6 +143,7 @@
|
|||
var filtersLoaded;
|
||||
function reloadFiltersIfNeeded(page) {
|
||||
|
||||
var query = getQuery();
|
||||
if (!filtersLoaded) {
|
||||
|
||||
filtersLoaded = true;
|
||||
|
@ -148,6 +166,7 @@
|
|||
|
||||
$('.chkStandardFilter', this).on('change', function () {
|
||||
|
||||
var query = getQuery();
|
||||
var filterName = this.getAttribute('data-filter');
|
||||
var filters = query.Filters || "";
|
||||
|
||||
|
@ -165,6 +184,7 @@
|
|||
|
||||
$('.alphabetPicker', this).on('alphaselect', function (e, character) {
|
||||
|
||||
var query = getQuery();
|
||||
query.NameStartsWithOrGreater = character;
|
||||
query.StartIndex = 0;
|
||||
|
||||
|
@ -172,6 +192,7 @@
|
|||
|
||||
}).on('alphaclear', function (e) {
|
||||
|
||||
var query = getQuery();
|
||||
query.NameStartsWithOrGreater = '';
|
||||
|
||||
reloadItems(page);
|
||||
|
@ -187,6 +208,7 @@
|
|||
});
|
||||
|
||||
$('#selectPageSize', page).on('change', function () {
|
||||
var query = getQuery();
|
||||
query.Limit = parseInt(this.value);
|
||||
query.StartIndex = 0;
|
||||
reloadItems(page);
|
||||
|
@ -196,22 +218,12 @@
|
|||
|
||||
var page = this;
|
||||
|
||||
query.ParentId = LibraryMenu.getTopParentId();
|
||||
var query = getQuery();
|
||||
|
||||
var limit = LibraryBrowser.getDefaultPageSize(pageSizeKey, 100);
|
||||
|
||||
// If the default page size has changed, the start index will have to be reset
|
||||
if (limit != query.Limit) {
|
||||
query.Limit = limit;
|
||||
query.StartIndex = 0;
|
||||
}
|
||||
|
||||
var viewkey = getSavedQueryKey();
|
||||
|
||||
LibraryBrowser.loadSavedQueryValues(viewkey, query);
|
||||
QueryFilters.onPageShow(page, query);
|
||||
|
||||
LibraryBrowser.getSavedViewSetting(viewkey).done(function (val) {
|
||||
if (LibraryBrowser.needsRefresh(page)) {
|
||||
LibraryBrowser.getSavedViewSetting(getSavedQueryKey()).done(function (val) {
|
||||
|
||||
if (val) {
|
||||
$('#selectView', page).val(val).selectmenu('refresh').trigger('change');
|
||||
|
@ -219,6 +231,7 @@
|
|||
reloadItems(page);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
updateFilterControls(this);
|
||||
});
|
||||
|
|
|
@ -202,7 +202,9 @@
|
|||
button.addClass('hide');
|
||||
}
|
||||
|
||||
function updatePlayerState(state) {
|
||||
var lastUpdateTime = 0;
|
||||
|
||||
function updatePlayerState(event, state) {
|
||||
|
||||
if (state.NowPlayingItem) {
|
||||
showNowPlayingBar();
|
||||
|
@ -211,6 +213,19 @@
|
|||
return;
|
||||
}
|
||||
|
||||
if (event.type == 'positionchange') {
|
||||
// Try to avoid hammering the document with changes
|
||||
var now = new Date().getTime();
|
||||
if ((now - lastUpdateTime) < 700) {
|
||||
|
||||
console.log('skipping UI update');
|
||||
return;
|
||||
}
|
||||
lastUpdateTime = now;
|
||||
}
|
||||
|
||||
console.log(new Date().getTime());
|
||||
|
||||
lastPlayerState = state;
|
||||
|
||||
if (!muteButton) {
|
||||
|
@ -343,7 +358,7 @@
|
|||
nowPlayingTextElement.html(nameHtml);
|
||||
|
||||
var url;
|
||||
var imgHeight = 90;
|
||||
var imgHeight = 80;
|
||||
|
||||
var nowPlayingItem = state.NowPlayingItem;
|
||||
|
||||
|
@ -451,7 +466,7 @@
|
|||
return;
|
||||
}
|
||||
|
||||
updatePlayerState(state);
|
||||
updatePlayerState(e, state);
|
||||
}
|
||||
|
||||
function releaseCurrentPlayer() {
|
||||
|
|
|
@ -375,8 +375,20 @@
|
|||
loadPlaylist($($.mobile.activePage)[0]);
|
||||
}
|
||||
|
||||
var lastUpdateTime = 0;
|
||||
|
||||
function onStateChanged(e, state) {
|
||||
|
||||
if (e.type == 'positionchange') {
|
||||
// Try to avoid hammering the document with changes
|
||||
var now = new Date().getTime();
|
||||
if ((now - lastUpdateTime) < 700) {
|
||||
|
||||
return;
|
||||
}
|
||||
lastUpdateTime = now;
|
||||
}
|
||||
|
||||
updatePlayerState($($.mobile.activePage)[0], state);
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue