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

update recordings

This commit is contained in:
Luke Pulverenti 2016-05-06 14:17:02 -04:00
parent 58bb39c2d1
commit 70393a9136
10 changed files with 188 additions and 127 deletions

View file

@ -6,7 +6,6 @@
<paper-tab>${TabGuide}</paper-tab> <paper-tab>${TabGuide}</paper-tab>
<paper-tab>${TabChannels}</paper-tab> <paper-tab>${TabChannels}</paper-tab>
<paper-tab>${TabRecordings}</paper-tab> <paper-tab>${TabRecordings}</paper-tab>
<paper-tab>${TabScheduled}</paper-tab>
<paper-tab>${TabSeries}</paper-tab> <paper-tab>${TabSeries}</paper-tab>
</paper-tabs> </paper-tabs>
<div class="legacyTabs"> <div class="legacyTabs">
@ -14,8 +13,7 @@
<a href="livetv.html?tab=1">${TabGuide}</a> <a href="livetv.html?tab=1">${TabGuide}</a>
<a href="livetv.html?tab=2">${TabChannels}</a> <a href="livetv.html?tab=2">${TabChannels}</a>
<a href="livetv.html?tab=3">${TabRecordings}</a> <a href="livetv.html?tab=3">${TabRecordings}</a>
<a href="livetv.html?tab=4">${TabScheduled}</a> <a href="livetv.html?tab=4">${TabSeries}</a>
<a href="livetv.html?tab=5">${TabSeries}</a>
</div> </div>
</div> </div>
@ -79,6 +77,13 @@
<div class="recordingItems itemsContainer"></div> <div class="recordingItems itemsContainer"></div>
<br /> <br />
</div> </div>
<div id="upcomingRecordings" class="homePageSection hide">
<div>
<h1 class="listHeader" style="display: inline-block; vertical-align: middle;">${HeaderUpcomingRecordings}</h1>
</div>
<div class="recordingItems itemsContainer"></div>
<br />
</div>
<div id="recordingGroups" style="display: none;" class="homePageSection"> <div id="recordingGroups" style="display: none;" class="homePageSection">
<h1 class="listHeader"> <h1 class="listHeader">
<a href="livetvrecordinglist.html">${HeaderAllRecordings}<img src="css/images/rightarrow.png" class="headerArrowImage" /></a> <a href="livetvrecordinglist.html">${HeaderAllRecordings}<img src="css/images/rightarrow.png" class="headerArrowImage" /></a>
@ -86,11 +91,7 @@
<div id="recordingGroupItems"></div> <div id="recordingGroupItems"></div>
</div> </div>
</div> </div>
<div class="pageTabContent timersTabContent hide" data-index="4"> <div class="pageTabContent seriesTimersTabContent hide" data-index="4">
<div style="max-width: 700px; margin: 0 auto;" id="items">
</div>
</div>
<div class="pageTabContent seriesTimersTabContent hide" data-index="5">
<div style="max-width: 700px; margin: 0 auto;" id="items"> <div style="max-width: 700px; margin: 0 auto;" id="items">
</div> </div>
</div> </div>

View file

