mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
update dlna profiles
This commit is contained in:
parent
5ae3f86d2e
commit
d875667650
9 changed files with 193 additions and 129 deletions
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>DLNA</title>
|
||||
<title>${TitleDlna}</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="dlnaProfilePage" data-role="page" class="page type-interior adminPage dlnaPage">
|
||||
|
@ -69,11 +69,12 @@
|
|||
<div data-role="collapsible">
|
||||
<h2>${HeaderDisplaySettings}</h2>
|
||||
<div>
|
||||
<br />
|
||||
<ul data-role="listview" class="ulForm">
|
||||
<li>
|
||||
<label for="chkRequiresPlainFolders">Display all folders as plain storage folders</label>
|
||||
<input type="checkbox" id="chkRequiresPlainFolders" data-mini="true" />
|
||||
<div class="fieldDescription">If enabled, all folders are represented in DIDL as "object.container.storageFolder" instead of a more specific type, such as "object.container.person.musicArtist".</div>
|
||||
<div class="fieldDescription">If enabled, all folders are represented in DIDL as "object.container.storageFolder" instead of a more specific type, such as "object.container.musicArtist".</div>
|
||||
</li>
|
||||
<li>
|
||||
<label for="chkRequiresPlainVideoItems">Display all videos as plain video items</label>
|
||||
|
@ -87,6 +88,7 @@
|
|||
<div data-role="collapsible">
|
||||
<h2>${HeaderImageSettings}</h2>
|
||||
<div>
|
||||
<br />
|
||||
<ul data-role="listview" class="ulForm">
|
||||
<li>
|
||||
<label for="chkEnableAlbumArtInDidl">Embed album art in Didl</label>
|
||||
|
@ -125,6 +127,7 @@
|
|||
<div data-role="collapsible">
|
||||
<h2>${HeaderPlaybackSettings}</h2>
|
||||
<div>
|
||||
<br />
|
||||
<ul data-role="listview" class="ulForm">
|
||||
<li>
|
||||
<label for="txtMaxAllowedBitrate">Max bitrate:</label>
|
||||
|
@ -139,6 +142,29 @@
|
|||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div data-role="collapsible">
|
||||
<h2>${HeaderServerSettings}</h2>
|
||||
<div>
|
||||
<p>These values control how Media Browser will present itself to the device.</p>
|
||||
<ul data-role="listview" class="ulForm">
|
||||
<li>
|
||||
<label for="txtXDlnaCap">X-Dlna cap:</label>
|
||||
<input type="text" id="txtXDlnaCap" data-mini="true" />
|
||||
<div class="fieldDescription">Determines the content of the X_DLNACAP element in the urn:schemas-dlna-org:device-1-0 namespace.</div>
|
||||
</li>
|
||||
<li>
|
||||
<label for="txtXDlnaDoc">X-Dlna doc:</label>
|
||||
<input type="text" id="txtXDlnaDoc" data-mini="true" />
|
||||
<div class="fieldDescription">Determines the content of the X_DLNADOC element in the urn:schemas-dlna-org:device-1-0 namespace.</div>
|
||||
</li>
|
||||
<li>
|
||||
<label for="txtSonyAggregationFlags">Sony aggregation flags:</label>
|
||||
<input type="text" id="txtSonyAggregationFlags" data-mini="true" />
|
||||
<div class="fieldDescription">Determines the content of the aggregationFlags element in the urn:schemas-sonycom:av namespace.</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="tabContent tabIdentification">
|
||||
|
@ -493,10 +519,10 @@
|
|||
|
||||
<p>
|
||||
<button type="submit" data-theme="b" data-icon="check" data-mini="true">
|
||||
Ok
|
||||
${ButtonOk}
|
||||
</button>
|
||||
<button type="button" data-icon="delete" onclick="$(this).parents('.popup').popup('close');" data-mini="true">
|
||||
Cancel
|
||||
${ButtonCancel}
|
||||
</button>
|
||||
</p>
|
||||
</form>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>DLNA</title>
|
||||
<title>${TitleDlna}</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="dlnaProfilesPage" data-role="page" class="page type-interior adminPage dlnaPage">
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>DLNA</title>
|
||||
<title>${TitleDlna}</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="dlnaServerSettingsPage" data-role="page" class="page type-interior adminPage dlnaPage">
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>DLNA</title>
|
||||
<title>${TitleDlna}</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="dlnaSettingsPage" data-role="page" class="page type-interior adminPage dlnaPage">
|
||||
|
|
|
@ -213,7 +213,7 @@
|
|||
Dashboard.alert({
|
||||
|
||||
title: "Error Launching Chromecast",
|
||||
message: "There was an error launching chromecast. Please ensure your device is connected to your wifi network."
|
||||
message: "There was an error launching chromecast. Please ensure your device is connected to your wireless network."
|
||||
|
||||
});
|
||||
|
||||
|
@ -1377,15 +1377,55 @@
|
|||
|
||||
self.getPlayerStateInternal = function () {
|
||||
|
||||
return {
|
||||
itemName: "Chromecast",
|
||||
canSeek: self.positionTicks < self.runtimeTicks,
|
||||
positionTicks: self.positionTicks,
|
||||
runtimeTicks: self.runtimeTicks,
|
||||
volumeLevel: castPlayer.currentVolume * 100,
|
||||
isPaused: self.isPaused,
|
||||
isMuted: self.isMuted
|
||||
var state = {
|
||||
PlayState: {
|
||||
|
||||
CanSeek: self.positionTicks < self.runtimeTicks,
|
||||
PositionTicks: self.positionTicks,
|
||||
RunTimeTicks: self.runtimeTicks,
|
||||
VolumeLevel: castPlayer.currentVolume * 100,
|
||||
IsPaused: self.isPaused,
|
||||
IsMuted: self.isMuted
|
||||
|
||||
// TODO: Implement
|
||||
// AudioStreamIndex: null,
|
||||
// SubtitleStreamIndex: null,
|
||||
// PlayMethod: 'DirectStream' or 'Transcode'
|
||||
}
|
||||
};
|
||||
|
||||
// TODO: Implement
|
||||
var isPlaying = false;
|
||||
|
||||
if (isPlaying) {
|
||||
|
||||
//state.PlayState.MediaSourceId = 'xxx';
|
||||
|
||||
state.NowPlayingItem = {
|
||||
|
||||
Name: 'Chromecast'
|
||||
};
|
||||
|
||||
var nowPlayingItem = state.NowPlayingItem;
|
||||
|
||||
// TODO: Fill in these properties using chromecast mediainfo and/or custom data
|
||||
//nowPlayingItem.Id = item.Id;
|
||||
//nowPlayingItem.MediaType = item.MediaType;
|
||||
//nowPlayingItem.Type = item.Type;
|
||||
//nowPlayingItem.Name = item.Name;
|
||||
|
||||
//nowPlayingItem.IndexNumber = item.IndexNumber;
|
||||
//nowPlayingItem.IndexNumberEnd = item.IndexNumberEnd;
|
||||
//nowPlayingItem.ParentIndexNumber = item.ParentIndexNumber;
|
||||
//nowPlayingItem.ProductionYear = item.ProductionYear;
|
||||
//nowPlayingItem.PremiereDate = item.PremiereDate;
|
||||
//nowPlayingItem.SeriesName = item.SeriesName;
|
||||
//nowPlayingItem.Album = item.Album;
|
||||
//nowPlayingItem.Artists = item.Artists;
|
||||
|
||||
}
|
||||
|
||||
return state;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -67,6 +67,10 @@
|
|||
$('#chkRequiresPlainFolders', page).checked(profile.RequiresPlainFolders).checkboxradio('refresh');
|
||||
$('#chkRequiresPlainVideoItems', page).checked(profile.RequiresPlainVideoItems).checkboxradio('refresh');
|
||||
|
||||
$('#txtXDlnaCap', page).val(profile.XDlnaCap || '');
|
||||
$('#txtXDlnaDoc', page).val(profile.XDlnaDoc || '');
|
||||
$('#txtSonyAggregationFlags', page).val(profile.SonyAggregationFlags || '');
|
||||
|
||||
profile.DirectPlayProfiles = (profile.DirectPlayProfiles || []);
|
||||
profile.TranscodingProfiles = (profile.TranscodingProfiles || []);
|
||||
profile.ContainerProfiles = (profile.ContainerProfiles || []);
|
||||
|
@ -674,6 +678,10 @@
|
|||
profile.IgnoreTranscodeByteRangeRequests = $('#chkIgnoreTranscodeByteRangeRequests', page).checked();
|
||||
profile.MaxBitrate = $('#txtMaxAllowedBitrate', page).val();
|
||||
|
||||
profile.XDlnaCap = $('#txtXDlnaCap', page).val();
|
||||
profile.XDlnaDoc = $('#txtXDlnaDoc', page).val();
|
||||
profile.SonyAggregationFlags = $('#txtSonyAggregationFlags', page).val();
|
||||
|
||||
profile.UserId = $('#selectUser', page).val();
|
||||
}
|
||||
|
||||
|
|
|
@ -537,29 +537,30 @@
|
|||
|
||||
self.getNowPlayingNameHtml = function (playerState) {
|
||||
|
||||
var topText = playerState.itemName;
|
||||
var nowPlayingItem = playerState.NowPlayingItem;
|
||||
var topText = nowPlayingItem.Name;
|
||||
|
||||
if (playerState.mediaType == 'Video') {
|
||||
if (playerState.indexNumber != null) {
|
||||
topText = playerState.indexNumber + " - " + topText;
|
||||
if (nowPlayingItem.MediaType == 'Video') {
|
||||
if (nowPlayingItem.IndexNumber != null) {
|
||||
topText = nowPlayingItem.IndexNumber + " - " + topText;
|
||||
}
|
||||
if (playerState.parentIndexNumber != null) {
|
||||
topText = playerState.parentIndexNumber + "." + topText;
|
||||
if (nowPlayingItem.ParentIndexNumber != null) {
|
||||
topText = nowPlayingItem.ParentIndexNumber + "." + topText;
|
||||
}
|
||||
}
|
||||
|
||||
var bottomText = '';
|
||||
|
||||
if (playerState.artists && playerState.artists.length) {
|
||||
if (nowPlayingItem.Artists && nowPlayingItem.Artists.length) {
|
||||
bottomText = topText;
|
||||
topText = playerState.artists[0];
|
||||
topText = nowPlayingItem.Artists[0];
|
||||
}
|
||||
else if (playerState.seriesName || playerState.album) {
|
||||
else if (nowPlayingItem.SeriesName || nowPlayingItem.Album) {
|
||||
bottomText = topText;
|
||||
topText = playerState.seriesName || playerState.album;
|
||||
topText = nowPlayingItem.SeriesName || nowPlayingItem.Album;
|
||||
}
|
||||
else if (playerState.productionYear) {
|
||||
bottomText = playerState.productionYear;
|
||||
else if (nowPlayingItem.ProductionYear) {
|
||||
bottomText = nowPlayingItem.ProductionYear;
|
||||
}
|
||||
|
||||
return bottomText ? topText + '<br/>' + bottomText : topText;
|
||||
|
@ -950,67 +951,96 @@
|
|||
|
||||
self.getPlayerStateInternal = function (playerElement, item, mediaSource) {
|
||||
|
||||
var state = {};
|
||||
var state = {
|
||||
PlayState: {}
|
||||
};
|
||||
|
||||
if (playerElement) {
|
||||
|
||||
state.volumeLevel = playerElement.volume * 100;
|
||||
state.isMuted = playerElement.volume == 0;
|
||||
state.isPaused = playerElement.paused;
|
||||
state.positionTicks = self.getCurrentTicks(playerElement);
|
||||
state.PlayState.VolumeLevel = playerElement.volume * 100;
|
||||
state.PlayState.IsMuted = playerElement.volume == 0;
|
||||
state.PlayState.IsPaused = playerElement.paused;
|
||||
state.PlayState.PositionTicks = self.getCurrentTicks(playerElement);
|
||||
|
||||
var currentSrc = playerElement.currentSrc;
|
||||
|
||||
if (currentSrc) {
|
||||
|
||||
var audioStreamIndex = getParameterByName('AudioStreamIndex', currentSrc);
|
||||
|
||||
if (audioStreamIndex) {
|
||||
state.PlayState.AudioStreamIndex = parseInt(audioStreamIndex);
|
||||
}
|
||||
var subtitleStreamIndex = getParameterByName('SubtitleStreamIndex', currentSrc);
|
||||
|
||||
if (subtitleStreamIndex) {
|
||||
state.PlayState.SubtitleStreamIndex = parseInt(subtitleStreamIndex);
|
||||
}
|
||||
|
||||
state.PlayState.PlayMethod = getParameterByName('static', currentSrc) == 'true' ?
|
||||
'DirectStream' :
|
||||
'Transcode';
|
||||
}
|
||||
}
|
||||
|
||||
if (mediaSource) {
|
||||
|
||||
state.mediaSourceId = mediaSource.Id;
|
||||
state.runtimeTicks = mediaSource.RunTimeTicks;
|
||||
state.PlayState.MediaSourceId = mediaSource.Id;
|
||||
|
||||
state.canSeek = mediaSource.RunTimeTicks && mediaSource.RunTimeTicks > 0;
|
||||
state.NowPlayingItem = {
|
||||
RunTimeTicks: mediaSource.RunTimeTicks
|
||||
};
|
||||
|
||||
state.PlayState.CanSeek = mediaSource.RunTimeTicks && mediaSource.RunTimeTicks > 0;
|
||||
}
|
||||
|
||||
if (item) {
|
||||
|
||||
state.itemId = item.Id;
|
||||
state.mediaType = item.MediaType;
|
||||
state.itemType = item.Type;
|
||||
state.indexNumber = item.IndexNumber;
|
||||
state.indexNumberEnd = item.IndexNumberEnd;
|
||||
state.parentIndexNumber = item.ParentIndexNumber;
|
||||
state.productionYear = item.ProductionYear;
|
||||
state.premiereDate = item.PremiereDate;
|
||||
state.seriesName = item.SeriesName;
|
||||
state.album = item.Album;
|
||||
state.itemName = item.Name;
|
||||
state.artists = item.Artists;
|
||||
state.NowPlayingItem = state.NowPlayingItem || {};
|
||||
var nowPlayingItem = state.NowPlayingItem;
|
||||
|
||||
nowPlayingItem.Id = item.Id;
|
||||
nowPlayingItem.MediaType = item.MediaType;
|
||||
nowPlayingItem.Type = item.Type;
|
||||
nowPlayingItem.Name = item.Name;
|
||||
|
||||
nowPlayingItem.IndexNumber = item.IndexNumber;
|
||||
nowPlayingItem.IndexNumberEnd = item.IndexNumberEnd;
|
||||
nowPlayingItem.ParentIndexNumber = item.ParentIndexNumber;
|
||||
nowPlayingItem.ProductionYear = item.ProductionYear;
|
||||
nowPlayingItem.PremiereDate = item.PremiereDate;
|
||||
nowPlayingItem.SeriesName = item.SeriesName;
|
||||
nowPlayingItem.Album = item.Album;
|
||||
nowPlayingItem.Artists = item.Artists;
|
||||
|
||||
var imageTags = item.ImageTags || {};
|
||||
|
||||
if (imageTags.Primary) {
|
||||
|
||||
state.primaryImageItemId = item.Id;
|
||||
state.primaryImageTag = imageTags.Primary;
|
||||
nowPlayingItem.PrimaryImageItemId = item.Id;
|
||||
nowPlayingItem.PrimaryImageTag = imageTags.Primary;
|
||||
}
|
||||
else if (item.AlbumPrimaryImageTag) {
|
||||
|
||||
state.primaryImageItemId = item.AlbumId;
|
||||
state.primaryImageTag = item.AlbumPrimaryImageTag;
|
||||
nowPlayingItem.PrimaryImageItemId = item.AlbumId;
|
||||
nowPlayingItem.PrimaryImageTag = item.AlbumPrimaryImageTag;
|
||||
}
|
||||
else if (item.SeriesPrimaryImageTag) {
|
||||
|
||||
state.primaryImageItemId = item.SeriesId;
|
||||
state.primaryImageTag = item.SeriesPrimaryImageTag;
|
||||
nowPlayingItem.PrimaryImageItemId = item.SeriesId;
|
||||
nowPlayingItem.PrimaryImageTag = item.SeriesPrimaryImageTag;
|
||||
}
|
||||
|
||||
if (item.BackdropImageTags && item.BackdropImageTags.length) {
|
||||
|
||||
state.backdropItemId = item.Id;
|
||||
state.backdropImageTag = item.BackdropImageTags[0];
|
||||
nowPlayingItem.BackdropItemId = item.Id;
|
||||
nowPlayingItem.BackdropImageTag = item.BackdropImageTags[0];
|
||||
}
|
||||
|
||||
if (imageTags.Thumb) {
|
||||
|
||||
state.thumbItemId = item.Id;
|
||||
state.thumbImageTag = imageTags.Thumb;
|
||||
nowPlayingItem.ThumbItemId = item.Id;
|
||||
nowPlayingItem.ThumbImageTag = imageTags.Thumb;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -131,7 +131,8 @@
|
|||
if (currentPlayer && lastPlayerState) {
|
||||
|
||||
var newPercent = parseFloat(this.value);
|
||||
var newPositionTicks = (newPercent / 100) * lastPlayerState.runtimeTicks;
|
||||
var newPositionTicks = (newPercent / 100) * lastPlayerState.NowPlayingItem.RunTimeTicks;
|
||||
|
||||
currentPlayer.seek(Math.floor(newPositionTicks));
|
||||
}
|
||||
});
|
||||
|
@ -162,7 +163,7 @@
|
|||
|
||||
function updatePlayerState(state) {
|
||||
|
||||
if (state.itemName) {
|
||||
if (state.NowPlayingItem) {
|
||||
showNowPlayingBar();
|
||||
} else {
|
||||
hideNowPlayingBar();
|
||||
|
@ -197,7 +198,9 @@
|
|||
unmuteButton.prop('disabled', '');
|
||||
}
|
||||
|
||||
if (state.isMuted) {
|
||||
var playState = state.PlayState || {};
|
||||
|
||||
if (playState.IsMuted) {
|
||||
|
||||
hideButton(muteButton);
|
||||
showButton(unmuteButton);
|
||||
|
@ -208,7 +211,7 @@
|
|||
hideButton(unmuteButton);
|
||||
}
|
||||
|
||||
if (state.isPaused) {
|
||||
if (playState.IsPaused) {
|
||||
|
||||
hideButton(pauseButton);
|
||||
showButton(unpauseButton);
|
||||
|
@ -220,16 +223,17 @@
|
|||
}
|
||||
|
||||
if (!isVolumeSliderActive) {
|
||||
volumeSlider.val(state.volumeLevel || 0);
|
||||
volumeSlider.val(playState.VolumeLevel || 0);
|
||||
}
|
||||
|
||||
volumeSlider.slider('refresh');
|
||||
|
||||
var nowPlayingItem = state.NowPlayingItem || {};
|
||||
if (!isPositionSliderActive) {
|
||||
|
||||
if (state.canSeek) {
|
||||
if (playState.CanSeek) {
|
||||
|
||||
var pct = state.positionTicks / state.runtimeTicks;
|
||||
var pct = playState.PositionTicks / nowPlayingItem.RunTimeTicks;
|
||||
pct *= 100;
|
||||
|
||||
positionSlider.val(pct).slider("enable");
|
||||
|
@ -242,11 +246,11 @@
|
|||
positionSlider.slider('refresh');
|
||||
}
|
||||
|
||||
var timeText = Dashboard.getDisplayTime(state.positionTicks);
|
||||
var timeText = Dashboard.getDisplayTime(playState.PositionTicks);
|
||||
|
||||
if (state.runtimeTicks) {
|
||||
if (nowPlayingItem.RunTimeTicks) {
|
||||
|
||||
timeText += " / " + Dashboard.getDisplayTime(state.runtimeTicks);
|
||||
timeText += " / " + Dashboard.getDisplayTime(nowPlayingItem.RunTimeTicks);
|
||||
|
||||
}
|
||||
|
||||
|
@ -270,36 +274,38 @@
|
|||
|
||||
var url;
|
||||
|
||||
if (state.primaryImageTag) {
|
||||
var nowPlayingItem = state.NowPlayingItem;
|
||||
|
||||
url = ApiClient.getImageUrl(state.primaryImageItemId, {
|
||||
if (nowPlayingItem.PrimaryImageTag) {
|
||||
|
||||
url = ApiClient.getImageUrl(nowPlayingItem.PrimaryImageItemId, {
|
||||
type: "Primary",
|
||||
height: 80,
|
||||
tag: state.primaryImageTag
|
||||
tag: nowPlayingItem.PrimaryImageTag
|
||||
});
|
||||
}
|
||||
else if (state.backdropImageTag) {
|
||||
else if (nowPlayingItem.BackdropImageTag) {
|
||||
|
||||
url = ApiClient.getImageUrl(state.backdropItemId, {
|
||||
url = ApiClient.getImageUrl(nowPlayingItem.BackdropItemId, {
|
||||
type: "Backdrop",
|
||||
height: 80,
|
||||
tag: state.backdropImageTag,
|
||||
tag: nowPlayingItem.BackdropImageTag,
|
||||
index: 0
|
||||
});
|
||||
|
||||
} else if (state.thumbImageTag) {
|
||||
} else if (nowPlayingItem.ThumbImageTag) {
|
||||
|
||||
url = ApiClient.getImageUrl(state.thumbImageItemId, {
|
||||
url = ApiClient.getImageUrl(nowPlayingItem.ThumbImageItemId, {
|
||||
type: "Thumb",
|
||||
height: 80,
|
||||
tag: state.thumbImageTag
|
||||
tag: nowPlayingItem.ThumbImageTag
|
||||
});
|
||||
}
|
||||
|
||||
else if (state.itemType == "TvChannel" || state.itemType == "Recording") {
|
||||
else if (nowPlayingItem.Type == "TvChannel" || nowPlayingItem.Type == "Recording") {
|
||||
url = "css/images/items/detail/tv.png";
|
||||
}
|
||||
else if (state.mediaType == "Audio") {
|
||||
else if (nowPlayingItem.MediaType == "Audio") {
|
||||
url = "css/images/items/detail/audio.png";
|
||||
}
|
||||
else {
|
||||
|
@ -355,7 +361,7 @@
|
|||
//console.log('nowplaying event: ' + e.type);
|
||||
var player = this;
|
||||
|
||||
if (player.isDefaultPlayer && state.mediaType == 'Video') {
|
||||
if (player.isDefaultPlayer && state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -103,7 +103,7 @@
|
|||
};
|
||||
|
||||
self.unMute = function () {
|
||||
sendCommand('Unmnute');
|
||||
sendCommand('Unmute');
|
||||
};
|
||||
|
||||
self.toggleMute = function () {
|
||||
|
@ -238,53 +238,7 @@
|
|||
|
||||
function getPlayerState(session) {
|
||||
|
||||
var state = {};
|
||||
|
||||
var playerState = session.PlayState;
|
||||
|
||||
if (playerState) {
|
||||
|
||||
state.isMuted = playerState.IsMuted;
|
||||
state.isPaused = playerState.IsPaused;
|
||||
state.canSeek = playerState.CanSeek;
|
||||
state.positionTicks = playerState.PositionTicks || 0;
|
||||
|
||||
state.mediaSource = playerState.MediaSourceId;
|
||||
state.volumeLevel = playerState.VolumeLevel;
|
||||
state.audioStreamIndex = playerState.AudioStreamIndex;
|
||||
state.subtitleStreamIndex = playerState.SubtitleStreamIndex;
|
||||
}
|
||||
|
||||
var item = session.NowPlayingItem;
|
||||
|
||||
if (item) {
|
||||
|
||||
state.itemId = item.Id;
|
||||
state.mediaType = item.MediaType;
|
||||
state.itemType = item.Type;
|
||||
state.indexNumber = item.IndexNumber;
|
||||
state.indexNumberEnd = item.IndexNumberEnd;
|
||||
state.parentIndexNumber = item.ParentIndexNumber;
|
||||
state.productionYear = item.ProductionYear;
|
||||
state.premiereDate = item.PremiereDate;
|
||||
state.seriesName = item.SeriesName;
|
||||
state.album = item.Album;
|
||||
state.itemName = item.Name;
|
||||
state.artists = item.Artists;
|
||||
|
||||
state.primaryImageItemId = item.PrimaryImageItemId;
|
||||
state.primaryImageTag = item.PrimaryImageTag;
|
||||
|
||||
state.backdropItemId = item.BackdropItemId;
|
||||
state.backdropImageTag = item.BackdropImageTag;
|
||||
|
||||
state.thumbItemId = item.ThumbItemId;
|
||||
state.thumbImageTag = item.ThumbImageTag;
|
||||
|
||||
state.runtimeTicks = item.RunTimeTicks;
|
||||
}
|
||||
|
||||
return state;
|
||||
return session;
|
||||
}
|
||||
|
||||
function firePlaybackEvent(name, session) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue