mirror of
https://github.com/jellyfin/jellyfin-web.git
synced 2024-11-18 03:18:19 -07:00
update quality options
This commit is contained in:
parent
9829e92e6d
commit
90d7da094c
@ -15,12 +15,12 @@
|
||||
},
|
||||
"devDependencies": {},
|
||||
"ignore": [],
|
||||
"version": "1.0.2",
|
||||
"_release": "1.0.2",
|
||||
"version": "1.0.5",
|
||||
"_release": "1.0.5",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "1.0.2",
|
||||
"commit": "a4909b1637879d7e52ce9eaba8247ad98b690de9"
|
||||
"tag": "1.0.5",
|
||||
"commit": "ff6d4ba01de70b907dfa51b36aee6c63f64685c9"
|
||||
},
|
||||
"_source": "git://github.com/MediaBrowser/emby-webcomponents.git",
|
||||
"_target": "~1.0.0",
|
||||
|
@ -225,6 +225,8 @@
|
||||
}]
|
||||
});
|
||||
|
||||
var videoAudioChannels = browser.safari ? '2' : '6';
|
||||
|
||||
profile.CodecProfiles.push({
|
||||
Type: 'VideoAudio',
|
||||
Codec: 'aac',
|
||||
@ -234,6 +236,17 @@
|
||||
Condition: 'NotEquals',
|
||||
Property: 'AudioProfile',
|
||||
Value: 'HE-AAC'
|
||||
},
|
||||
{
|
||||
Condition: 'LessThanEqual',
|
||||
Property: 'AudioChannels',
|
||||
Value: videoAudioChannels
|
||||
},
|
||||
{
|
||||
Condition: 'Equals',
|
||||
Property: 'IsSecondaryAudio',
|
||||
Value: 'false',
|
||||
IsRequired: 'false'
|
||||
}
|
||||
// Disabling this is going to require us to learn why it was disabled in the first place
|
||||
//,
|
||||
@ -252,7 +265,13 @@
|
||||
{
|
||||
Condition: 'LessThanEqual',
|
||||
Property: 'AudioChannels',
|
||||
Value: '6'
|
||||
Value: videoAudioChannels
|
||||
},
|
||||
{
|
||||
Condition: 'Equals',
|
||||
Property: 'IsSecondaryAudio',
|
||||
Value: 'false',
|
||||
IsRequired: 'false'
|
||||
}
|
||||
]
|
||||
});
|
||||
@ -260,6 +279,11 @@
|
||||
profile.CodecProfiles.push({
|
||||
Type: 'VideoAudio',
|
||||
Conditions: [
|
||||
{
|
||||
Condition: 'LessThanEqual',
|
||||
Property: 'AudioChannels',
|
||||
Value: videoAudioChannels
|
||||
},
|
||||
{
|
||||
Condition: 'Equals',
|
||||
Property: 'IsSecondaryAudio',
|
||||
|
81
dashboard-ui/bower_components/emby-webcomponents/qualityoptions.js
vendored
Normal file
81
dashboard-ui/bower_components/emby-webcomponents/qualityoptions.js
vendored
Normal file
@ -0,0 +1,81 @@
|
||||
define([], function () {
|
||||
|
||||
function getVideoQualityOptions(maxStreamingBitrate, videoWidth) {
|
||||
|
||||
var maxAllowedWidth = videoWidth || 4096;
|
||||
//var maxAllowedHeight = videoHeight || 2304;
|
||||
|
||||
var options = [];
|
||||
|
||||
// Some 1080- videos are reported as 1912?
|
||||
if (maxAllowedWidth >= 1900) {
|
||||
|
||||
options.push({ name: '1080p - 40Mbps', maxHeight: 1080, bitrate: 40000000 });
|
||||
options.push({ name: '1080p - 35Mbps', maxHeight: 1080, bitrate: 35000000 });
|
||||
options.push({ name: '1080p - 30Mbps', maxHeight: 1080, bitrate: 30000000 });
|
||||
options.push({ name: '1080p - 25Mbps', maxHeight: 1080, bitrate: 25000000 });
|
||||
options.push({ name: '1080p - 20Mbps', maxHeight: 1080, bitrate: 20000000 });
|
||||
options.push({ name: '1080p - 15Mbps', maxHeight: 1080, bitrate: 15000000 });
|
||||
options.push({ name: '1080p - 10Mbps', maxHeight: 1080, bitrate: 10000001 });
|
||||
options.push({ name: '1080p - 8Mbps', maxHeight: 1080, bitrate: 8000001 });
|
||||
options.push({ name: '1080p - 6Mbps', maxHeight: 1080, bitrate: 6000001 });
|
||||
options.push({ name: '1080p - 5Mbps', maxHeight: 1080, bitrate: 5000001 });
|
||||
options.push({ name: '1080p - 4Mbps', maxHeight: 1080, bitrate: 4000002 });
|
||||
|
||||
} else if (maxAllowedWidth >= 1260) {
|
||||
options.push({ name: '720p - 10Mbps', maxHeight: 720, bitrate: 10000000 });
|
||||
options.push({ name: '720p - 8Mbps', maxHeight: 720, bitrate: 8000000 });
|
||||
options.push({ name: '720p - 6Mbps', maxHeight: 720, bitrate: 6000000 });
|
||||
options.push({ name: '720p - 5Mbps', maxHeight: 720, bitrate: 5000000 });
|
||||
|
||||
} else if (maxAllowedWidth >= 700) {
|
||||
options.push({ name: '480p - 4Mbps', maxHeight: 480, bitrate: 4000001 });
|
||||
options.push({ name: '480p - 3Mbps', maxHeight: 480, bitrate: 3000001 });
|
||||
options.push({ name: '480p - 2.5Mbps', maxHeight: 480, bitrate: 2500000 });
|
||||
options.push({ name: '480p - 2Mbps', maxHeight: 480, bitrate: 2000001 });
|
||||
options.push({ name: '480p - 1.5Mbps', maxHeight: 480, bitrate: 1500001 });
|
||||
}
|
||||
|
||||
if (maxAllowedWidth >= 1260) {
|
||||
options.push({ name: '720p - 4Mbps', maxHeight: 720, bitrate: 4000000 });
|
||||
options.push({ name: '720p - 3Mbps', maxHeight: 720, bitrate: 3000000 });
|
||||
options.push({ name: '720p - 2Mbps', maxHeight: 720, bitrate: 2000000 });
|
||||
|
||||
// The extra 1 is because they're keyed off the bitrate value
|
||||
options.push({ name: '720p - 1.5Mbps', maxHeight: 720, bitrate: 1500000 });
|
||||
options.push({ name: '720p - 1Mbps', maxHeight: 720, bitrate: 1000001 });
|
||||
}
|
||||
|
||||
options.push({ name: '480p - 1.0Mbps', maxHeight: 480, bitrate: 1000000 });
|
||||
options.push({ name: '480p - 720kbps', maxHeight: 480, bitrate: 720000 });
|
||||
options.push({ name: '480p - 420kbps', maxHeight: 480, bitrate: 420000 });
|
||||
options.push({ name: '360p', maxHeight: 360, bitrate: 400000 });
|
||||
options.push({ name: '240p', maxHeight: 240, bitrate: 320000 });
|
||||
options.push({ name: '144p', maxHeight: 144, bitrate: 192000 });
|
||||
|
||||
if (maxStreamingBitrate) {
|
||||
var selectedIndex = -1;
|
||||
for (var i = 0, length = options.length; i < length; i++) {
|
||||
|
||||
var option = options[i];
|
||||
|
||||
if (selectedIndex == -1 && option.bitrate <= maxStreamingBitrate) {
|
||||
selectedIndex = i;
|
||||
}
|
||||
}
|
||||
|
||||
if (selectedIndex == -1) {
|
||||
|
||||
selectedIndex = options.length - 1;
|
||||
}
|
||||
|
||||
options[selectedIndex].selected = true;
|
||||
}
|
||||
|
||||
return options;
|
||||
};
|
||||
|
||||
return {
|
||||
getVideoQualityOptions: getVideoQualityOptions
|
||||
};
|
||||
});
|
@ -29,14 +29,14 @@
|
||||
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
|
||||
},
|
||||
"ignore": [],
|
||||
"homepage": "https://github.com/PolymerElements/iron-behaviors",
|
||||
"homepage": "https://github.com/polymerelements/iron-behaviors",
|
||||
"_release": "1.0.12",
|
||||
"_resolution": {
|
||||
"type": "version",
|
||||
"tag": "v1.0.12",
|
||||
"commit": "657f526a2382a659cdf4e13be87ecc89261588a3"
|
||||
},
|
||||
"_source": "git://github.com/PolymerElements/iron-behaviors.git",
|
||||
"_source": "git://github.com/polymerelements/iron-behaviors.git",
|
||||
"_target": "^1.0.0",
|
||||
"_originalSource": "PolymerElements/iron-behaviors"
|
||||
"_originalSource": "polymerelements/iron-behaviors"
|
||||
}
|
@ -36,7 +36,7 @@
|
||||
"tag": "v1.0.8",
|
||||
"commit": "e9a66727f3da0446f04956d4e4f1dcd51cdec2ff"
|
||||
},
|
||||
"_source": "git://github.com/PolymerElements/iron-selector.git",
|
||||
"_source": "git://github.com/polymerelements/iron-selector.git",
|
||||
"_target": "^1.0.0",
|
||||
"_originalSource": "PolymerElements/iron-selector"
|
||||
"_originalSource": "polymerelements/iron-selector"
|
||||
}
|
@ -88,12 +88,6 @@
|
||||
<div class="folderGroupList"></div>
|
||||
<div class="fieldDescription paperCheckboxFieldDescription">${LabelSelectFolderGroupsHelp}</div>
|
||||
</div>
|
||||
|
||||
<br />
|
||||
<div>
|
||||
<paper-checkbox class="chkDisplayChannelsInline">${OptionDisplayChannelsInline}</paper-checkbox>
|
||||
<div class="fieldDescription paperCheckboxFieldDescription">${OptionDisplayChannelsInlineHelp}</div>
|
||||
</div>
|
||||
<br />
|
||||
|
||||
<div>
|
||||
|
@ -34,7 +34,7 @@
|
||||
'IDLE': 0,
|
||||
'ACTIVE': 1,
|
||||
'WARNING': 2,
|
||||
'ERROR': 3,
|
||||
'ERROR': 3
|
||||
};
|
||||
|
||||
/**
|
||||
@ -52,10 +52,11 @@
|
||||
};
|
||||
|
||||
var applicationID = "2D4B1DA3";
|
||||
var messageNamespace = 'urn:x-cast:com.connectsdk';
|
||||
|
||||
//var applicationID = "F4EB2E8E";
|
||||
//var messageNamespace = 'urn:x-cast:com.google.cast.mediabrowser.v3';
|
||||
// This is the beta version used for testing new changes
|
||||
//applicationID = '27C4EB5B';
|
||||
|
||||
var messageNamespace = 'urn:x-cast:com.connectsdk';
|
||||
|
||||
var CastPlayer = function () {
|
||||
|
||||
|
@ -95,9 +95,10 @@
|
||||
|
||||
elem.innerHTML = '';
|
||||
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.resolve();
|
||||
return deferred.promise();
|
||||
return new Promise(function (resolve, reject) {
|
||||
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -260,6 +260,16 @@
|
||||
});
|
||||
}
|
||||
|
||||
if (user.Policy.EnableContentDownloading && AppInfo.supportsDownloading) {
|
||||
if (mediaType) {
|
||||
items.push({
|
||||
name: Globalize.translate('ButtonDownload'),
|
||||
id: 'download',
|
||||
ironIcon: 'file-download'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (commands.indexOf('delete') != -1) {
|
||||
items.push({
|
||||
name: Globalize.translate('ButtonDelete'),
|
||||
@ -1091,6 +1101,14 @@
|
||||
ironIcon: 'playlist-add'
|
||||
});
|
||||
|
||||
if (user.Policy.EnableContentDownloading && AppInfo.supportsDownloading) {
|
||||
//items.push({
|
||||
// name: Globalize.translate('ButtonDownload'),
|
||||
// id: 'download',
|
||||
// ironIcon: 'file-download'
|
||||
//});
|
||||
}
|
||||
|
||||
items.push({
|
||||
name: Globalize.translate('HeaderGroupVersions'),
|
||||
id: 'groupvideos',
|
||||
|
@ -140,6 +140,8 @@
|
||||
|
||||
self.showQualityFlyout = function () {
|
||||
|
||||
require(['qualityoptions', 'actionsheet'], function (qualityoptions) {
|
||||
|
||||
var currentSrc = self.getCurrentSrc(self.currentMediaRenderer).toLowerCase();
|
||||
var isStatic = currentSrc.indexOf('static=true') != -1;
|
||||
|
||||
@ -147,9 +149,8 @@
|
||||
return stream.Type == "Video";
|
||||
})[0];
|
||||
var videoWidth = videoStream ? videoStream.Width : null;
|
||||
var videoHeight = videoStream ? videoStream.Height : null;
|
||||
|
||||
var options = self.getVideoQualityOptions(videoWidth, videoHeight);
|
||||
var options = qualityoptions.getVideoQualityOptions(AppSettings.maxStreamingBitrate(), videoWidth);
|
||||
|
||||
if (isStatic) {
|
||||
options[0].name = "Direct";
|
||||
@ -173,8 +174,6 @@
|
||||
return o.selected;
|
||||
});
|
||||
selectedId = selectedId.length ? selectedId[0].bitrate : null;
|
||||
require(['actionsheet'], function () {
|
||||
|
||||
ActionSheetElement.show({
|
||||
items: menuItems,
|
||||
positionTo: $('.videoQualityButton')[0],
|
||||
|
@ -36,92 +36,21 @@
|
||||
return targets;
|
||||
};
|
||||
|
||||
self.getVideoQualityOptions = function (videoWidth, videoHeight) {
|
||||
self.getDeviceProfile = function (maxHeight) {
|
||||
|
||||
return new Promise(function (resolve, reject) {
|
||||
|
||||
require(['qualityoptions'], function (qualityoptions) {
|
||||
|
||||
var bitrateSetting = AppSettings.maxStreamingBitrate();
|
||||
|
||||
var maxAllowedWidth = videoWidth || 4096;
|
||||
var maxAllowedHeight = videoHeight || 2304;
|
||||
|
||||
var options = [];
|
||||
|
||||
// Some 1080- videos are reported as 1912?
|
||||
if (maxAllowedWidth >= 1900) {
|
||||
|
||||
options.push({ name: '1080p - 40Mbps', maxHeight: 1080, bitrate: 40000000 });
|
||||
options.push({ name: '1080p - 35Mbps', maxHeight: 1080, bitrate: 35000000 });
|
||||
options.push({ name: '1080p - 30Mbps', maxHeight: 1080, bitrate: 30000000 });
|
||||
options.push({ name: '1080p - 25Mbps', maxHeight: 1080, bitrate: 25000000 });
|
||||
options.push({ name: '1080p - 20Mbps', maxHeight: 1080, bitrate: 20000000 });
|
||||
options.push({ name: '1080p - 15Mbps', maxHeight: 1080, bitrate: 15000000 });
|
||||
options.push({ name: '1080p - 10Mbps', maxHeight: 1080, bitrate: 10000001 });
|
||||
options.push({ name: '1080p - 8Mbps', maxHeight: 1080, bitrate: 8000001 });
|
||||
options.push({ name: '1080p - 6Mbps', maxHeight: 1080, bitrate: 6000001 });
|
||||
options.push({ name: '1080p - 5Mbps', maxHeight: 1080, bitrate: 5000001 });
|
||||
options.push({ name: '1080p - 4Mbps', maxHeight: 1080, bitrate: 4000002 });
|
||||
|
||||
} else if (maxAllowedWidth >= 1260) {
|
||||
options.push({ name: '720p - 10Mbps', maxHeight: 720, bitrate: 10000000 });
|
||||
options.push({ name: '720p - 8Mbps', maxHeight: 720, bitrate: 8000000 });
|
||||
options.push({ name: '720p - 6Mbps', maxHeight: 720, bitrate: 6000000 });
|
||||
options.push({ name: '720p - 5Mbps', maxHeight: 720, bitrate: 5000000 });
|
||||
|
||||
} else if (maxAllowedWidth >= 700) {
|
||||
options.push({ name: '480p - 4Mbps', maxHeight: 480, bitrate: 4000001 });
|
||||
options.push({ name: '480p - 3Mbps', maxHeight: 480, bitrate: 3000001 });
|
||||
options.push({ name: '480p - 2.5Mbps', maxHeight: 480, bitrate: 2500000 });
|
||||
options.push({ name: '480p - 2Mbps', maxHeight: 480, bitrate: 2000001 });
|
||||
options.push({ name: '480p - 1.5Mbps', maxHeight: 480, bitrate: 1500001 });
|
||||
}
|
||||
|
||||
if (maxAllowedWidth >= 1260) {
|
||||
options.push({ name: '720p - 4Mbps', maxHeight: 720, bitrate: 4000000 });
|
||||
options.push({ name: '720p - 3Mbps', maxHeight: 720, bitrate: 3000000 });
|
||||
options.push({ name: '720p - 2Mbps', maxHeight: 720, bitrate: 2000000 });
|
||||
|
||||
// The extra 1 is because they're keyed off the bitrate value
|
||||
options.push({ name: '720p - 1.5Mbps', maxHeight: 720, bitrate: 1500000 });
|
||||
options.push({ name: '720p - 1Mbps', maxHeight: 720, bitrate: 1000001 });
|
||||
}
|
||||
|
||||
options.push({ name: '480p - 1.0Mbps', maxHeight: 480, bitrate: 1000000 });
|
||||
options.push({ name: '480p - 720kbps', maxHeight: 480, bitrate: 720000 });
|
||||
options.push({ name: '480p - 420kbps', maxHeight: 480, bitrate: 420000 });
|
||||
options.push({ name: '360p', maxHeight: 360, bitrate: 400000 });
|
||||
options.push({ name: '240p', maxHeight: 240, bitrate: 320000 });
|
||||
options.push({ name: '144p', maxHeight: 144, bitrate: 192000 });
|
||||
|
||||
var i, length, option;
|
||||
var selectedIndex = -1;
|
||||
for (i = 0, length = options.length; i < length; i++) {
|
||||
|
||||
option = options[i];
|
||||
|
||||
if (selectedIndex == -1 && option.bitrate <= bitrateSetting) {
|
||||
selectedIndex = i;
|
||||
}
|
||||
}
|
||||
|
||||
if (selectedIndex == -1) {
|
||||
|
||||
selectedIndex = options.length - 1;
|
||||
}
|
||||
|
||||
options[selectedIndex].selected = true;
|
||||
|
||||
return options;
|
||||
};
|
||||
|
||||
self.getDeviceProfile = function (maxHeight) {
|
||||
|
||||
if (!maxHeight) {
|
||||
maxHeight = self.getVideoQualityOptions().filter(function (q) {
|
||||
maxHeight = qualityoptions.getVideoQualityOptions(bitrateSetting).filter(function (q) {
|
||||
return q.selected;
|
||||
})[0].maxHeight;
|
||||
}
|
||||
|
||||
var isVlc = AppInfo.isNativeApp && browserInfo.android;
|
||||
var bitrateSetting = AppSettings.maxStreamingBitrate();
|
||||
|
||||
var supportedFormats = getSupportedFormats();
|
||||
|
||||
@ -316,6 +245,8 @@
|
||||
|
||||
} else {
|
||||
|
||||
var videoAudioChannels = browserInfo.safari ? '2' : '6';
|
||||
|
||||
profile.CodecProfiles.push({
|
||||
Type: 'VideoAudio',
|
||||
Codec: 'aac',
|
||||
@ -335,7 +266,7 @@
|
||||
{
|
||||
Condition: 'LessThanEqual',
|
||||
Property: 'AudioChannels',
|
||||
Value: '6'
|
||||
Value: videoAudioChannels
|
||||
}
|
||||
// Disabling this is going to require us to learn why it was disabled in the first place
|
||||
//,
|
||||
@ -359,7 +290,7 @@
|
||||
{
|
||||
Condition: 'LessThanEqual',
|
||||
Property: 'AudioChannels',
|
||||
Value: '6'
|
||||
Value: videoAudioChannels
|
||||
}
|
||||
]
|
||||
});
|
||||
@ -506,7 +437,9 @@
|
||||
MimeType: 'video/webm'
|
||||
});
|
||||
|
||||
return profile;
|
||||
resolve(profile);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
var supportsTextTracks;
|
||||
@ -631,7 +564,7 @@
|
||||
var playSessionId = getParameterByName('PlaySessionId', currentSrc);
|
||||
var liveStreamId = getParameterByName('LiveStreamId', currentSrc);
|
||||
|
||||
var deviceProfile = self.getDeviceProfile();
|
||||
self.getDeviceProfile().then(function (deviceProfile) {
|
||||
|
||||
var audioStreamIndex = params.AudioStreamIndex == null ? (getParameterByName('AudioStreamIndex', currentSrc) || null) : params.AudioStreamIndex;
|
||||
if (typeof (audioStreamIndex) == 'string') {
|
||||
@ -662,6 +595,7 @@
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
function changeStreamToUrl(mediaRenderer, playSessionId, streamInfo) {
|
||||
@ -1087,6 +1021,12 @@
|
||||
return;
|
||||
}
|
||||
|
||||
var onBitrateDetected = function() {
|
||||
self.getDeviceProfile().then(function(deviceProfile) {
|
||||
playOnDeviceProfileCreated(deviceProfile, item, startPosition, callback);
|
||||
});
|
||||
};
|
||||
|
||||
var bitrateDetectionKey = ApiClient.serverAddress();
|
||||
|
||||
if (item.MediaType == 'Video' && AppSettings.enableAutomaticBitrateDetection() && (new Date().getTime() - (self.lastBitrateDetections[bitrateDetectionKey] || 0)) > 300000) {
|
||||
@ -1098,15 +1038,12 @@
|
||||
self.lastBitrateDetections[bitrateDetectionKey] = new Date().getTime();
|
||||
AppSettings.maxStreamingBitrate(bitrate);
|
||||
|
||||
playOnDeviceProfileCreated(self.getDeviceProfile(), item, startPosition, callback);
|
||||
onBitrateDetected();
|
||||
|
||||
}, function () {
|
||||
|
||||
playOnDeviceProfileCreated(self.getDeviceProfile(), item, startPosition, callback);
|
||||
});
|
||||
}, onBitrateDetected);
|
||||
|
||||
} else {
|
||||
playOnDeviceProfileCreated(self.getDeviceProfile(), item, startPosition, callback);
|
||||
onBitrateDetected();
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -129,7 +129,6 @@
|
||||
|
||||
page.querySelector('.chkDisplayCollectionView').checked = user.Configuration.DisplayCollectionsView || false;
|
||||
page.querySelector('.chkHidePlayedFromLatest').checked = user.Configuration.HidePlayedInLatest || false;
|
||||
page.querySelector('.chkDisplayChannelsInline').checked = user.Configuration.DisplayChannelsInline || false;
|
||||
|
||||
$('#selectHomeSection1', page).val(displayPreferences.CustomPrefs.home0 || '');
|
||||
$('#selectHomeSection2', page).val(displayPreferences.CustomPrefs.home1 || '');
|
||||
@ -159,8 +158,6 @@
|
||||
user.Configuration.DisplayCollectionsView = page.querySelector('.chkDisplayCollectionView').checked;
|
||||
user.Configuration.HidePlayedInLatest = page.querySelector('.chkHidePlayedFromLatest').checked;
|
||||
|
||||
user.Configuration.DisplayChannelsInline = page.querySelector('.chkDisplayChannelsInline').checked;
|
||||
|
||||
user.Configuration.LatestItemsExcludes = $(".chkIncludeInLatest", page).get().filter(function (i) {
|
||||
|
||||
return !i.checked;
|
||||
|
@ -34,7 +34,9 @@
|
||||
page.querySelector('.chkEnableChromecastAc3').checked = AppSettings.enableChromecastAc3();
|
||||
page.querySelector('.chkExternalVideoPlayer').checked = AppSettings.enableExternalPlayers();
|
||||
|
||||
var bitrateOptions = MediaPlayer.getVideoQualityOptions().map(function (i) {
|
||||
require(['qualityoptions'], function (qualityoptions) {
|
||||
|
||||
var bitrateOptions = qualityoptions.getVideoQualityOptions(AppSettings.maxStreamingBitrate()).map(function (i) {
|
||||
|
||||
return '<option value="' + i.bitrate + '">' + i.name + '</option>';
|
||||
|
||||
@ -53,6 +55,7 @@
|
||||
$('#selectMaxChromecastBitrate', page).val(AppSettings.maxChromecastBitrate());
|
||||
|
||||
Dashboard.hideLoadingMsg();
|
||||
});
|
||||
}
|
||||
|
||||
function loadPage(page) {
|
||||
|
@ -336,7 +336,6 @@
|
||||
html += '<div class="itemsContainer">';
|
||||
html += LibraryBrowser.getPosterViewHtml({
|
||||
items: result.Items,
|
||||
preferThumb: true,
|
||||
shape: 'auto',
|
||||
showTitle: true,
|
||||
centerText: true,
|
||||
|
@ -310,6 +310,10 @@ var Dashboard = {
|
||||
|
||||
showServerRestartWarning: function (systemInfo) {
|
||||
|
||||
if (AppInfo.isNativeApp) {
|
||||
return;
|
||||
}
|
||||
|
||||
var html = '<span style="margin-right: 1em;">' + Globalize.translate('MessagePleaseRestart') + '</span>';
|
||||
|
||||
if (systemInfo.CanSelfRestart) {
|
||||
@ -329,6 +333,10 @@ var Dashboard = {
|
||||
|
||||
showDashboardRefreshNotification: function () {
|
||||
|
||||
if (AppInfo.isNativeApp) {
|
||||
return;
|
||||
}
|
||||
|
||||
var html = '<span style="margin-right: 1em;">' + Globalize.translate('MessagePleaseRefreshPage') + '</span>';
|
||||
|
||||
html += '<paper-button raised class="submit mini" onclick="this.disabled=\'disabled\';Dashboard.reloadPage();"><iron-icon icon="refresh"></iron-icon><span>' + Globalize.translate('ButtonRefresh') + '</span></paper-button>';
|
||||
@ -364,10 +372,6 @@ var Dashboard = {
|
||||
|
||||
showFooterNotification: function (options) {
|
||||
|
||||
if (!AppInfo.enableFooterNotifications) {
|
||||
return;
|
||||
}
|
||||
|
||||
var removeOnHide = !options.id;
|
||||
|
||||
options.id = options.id || "notification" + new Date().getTime() + parseInt(Math.random());
|
||||
@ -1039,8 +1043,32 @@ var Dashboard = {
|
||||
{
|
||||
var args = cmd.Arguments;
|
||||
|
||||
if (args.TimeoutMs) {
|
||||
Dashboard.showFooterNotification({ html: "<div><b>" + args.Header + "</b></div>" + args.Text, timeout: args.TimeoutMs });
|
||||
if (args.TimeoutMs && window.Notification && Notification.permission === "granted") {
|
||||
|
||||
var notification = {
|
||||
title: args.Header,
|
||||
body: args.Text,
|
||||
vibrate: true,
|
||||
timeout: args.TimeoutMs
|
||||
};
|
||||
|
||||
var notif = new Notification(notification.title, notification);
|
||||
|
||||
if (notif.show) {
|
||||
notif.show();
|
||||
}
|
||||
|
||||
if (notification.timeout) {
|
||||
setTimeout(function () {
|
||||
|
||||
if (notif.close) {
|
||||
notif.close();
|
||||
}
|
||||
else if (notif.cancel) {
|
||||
notif.cancel();
|
||||
}
|
||||
}, notification.timeout);
|
||||
}
|
||||
}
|
||||
else {
|
||||
Dashboard.alert({ title: args.Header, message: args.Text });
|
||||
@ -1168,6 +1196,10 @@ var Dashboard = {
|
||||
|
||||
showPackageInstallNotification: function (installation, status) {
|
||||
|
||||
if (AppInfo.isNativeApp) {
|
||||
return;
|
||||
}
|
||||
|
||||
var html = '';
|
||||
|
||||
if (status == 'completed') {
|
||||
@ -1229,7 +1261,7 @@ var Dashboard = {
|
||||
|
||||
var newItems = data.ItemsAdded;
|
||||
|
||||
if (!newItems.length || AppInfo.isNativeApp || !window.Notification) {
|
||||
if (!newItems.length || AppInfo.isNativeApp || !window.Notification || Notification.permission !== "granted") {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1254,8 +1286,14 @@ var Dashboard = {
|
||||
var notification = {
|
||||
title: "New " + item.Type,
|
||||
body: item.Name,
|
||||
timeout: 5000,
|
||||
vibrate: true
|
||||
timeout: 15000,
|
||||
vibrate: true,
|
||||
|
||||
data: {
|
||||
options: {
|
||||
url: LibraryBrowser.getHref(item)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var imageTags = item.ImageTags || {};
|
||||
@ -1269,8 +1307,6 @@ var Dashboard = {
|
||||
});
|
||||
}
|
||||
|
||||
if (Notification.permission === "granted") {
|
||||
|
||||
var notif = new Notification(notification.title, notification);
|
||||
|
||||
if (notif.show) {
|
||||
@ -1289,7 +1325,6 @@ var Dashboard = {
|
||||
}, notification.timeout);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
@ -1572,7 +1607,6 @@ var AppInfo = {};
|
||||
}
|
||||
}
|
||||
else {
|
||||
AppInfo.enableFooterNotifications = true;
|
||||
AppInfo.enableSupporterMembership = true;
|
||||
|
||||
if (!isAndroid && !isIOS) {
|
||||
@ -1618,24 +1652,34 @@ var AppInfo = {};
|
||||
Events.on(apiClient, 'requestfail', Dashboard.onRequestFail);
|
||||
}
|
||||
|
||||
function getSyncProfile() {
|
||||
|
||||
return getRequirePromise(['scripts/mediaplayer']).then(function () {
|
||||
return MediaPlayer.getDeviceProfile(Math.max(screen.height, screen.width));
|
||||
});
|
||||
}
|
||||
|
||||
function onApiClientCreated(e, newApiClient) {
|
||||
initializeApiClient(newApiClient);
|
||||
}
|
||||
|
||||
//localStorage.clear();
|
||||
function createConnectionManager(credentialProviderFactory, capabilities) {
|
||||
|
||||
var credentialKey = Dashboard.isConnectMode() ? null : 'servercredentials4';
|
||||
var credentialProvider = new credentialProviderFactory(credentialKey);
|
||||
|
||||
return getSyncProfile().then(function (deviceProfile) {
|
||||
|
||||
capabilities.DeviceProfile = deviceProfile;
|
||||
|
||||
window.ConnectionManager = new MediaBrowser.ConnectionManager(credentialProvider, AppInfo.appName, AppInfo.appVersion, AppInfo.deviceName, AppInfo.deviceId, capabilities, window.devicePixelRatio);
|
||||
|
||||
if (window.location.href.toLowerCase().indexOf('wizardstart.html') != -1) {
|
||||
window.ConnectionManager.clearData();
|
||||
}
|
||||
|
||||
Events.on(ConnectionManager, 'apiclientcreated', function (e, newApiClient) {
|
||||
|
||||
initializeApiClient(newApiClient);
|
||||
});
|
||||
|
||||
return new Promise(function (resolve, reject) {
|
||||
Events.on(ConnectionManager, 'apiclientcreated', onApiClientCreated);
|
||||
|
||||
if (Dashboard.isConnectMode()) {
|
||||
|
||||
@ -1646,28 +1690,23 @@ var AppInfo = {};
|
||||
if (server && server.UserId && server.AccessToken) {
|
||||
Dashboard.showLoadingMsg();
|
||||
|
||||
ConnectionManager.connectToServer(server).then(function (result) {
|
||||
return ConnectionManager.connectToServer(server).then(function (result) {
|
||||
Dashboard.showLoadingMsg();
|
||||
|
||||
if (result.State == MediaBrowser.ConnectionState.SignedIn) {
|
||||
window.ApiClient = result.ApiClient;
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
resolve();
|
||||
|
||||
} else {
|
||||
|
||||
require(['apiclient'], function(apiClientFactory) {
|
||||
return getRequirePromise(['apiclient']).then(function (apiClientFactory) {
|
||||
var apiClient = new apiClientFactory(Dashboard.serverAddress(), AppInfo.appName, AppInfo.appVersion, AppInfo.deviceName, AppInfo.deviceId, window.devicePixelRatio);
|
||||
apiClient.enableAutomaticNetworking = false;
|
||||
ConnectionManager.addApiClient(apiClient);
|
||||
Dashboard.importCss(apiClient.getUrl('Branding/Css'));
|
||||
window.ApiClient = apiClient;
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
});
|
||||
@ -1804,6 +1843,7 @@ var AppInfo = {};
|
||||
connectionmanagerfactory: apiClientBowerPath + '/connectionmanager',
|
||||
browserdeviceprofile: embyWebComponentsBowerPath + "/browserdeviceprofile",
|
||||
browser: embyWebComponentsBowerPath + "/browser",
|
||||
qualityoptions: embyWebComponentsBowerPath + "/qualityoptions",
|
||||
connectservice: apiClientBowerPath + '/connectservice'
|
||||
};
|
||||
|
||||
@ -2058,8 +2098,8 @@ var AppInfo = {};
|
||||
deps.push('credentialprovider');
|
||||
|
||||
deps.push('appstorage');
|
||||
deps.push('scripts/mediaplayer');
|
||||
deps.push('scripts/appsettings');
|
||||
deps.push('scripts/extensions');
|
||||
|
||||
require(deps, function (connectionManagerExports, credentialProviderFactory) {
|
||||
|
||||
@ -2101,12 +2141,9 @@ var AppInfo = {};
|
||||
}
|
||||
}
|
||||
|
||||
var capabilities = Dashboard.capabilities();
|
||||
|
||||
capabilities.DeviceProfile = MediaPlayer.getDeviceProfile(Math.max(screen.height, screen.width));
|
||||
|
||||
var promises = [];
|
||||
deps = [];
|
||||
deps.push('scripts/mediaplayer');
|
||||
deps.push('thirdparty/jquery.unveil-custom.js');
|
||||
deps.push('emby-icons');
|
||||
deps.push('paper-icon-button');
|
||||
@ -2116,7 +2153,7 @@ var AppInfo = {};
|
||||
promises.push(getRequirePromise(deps));
|
||||
|
||||
promises.push(Globalize.ensure());
|
||||
promises.push(createConnectionManager(credentialProviderFactory, capabilities));
|
||||
promises.push(createConnectionManager(credentialProviderFactory, Dashboard.capabilities()));
|
||||
|
||||
Promise.all(promises).then(function () {
|
||||
|
||||
@ -2212,7 +2249,6 @@ var AppInfo = {};
|
||||
deps.push('scripts/sync');
|
||||
deps.push('scripts/backdrops');
|
||||
deps.push('scripts/librarymenu');
|
||||
deps.push('apiclient-deferred');
|
||||
|
||||
deps.push('css!css/card.css');
|
||||
|
||||
@ -2235,6 +2271,7 @@ var AppInfo = {};
|
||||
postInitDependencies.push('scripts/remotecontrol');
|
||||
postInitDependencies.push('css!css/notifications.css');
|
||||
postInitDependencies.push('css!css/chromecast.css');
|
||||
postInitDependencies.push('apiclient-deferred');
|
||||
|
||||
if (Dashboard.isRunningInCordova()) {
|
||||
|
||||
@ -2375,17 +2412,12 @@ var AppInfo = {};
|
||||
|
||||
initRequire();
|
||||
|
||||
function onWebComponentsReady() {
|
||||
|
||||
var initialDependencies = [];
|
||||
|
||||
initialDependencies.push('browser');
|
||||
initialDependencies.push('apiclient-store');
|
||||
initialDependencies.push('scripts/extensions');
|
||||
|
||||
var supportsNativeWebComponents = 'registerElement' in document && 'content' in document.createElement('template');
|
||||
|
||||
if (!supportsNativeWebComponents) {
|
||||
initialDependencies.push('webcomponentsjs');
|
||||
}
|
||||
|
||||
if (!window.Promise) {
|
||||
initialDependencies.push('native-promise-only');
|
||||
@ -2394,12 +2426,8 @@ var AppInfo = {};
|
||||
require(initialDependencies, function (browser) {
|
||||
|
||||
window.browserInfo = browser;
|
||||
|
||||
function onWebComponentsReady() {
|
||||
|
||||
var polymerDependencies = [];
|
||||
|
||||
require(polymerDependencies, function () {
|
||||
setAppInfo();
|
||||
setDocumentClasses();
|
||||
|
||||
getHostingAppInfo().then(function (hostingAppInfo) {
|
||||
init(hostingAppInfo);
|
||||
@ -2407,15 +2435,13 @@ var AppInfo = {};
|
||||
});
|
||||
}
|
||||
|
||||
setAppInfo();
|
||||
setDocumentClasses();
|
||||
|
||||
if (supportsNativeWebComponents) {
|
||||
if ('registerElement' in document && 'content' in document.createElement('template')) {
|
||||
// Native web components support
|
||||
onWebComponentsReady();
|
||||
} else {
|
||||
document.addEventListener('WebComponentsReady', onWebComponentsReady);
|
||||
require(['webcomponentsjs']);
|
||||
}
|
||||
});
|
||||
|
||||
})();
|
||||
|
||||
|
@ -115,7 +115,7 @@
|
||||
|
||||
Dashboard.alert({
|
||||
|
||||
message: Globalize.translate('ErrorAddingEmbyConnectAccount')
|
||||
message: Globalize.translate('ErrorAddingEmbyConnectAccount', 'apps@emby.media')
|
||||
|
||||
});
|
||||
});
|
||||
|
@ -402,7 +402,7 @@
|
||||
"MessagePleaseRestart": "Please restart to finish updating.",
|
||||
"ButtonRestart": "Restart",
|
||||
"ButtonRefresh": "Refresh",
|
||||
"MessagePleaseRefreshPage": "Please refresh this page to receive new updates from the server.",
|
||||
"MessagePleaseRefreshPage": "Please refresh this page to receive new updates from Emby Server.",
|
||||
"ButtonHide": "Hide",
|
||||
"MessageSettingsSaved": "Settings saved.",
|
||||
"ButtonSignOut": "Sign Out",
|
||||
@ -928,7 +928,7 @@
|
||||
"PleaseAddAtLeastOneFolder": "Please add at least one folder to this library by clicking the Add button.",
|
||||
"ErrorAddingMediaPathToVirtualFolder": "There was an error adding the media path. Please ensure the path is valid and the Emby Server process has access to that location.",
|
||||
"ErrorRemovingEmbyConnectAccount": "There was an error removing the Emby Connect account. Please ensure you have an active internet connection and try again.",
|
||||
"ErrorAddingEmbyConnectAccount": "There was an error adding the Emby Connect account. Please ensure the Emby account has been activated by following the instructions in the email sent after creating the account. If this email was not received please send an email to apps@emby.media from the email address used with the Emby account.",
|
||||
"ErrorAddingEmbyConnectAccount": "There was an error adding the Emby Connect account. Please ensure the Emby account has been activated by following the instructions in the email sent after creating the account. If you did not receive this email then please send an email to {0} from the email address used with the Emby account.",
|
||||
"HeaderFavoriteArtists": "Favorite Artists",
|
||||
"HeaderFavoriteSongs": "Favorite Songs",
|
||||
"HeaderConfirmPluginInstallation": "Confirm Plugin Installation",
|
||||
|
Loading…
Reference in New Issue
Block a user