@ -456,6 +456,9 @@
canShare: function (item, user) { canShare: function (item, user) {
if (item.Type == 'Timer') {
return false;
}
return user.Policy.EnablePublicSharing; return user.Policy.EnablePublicSharing;
}, },
@ -721,7 +724,7 @@
supportsEditing: function (itemType) { supportsEditing: function (itemType) {
if (itemType == "UserRootFolder" || /*itemType == "CollectionFolder" ||*/ itemType == "UserView") { if (itemType == "UserRootFolder" || /*itemType == "CollectionFolder" ||*/ itemType == "UserView" || itemType == 'Timer') {
return false; return false;
} }
@ -756,7 +759,10 @@
if (item.MediaType == 'Video' && item.Type != 'TvChannel' && item.Type != 'Program' && item.LocationType != 'Virtual') { if (item.MediaType == 'Video' && item.Type != 'TvChannel' && item.Type != 'Program' && item.LocationType != 'Virtual') {
commands.push('editsubtitles'); commands.push('editsubtitles');
} }
commands.push('editimages');
if (item.Type != 'Timer') {
commands.push('editimages');
}
} }
if (user.Policy.IsAdministrator) { if (user.Policy.IsAdministrator) {
@ -1139,6 +1145,9 @@
return "itemdetails.html?id=" + id; return "itemdetails.html?id=" + id;
} }
if (item.Type == "Timer") {
return "livetvtimer.html?id=" + id;
}
if (item.Type == "BoxSet") { if (item.Type == "BoxSet") {
return "itemdetails.html?id=" + id; return "itemdetails.html?id=" + id;
} }
@ -1531,7 +1540,7 @@
}); });
} }
if (item.UserData.PlaybackPositionTicks) { if (item.UserData && item.UserData.PlaybackPositionTicks) {
atts.push({ atts.push({
name: 'positionticks', name: 'positionticks',
value: (item.UserData.PlaybackPositionTicks || 0) value: (item.UserData.PlaybackPositionTicks || 0)
@ -1594,7 +1603,7 @@
supportsAddingToCollection: function (item) { supportsAddingToCollection: function (item) {
var invalidTypes = ['Person', 'Genre', 'MusicGenre', 'Studio', 'GameGenre', 'BoxSet', 'Playlist', 'UserView', 'CollectionFolder', 'Audio', 'Episode', 'TvChannel', 'Program', 'MusicAlbum']; var invalidTypes = ['Person', 'Genre', 'MusicGenre', 'Studio', 'GameGenre', 'BoxSet', 'Playlist', 'UserView', 'CollectionFolder', 'Audio', 'Episode', 'TvChannel', 'Program', 'MusicAlbum', 'Timer'];
return !item.CollectionType && invalidTypes.indexOf(item.Type) == -1 && item.MediaType != 'Photo'; return !item.CollectionType && invalidTypes.indexOf(item.Type) == -1 && item.MediaType != 'Photo';
}, },
@ -1675,7 +1684,10 @@
if (item.MediaType == 'Video' && item.Type != 'TvChannel' && item.Type != 'Program' && item.LocationType != 'Virtual') { if (item.MediaType == 'Video' && item.Type != 'TvChannel' && item.Type != 'Program' && item.LocationType != 'Virtual') {
itemCommands.push('editsubtitles'); itemCommands.push('editsubtitles');
} }
itemCommands.push('editimages');
if (item.Type != 'Timer') {
itemCommands.push('editimages');
}
return itemCommands; return itemCommands;
}, },
@ -1969,17 +1981,18 @@
showTitle = true; showTitle = true;
} }
var coverImage = options.coverImage; var coverImage = options.coverImage;
var imageItem = item.Type == 'Timer' ? (item.ProgramInfo || item) : item;
if (options.autoThumb && item.ImageTags && item.ImageTags.Primary && item.PrimaryImageAspectRatio && item.PrimaryImageAspectRatio >= 1.34) { if (options.autoThumb && imageItem.ImageTags && imageItem.ImageTags.Primary && imageItem.PrimaryImageAspectRatio && imageItem.PrimaryImageAspectRatio >= 1.34) {
width = posterWidth; width = posterWidth;
height = primaryImageAspectRatio ? Math.round(posterWidth / primaryImageAspectRatio) : null; height = primaryImageAspectRatio ? Math.round(posterWidth / primaryImageAspectRatio) : null;
imgUrl = ApiClient.getImageUrl(item.Id, { imgUrl = ApiClient.getImageUrl(imageItem.Id, {
type: "Primary", type: "Primary",
maxHeight: height, maxHeight: height,
maxWidth: width, maxWidth: width,
tag: item.ImageTags.Primary, tag: imageItem.ImageTags.Primary,
enableImageEnhancers: enableImageEnhancers enableImageEnhancers: enableImageEnhancers
}); });
@ -1991,80 +2004,80 @@
} }
} }
} else if (options.autoThumb && item.ImageTags && item.ImageTags.Thumb) { } else if (options.autoThumb && imageItem.ImageTags && imageItem.ImageTags.Thumb) {
imgUrl = ApiClient.getScaledImageUrl(item.Id, { imgUrl = ApiClient.getScaledImageUrl(imageItem.Id, {
type: "Thumb", type: "Thumb",
maxWidth: thumbWidth, maxWidth: thumbWidth,
tag: item.ImageTags.Thumb, tag: imageItem.ImageTags.Thumb,
enableImageEnhancers: enableImageEnhancers enableImageEnhancers: enableImageEnhancers
}); });
} else if (options.preferBackdrop && item.BackdropImageTags && item.BackdropImageTags.length) { } else if (options.preferBackdrop && imageItem.BackdropImageTags && imageItem.BackdropImageTags.length) {
imgUrl = ApiClient.getScaledImageUrl(item.Id, { imgUrl = ApiClient.getScaledImageUrl(imageItem.Id, {
type: "Backdrop", type: "Backdrop",
maxWidth: thumbWidth, maxWidth: thumbWidth,
tag: item.BackdropImageTags[0], tag: imageItem.BackdropImageTags[0],
enableImageEnhancers: enableImageEnhancers enableImageEnhancers: enableImageEnhancers
}); });
} else if (options.preferThumb && item.ImageTags && item.ImageTags.Thumb) { } else if (options.preferThumb && imageItem.ImageTags && imageItem.ImageTags.Thumb) {
imgUrl = ApiClient.getScaledImageUrl(item.Id, { imgUrl = ApiClient.getScaledImageUrl(imageItem.Id, {
type: "Thumb", type: "Thumb",
maxWidth: thumbWidth, maxWidth: thumbWidth,
tag: item.ImageTags.Thumb, tag: imageItem.ImageTags.Thumb,
enableImageEnhancers: enableImageEnhancers enableImageEnhancers: enableImageEnhancers
}); });
} else if (options.preferBanner && item.ImageTags && item.ImageTags.Banner) { } else if (options.preferBanner && imageItem.ImageTags && imageItem.ImageTags.Banner) {
imgUrl = ApiClient.getScaledImageUrl(item.Id, { imgUrl = ApiClient.getScaledImageUrl(imageItem.Id, {
type: "Banner", type: "Banner",
maxWidth: bannerWidth, maxWidth: bannerWidth,
tag: item.ImageTags.Banner, tag: imageItem.ImageTags.Banner,
enableImageEnhancers: enableImageEnhancers enableImageEnhancers: enableImageEnhancers
}); });
} else if (options.preferThumb && item.SeriesThumbImageTag && options.inheritThumb !== false) { } else if (options.preferThumb && imageItem.SeriesThumbImageTag && options.inheritThumb !== false) {
imgUrl = ApiClient.getScaledImageUrl(item.SeriesId, { imgUrl = ApiClient.getScaledImageUrl(imageItem.SeriesId, {
type: "Thumb", type: "Thumb",
maxWidth: thumbWidth, maxWidth: thumbWidth,
tag: item.SeriesThumbImageTag, tag: imageItem.SeriesThumbImageTag,
enableImageEnhancers: enableImageEnhancers enableImageEnhancers: enableImageEnhancers
}); });
} else if (options.preferThumb && item.ParentThumbItemId && options.inheritThumb !== false) { } else if (options.preferThumb && imageItem.ParentThumbItemId && options.inheritThumb !== false) {
imgUrl = ApiClient.getThumbImageUrl(item.ParentThumbItemId, { imgUrl = ApiClient.getThumbImageUrl(imageItem.ParentThumbItemId, {
type: "Thumb", type: "Thumb",
maxWidth: thumbWidth, maxWidth: thumbWidth,
enableImageEnhancers: enableImageEnhancers enableImageEnhancers: enableImageEnhancers
}); });
} else if (options.preferThumb && item.BackdropImageTags && item.BackdropImageTags.length) { } else if (options.preferThumb && imageItem.BackdropImageTags && imageItem.BackdropImageTags.length) {
imgUrl = ApiClient.getScaledImageUrl(item.Id, { imgUrl = ApiClient.getScaledImageUrl(imageItem.Id, {
type: "Backdrop", type: "Backdrop",
maxWidth: thumbWidth, maxWidth: thumbWidth,
tag: item.BackdropImageTags[0], tag: imageItem.BackdropImageTags[0],
enableImageEnhancers: enableImageEnhancers enableImageEnhancers: enableImageEnhancers
}); });
forceName = true; forceName = true;
} else if (item.ImageTags && item.ImageTags.Primary) { } else if (imageItem.ImageTags && imageItem.ImageTags.Primary) {
width = posterWidth; width = posterWidth;
height = primaryImageAspectRatio ? Math.round(posterWidth / primaryImageAspectRatio) : null; height = primaryImageAspectRatio ? Math.round(posterWidth / primaryImageAspectRatio) : null;
imgUrl = ApiClient.getImageUrl(item.Id, { imgUrl = ApiClient.getImageUrl(imageItem.Id, {
type: "Primary", type: "Primary",
maxHeight: height, maxHeight: height,
maxWidth: width, maxWidth: width,
tag: item.ImageTags.Primary, tag: imageItem.ImageTags.Primary,
enableImageEnhancers: enableImageEnhancers enableImageEnhancers: enableImageEnhancers
}); });
@ -2076,25 +2089,25 @@
} }
} }
} }
else if (item.ParentPrimaryImageTag) { else if (imageItem.ParentPrimaryImageTag) {
imgUrl = ApiClient.getImageUrl(item.ParentPrimaryImageItemId, { imgUrl = ApiClient.getImageUrl(imageItem.ParentPrimaryImageItemId, {
type: "Primary", type: "Primary",
maxWidth: posterWidth, maxWidth: posterWidth,
tag: item.ParentPrimaryImageTag, tag: item.ParentPrimaryImageTag,
enableImageEnhancers: enableImageEnhancers enableImageEnhancers: enableImageEnhancers
}); });
} }
else if (item.AlbumId && item.AlbumPrimaryImageTag) { else if (imageItem.AlbumId && imageItem.AlbumPrimaryImageTag) {
height = squareSize; height = squareSize;
width = primaryImageAspectRatio ? Math.round(height * primaryImageAspectRatio) : null; width = primaryImageAspectRatio ? Math.round(height * primaryImageAspectRatio) : null;
imgUrl = ApiClient.getScaledImageUrl(item.AlbumId, { imgUrl = ApiClient.getScaledImageUrl(imageItem.AlbumId, {
type: "Primary", type: "Primary",
maxHeight: height, maxHeight: height,
maxWidth: width, maxWidth: width,
tag: item.AlbumPrimaryImageTag, tag: imageItem.AlbumPrimaryImageTag,
enableImageEnhancers: enableImageEnhancers enableImageEnhancers: enableImageEnhancers
}); });
@ -2106,46 +2119,46 @@
} }
} }
} }
else if (item.Type == 'Season' && item.ImageTags && item.ImageTags.Thumb) { else if (imageItem.Type == 'Season' && imageItem.ImageTags && imageItem.ImageTags.Thumb) {
imgUrl = ApiClient.getScaledImageUrl(item.Id, { imgUrl = ApiClient.getScaledImageUrl(imageItem.Id, {
type: "Thumb", type: "Thumb",
maxWidth: thumbWidth, maxWidth: thumbWidth,
tag: item.ImageTags.Thumb, tag: imageItem.ImageTags.Thumb,
enableImageEnhancers: enableImageEnhancers enableImageEnhancers: enableImageEnhancers
}); });
} }
else if (item.BackdropImageTags && item.BackdropImageTags.length) { else if (imageItem.BackdropImageTags && imageItem.BackdropImageTags.length) {
imgUrl = ApiClient.getScaledImageUrl(item.Id, { imgUrl = ApiClient.getScaledImageUrl(imageItem.Id, {
type: "Backdrop", type: "Backdrop",
maxWidth: thumbWidth, maxWidth: thumbWidth,
tag: item.BackdropImageTags[0], tag: imageItem.BackdropImageTags[0],
enableImageEnhancers: enableImageEnhancers enableImageEnhancers: enableImageEnhancers
}); });
} else if (item.ImageTags && item.ImageTags.Thumb) { } else if (imageItem.ImageTags && imageItem.ImageTags.Thumb) {
imgUrl = ApiClient.getScaledImageUrl(item.Id, { imgUrl = ApiClient.getScaledImageUrl(imageItem.Id, {
type: "Thumb", type: "Thumb",
maxWidth: thumbWidth, maxWidth: thumbWidth,
tag: item.ImageTags.Thumb, tag: imageItem.ImageTags.Thumb,
enableImageEnhancers: enableImageEnhancers enableImageEnhancers: enableImageEnhancers
}); });
} else if (item.SeriesThumbImageTag) { } else if (imageItem.SeriesThumbImageTag) {
imgUrl = ApiClient.getScaledImageUrl(item.SeriesId, { imgUrl = ApiClient.getScaledImageUrl(imageItem.SeriesId, {
type: "Thumb", type: "Thumb",
maxWidth: thumbWidth, maxWidth: thumbWidth,
tag: item.SeriesThumbImageTag, tag: imageItem.SeriesThumbImageTag,
enableImageEnhancers: enableImageEnhancers enableImageEnhancers: enableImageEnhancers
}); });
} else if (item.ParentThumbItemId) { } else if (imageItem.ParentThumbItemId) {
imgUrl = ApiClient.getThumbImageUrl(item, { imgUrl = ApiClient.getThumbImageUrl(imageItem, {
type: "Thumb", type: "Thumb",
maxWidth: thumbWidth, maxWidth: thumbWidth,
enableImageEnhancers: enableImageEnhancers enableImageEnhancers: enableImageEnhancers
@ -2284,7 +2297,7 @@
html += '<div class="mediaSourceIndicator">' + mediaSourceCount + '</div>'; html += '<div class="mediaSourceIndicator">' + mediaSourceCount + '</div>';
} }
var progressHtml = options.showProgress === false || item.IsFolder ? '' : LibraryBrowser.getItemProgressBarHtml((item.Type == 'Recording' ? item : item.UserData)); var progressHtml = options.showProgress === false || item.IsFolder ? '' : LibraryBrowser.getItemProgressBarHtml((item.Type == 'Recording' ? item : item.UserData || {}));
var footerOverlayed = false; var footerOverlayed = false;
@ -2412,6 +2425,31 @@
lines.push(item.ProductionYear || ''); lines.push(item.ProductionYear || '');
} }
if (options.showAirTime) {
var airTimeText;
if (item.StartDate) {
try {
var date = datetime.parseISO8601Date(item.StartDate);
airTimeText = date.toLocaleDateString();
airTimeText += ', ' + datetime.getDisplayTime(date);
if (item.EndDate) {
date = datetime.parseISO8601Date(item.EndDate);
airTimeText += ' - ' + datetime.getDisplayTime(date);
}
}
catch (e) {
console.log("Error parsing date: " + item.PremiereDate);
}
}
lines.push(airTimeText || '');
}
if (item.Type == 'TvChannel') { if (item.Type == 'TvChannel') {
if (item.CurrentProgram) { if (item.CurrentProgram) {

View file

@ -420,7 +420,7 @@
}); });
} }
if (user.Policy.EnablePublicSharing) { if (user.Policy.EnablePublicSharing && commands.indexOf('share') != -1) {
items.push({ items.push({
name: Globalize.translate('ButtonShare'), name: Globalize.translate('ButtonShare'),
id: 'share', id: 'share',

View file

@ -2,6 +2,23 @@
function getTimersHtml(timers) { function getTimersHtml(timers) {
var items = timers.map(function (t) {
t.Type = 'Timer';
return t;
});
var html = LibraryBrowser.getPosterViewHtml({
items: items,
shape: "square",
showTitle: true,
showAirTime: true,
lazy: true,
cardLayout: true,
showDetailsMenu: true
});
return Promise.resolve(html);
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
require(['paper-fab', 'paper-item-body', 'paper-icon-item'], function () { require(['paper-fab', 'paper-item-body', 'paper-icon-item'], function () {

View file

@ -78,9 +78,7 @@
ImageLoader.lazyChildren(recordingItems); ImageLoader.lazyChildren(recordingItems);
} }
function reload(page) { function renderActiveRecordings(page) {
Dashboard.showLoadingMsg();
ApiClient.getLiveTvRecordings({ ApiClient.getLiveTvRecordings({
@ -93,6 +91,9 @@
renderRecordings(page.querySelector('#activeRecordings'), result.Items); renderRecordings(page.querySelector('#activeRecordings'), result.Items);
}); });
}
function renderLatestRecordings(page) {
ApiClient.getLiveTvRecordings({ ApiClient.getLiveTvRecordings({
@ -105,6 +106,68 @@
renderRecordings(page.querySelector('#latestRecordings'), result.Items); renderRecordings(page.querySelector('#latestRecordings'), result.Items);
}); });
}
function deleteTimer(page, id) {
require(['confirm'], function (confirm) {
confirm(Globalize.translate('MessageConfirmRecordingCancellation'), Globalize.translate('HeaderConfirmRecordingCancellation')).then(function () {
Dashboard.showLoadingMsg();
ApiClient.cancelLiveTvTimer(id).then(function () {
require(['toast'], function (toast) {
toast(Globalize.translate('MessageRecordingCancelled'));
});
reload(page);
});
});
});
}
function renderTimers(page, timers) {
LiveTvHelpers.getTimersHtml(timers).then(function (html) {
var elem = page.querySelector('#upcomingRecordings');
if (html) {
elem.classList.remove('hide');
} else {
elem.classList.add('hide');
}
elem.querySelector('.itemsContainer').innerHTML = html;
ImageLoader.lazyChildren(elem);
$('.btnDeleteTimer', elem).on('click', function () {
var id = this.getAttribute('data-timerid');
deleteTimer(page, id);
});
});
}
function renderUpcomingRecordings(page) {
ApiClient.getLiveTvTimers().then(function (result) {
renderTimers(page, result.Items);
});
}
function reload(page) {
Dashboard.showLoadingMsg();
renderUpcomingRecordings(page);
renderActiveRecordings(page);
renderLatestRecordings(page);
ApiClient.getLiveTvRecordingGroups({ ApiClient.getLiveTvRecordingGroups({

View file

@ -168,10 +168,6 @@
renderMethod = 'renderRecordingsTab'; renderMethod = 'renderRecordingsTab';
break; break;
case 4: case 4:
depends.push('scripts/livetvtimers');
renderMethod = 'renderTimersTab';
break;
case 5:
depends.push('scripts/livetvseriestimers'); depends.push('scripts/livetvseriestimers');
renderMethod = 'renderSeriesTimersTab'; renderMethod = 'renderSeriesTimersTab';
break; break;

View file

@ -1,58 +0,0 @@
define(['jQuery'], function ($) {
function deleteTimer(page, id) {
require(['confirm'], function (confirm) {
confirm(Globalize.translate('MessageConfirmRecordingCancellation'), Globalize.translate('HeaderConfirmRecordingCancellation')).then(function () {
Dashboard.showLoadingMsg();
ApiClient.cancelLiveTvTimer(id).then(function () {
require(['toast'], function (toast) {
toast(Globalize.translate('MessageRecordingCancelled'));
});
reload(page);
});
});
});
}
function renderTimers(page, timers) {
LiveTvHelpers.getTimersHtml(timers).then(function (html) {
var elem = $('#items', page).html(html)[0];
ImageLoader.lazyChildren(elem);
$('.btnDeleteTimer', elem).on('click', function () {
var id = this.getAttribute('data-timerid');
deleteTimer(page, id);
});
Dashboard.hideLoadingMsg();
});
}
function reload(page) {
Dashboard.showLoadingMsg();
ApiClient.getLiveTvTimers().then(function (result) {
renderTimers(page, result.Items);
});
}
window.LiveTvPage.renderTimersTab = function (page, tabContent) {
if (LibraryBrowser.needsRefresh(tabContent)) {
reload(tabContent);
}
};
});

View file

@ -1,4 +1,4 @@
define(['datetime', 'jQuery'], function (datetime, $) { define(['datetime', 'jQuery', 'paper-icon-button'], function (datetime, $) {
var currentPlayer; var currentPlayer;

View file

@ -14,6 +14,9 @@
if (item.Type == 'Program') { if (item.Type == 'Program') {
return false; return false;
} }
if (item.Type == 'Timer') {
return false;
}
return item.RunTimeTicks || item.IsFolder || item.Type == "Genre" || item.Type == "MusicGenre" || item.Type == "MusicArtist"; return item.RunTimeTicks || item.IsFolder || item.Type == "Genre" || item.Type == "MusicGenre" || item.Type == "MusicArtist";
} }
}; };

View file

@ -2349,5 +2349,6 @@
"LabelOriginalTitle": "Original title:", "LabelOriginalTitle": "Original title:",
"LabelSortTitle": "Sort title:", "LabelSortTitle": "Sort title:",
"OptionConvertRecordingPreserveAudio": "Preserve original audio when converting recordings", "OptionConvertRecordingPreserveAudio": "Preserve original audio when converting recordings",
"OptionConvertRecordingPreserveAudioHelp": "This will provide better audio but may require transcoding during playback on some devices." "OptionConvertRecordingPreserveAudioHelp": "This will provide better audio but may require transcoding during playback on some devices.",
"HeaderUpcomingRecordings": "Upcoming Recordings"
} }