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

update client sync

This commit is contained in:
Luke Pulverenti 2015-09-15 14:09:44 -04:00
parent 4ed9e6d637
commit 39d4daa2fb
10 changed files with 78 additions and 55 deletions

View file

@ -1,7 +1,9 @@
(function () { (function () {
function getLocalMediaSource(serverId, itemId) { function getLocalMediaSource(serverId, itemId) {
return null; var deferred = DeferredBuilder.Deferred();
deferred.resolveWith(null, [null]);
return deferred.promise();
} }
function saveOfflineUser(user) { function saveOfflineUser(user) {

View file

@ -25,14 +25,14 @@
"web-component-tester": "*", "web-component-tester": "*",
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
}, },
"homepage": "https://github.com/PolymerElements/iron-meta", "homepage": "https://github.com/polymerelements/iron-meta",
"_release": "1.0.3", "_release": "1.0.3",
"_resolution": { "_resolution": {
"type": "version", "type": "version",
"tag": "v1.0.3", "tag": "v1.0.3",
"commit": "91529259262b0d8f33fed44bc3fd47aedf35cb04" "commit": "91529259262b0d8f33fed44bc3fd47aedf35cb04"
}, },
"_source": "git://github.com/PolymerElements/iron-meta.git", "_source": "git://github.com/polymerelements/iron-meta.git",
"_target": "^1.0.0", "_target": "^1.0.0",
"_originalSource": "PolymerElements/iron-meta" "_originalSource": "polymerelements/iron-meta"
} }

View file

@ -42,7 +42,7 @@
"tag": "v1.0.3", "tag": "v1.0.3",
"commit": "90b54de14264c19693601b9fc16af6b68a9d48e4" "commit": "90b54de14264c19693601b9fc16af6b68a9d48e4"
}, },
"_source": "git://github.com/polymerelements/paper-behaviors.git", "_source": "git://github.com/PolymerElements/paper-behaviors.git",
"_target": "^1.0.0", "_target": "^1.0.0",
"_originalSource": "polymerelements/paper-behaviors" "_originalSource": "PolymerElements/paper-behaviors"
} }

View file

