mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
update hdhomerun
This commit is contained in:
parent
74fad00abe
commit
1aeb69a26c
24 changed files with 244 additions and 87 deletions
|
@ -56,13 +56,13 @@
|
|||
|
||||
return appStorage.getItem('enableFullScreen') == 'true';
|
||||
},
|
||||
syncPath: function (val) {
|
||||
enableSyncToExternalStorage: function (val) {
|
||||
|
||||
if (val != null) {
|
||||
update('syncPath', val.toString());
|
||||
update('enableSyncToExternalStorage', val.toString());
|
||||
}
|
||||
|
||||
return appStorage.getItem('syncPath');
|
||||
return appStorage.getItem('enableSyncToExternalStorage') == 'true';
|
||||
},
|
||||
|
||||
displayPreferencesKey: function() {
|
||||
|
|
|
@ -628,6 +628,15 @@
|
|||
self.setVolume(getCurrentVolume() + 2);
|
||||
};
|
||||
|
||||
self.setRepeatMode = function (mode) {
|
||||
castPlayer.sendMessage({
|
||||
options: {
|
||||
RepeatMode: mode
|
||||
},
|
||||
command: 'SetRepeatMode'
|
||||
});
|
||||
};
|
||||
|
||||
self.toggleMute = function () {
|
||||
|
||||
var state = self.lastPlayerData || {};
|
||||
|
@ -676,7 +685,8 @@
|
|||
"SetVolume",
|
||||
"SetAudioStreamIndex",
|
||||
"SetSubtitleStreamIndex",
|
||||
"DisplayContent"]
|
||||
"DisplayContent",
|
||||
"SetRepeatMode"]
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -156,7 +156,7 @@
|
|||
return true;
|
||||
}
|
||||
|
||||
$(ownerpage).on('swipeleft', function (e) {
|
||||
$(pages).on('swipeleft', function (e) {
|
||||
|
||||
if (allowSwipe(e)) {
|
||||
var selected = parseInt(pages.selected || '0');
|
||||
|
@ -168,7 +168,7 @@
|
|||
}
|
||||
});
|
||||
|
||||
$(ownerpage).on('swiperight', function (e) {
|
||||
$(pages).on('swiperight', function (e) {
|
||||
|
||||
if (allowSwipe(e)) {
|
||||
var selected = parseInt(pages.selected || '0');
|
||||
|
|
|
@ -573,6 +573,10 @@
|
|||
currentPlayer.volumeUp();
|
||||
};
|
||||
|
||||
self.setRepeatMode = function (mode) {
|
||||
currentPlayer.setRepeatMode(mode);
|
||||
};
|
||||
|
||||
self.playlist = function () {
|
||||
return currentPlayer.playlist || [];
|
||||
};
|
||||
|
@ -586,6 +590,9 @@
|
|||
Logger.log('MediaController received command: ' + cmd.Name);
|
||||
switch (cmd.Name) {
|
||||
|
||||
case 'SetRepeatMode':
|
||||
player.setRepeatMode(cmd.Arguments.RepeatMode);
|
||||
break;
|
||||
case 'VolumeUp':
|
||||
player.volumeUp();
|
||||
break;
|
||||
|
|
|
@ -1127,7 +1127,24 @@
|
|||
|
||||
self.nextTrack = function () {
|
||||
|
||||
var newIndex = currentPlaylistIndex + 1;
|
||||
var newIndex;
|
||||
|
||||
switch (self.getRepeatMode()) {
|
||||
|
||||
case 'RepeatOne':
|
||||
newIndex = currentPlaylistIndex;
|
||||
break;
|
||||
case 'RepeatAll':
|
||||
newIndex = currentPlaylistIndex + 1;
|
||||
if (newIndex >= self.playlist.length) {
|
||||
newIndex = 0;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
newIndex = currentPlaylistIndex + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
var newItem = self.playlist[newIndex];
|
||||
|
||||
if (newItem) {
|
||||
|
@ -1498,6 +1515,7 @@
|
|||
state.PlayState.IsMuted = mediaRenderer.volume() == 0;
|
||||
state.PlayState.IsPaused = mediaRenderer.paused();
|
||||
state.PlayState.PositionTicks = self.getCurrentTicks(mediaRenderer);
|
||||
state.PlayState.RepeatMode = self.getRepeatMode();
|
||||
|
||||
var currentSrc = mediaRenderer.currentSrc();
|
||||
|
||||
|
@ -1751,6 +1769,15 @@
|
|||
return true;
|
||||
};
|
||||
|
||||
var repeatMode = 'RepeatNone';
|
||||
self.getRepeatMode = function () {
|
||||
return repeatMode;
|
||||
};
|
||||
|
||||
self.setRepeatMode = function (mode) {
|
||||
repeatMode = mode;
|
||||
};
|
||||
|
||||
function onTimeUpdate() {
|
||||
|
||||
var currentTicks = self.getCurrentTicks(this);
|
||||
|
|
|
@ -39,10 +39,11 @@
|
|||
showLatestItemsPopup: false,
|
||||
shape: getSquareShape(),
|
||||
showTitle: true,
|
||||
defaultAction: 'play',
|
||||
showParentTitle: true,
|
||||
lazy: true,
|
||||
centerText: true,
|
||||
overlayPlayButton: true
|
||||
overlayMoreButton: true
|
||||
|
||||
});
|
||||
ImageLoader.lazyChildren(elem);
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
$('#chkEnableFullScreen', page).checked(AppSettings.enableFullScreen()).checkboxradio("refresh");
|
||||
|
||||
$('#txtSyncPath', page).val(AppSettings.syncPath());
|
||||
$('#chkSyncToExternalCard', page).checked(AppSettings.enableSyncToExternalStorage()).checkboxradio("refresh");
|
||||
|
||||
Dashboard.hideLoadingMsg();
|
||||
}
|
||||
|
@ -34,7 +34,7 @@
|
|||
appStorage.setItem('enableThemeSongs-' + user.Id, $('#selectThemeSong', page).val());
|
||||
appStorage.setItem('enableBackdrops-' + user.Id, $('#selectBackdrop', page).val());
|
||||
|
||||
AppSettings.syncPath($('#txtSyncPath', page).val());
|
||||
AppSettings.enableSyncToExternalStorage($('#chkSyncToExternalCard', page).checked());
|
||||
|
||||
ApiClient.updateUserConfiguration(user.Id, user.Configuration).done(function () {
|
||||
Dashboard.alert(Globalize.translate('SettingsSaved'));
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
var unpauseButton;
|
||||
var pauseButton;
|
||||
var positionSlider;
|
||||
var toggleRepeatButton;
|
||||
|
||||
var lastPlayerState;
|
||||
|
||||
|
@ -53,6 +54,8 @@
|
|||
|
||||
html += '<paper-slider pin step="1" min="0" max="100" value="0" class="nowPlayingBarVolumeSlider" style="width:100px;vertical-align:middle;"></paper-slider>';
|
||||
|
||||
html += '<paper-icon-button icon="repeat" class="mediaButton toggleRepeatButton"></paper-icon-button>';
|
||||
|
||||
html += '<div class="nowPlayingBarUserDataButtons">';
|
||||
html += '</div>';
|
||||
|
||||
|
@ -135,8 +138,26 @@
|
|||
});
|
||||
});
|
||||
|
||||
toggleRepeatButton = $('.toggleRepeatButton', elem).on('click', function () {
|
||||
|
||||
if (currentPlayer && lastPlayerState) {
|
||||
var state = lastPlayerState;
|
||||
switch ((state.PlayState || {}).RepeatMode) {
|
||||
case 'RepeatNone':
|
||||
currentPlayer.setRepeatMode('RepeatAll');
|
||||
break;
|
||||
case 'RepeatAll':
|
||||
currentPlayer.setRepeatMode('RepeatOne');
|
||||
break;
|
||||
case 'RepeatOne':
|
||||
currentPlayer.setRepeatMode('RepeatNone');
|
||||
break;
|
||||
}
|
||||
}
|
||||
})[0];
|
||||
|
||||
// Unfortunately this is necessary because the polymer elements might not be ready immediately and there doesn't seem to be an event-driven way to find out when
|
||||
setTimeout(function() {
|
||||
setTimeout(function () {
|
||||
volumeSlider = $('.nowPlayingBarVolumeSlider', elem).on('change', function () {
|
||||
|
||||
if (currentPlayer) {
|
||||
|
@ -314,6 +335,24 @@
|
|||
showUnmuteButton = false;
|
||||
}
|
||||
|
||||
if (supportedCommands.indexOf('SetRepeatMode') == -1) {
|
||||
toggleRepeatButton.classList.add('hide');
|
||||
} else {
|
||||
toggleRepeatButton.classList.remove('hide');
|
||||
}
|
||||
|
||||
if (playState.RepeatMode == 'RepeatAll') {
|
||||
toggleRepeatButton.icon = "repeat";
|
||||
toggleRepeatButton.classList.add('repeatActive');
|
||||
}
|
||||
else if (playState.RepeatMode == 'RepeatOne') {
|
||||
toggleRepeatButton.icon = "repeat-one";
|
||||
toggleRepeatButton.classList.add('repeatActive');
|
||||
} else {
|
||||
toggleRepeatButton.icon = "repeat";
|
||||
toggleRepeatButton.classList.remove('repeatActive');
|
||||
}
|
||||
|
||||
if (supportedCommands.indexOf('SetVolume') == -1) {
|
||||
showVolumeSlider = false;
|
||||
}
|
||||
|
|
|
@ -208,6 +208,24 @@
|
|||
});
|
||||
}
|
||||
|
||||
function toggleRepeat(player) {
|
||||
|
||||
if (player && lastPlayerState) {
|
||||
var state = lastPlayerState;
|
||||
switch ((state.PlayState || {}).RepeatMode) {
|
||||
case 'RepeatNone':
|
||||
player.setRepeatMode('RepeatAll');
|
||||
break;
|
||||
case 'RepeatAll':
|
||||
player.setRepeatMode('RepeatOne');
|
||||
break;
|
||||
case 'RepeatOne':
|
||||
player.setRepeatMode('RepeatNone');
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function bindEvents(page) {
|
||||
|
||||
$('.tabButton', page).on('click', function () {
|
||||
|
@ -240,10 +258,15 @@
|
|||
$('.btnCommand,.btnToggleFullscreen', page).on('click', function () {
|
||||
|
||||
if (currentPlayer) {
|
||||
MediaController.sendCommand({
|
||||
Name: this.getAttribute('data-command')
|
||||
|
||||
}, currentPlayer);
|
||||
if (this.classList.contains('repeatToggleButton')) {
|
||||
toggleRepeat(currentPlayer);
|
||||
} else {
|
||||
MediaController.sendCommand({
|
||||
Name: this.getAttribute('data-command')
|
||||
|
||||
}, currentPlayer);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -490,11 +513,13 @@
|
|||
|
||||
if (playerInfo.isLocalPlayer && AppInfo.hasPhysicalVolumeButtons) {
|
||||
$('.volumeButton', page).css('visibility', 'hidden');
|
||||
$('.nowPlayingPageVolumeControl', page).hide();
|
||||
} else {
|
||||
$('.volumeButton', page).css('visibility', 'visible');
|
||||
$('.nowPlayingPageVolumeControl', page).show();
|
||||
}
|
||||
|
||||
if (playerInfo.isLocalPlayer && AppInfo.hasPhysicalVolumeButtons && item && item.MediaType == 'Audio') {
|
||||
if (item && item.MediaType == 'Audio') {
|
||||
$('.buttonsRow2', page).hide();
|
||||
$('.buttonsRow3', page).hide();
|
||||
} else {
|
||||
|
@ -502,6 +527,20 @@
|
|||
$('.buttonsRow3', page).show();
|
||||
}
|
||||
|
||||
var toggleRepeatButton = page.querySelector('.repeatToggleButton');
|
||||
|
||||
if (playState.RepeatMode == 'RepeatAll') {
|
||||
toggleRepeatButton.icon = "repeat";
|
||||
toggleRepeatButton.classList.add('nowPlayingPageRepeatActive');
|
||||
}
|
||||
else if (playState.RepeatMode == 'RepeatOne') {
|
||||
toggleRepeatButton.icon = "repeat-one";
|
||||
toggleRepeatButton.classList.add('nowPlayingPageRepeatActive');
|
||||
} else {
|
||||
toggleRepeatButton.icon = "repeat";
|
||||
toggleRepeatButton.classList.remove('nowPlayingPageRepeatActive');
|
||||
}
|
||||
|
||||
updateNowPlayingInfo(page, state);
|
||||
}
|
||||
|
||||
|
|
|
@ -125,9 +125,7 @@
|
|||
|
||||
self.setVolume = function (vol) {
|
||||
sendCommandByName('SetVolume', {
|
||||
|
||||
Volume: vol
|
||||
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -155,6 +153,13 @@
|
|||
});
|
||||
};
|
||||
|
||||
self.setRepeatMode = function (mode) {
|
||||
|
||||
sendCommandByName('SetRepeatMode', {
|
||||
RepeatMode: mode
|
||||
});
|
||||
};
|
||||
|
||||
self.displayContent = function (options) {
|
||||
|
||||
sendCommandByName('DisplayContent', options);
|
||||
|
|
|
@ -1065,6 +1065,7 @@ var Dashboard = {
|
|||
case 'SetAudioStreamIndex':
|
||||
case 'SetSubtitleStreamIndex':
|
||||
case 'ToggleFullscreen':
|
||||
case 'SetRepeatMode':
|
||||
break;
|
||||
default:
|
||||
Logger.log('Unrecognized command: ' + cmd.Name);
|
||||
|
@ -1430,7 +1431,8 @@ var Dashboard = {
|
|||
"SetSubtitleStreamIndex",
|
||||
"DisplayContent",
|
||||
"GoToSearch",
|
||||
"DisplayMessage"
|
||||
"DisplayMessage",
|
||||
"SetRepeatMode"
|
||||
];
|
||||
|
||||
},
|
||||
|
|
|
@ -166,7 +166,8 @@
|
|||
context: 'tv',
|
||||
showDetailsMenu: true,
|
||||
overlayPlayButton: true,
|
||||
preferThumb: true
|
||||
preferThumb: true,
|
||||
centerText: true
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue