1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

rework media versions to be based on original item id

This commit is contained in:
Luke Pulverenti 2014-03-21 23:35:03 -04:00
parent fd0c1ec8ae
commit 7a9d65a367
10 changed files with 95 additions and 104 deletions

View file

@ -2191,20 +2191,6 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
});
};
/**
* Gets a list of all available conrete BaseItem types from the server
*/
self.getItemTypes = function (options) {
var url = self.getUrl("Library/ItemTypes", options);
return self.ajax({
type: "GET",
url: url,
dataType: "json"
});
};
/**
* Constructs a url for a user image
* @param {String} userId
@ -3805,7 +3791,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
* @param {String} userId
* @param {String} itemId
*/
self.reportPlaybackStart = function (userId, itemId, canSeek, queueableMediaTypes) {
self.reportPlaybackStart = function (userId, itemId, mediaVersionId, canSeek, queueableMediaTypes) {
if (!userId) {
throw new Error("null userId");
@ -3824,16 +3810,26 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
var msg = [itemId, canSeek, queueableMediaTypes];
if (mediaVersionId) {
msg.push(mediaVersionId);
}
self.sendWebSocketMessage("PlaybackStart", msg.join('|'));
deferred.resolveWith(null, []);
return deferred.promise();
}
var url = self.getUrl("Users/" + userId + "/PlayingItems/" + itemId, {
var params = {
CanSeek: canSeek,
QueueableMediaTypes: queueableMediaTypes
});
};
if (mediaVersionId) {
params.mediaVersionId = mediaVersionId;
}
var url = self.getUrl("Users/" + userId + "/PlayingItems/" + itemId, params);
return self.ajax({
type: "POST",
@ -3846,7 +3842,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
* @param {String} userId
* @param {String} itemId
*/
self.reportPlaybackProgress = function (userId, itemId, positionTicks, isPaused, isMuted) {
self.reportPlaybackProgress = function (userId, itemId, mediaVersionId, positionTicks, isPaused, isMuted) {
if (!userId) {
throw new Error("null userId");
@ -3860,7 +3856,12 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
var deferred = $.Deferred();
var msgData = itemId + "|" + (positionTicks == null ? "" : positionTicks) + "|" + (isPaused == null ? "" : isPaused) + "|" + (isMuted == null ? "" : isMuted);
var msgData = itemId;
msgData += "|" + (positionTicks == null ? "" : positionTicks);
msgData += "|" + (isPaused == null ? "" : isPaused);
msgData += "|" + (isMuted == null ? "" : isMuted);
msgData += "|" + (mediaVersionId == null ? "" : mediaVersionId);
self.sendWebSocketMessage("PlaybackProgress", msgData);
@ -3877,6 +3878,10 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
params.positionTicks = positionTicks;
}
if (mediaVersionId) {
params.mediaVersionId = mediaVersionId;
}
var url = self.getUrl("Users/" + userId + "/PlayingItems/" + itemId + "/Progress", params);
return self.ajax({
@ -3890,7 +3895,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
* @param {String} userId
* @param {String} itemId
*/
self.reportPlaybackStopped = function (userId, itemId, positionTicks) {
self.reportPlaybackStopped = function (userId, itemId, mediaVersionId, positionTicks) {
if (!userId) {
throw new Error("null userId");
@ -3904,20 +3909,26 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout, wi
var deferred = $.Deferred();
self.sendWebSocketMessage("PlaybackStopped", itemId + "|" + (positionTicks == null ? "" : positionTicks));
var msg = itemId;
msg += "|" + (positionTicks == null ? "" : positionTicks);
msg += "|" + (mediaVersionId == null ? "" : mediaVersionId);
self.sendWebSocketMessage("PlaybackStopped", msg);
deferred.resolveWith(null, []);
return deferred.promise();
}
var params = {
};
var params = {};
if (positionTicks) {
params.positionTicks = positionTicks;
}
if (mediaVersionId) {
params.mediaVersionId = mediaVersionId;
}
var url = self.getUrl("Users/" + userId + "/PlayingItems/" + itemId, params);
return self.ajax({

View file

@ -866,7 +866,6 @@ a.itemTag:hover {
}
.mediaInfoStreamType {
font-size: 16px;
display: block;
color: #fff;
}
@ -874,14 +873,12 @@ a.itemTag:hover {
.mediaInfoAttribute {
color: #fff;
display: inline-block;
width: 110px;
}
.mediaInfoLabel {
color: #aaa;
margin-right: 1em;
display: inline-block;
width: 90px;
}
.posterRibbon {

View file

@ -33,7 +33,7 @@
#videoControls {
z-index: 99999;
padding: 0 20px 10px;
padding: 0 20px 5px;
height: 80px;
position: absolute;
top: auto;

View file

@ -398,7 +398,8 @@
Recursive: true,
Fields: "AudioInfo,SeriesInfo,ParentId,PrimaryImageAspectRatio",
Limit: LibraryBrowser.getDefaultPageSize(),
StartIndex: 0
StartIndex: 0,
CollapseBoxSetItems: false
};
query = $.extend(query, options || {});

View file

@ -214,11 +214,7 @@
renderMediaVersions(page, item);
}
var primaryVersion = (item.MediaVersions || []).filter(function (v) {
return v.IsPrimaryVersion;
})[0];
var chapters = primaryVersion ? (primaryVersion.Chapters || []) : [];
var chapters = item.Chapters || [];
if (!chapters.length) {
$('#scenesCollapsible', page).hide();
@ -350,7 +346,7 @@
tabsHtml += '<label for="radioDetails" class="lblDetailTab">Details</label>';
}
if (item.MediaType == "Audio" || item.MediaType == "Video") {
if (item.MediaVersions && item.MediaVersions.length) {
tabsHtml += '<input type="radio" name="radioDetailTab" class="radioDetailTab" id="radioMediaInfo" value="tabMediaInfo">';
tabsHtml += '<label for="radioMediaInfo" class="lblDetailTab">Media Info</label>';
}
@ -1023,11 +1019,7 @@
function renderScenes(page, item, user, limit) {
var html = '';
var primaryVersion = (item.MediaVersions || []).filter(function (v) {
return v.IsPrimaryVersion;
})[0];
var chapters = primaryVersion ? (primaryVersion.Chapters || []) : [];
var chapters = item.Chapters || [];
for (var i = 0, length = chapters.length; i < length; i++) {

View file

@ -6,7 +6,7 @@
getDefaultPageSize: function () {
var saved = localStorage.getItem('pagesize');
var saved = localStorage.getItem('pagesize_');
if (saved) {
return parseInt(saved);

View file

@ -207,19 +207,29 @@
function getItemCellsHtml(item, headercells) {
return headercells.map(function (cell) {
var html = '';
html += '<td>';
var stream;
var primaryVersion = (item.MediaVersions || []).filter(function(v) {
var primaryVersion = (item.MediaVersions || []).filter(function (v) {
return v.IsPrimaryVersion;
})[0] || {};
var mediaStreams = primaryVersion.MediaStreams || [];
var videoStream = mediaStreams.filter(function (s) {
return s.Type == 'Video';
})[0];
var audioStream = mediaStreams.filter(function (s) {
return s.Type == 'Audio';
})[0];
return headercells.map(function (cell) {
var html = '';
html += '<td>';
switch (cell.type || cell.name) {
case 'Album Artist':
@ -264,52 +274,30 @@
}
case 'Audio':
{
stream = mediaStreams.filter(function (s) {
if (audioStream) {
return s.Type == 'Audio';
})[0];
if (stream) {
var name = (stream.Codec || '').toUpperCase();
html += name == 'DCA' ? (stream.Profile || '').toUpperCase() : name;
var name = (audioStream.Codec || '').toUpperCase();
html += name == 'DCA' ? (audioStream.Profile || '').toUpperCase() : name;
}
break;
}
case 'Video':
{
stream = mediaStreams.filter(function (s) {
return s.Type == 'Video';
})[0];
if (stream) {
html += (stream.Codec || '').toUpperCase();
if (videoStream) {
html += (videoStream.Codec || '').toUpperCase();
}
break;
}
case 'Resolution':
{
stream = mediaStreams.filter(function (s) {
return s.Type == 'Video';
})[0];
if (stream && stream.Width) {
html += stream.Width + "*" + (stream.Height || "-");
if (videoStream && videoStream.Width) {
html += videoStream.Width + "*" + (videoStream.Height || "-");
}
break;
}
case 'Embedded Image':
{
if (mediaStreams.filter(function (s) {
return s.Type == 'Video';
}).length) {
if (videoStream) {
html += '<div class="libraryReportIndicator clearLibraryReportIndicator"><div class="ui-icon-check ui-btn-icon-notext"></div></div>';
}
break;

View file

@ -319,7 +319,7 @@
var currentTicks = self.getCurrentTicks();
var chapters = currentMediaVersion.Chapters || [];
var chapters = currentItem.Chapters || [];
for (var i = 0, length = chapters.length; i < length; i++) {
@ -344,7 +344,7 @@
if (chapter.ImageTag) {
imgUrl = ApiClient.getImageUrl(currentMediaVersion.ItemId, {
imgUrl = ApiClient.getImageUrl(currentItem.Id, {
maxwidth: 200,
tag: chapter.ImageTag,
type: "Chapter",
@ -706,7 +706,8 @@
SubtitleStreamIndex: getInitialSubtitleStreamIndex(mediaStreams, user),
AudioStreamIndex: getInitialAudioStreamIndex(mediaStreams, user),
deviceId: ApiClient.deviceId(),
Static: false
Static: false,
mediaVersionId: mediaVersion.Id
};
var mp4Quality = getVideoQualityOptions(mediaStreams).filter(function (opt) {
@ -733,7 +734,7 @@
var seekParam = isStatic && startPosition ? '#t=' + (startPosition / 10000000) : '';
var mp4VideoUrl = ApiClient.getUrl('Videos/' + mediaVersion.ItemId + '/stream.mp4', $.extend({}, baseParams, {
var mp4VideoUrl = ApiClient.getUrl('Videos/' + item.Id + '/stream.mp4', $.extend({}, baseParams, {
profile: 'baseline',
level: 3,
Static: isStatic,
@ -745,7 +746,7 @@
})) + seekParam;
var webmVideoUrl = ApiClient.getUrl('Videos/' + mediaVersion.ItemId + '/stream.webm', $.extend({}, baseParams, {
var webmVideoUrl = ApiClient.getUrl('Videos/' + item.Id + '/stream.webm', $.extend({}, baseParams, {
VideoCodec: 'vpx',
AudioCodec: 'Vorbis',
@ -755,7 +756,7 @@
})) + seekParam;
var hlsVideoUrl = ApiClient.getUrl('Videos/' + mediaVersion.ItemId + '/stream.m3u8', $.extend({}, baseParams, {
var hlsVideoUrl = ApiClient.getUrl('Videos/' + item.Id + '/stream.m3u8', $.extend({}, baseParams, {
profile: 'baseline',
level: 3,
timeStampOffsetMs: 0,
@ -835,7 +836,7 @@
$('#video-subtitleButton', videoControls).hide();
}
if (mediaVersion.Chapters && mediaVersion.Chapters.length) {
if (item.Chapters && item.Chapters.length) {
$('#video-chaptersButton', videoControls).show();
} else {
$('#video-chaptersButton', videoControls).hide();
@ -882,9 +883,9 @@
videoElement.off("playing.once");
ApiClient.reportPlaybackStart(Dashboard.getCurrentUserId(), mediaVersion.ItemId, true, item.MediaType);
ApiClient.reportPlaybackStart(Dashboard.getCurrentUserId(), item.Id, mediaVersion.Id, true, item.MediaType);
self.startProgressInterval(mediaVersion.ItemId);
self.startProgressInterval(item.Id, mediaVersion.Id);
}).on("pause", function (e) {

View file

@ -54,7 +54,7 @@
var position = Math.floor(10000000 * endTime) + self.startTimeTicksOffset;
ApiClient.reportPlaybackStopped(Dashboard.getCurrentUserId(), currentMediaVersion.ItemId, position);
ApiClient.reportPlaybackStopped(Dashboard.getCurrentUserId(), currentItem.Id, currentMediaVersion.Id, position);
if (currentItem.MediaType == "Video") {
ApiClient.stopActiveEncodings();
@ -72,7 +72,7 @@
self.nextTrack();
};
self.startProgressInterval = function (itemId) {
self.startProgressInterval = function (itemId, mediaVersionId) {
clearProgressInterval();
@ -81,7 +81,7 @@
currentProgressInterval = setInterval(function () {
if (currentMediaElement) {
sendProgressUpdate(itemId);
sendProgressUpdate(itemId, mediaVersionId);
}
}, intervalTime);
@ -156,8 +156,8 @@
$(this).off('play.onceafterseek').on('ended.playbackstopped', self.onPlaybackStopped).on('ended.playnext', self.playNextAfterEnded);
self.startProgressInterval(currentMediaVersion.ItemId);
sendProgressUpdate(currentMediaVersion.ItemId);
self.startProgressInterval(currentItem.Id, currentMediaVersion.Id);
sendProgressUpdate(currentItem.Id, currentMediaVersion.Id);
});
@ -957,7 +957,7 @@
var position = Math.floor(10000000 * endTime) + self.startTimeTicksOffset;
ApiClient.reportPlaybackStopped(Dashboard.getCurrentUserId(), currentMediaVersion.ItemId, position);
ApiClient.reportPlaybackStopped(Dashboard.getCurrentUserId(), currentItem.Id, currentMediaVersion.Id, position);
}
});
@ -984,9 +984,9 @@
return url + '&' + param + "=" + value;
};
function sendProgressUpdate(itemId) {
function sendProgressUpdate(itemId, mediaVersionId) {
ApiClient.reportPlaybackProgress(Dashboard.getCurrentUserId(), itemId, self.getCurrentTicks(), currentMediaElement.paused, currentMediaElement.volume == 0);
ApiClient.reportPlaybackProgress(Dashboard.getCurrentUserId(), itemId, mediaVersionId, self.getCurrentTicks(), currentMediaElement.paused, currentMediaElement.volume == 0);
};
function clearProgressInterval() {
@ -1029,18 +1029,19 @@
var baseParams = {
audioChannels: 2,
audioBitrate: 128000,
StartTimeTicks: startPositionTicks
StartTimeTicks: startPositionTicks,
mediaVersionId: mediaVersion.Id
};
var mp3Url = ApiClient.getUrl('Audio/' + mediaVersion.ItemId + '/stream.mp3', $.extend({}, baseParams, {
var mp3Url = ApiClient.getUrl('Audio/' + item.Id + '/stream.mp3', $.extend({}, baseParams, {
audioCodec: 'mp3'
}));
var aacUrl = ApiClient.getUrl('Audio/' + mediaVersion.ItemId + '/stream.aac', $.extend({}, baseParams, {
var aacUrl = ApiClient.getUrl('Audio/' + item.Id + '/stream.aac', $.extend({}, baseParams, {
audioCodec: 'aac'
}));
var webmUrl = ApiClient.getUrl('Audio/' + mediaVersion.ItemId + '/stream.webm', $.extend({}, baseParams, {
var webmUrl = ApiClient.getUrl('Audio/' + item.Id + '/stream.webm', $.extend({}, baseParams, {
audioCodec: 'Vorbis'
}));
@ -1131,9 +1132,9 @@
audioElement.off("play.once");
ApiClient.reportPlaybackStart(Dashboard.getCurrentUserId(), mediaVersion.ItemId, true, item.MediaType);
ApiClient.reportPlaybackStart(Dashboard.getCurrentUserId(), item.Id, mediaVersion.Id, true, item.MediaType);
self.startProgressInterval(mediaVersion.ItemId);
self.startProgressInterval(item.Id, mediaVersion.Id);
}).on("pause", function () {
@ -1200,7 +1201,7 @@
return (trunc(titles[0], 30) + "<br />" + trunc(titles[1], 30)).replace("---", "&nbsp;");
};
var getItemFields = "MediaVersions";
var getItemFields = "MediaVersions,Chapters";
}
window.MediaPlayer = new mediaPlayer();

View file

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="MediaBrowser.ApiClient.Javascript" version="3.0.245" targetFramework="net45" />
<package id="MediaBrowser.ApiClient.Javascript" version="3.0.246" targetFramework="net45" />
</packages>