1
0
Fork 0
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:
Luke Pulverenti 2014-04-22 13:25:54 -04:00
parent 5ae3f86d2e
commit d875667650
9 changed files with 193 additions and 129 deletions

View file

@ -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>

View file

@ -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">

View file

@ -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">

View file

@ -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">

View file

@ -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;
};
}

View file

@ -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();
}

View file

@ -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;
}
}

View file

@ -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;
}

View file

@ -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) {