@ -90,7 +90,7 @@
} }
}; };
function getPlaybackStartInfoForVideoActivity(videoUrl, mediaSource, item) { function getPlaybackStartInfoForVideoActivity(streamInfo, mediaSource, item) {
var playbackStartInfo = { var playbackStartInfo = {
QueueableMediaTypes: item.MediaType, QueueableMediaTypes: item.MediaType,
@ -103,20 +103,21 @@
playbackStartInfo.NowPlayingItem.RunTimeTicks = mediaSource.RunTimeTicks; playbackStartInfo.NowPlayingItem.RunTimeTicks = mediaSource.RunTimeTicks;
} }
var videoUrl = streamInfo.url;
var audioStreamIndex = getParameterByName('AudioStreamIndex', videoUrl); var audioStreamIndex = getParameterByName('AudioStreamIndex', videoUrl);
if (audioStreamIndex) { if (audioStreamIndex) {
playbackStartInfo.AudioStreamIndex = parseInt(audioStreamIndex); playbackStartInfo.AudioStreamIndex = parseInt(audioStreamIndex);
} }
if (self.currentSubtitleStreamIndex != null) {
playbackStartInfo.SubtitleStreamIndex = self.currentSubtitleStreamIndex; // TODO: This should be passed in rather than going out to get it
if (MediaPlayer.currentSubtitleStreamIndex != null) {
playbackStartInfo.SubtitleStreamIndex = MediaPlayer.currentSubtitleStreamIndex;
} }
playbackStartInfo.PlayMethod = getParameterByName('static', videoUrl) == 'true' ? playbackStartInfo.PlayMethod = streamInfo.playMethod;
'DirectStream' :
'Transcode';
playbackStartInfo.LiveStreamId = getParameterByName('LiveStreamId', videoUrl); playbackStartInfo.LiveStreamId = mediaSource.LiveStreamId;
playbackStartInfo.PlaySessionId = getParameterByName('PlaySessionId', videoUrl); playbackStartInfo.PlaySessionId = getParameterByName('PlaySessionId', videoUrl);
// Seeing some deserialization errors around this property // Seeing some deserialization errors around this property
@ -127,13 +128,14 @@
return playbackStartInfo; return playbackStartInfo;
} }
self.setCurrentSrc = function (val, item, mediaSource, tracks) { self.setCurrentSrc = function (streamInfo, item, mediaSource, tracks) {
if (!val) { if (!streamInfo) {
self.destroy(); self.destroy();
return; return;
} }
var val = streamInfo.url;
var tIndex = val.indexOf('#t='); var tIndex = val.indexOf('#t=');
var startPosMs = 0; var startPosMs = 0;
@ -148,7 +150,7 @@
AndroidVlcPlayer.playAudioVlc(val, JSON.stringify(item), JSON.stringify(mediaSource), options.poster); AndroidVlcPlayer.playAudioVlc(val, JSON.stringify(item), JSON.stringify(mediaSource), options.poster);
} else { } else {
var playbackStartInfo = getPlaybackStartInfoForVideoActivity(val, mediaSource, item); var playbackStartInfo = getPlaybackStartInfoForVideoActivity(streamInfo, mediaSource, item);
var serverUrl = ApiClient.serverAddress(); var serverUrl = ApiClient.serverAddress();

View file

@ -2,16 +2,21 @@
function getLocalMediaSource(serverId, itemId) { function getLocalMediaSource(serverId, itemId) {
var deferred = DeferredBuilder.Deferred();
// android // android
if (window.ApiClientBridge) { if (window.ApiClientBridge) {
var json = ApiClientBridge.getLocalMediaSource(serverId, itemId); var json = ApiClientBridge.getLocalMediaSource(serverId, itemId);
if (json) { if (json) {
return JSON.parse(json); deferred.resolveWith(null, [JSON.parse(json)]);
} }
else {
deferred.resolveWith(null, [null]);
}
return deferred.promise();
} }
var deferred = DeferredBuilder.Deferred();
getLocalItem(itemId, serverId).done(function (localItem) { getLocalItem(itemId, serverId).done(function (localItem) {
if (localItem && localItem.MediaSources.length) { if (localItem && localItem.MediaSources.length) {

View file

@ -331,7 +331,7 @@
}; };
var currentSrc; var currentSrc;
self.setCurrentSrc = function (val, item, mediaSource, tracks) { self.setCurrentSrc = function (streamInfo, item, mediaSource, tracks) {
var elem = mediaElement; var elem = mediaElement;
@ -340,7 +340,7 @@
return; return;
} }
if (!val) { if (!streamInfo) {
currentSrc = null; currentSrc = null;
elem.src = null; elem.src = null;
elem.src = ""; elem.src = "";
@ -354,6 +354,7 @@
return; return;
} }
var val = streamInfo.url;
requiresSettingStartTimeOnStart = false; requiresSettingStartTimeOnStart = false;
var startTime = getStartTime(val); var startTime = getStartTime(val);
var playNow = false; var playNow = false;

View file

@ -755,8 +755,7 @@
var serverInfo = ApiClient.serverInfo(); var serverInfo = ApiClient.serverInfo();
if (serverInfo.Id) { if (serverInfo.Id) {
var localMediaSource = window.LocalAssetManager.getLocalMediaSource(serverInfo.Id, itemId); LocalAssetManager.getLocalMediaSource(serverInfo.Id, itemId).done(function (localMediaSource) {
// Use the local media source if a specific one wasn't requested, or the smae one was requested // Use the local media source if a specific one wasn't requested, or the smae one was requested
if (localMediaSource && (!mediaSource || mediaSource.Id == localMediaSource.Id)) { if (localMediaSource && (!mediaSource || mediaSource.Id == localMediaSource.Id)) {
@ -765,16 +764,24 @@
deferred.resolveWith(null, [playbackInfo]); deferred.resolveWith(null, [playbackInfo]);
return; return;
} }
getPlaybackInfoWithoutLocalMediaSource(itemId, deviceProfile, startPosition, mediaSource, audioStreamIndex, subtitleStreamIndex, liveStreamId, deferred);
});
return;
} }
getPlaybackInfoWithoutLocalMediaSource(itemId, deviceProfile, startPosition, mediaSource, audioStreamIndex, subtitleStreamIndex, liveStreamId, deferred);
});
return deferred.promise();
}
function getPlaybackInfoWithoutLocalMediaSource(itemId, deviceProfile, startPosition, mediaSource, audioStreamIndex, subtitleStreamIndex, liveStreamId, deferred) {
self.getPlaybackInfoInternal(itemId, deviceProfile, startPosition, mediaSource, audioStreamIndex, subtitleStreamIndex, liveStreamId).done(function (result) { self.getPlaybackInfoInternal(itemId, deviceProfile, startPosition, mediaSource, audioStreamIndex, subtitleStreamIndex, liveStreamId).done(function (result) {
deferred.resolveWith(null, [result]); deferred.resolveWith(null, [result]);
}).fail(function () { }).fail(function () {
deferred.reject(); deferred.reject();
}); });
});
return deferred.promise();
} }
self.getPlaybackInfoInternal = function (itemId, deviceProfile, startPosition, mediaSource, audioStreamIndex, subtitleStreamIndex, liveStreamId) { self.getPlaybackInfoInternal = function (itemId, deviceProfile, startPosition, mediaSource, audioStreamIndex, subtitleStreamIndex, liveStreamId) {
@ -859,7 +866,9 @@
if (mediaSource.Protocol == 'File') { if (mediaSource.Protocol == 'File') {
return FileSystemBridge.fileExists(mediaSource.Path); var exists = FileSystemBridge.fileExists(mediaSource.Path);
Logger.log('FileSystemBridge.fileExists: path: ' + mediaSource.Path + ' result: ' + exists);
return exists;
} }
} }

View file

@ -918,8 +918,6 @@
self.playVideoInternal = function (item, mediaSource, startPosition, streamInfo, callback) { self.playVideoInternal = function (item, mediaSource, startPosition, streamInfo, callback) {
var videoUrl = streamInfo.url;
self.startTimeTicksOffset = streamInfo.startTimeTicksOffset; self.startTimeTicksOffset = streamInfo.startTimeTicksOffset;
var mediaStreams = mediaSource.MediaStreams || []; var mediaStreams = mediaSource.MediaStreams || [];
@ -928,8 +926,8 @@
}); });
// Reports of stuttering with h264 stream copy in IE // Reports of stuttering with h264 stream copy in IE
if (streamInfo.playMethod == 'Transcode' && videoUrl.indexOf('.m3u8') == -1) { if (streamInfo.playMethod == 'Transcode' && streamInfo.url.indexOf('.m3u8') == -1) {
videoUrl += '&EnableAutoStreamCopy=false'; streamInfo.url += '&EnableAutoStreamCopy=false';
} }
// Create video player // Create video player
@ -1079,7 +1077,8 @@
mediaRenderer.init().done(function () { mediaRenderer.init().done(function () {
self.setSrcIntoRenderer(mediaRenderer, videoUrl, item, self.currentMediaSource); self.setSrcIntoRenderer(mediaRenderer, streamInfo, item, self.currentMediaSource);
self.streamInfo = streamInfo;
if (callback) { if (callback) {
callback(); callback();

View file

@ -19,6 +19,7 @@
self.isLocalPlayer = true; self.isLocalPlayer = true;
self.isDefaultPlayer = true; self.isDefaultPlayer = true;
self.streamInfo = {};
self.name = 'Html5 Player'; self.name = 'Html5 Player';
@ -649,13 +650,12 @@
self.currentSubtitleStreamIndex = subtitleStreamIndex; self.currentSubtitleStreamIndex = subtitleStreamIndex;
currentSrc = streamInfo.url; changeStreamToUrl(mediaRenderer, playSessionId, streamInfo, streamInfo.startTimeTicksOffset || 0);
changeStreamToUrl(mediaRenderer, playSessionId, currentSrc, streamInfo.startTimeTicksOffset || 0);
} }
}); });
}; };
function changeStreamToUrl(mediaRenderer, playSessionId, url, newPositionTicks) { function changeStreamToUrl(mediaRenderer, playSessionId, streamInfo, newPositionTicks) {
clearProgressInterval(); clearProgressInterval();
@ -679,7 +679,7 @@
ApiClient.stopActiveEncodings(playSessionId).done(function () { ApiClient.stopActiveEncodings(playSessionId).done(function () {
//self.startTimeTicksOffset = newPositionTicks; //self.startTimeTicksOffset = newPositionTicks;
self.setSrcIntoRenderer(mediaRenderer, url, self.currentItem, self.currentMediaSource); self.setSrcIntoRenderer(mediaRenderer, streamInfo, self.currentItem, self.currentMediaSource);
}); });
@ -687,11 +687,11 @@
self.updateTextStreamUrls(newPositionTicks || 0); self.updateTextStreamUrls(newPositionTicks || 0);
} else { } else {
self.startTimeTicksOffset = newPositionTicks || 0; self.startTimeTicksOffset = newPositionTicks || 0;
self.setSrcIntoRenderer(mediaRenderer, url, self.currentItem, self.currentMediaSource); self.setSrcIntoRenderer(mediaRenderer, streamInfo, self.currentItem, self.currentMediaSource);
} }
} }
self.setSrcIntoRenderer = function (mediaRenderer, url, item, mediaSource) { self.setSrcIntoRenderer = function (mediaRenderer, streamInfo, item, mediaSource) {
var subtitleStreams = mediaSource.MediaStreams.filter(function (s) { var subtitleStreams = mediaSource.MediaStreams.filter(function (s) {
return s.Type == 'Subtitle'; return s.Type == 'Subtitle';
@ -715,7 +715,8 @@
}); });
} }
mediaRenderer.setCurrentSrc(url, item, mediaSource, tracks); mediaRenderer.setCurrentSrc(streamInfo, item, mediaSource, tracks);
self.streamInfo = streamInfo;
}; };
self.setCurrentTime = function (ticks, positionSlider, currentTimeElement) { self.setCurrentTime = function (ticks, positionSlider, currentTimeElement) {
@ -1523,6 +1524,8 @@
self.currentMediaRenderer = null; self.currentMediaRenderer = null;
self.currentItem = null; self.currentItem = null;
self.currentMediaSource = null; self.currentMediaSource = null;
self.currentSubtitleStreamIndex = null;
self.streamInfo = {};
}); });
@ -1532,6 +1535,8 @@
self.currentMediaRenderer = null; self.currentMediaRenderer = null;
self.currentItem = null; self.currentItem = null;
self.currentMediaSource = null; self.currentMediaSource = null;
self.currentSubtitleStreamIndex = null;
self.streamInfo = {};
} }
if (self.isFullScreen()) { if (self.isFullScreen()) {
@ -1561,8 +1566,6 @@
PlayState: {} PlayState: {}
}; };
var currentSrc = mediaRenderer ? mediaRenderer.currentSrc() : null;
if (mediaRenderer) { if (mediaRenderer) {
state.PlayState.VolumeLevel = mediaRenderer.volume() * 100; state.PlayState.VolumeLevel = mediaRenderer.volume() * 100;
@ -1571,6 +1574,8 @@
state.PlayState.PositionTicks = self.getCurrentTicks(mediaRenderer); state.PlayState.PositionTicks = self.getCurrentTicks(mediaRenderer);
state.PlayState.RepeatMode = self.getRepeatMode(); state.PlayState.RepeatMode = self.getRepeatMode();
var currentSrc = mediaRenderer.currentSrc();
if (currentSrc) { if (currentSrc) {
var audioStreamIndex = getParameterByName('AudioStreamIndex', currentSrc); var audioStreamIndex = getParameterByName('AudioStreamIndex', currentSrc);
@ -1580,11 +1585,9 @@
} }
state.PlayState.SubtitleStreamIndex = self.currentSubtitleStreamIndex; state.PlayState.SubtitleStreamIndex = self.currentSubtitleStreamIndex;
state.PlayState.PlayMethod = getParameterByName('static', currentSrc) == 'true' ? state.PlayState.PlayMethod = self.streamInfo.playMethod;
'DirectStream' :
'Transcode';
state.PlayState.LiveStreamId = getParameterByName('LiveStreamId', currentSrc); state.PlayState.LiveStreamId = mediaSource.LiveStreamId;
state.PlayState.PlaySessionId = getParameterByName('PlaySessionId', currentSrc); state.PlayState.PlaySessionId = getParameterByName('PlaySessionId', currentSrc);
} }
} }
@ -1911,7 +1914,8 @@
// Set volume first to avoid an audible change // Set volume first to avoid an audible change
mediaRenderer.volume(initialVolume); mediaRenderer.volume(initialVolume);
mediaRenderer.setCurrentSrc(audioUrl, item, mediaSource); mediaRenderer.setCurrentSrc(streamInfo, item, mediaSource);
self.streamInfo = streamInfo;
}); });
} }

