Merge pull request #1690 from MediaBrowser/dev

Dev
This commit is contained in:
Luke 2016-04-28 15:09:56 -04:00
commit 23ee907693
19 changed files with 214 additions and 134 deletions

View File

@ -16,12 +16,12 @@
}, },
"devDependencies": {}, "devDependencies": {},
"ignore": [], "ignore": [],
"version": "1.2.49", "version": "1.2.53",
"_release": "1.2.49", "_release": "1.2.53",
"_resolution": { "_resolution": {
"type": "version", "type": "version",
"tag": "1.2.49", "tag": "1.2.53",
"commit": "dced619538d91455d46dcbaf0bc03178cbf5ebd8" "commit": "818133a9b1b4b241b6f0e8e1733da3358bb02df5"
}, },
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git", "_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
"_target": "^1.2.0", "_target": "^1.2.0",

View File

@ -181,6 +181,8 @@
align-items: center; align-items: center;
color: #fff !important; color: #fff !important;
text-decoration: none; text-decoration: none;
/* Needed in firefox */
text-align: left;
} }
@media all and (min-width: 500px) { @media all and (min-width: 500px) {
@ -232,7 +234,7 @@
@media all and (max-width: 1280px) { @media all and (max-width: 1280px) {
.guideChannelInfoWithImage .guideChannelName { .channelHeaderCell.withImage .guideChannelNumber {
display: none; display: none;
} }
} }
@ -366,22 +368,28 @@
margin-left: .25em; margin-left: .25em;
} }
.guideChannelInfo { .guideChannelNumber {
display: inline-block; padding-left: 1em;
max-width: 110px; max-width: 30%;
text-overflow: ellipsis;
overflow: hidden; overflow: hidden;
white-space: nowrap;
padding-left: .7em;
} }
.guideChannelName { .guideChannelName {
margin-left: auto; margin-left: auto;
margin-right: .3em; margin-right: 1em;
max-width: 6vw; max-width: 40%;
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden; overflow: hidden;
} }
@media all and (max-width: 1000px) {
.guideChannelName {
display: none;
}
}
.channelList, .programGrid { .channelList, .programGrid {
height: auto !important; height: auto !important;
} }

View File

@ -328,11 +328,18 @@
dataSrc = ' data-src="' + url + '"'; dataSrc = ' data-src="' + url + '"';
} }
html += '<button type="button" class="channelHeaderCell clearButton itemAction lazy"' + dataSrc + ' data-action="link" data-isfolder="' + channel.IsFolder + '" data-id="' + channel.Id + '" data-serverid="' + channel.ServerId + '" data-type="' + channel.Type + '">'; var cssClass = 'channelHeaderCell clearButton itemAction lazy';
if (hasChannelImage) {
cssClass += ' withImage';
}
var cssClass = hasChannelImage ? 'guideChannelInfo guideChannelInfoWithImage' : 'guideChannelInfo'; html += '<button type="button" class="' + cssClass + '"' + dataSrc + ' data-action="link" data-isfolder="' + channel.IsFolder + '" data-id="' + channel.Id + '" data-serverid="' + channel.ServerId + '" data-type="' + channel.Type + '">';
html += '<div class="' + cssClass + '"><div class="guideChannelName">' + channel.Number + '</div></div>'; html += '<div class="guideChannelNumber">' + channel.Number + '</div>';
if (!hasChannelImage) {
html += '<div class="guideChannelName">' + channel.Name + '</div>';
}
html += '</button>'; html += '</button>';
} }

View File

@ -0,0 +1,62 @@
define(['connectionManager', 'sharingMenu', 'loading'], function (connectionManager, sharingMenu, loading) {
function onSharingSuccess(options) {
console.log('share success. shareId: ' + options.share.Id);
}
function onSharingCancel(options, apiClient) {
var shareId = options.share.Id;
console.log('share cancelled. shareId: ' + shareId);
// Delete the share since it was cancelled
apiClient.ajax({
type: 'DELETE',
url: apiClient.getUrl('Social/Shares/' + shareId)
});
}
function showMenu(options) {
loading.show();
var itemId = options.itemId;
var apiClient = options.apiClient || connectionManager.getApiClient(options.serverId);
var userId = apiClient.getCurrentUserId();
return apiClient.getItem(userId, itemId).then(function () {
return apiClient.ajax({
type: 'POST',
url: apiClient.getUrl('Social/Shares', {
ItemId: itemId,
UserId: userId
}),
dataType: "json"
}).then(function (share) {
var options = {
share: share
};
loading.hide();
sharingMenu.showMenu(options, onSharingSuccess, function (options) {
onSharingCancel(options, apiClient);
});
}, function () {
loading.hide();
});
});
}
return {
showMenu: showMenu
};
});

