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

3.0.5666.2

This commit is contained in:
Luke Pulverenti 2015-07-08 12:10:34 -04:00
parent 17a0f1578d
commit 8030454e19
13 changed files with 175 additions and 137 deletions

View file

@ -482,6 +482,63 @@
});
};
self.getDownloadSpeed = function (byteSize) {
var url = self.getUrl('Playback/BitrateTest', {
Size: byteSize
});
var now = new Date().getTime();
var deferred = DeferredBuilder.Deferred();
self.get(url).done(function () {
var responseTime = new Date().getTime() - now;
responseTime /= 1000;
var bytesPerSecond = byteSize / responseTime;
deferred.resolveWith(null, [bytesPerSecond]);
}).fail(function () {
deferred.reject();
});
return deferred.promise();
};
self.detectBitrate = function () {
var deferred = DeferredBuilder.Deferred();
// First try a small amount so that we don't hang up their mobile connection
self.getDownloadSpeed(1000000).done(function (bitrate) {
if (bitrate < 3000000) {
deferred.resolveWith(null, [Math.round(bitrate * .8)]);
} 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) {
deferred.resolveWith(null, [Math.round(bitrate * .8)]);
}).fail(function () {
deferred.reject();
});
}
}).fail(function () {
deferred.reject();
});
return deferred.promise();
};
/**
* Gets an item from the server
* Omit itemId to get the root folder.

View file

@ -32,51 +32,6 @@
//// Hide system UI and keep it hidden (Android 4.4+ only)
//AndroidFullScreen.immersiveMode(onSuccess, onError);
var currentPlayer;
function onPlaybackStart(e, state) {
var player = this;
if (player.isLocalPlayer && state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') {
AndroidFullScreen.immersiveMode(onSuccess, onError);
}
}
function onPlaybackStopped(e, state) {
var player = this;
if (player.isLocalPlayer && state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') {
if (!AppSettings.enableFullScreen()) {
AndroidFullScreen.showSystemUI(onSuccess, onError);
}
}
}
function bindToPlayer(player) {
releaseCurrentPlayer();
currentPlayer = player;
if (!player.isLocalPlayer) {
return;
}
$(player).on('playbackstart', onPlaybackStart)
.on('playbackstop', onPlaybackStopped);
}
function releaseCurrentPlayer() {
if (currentPlayer) {
$(currentPlayer).off('playbackstart', onPlaybackStart).off('playbackstop', onPlaybackStopped);
}
}
function updateFromSetting(leaveFullScreen) {
if (AppSettings.enableFullScreen()) {
@ -91,13 +46,6 @@
Logger.log('binding fullscreen to MediaController');
$(MediaController).on('playerchange', function () {
bindToPlayer(MediaController.getCurrentPlayer());
});
bindToPlayer(MediaController.getCurrentPlayer());
updateFromSetting(false);
$(AppSettings).on('settingupdated', function (e, key) {

View file

@ -95,11 +95,22 @@
return;
}
var tIndex = val.indexOf('#t=');
var startPosMs = 0;
if (tIndex != -1) {
startPosMs = val.substring(tIndex + 3);
startPosMs = parseFloat(startPosMs) * 1000;
}
if (options.type == 'audio') {
AndroidVlcPlayer.playAudioVlc(val, JSON.stringify(item), JSON.stringify(mediaSource), posterUrl);
} else {
AndroidVlcPlayer.playVideoVlc(val, JSON.stringify(item), JSON.stringify(mediaSource), posterUrl);
var playbackStartInfo = {};
AndroidVlcPlayer.playVideoVlc(val, startPosMs, item.Name, JSON.stringify(mediaSource), JSON.stringify(playbackStartInfo));
}
playerState.currentSrc = val;
@ -175,6 +186,17 @@
return deferred.promise();
};
self.onActivityClosed = function (wasStopped, hasError, endPositionMs) {
playerState.currentTime = endPositionMs;
if (wasStopped) {
MediaPlayer.stop(false);
}
self.report('playbackstop', playerState.duration, endPositionMs, false, 100);
};
window.AudioRenderer.Current = self;
window.VideoRenderer.Current = self;
}

View file

@ -57,7 +57,7 @@
// Use the embedded server for iOS8, and also if we don't know the iOS version, just to be safe
//if ($.browser.iOSVersion == 8 || !$.browser.iOSVersion)
{
//return url.replace('file://', '');
return url.replace('file://', '');
}
}
return url;

View file

@ -4,7 +4,7 @@
<title>Emby</title>
</head>
<body>
<div id="movieTrailersPage" data-role="page" class="page libraryPage" data-require="scripts/movietrailers">
<div id="movieTrailersPage" data-role="page" class="page libraryPage" data-require="scripts/movietrailers,jqmicons">
<div class="libraryViewNav scopedLibraryViewNav">
<a href="moviesrecommended.html"><i class="material-icons">info</i>${TabSuggestions}</a>
@ -22,7 +22,7 @@
<div class="viewSettings">
<div class="listTopPaging">
</div>
<button class="btnTrailerReel" type="button" data-icon="play" data-inline="true" data-mini="true">${ButtonTrailerReel}</button>
<button class="btnTrailerReel" type="button" data-icon="action" data-inline="true" data-mini="true">${ButtonTrailerReel}</button>
</div>
<div id="items" class="itemsContainer paddedItemsContainer"></div>
<p class="noItemsMessage" style="display:none;text-align:center;">${MessageNoTrailersFound}</p>

View file

@ -545,6 +545,10 @@
}
return false;
},
onHardwareMenuButtonClick: function () {
openMainDrawer();
}
};

View file

@ -626,8 +626,8 @@
html += '<div class="videoTopControlsLogo"></div>';
html += '<div class="videoAdvancedControls">';
html += '<paper-icon-button icon="skip-previous" class="previousTrackButton mediaButton videoTrackControl" onclick="MediaPlayer.previousTrack();"></paper-icon-button>';
html += '<paper-icon-button icon="skip-next" class="nextTrackButton mediaButton videoTrackControl" onclick="MediaPlayer.nextTrack();"></paper-icon-button>';
html += '<paper-icon-button icon="skip-previous" class="previousTrackButton mediaButton videoTrackControl hide" onclick="MediaPlayer.previousTrack();"></paper-icon-button>';
html += '<paper-icon-button icon="skip-next" class="nextTrackButton mediaButton videoTrackControl hide" onclick="MediaPlayer.nextTrack();"></paper-icon-button>';
// Embedding onclicks due to issues not firing in cordova safari
html += '<paper-icon-button icon="audiotrack" class="mediaButton videoAudioButton" onclick="MediaPlayer.showAudioTracksFlyout();"></paper-icon-button>';
@ -652,12 +652,12 @@
html += '<div class="nowPlayingTabs"></div>';
html += '</div>'; // nowPlayingInfo
html += '<paper-icon-button icon="skip-previous" class="previousTrackButton mediaButton videoTrackControl" onclick="MediaPlayer.previousTrack();"></paper-icon-button>';
html += '<paper-icon-button icon="skip-previous" class="previousTrackButton mediaButton videoTrackControl hide" onclick="MediaPlayer.previousTrack();"></paper-icon-button>';
html += '<paper-icon-button id="video-playButton" icon="play-arrow" class="mediaButton unpauseButton" onclick="MediaPlayer.unpause();"></paper-icon-button>';
html += '<paper-icon-button id="video-pauseButton" icon="pause" class="mediaButton pauseButton" onclick="MediaPlayer.pause();"></paper-icon-button>';
html += '<paper-icon-button icon="skip-next" class="nextTrackButton mediaButton videoTrackControl" onclick="MediaPlayer.nextTrack();"></paper-icon-button>';
html += '<paper-icon-button icon="skip-next" class="nextTrackButton mediaButton videoTrackControl hide" onclick="MediaPlayer.nextTrack();"></paper-icon-button>';
html += '<paper-slider pin step=".1" min="0" max="100" value="0" class="videoPositionSlider" style="width:300px;vertical-align:middle;margin-left:-1em;"></paper-slider>';
@ -933,8 +933,11 @@
unbindEventsForPlayback(mediaRenderer);
};
self.playVideo = function (item, mediaSource, startPosition) {
self.playVideo = function (item, mediaSource, startPosition, callback) {
//ApiClient.detectBitrate().done(function (b) {
// alert(b);
//});
requirejs(['videorenderer'], function () {
var streamInfo = self.createStreamInfo('Video', item, mediaSource, startPosition);
@ -953,11 +956,11 @@
Dashboard.hideLoadingMsg();
}).done(function () {
self.playVideoInternal(item, mediaSource, startPosition, streamInfo);
self.playVideoInternal(item, mediaSource, startPosition, streamInfo, callback);
});
} else {
self.playVideoInternal(item, mediaSource, startPosition, streamInfo);
self.playVideoInternal(item, mediaSource, startPosition, streamInfo, callback);
}
});
};
@ -966,7 +969,7 @@
return true;
}
self.playVideoInternal = function (item, mediaSource, startPosition, streamInfo) {
self.playVideoInternal = function (item, mediaSource, startPosition, streamInfo, callback) {
var videoUrl = streamInfo.url;
var contentType = streamInfo.mimeType;
@ -990,7 +993,7 @@
//show stop button
$('#video-playButton', videoControls).hide();
$('#video-pauseButton', videoControls).show();
$('.videoTrackControl').hide();
$('.videoTrackControl').visible(false);
var videoElement = $('#videoElement', mediaPlayerContainer);
@ -1166,6 +1169,10 @@
if (videoUrl.indexOf('.m3u8') == -1) {
mediaRenderer.unpause();
}
if (callback) {
callback();
}
});
};
@ -1180,7 +1187,7 @@
}
if (length < 2) {
$('.videoTrackControl').hide();
$('.videoTrackControl').visible(false);
return;
}
@ -1202,7 +1209,8 @@
nextTrackButton.removeAttribute('disabled');
}
$('.videoTrackControl', controls).show();
$(previousTrackButton).visible(true);
$(nextTrackButton).visible(true);
};
}

View file

@ -975,16 +975,12 @@
if (item.MediaType === "Video") {
requirejs(['videorenderer'], function () {
self.playVideo(item, self.currentMediaSource, startPosition);
self.playVideo(item, self.currentMediaSource, startPosition, callback);
});
} else if (item.MediaType === "Audio") {
playAudio(item, self.currentMediaSource, startPosition);
}
if (callback) {
callback();
playAudio(item, self.currentMediaSource, startPosition, callback);
}
}
@ -1720,10 +1716,14 @@
self.setCurrentTime(currentTicks);
}
function playAudio(item, mediaSource, startPositionTicks) {
function playAudio(item, mediaSource, startPositionTicks, callback) {
requirejs(['audiorenderer'], function () {
playAudioInternal(item, mediaSource, startPositionTicks);
if (callback) {
callback();
}
});
}

View file

@ -4,27 +4,44 @@
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.getAlbumArtists(Dashboard.getCurrentUserId(), query).done(function (result) {
// Scroll back up so they can see the results from the beginning
@ -100,13 +117,15 @@
});
LibraryBrowser.saveQueryValues(getSavedQueryKey(), query);
LibraryBrowser.setLastRefreshed(page);
Dashboard.hideLoadingMsg();
});
}
function updateFilterControls(page) {
var query = getQuery();
$('.chkStandardFilter', page).each(function () {
var filters = "," + (query.Filters || "");
@ -129,6 +148,8 @@
filtersLoaded = true;
var query = getQuery();
QueryFilters.loadFilters(page, Dashboard.getCurrentUserId(), query, function () {
reloadItems(page);
@ -147,6 +168,8 @@
$('.chkStandardFilter', this).on('change', function () {
var query = getQuery();
var filterName = this.getAttribute('data-filter');
var filters = query.Filters || "";
@ -164,6 +187,8 @@
$('.alphabetPicker', this).on('alphaselect', function (e, character) {
var query = getQuery();
query.NameStartsWithOrGreater = character;
query.StartIndex = 0;
@ -171,6 +196,8 @@
}).on('alphaclear', function (e) {
var query = getQuery();
query.NameStartsWithOrGreater = '';
reloadItems(page);
@ -186,6 +213,8 @@
});
$('#selectPageSize', page).on('change', function () {
var query = getQuery();
query.Limit = parseInt(this.value);
query.StartIndex = 0;
reloadItems(page);
@ -194,22 +223,12 @@
}).on('pagebeforeshowready', "#musicAlbumArtistsPage", function () {
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');
@ -217,6 +236,7 @@
reloadItems(page);
}
});
}
updateFilterControls(this);
});

View file

@ -2,19 +2,6 @@
var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster');
// The base query options
var query = {
SortBy: "AlbumArtist,SortName",
SortOrder: "Ascending",
IncludeItemTypes: "MusicAlbum",
Recursive: true,
Fields: "PrimaryImageAspectRatio,SortName,SyncInfo",
StartIndex: 0,
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb"
};
var data = {};
function getQuery() {
@ -295,12 +282,11 @@
var page = this;
var viewKey = getSavedQueryKey();
LibraryBrowser.loadSavedQueryValues(viewKey, query);
var query = getQuery();
QueryFilters.onPageShow(page, query);
if (LibraryBrowser.needsRefresh(page)) {
LibraryBrowser.getSavedViewSetting(viewKey).done(function (val) {
LibraryBrowser.getSavedViewSetting(getSavedQueryKey()).done(function (val) {
if (val) {
$('#selectView', page).val(val).selectmenu('refresh').trigger('change');

View file

@ -78,6 +78,9 @@
ApiClient.updateUserConfiguration(user.Id, user.Configuration).done(function () {
Dashboard.alert(Globalize.translate('SettingsSaved'));
}).always(function () {
Dashboard.hideLoadingMsg();
});
}

View file

@ -151,11 +151,7 @@
if (items.length) {
html += '<div>';
html += '<h1 style="display:inline-block; vertical-align:middle;" class="listHeader">' + Globalize.translate('HeaderLatestMedia') + '</h1>';
if (user.Policy.EnableUserPreferenceAccess && !AppInfo.isNativeApp) {
html += '<a href="mypreferencesdisplay.html" class="clearLink" style="margin-left:2em;"><paper-button raised class="submit mini"><iron-icon icon="mode-edit"></iron-icon><span>' + Globalize.translate('ButtonEdit') + '</span></paper-button></a>';
}
html += '<h1 class="listHeader">' + Globalize.translate('HeaderLatestMedia') + '</h1>';
html += '</div>';
@ -239,11 +235,7 @@
var cssClass = index !== 0 ? 'listHeader' : 'listHeader';
html += '<div>';
html += '<h1 style="display:inline-block; vertical-align:middle;" class="' + cssClass + '">' + Globalize.translate('HeaderMyMedia') + '</h1>';
if (user.Policy.EnableUserPreferenceAccess && !AppInfo.isNativeApp) {
html += '<a href="mypreferencesdisplay.html" class="clearLink" style="margin-left:2em;"><paper-button raised class="submit mini"><iron-icon icon="mode-edit"></iron-icon><span>' + Globalize.translate('ButtonEdit') + '</span></paper-button></a>';
}
html += '<h1 class="' + cssClass + '">' + Globalize.translate('HeaderMyMedia') + '</h1>';
html += '</div>';

View file

@ -2063,9 +2063,7 @@ var AppInfo = {};
function initCordovaWithDeviceId(deferred, deviceId) {
if ($.browser.android) {
require(['cordova/imagestore']);
}
var capablities = Dashboard.capabilities();