View file

@ -5,7 +5,7 @@
var folderHtml = ''; var folderHtml = '';
folderHtml += '<div class="paperCheckboxList">'; folderHtml += '<div class="paperCheckboxList">';
folderHtml += result.Items.map(function (i) { folderHtml += result.map(function (i) {
var currentHtml = ''; var currentHtml = '';
@ -141,10 +141,11 @@
}); });
var promise2 = ApiClient.getUserViews({}, user.Id); var promise2 = ApiClient.getUserViews({}, user.Id);
var promise3 = ApiClient.getJSON(ApiClient.getUrl("Users/" + user.Id + "/SpecialViewOptions")); var promise3 = ApiClient.getJSON(ApiClient.getUrl("Users/" + user.Id + "/SpecialViewOptions"));
var promise4 = ApiClient.getJSON(ApiClient.getUrl("Users/" + user.Id + "/GroupingOptions"));
$.when(promise1, promise2, promise3).done(function (r1, r2, r3) { $.when(promise1, promise2, promise3, promise4).done(function (r1, r2, r3, r4) {
renderViews(page, user, r1[0]); renderViews(page, user, r4[0]);
renderLatestItems(page, user, r1[0]); renderLatestItems(page, user, r1[0]);
renderViewOrder(page, user, r2[0]); renderViewOrder(page, user, r2[0]);
renderViewStyles(page, user, r3[0]); renderViewStyles(page, user, r3[0]);