View File

@ -120,24 +120,41 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
if (options.interactive) { if (options.interactive) {
var actionButtonsOnTop = layoutManager.mobile;
html += '<div>'; html += '<div>';
html += '<div class="slideshowSwiperContainer"><div class="swiper-wrapper"></div></div>'; html += '<div class="slideshowSwiperContainer"><div class="swiper-wrapper"></div></div>';
html += '<paper-icon-button icon="slideshow:keyboard-arrow-left" class="btnSlideshowPrevious slideshowButton" tabindex="-1"></paper-icon-button>'; html += '<paper-icon-button icon="slideshow:keyboard-arrow-left" class="btnSlideshowPrevious slideshowButton" tabindex="-1"></paper-icon-button>';
html += '<paper-icon-button icon="slideshow:keyboard-arrow-right" class="btnSlideshowNext slideshowButton" tabindex="-1"></paper-icon-button>'; html += '<paper-icon-button icon="slideshow:keyboard-arrow-right" class="btnSlideshowNext slideshowButton" tabindex="-1"></paper-icon-button>';
html += '<paper-icon-button icon="slideshow:close" class="btnSlideshowExit" tabindex="-1"></paper-icon-button>'; html += '<div class="topActionButtons">';
if (actionButtonsOnTop) {
html += '<div class="slideshowBottomBar hide">'; if (appHost.supports('filedownload')) {
html += '<paper-icon-button icon="slideshow:file-download" class="btnDownload slideshowButton"></paper-icon-button>';
//html += '<paper-icon-button icon="slideshow:share" class="btnShare slideshowButton"></paper-icon-button>'; }
html += '<paper-icon-button icon="slideshow:pause" class="btnSlideshowPause slideshowButton" autoFocus></paper-icon-button>'; if (appHost.supports('sharing')) {
if (appHost.supports('filedownload')) { html += '<paper-icon-button icon="slideshow:share" class="btnShare slideshowButton"></paper-icon-button>';
html += '<paper-icon-button icon="slideshow:file-download" class="btnDownload slideshowButton"></paper-icon-button>'; }
} }
html += '<paper-icon-button icon="slideshow:close" class="btnSlideshowExit" tabindex="-1"></paper-icon-button>';
html += '</div>'; html += '</div>';
if (!actionButtonsOnTop) {
html += '<div class="slideshowBottomBar hide">';
//html += '<paper-icon-button icon="slideshow:share" class="btnShare slideshowButton"></paper-icon-button>';
html += '<paper-icon-button icon="slideshow:pause" class="btnSlideshowPause slideshowButton" autoFocus></paper-icon-button>';
if (appHost.supports('filedownload')) {
html += '<paper-icon-button icon="slideshow:file-download" class="btnDownload slideshowButton"></paper-icon-button>';
}
if (appHost.supports('sharing')) {
html += '<paper-icon-button icon="slideshow:share" class="btnShare slideshowButton"></paper-icon-button>';
}
html += '</div>';
}
html += '</div>'; html += '</div>';
} else { } else {
@ -229,7 +246,8 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
originalImage: getImgUrl(item, true), originalImage: getImgUrl(item, true),
//title: item.Name, //title: item.Name,
//description: item.Overview //description: item.Overview
Id: item.Id Id: item.Id,
ServerId: item.ServerId
}); });
} }
@ -254,7 +272,7 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
function getSwiperSlideHtmlFromSlide(item) { function getSwiperSlideHtmlFromSlide(item) {
var html = ''; var html = '';
html += '<div class="swiper-slide" data-original="' + item.originalImage + '" data-itemid="' + item.Id + '">'; html += '<div class="swiper-slide" data-original="' + item.originalImage + '" data-itemid="' + item.Id + '" data-serverid="' + item.ServerId + '">';
html += '<img data-src="' + item.imageUrl + '" class="swiper-lazy">'; html += '<img data-src="' + item.imageUrl + '" class="swiper-lazy">';
html += '<paper-spinner></paper-spinner>'; html += '<paper-spinner></paper-spinner>';
if (item.title || item.subtitle) { if (item.title || item.subtitle) {
@ -305,21 +323,19 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
} }
} }
function getCurrentItemId() { function getCurrentImageInfo() {
if (swiperInstance) { if (swiperInstance) {
return document.querySelector('.swiper-slide-active').getAttribute('data-itemid'); var slide = document.querySelector('.swiper-slide-active');
} else {
if (slide) {
return {
url: slide.getAttribute('data-original'),
itemId: slide.getAttribute('data-itemid'),
serverId: slide.getAttribute('data-serverid')
};
}
return null; return null;
}
}
function getCurrentImageUrl() {
if (swiperInstance) {
return document.querySelector('.swiper-slide-active').getAttribute('data-original');
} else { } else {
return null; return null;
} }
@ -327,31 +343,39 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
function download() { function download() {
var url = getCurrentImageUrl(); var imageInfo = getCurrentImageInfo();
var itemId = getCurrentItemId();
alert(itemId);
require(['fileDownloader'], function (fileDownloader) { require(['fileDownloader'], function (fileDownloader) {
fileDownloader.download([ fileDownloader.download([imageInfo]);
{
url: url,
itemId: itemId
}]);
}); });
} }
function share() { function share() {
var imageInfo = getCurrentImageInfo();
require(['sharingmanager'], function (sharingManager) {
sharingManager.showMenu(imageInfo);
});
} }
function play() { function play() {
dlg.querySelector('.btnSlideshowPause').icon = "slideshow:pause"; var btnSlideshowPause = dlg.querySelector('.btnSlideshowPause');
if (btnSlideshowPause) {
btnSlideshowPause.icon = "slideshow:pause";
}
swiperInstance.startAutoplay(); swiperInstance.startAutoplay();
} }
function pause() { function pause() {
dlg.querySelector('.btnSlideshowPause').icon = "slideshow:play-arrow"; var btnSlideshowPause = dlg.querySelector('.btnSlideshowPause');
if (btnSlideshowPause) {
btnSlideshowPause.icon = "slideshow:play-arrow";
}
swiperInstance.stopAutoplay(); swiperInstance.stopAutoplay();
} }
@ -403,13 +427,19 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
function showOsd() { function showOsd() {
slideUpToShow(getOsdBottom()); var bottom = getOsdBottom();
startHideTimer(); if (bottom) {
slideUpToShow(bottom);
startHideTimer();
}
} }
function hideOsd() { function hideOsd() {
slideDownToHide(getOsdBottom()); var bottom = getOsdBottom();
if (bottom) {
slideDownToHide(bottom);
}
} }
var hideTimeout; var hideTimeout;

View File

@ -80,7 +80,7 @@
position: absolute; position: absolute;
} }
.btnSlideshowExit { .topActionButtons {
right: .5vh; right: .5vh;
top: .5vh; top: .5vh;
z-index: 1002; z-index: 1002;

View File

@ -36,7 +36,7 @@
"tag": "v1.4.0", "tag": "v1.4.0",
"commit": "554f7418fdbd97688eb21518b5f8172167d53a95" "commit": "554f7418fdbd97688eb21518b5f8172167d53a95"
}, },
"_source": "git://github.com/polymerelements/iron-selector.git", "_source": "git://github.com/PolymerElements/iron-selector.git",
"_target": "^1.0.0", "_target": "^1.0.0",
"_originalSource": "polymerelements/iron-selector" "_originalSource": "PolymerElements/iron-selector"
} }

View File

@ -45,7 +45,7 @@
"tag": "v1.0.11", "tag": "v1.0.11",
"commit": "e3c1ab0c72905b58fb4d9adc2921ea73b5c085a5" "commit": "e3c1ab0c72905b58fb4d9adc2921ea73b5c085a5"
}, },
"_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

@ -32,14 +32,14 @@
"iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0" "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0"
}, },
"ignore": [], "ignore": [],
"homepage": "https://github.com/PolymerElements/paper-ripple", "homepage": "https://github.com/polymerelements/paper-ripple",
"_release": "1.0.5", "_release": "1.0.5",
"_resolution": { "_resolution": {
"type": "version", "type": "version",
"tag": "v1.0.5", "tag": "v1.0.5",
"commit": "d72e7a9a8ab518b901ed18dde492df3b87a93be5" "commit": "d72e7a9a8ab518b901ed18dde492df3b87a93be5"
}, },
"_source": "git://github.com/PolymerElements/paper-ripple.git", "_source": "git://github.com/polymerelements/paper-ripple.git",
"_target": "^1.0.0", "_target": "^1.0.0",
"_originalSource": "PolymerElements/paper-ripple" "_originalSource": "polymerelements/paper-ripple"
} }

View File

@ -94,6 +94,8 @@ define(['appStorage', 'browser'], function (appStorage, browser) {
'filedownload' 'filedownload'
]; ];
features.push('sharing');
return features.indexOf(command.toLowerCase()) != -1; return features.indexOf(command.toLowerCase()) != -1;
}, },
appInfo: function () { appInfo: function () {

View File

@ -1,4 +1,4 @@
define(['dialogHelper', 'jQuery', 'thirdparty/social-share-kit-1.0.4/dist/js/social-share-kit.min', 'css!thirdparty/social-share-kit-1.0.4/dist/css/social-share-kit.css'], function (dialogHelper, $) { define(['dialogHelper', 'thirdparty/social-share-kit-1.0.4/dist/js/social-share-kit.min', 'css!thirdparty/social-share-kit-1.0.4/dist/css/social-share-kit.css'], function (dialogHelper) {
function showMenu(options, successCallback, cancelCallback) { function showMenu(options, successCallback, cancelCallback) {
@ -58,11 +58,16 @@
} }
}); });
// Has to be assigned a z-index after the call to .open() function onSskButtonClick(e) {
$('.ssk', dlg).on('click', function () {
isShared = true; isShared = true;
dialogHelper.close(dlg); dialogHelper.close(dlg);
}); }
// Has to be assigned a z-index after the call to .open()
var sskButtons = dlg.querySelectorAll('.ssk');
for (var i = 0, length = sskButtons.length; i < length; i++) {
sskButtons[i].addEventListener('click', onSskButtonClick);
}
// Has to be assigned a z-index after the call to .open() // Has to be assigned a z-index after the call to .open()
dlg.querySelector('.btnCancel').addEventListener('click', function () { dlg.querySelector('.btnCancel').addEventListener('click', function () {

View File

@ -46,6 +46,11 @@
<div class="fieldDescription paperCheckboxFieldDescription btnSupporterForConverting"><a href="https://emby.media/premiere" target="_blank" class="accent">${FeatureRequiresEmbyPremiere}</a></div> <div class="fieldDescription paperCheckboxFieldDescription btnSupporterForConverting"><a href="https://emby.media/premiere" target="_blank" class="accent">${FeatureRequiresEmbyPremiere}</a></div>
</div> </div>
<br /> <br />
<div>
<paper-checkbox id="chkPreserveAudio">${OptionConvertRecordingPreserveAudio}</paper-checkbox>
<div class="fieldDescription paperCheckboxFieldDescription">${OptionConvertRecordingPreserveAudioHelp}</div>
</div>
<br />
<br /> <br />
<div> <div>
<paper-checkbox id="chkOrganize">${OptionSendRecordingsToAutoOrganize}</paper-checkbox> <paper-checkbox id="chkOrganize">${OptionSendRecordingsToAutoOrganize}</paper-checkbox>

View File

@ -1484,7 +1484,7 @@
} }
if (stream.IsAVC != null) { if (stream.IsAVC != null) {
attributes.push(createAttribute('AVC', stream.IsAVC)); attributes.push(createAttribute('AVC', (stream.IsAVC ? 'Yes' : 'No')));
} }
if (stream.Profile) { if (stream.Profile) {

View File

@ -950,6 +950,8 @@
}); });
} }
var serverId = ApiClient.serverInfo().Id;
require(['actionsheet'], function (actionsheet) { require(['actionsheet'], function (actionsheet) {
actionsheet.show({ actionsheet.show({
@ -960,8 +962,11 @@
switch (id) { switch (id) {
case 'share': case 'share':
require(['sharingmanager'], function () { require(['sharingmanager'], function (sharingManager) {
SharingManager.showMenu(Dashboard.getCurrentUserId(), itemId); sharingManager.showMenu({
serverId: serverId,
itemId: itemId
});
}); });
break; break;
case 'addtocollection': case 'addtocollection':
@ -990,7 +995,8 @@
fileDownloader.download([ fileDownloader.download([
{ {
url: downloadHref, url: downloadHref,
itemId: itemId itemId: itemId,
serverId: serverId
}]); }]);
}); });
@ -1547,6 +1553,11 @@
value: item.LocationType || '' value: item.LocationType || ''
}); });
atts.push({
name: 'index',
value: index
});
if (item.AlbumId) { if (item.AlbumId) {
atts.push({ atts.push({
name: 'albumid', name: 'albumid',

View File

@ -249,6 +249,7 @@
var albumid = card.getAttribute('data-albumid'); var albumid = card.getAttribute('data-albumid');
var artistid = card.getAttribute('data-artistid'); var artistid = card.getAttribute('data-artistid');
var serverId = ApiClient.serverInfo().Id;
Dashboard.getCurrentUser().then(function (user) { Dashboard.getCurrentUser().then(function (user) {
@ -494,7 +495,8 @@
fileDownloader.download([ fileDownloader.download([
{ {
url: downloadHref, url: downloadHref,
itemId: itemId itemId: itemId,
serverId: serverId
}]); }]);
}); });
@ -576,8 +578,11 @@
LibraryBrowser.playInExternalPlayer(itemId); LibraryBrowser.playInExternalPlayer(itemId);
break; break;
case 'share': case 'share':
require(['sharingmanager'], function () { require(['sharingmanager'], function (sharingManager) {
SharingManager.showMenu(Dashboard.getCurrentUserId(), itemId); sharingManager.showMenu({
serverId: serverId,
itemId: itemId
});
}); });
break; break;
case 'removefromplaylist': case 'removefromplaylist':

View File

@ -10,6 +10,7 @@
$('#chkMovies', page).checked(config.EnableMovieProviders); $('#chkMovies', page).checked(config.EnableMovieProviders);
$('#chkOrganize', page).checked(config.EnableAutoOrganize); $('#chkOrganize', page).checked(config.EnableAutoOrganize);
$('#chkConvertRecordings', page).checked(config.EnableRecordingEncoding); $('#chkConvertRecordings', page).checked(config.EnableRecordingEncoding);
$('#chkPreserveAudio', page).checked(config.EnableOriginalAudioWithEncodedRecordings || false);
$('#txtRecordingPath', page).val(config.RecordingPath || ''); $('#txtRecordingPath', page).val(config.RecordingPath || '');
@ -31,6 +32,7 @@
config.EnableMovieProviders = $('#chkMovies', form).checked(); config.EnableMovieProviders = $('#chkMovies', form).checked();
config.EnableAutoOrganize = $('#chkOrganize', form).checked(); config.EnableAutoOrganize = $('#chkOrganize', form).checked();
config.EnableRecordingEncoding = $('#chkConvertRecordings', form).checked(); config.EnableRecordingEncoding = $('#chkConvertRecordings', form).checked();
config.EnableOriginalAudioWithEncodedRecordings = $('#chkPreserveAudio', form).checked();
config.RecordingPath = $('#txtRecordingPath', form).val() || null; config.RecordingPath = $('#txtRecordingPath', form).val() || null;
config.PrePaddingSeconds = $('#txtPrePaddingMinutes', form).val() * 60; config.PrePaddingSeconds = $('#txtPrePaddingMinutes', form).val() * 60;

View File

@ -1,59 +0,0 @@
define([], function () {
function onSharingSuccess(options) {
console.log('share success. shareId: ' + options.share.Id);
}
function onSharingCancel(options) {
var shareId = options.share.Id;
console.log('share cancelled. shareId: ' + shareId);
// Delete the share since it was cancelled
ApiClient.ajax({
type: 'DELETE',
url: ApiClient.getUrl('Social/Shares/' + shareId)
});
}
function showMenu(userId, itemId) {
Dashboard.showLoadingMsg();
require(['sharingwidget'], function (SharingWidget) {
ApiClient.ajax({
type: 'POST',
url: ApiClient.getUrl('Social/Shares', {
ItemId: itemId,
UserId: userId
}),
dataType: "json"
}).then(function (share) {
var options = {
share: share
};
Dashboard.hideLoadingMsg();
SharingWidget.showMenu(options, onSharingSuccess, onSharingCancel);
}, function () {
Dashboard.hideLoadingMsg();
});
});
}
window.SharingManager = {
showMenu: showMenu
};
});

View File

@ -1651,12 +1651,12 @@ var AppInfo = {};
paths.hlsjs = bowerPath + "/hls.js/dist/hls.min"; paths.hlsjs = bowerPath + "/hls.js/dist/hls.min";
if (Dashboard.isRunningInCordova()) { if (Dashboard.isRunningInCordova()) {
paths.sharingwidget = "cordova/sharingwidget"; paths.sharingMenu = "cordova/sharingwidget";
paths.serverdiscovery = "cordova/serverdiscovery"; paths.serverdiscovery = "cordova/serverdiscovery";
paths.wakeonlan = "cordova/wakeonlan"; paths.wakeonlan = "cordova/wakeonlan";
paths.actionsheet = "cordova/actionsheet"; paths.actionsheet = "cordova/actionsheet";
} else { } else {
paths.sharingwidget = "components/sharingwidget"; paths.sharingMenu = "components/sharingwidget";
paths.serverdiscovery = apiClientBowerPath + "/serverdiscovery"; paths.serverdiscovery = apiClientBowerPath + "/serverdiscovery";
paths.wakeonlan = apiClientBowerPath + "/wakeonlan"; paths.wakeonlan = apiClientBowerPath + "/wakeonlan";
@ -1678,6 +1678,8 @@ var AppInfo = {};
return viewManager; return viewManager;
}); });
define("sharingmanager", [embyWebComponentsBowerPath + "/sharing/sharingmanager"], returnFirstDependency);
// hack for an android test before browserInfo is loaded // hack for an android test before browserInfo is loaded
if (Dashboard.isRunningInCordova() && window.MainActivity) { if (Dashboard.isRunningInCordova() && window.MainActivity) {
paths.appStorage = "cordova/android/appstorage"; paths.appStorage = "cordova/android/appstorage";
@ -2028,8 +2030,6 @@ var AppInfo = {};
define("detailtablecss", ['css!css/detailtable.css']); define("detailtablecss", ['css!css/detailtable.css']);
define("tileitemcss", ['css!css/tileitem.css']); define("tileitemcss", ['css!css/tileitem.css']);
define("sharingmanager", ["scripts/sharingmanager"]);
if (Dashboard.isRunningInCordova() && browserInfo.safari) { if (Dashboard.isRunningInCordova() && browserInfo.safari) {
define("searchmenu", ["cordova/searchmenu"]); define("searchmenu", ["cordova/searchmenu"]);
} else { } else {

View File

@ -2349,5 +2349,7 @@
"MetadataSettingChangeHelp": "Changing metadata settings will affect new content that is added going forward. To refresh existing content, open the detail screen and click the refresh button, or perform bulk refreshes using the metadata manager.", "MetadataSettingChangeHelp": "Changing metadata settings will affect new content that is added going forward. To refresh existing content, open the detail screen and click the refresh button, or perform bulk refreshes using the metadata manager.",
"LabelTitle": "Title:", "LabelTitle": "Title:",
"LabelOriginalTitle": "Original title:", "LabelOriginalTitle": "Original title:",
"LabelSortTitle": "Sort title:" "LabelSortTitle": "Sort title:",
"OptionConvertRecordingPreserveAudio": "Preserve original audio when converting recordings",
"OptionConvertRecordingPreserveAudioHelp": "This will provide better audio but may require transcoding during playback on some devices."
} }