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

add recording post processing option

This commit is contained in:
Luke Pulverenti 2016-11-22 14:45:55 -05:00
parent 6763740078
commit 75280f26ca
11 changed files with 99 additions and 42 deletions

View file

@ -1,4 +1,4 @@
<div id="liveTvSeriesTimerPage" data-role="page" class="page libraryPage liveTvPage noSecondaryNavPage" data-title="${HeaderLiveTv}" data-menubutton="false">
<div id="liveTvSeriesTimerPage" data-role="page" class="page libraryPage liveTvPage noSecondaryNavPage" data-title="${HeaderLiveTv}" data-backbutton="true">
<style>
@media all and (min-width: 800px) {

View file

@ -22,14 +22,10 @@
</select>
<div class="fieldDescription">${LabelNumberOfGuideDaysHelp}</div>
</div>
<h3 class="checkboxListLabel">${LabelEnableInternetMetadataForTvPrograms}</h3>
<div class="checkboxList">
<label>
<input type="checkbox" is="emby-checkbox" id="chkMovies" />
<span>${OptionTVMovies}</span>
</label>
</div>
<br />
<label class="checkboxContainer">
<input type="checkbox" is="emby-checkbox" id="chkMovies" />
<span>${OptionDownloadInternetMetadataTvPrograms}</span>
</label>
<div class="inputContainer">
<div style="display: flex; align-items: center;">
<div style="flex-grow:1;">
@ -39,10 +35,6 @@
</div>
<div class="fieldDescription">${LabelRecordingPathHelp}</div>
</div>
<label class="checkboxContainer">
<input type="checkbox" is="emby-checkbox" id="chkEnableRecordingSubfolders" />
<span>${OptionEnableRecordingSubfolders}</span>
</label>
<div class="inputContainer">
<div style="display: flex; align-items: center;">
<div style="flex-grow:1;">
@ -92,12 +84,41 @@
<div class="fieldDescription checkboxFieldDescription">${OptionConvertRecordingPreserveAudioHelp}</div>
</div>
<div>
<h1>${HeaderDefaultPadding}</h1>
<h1>${HeaderRecordingPostProcessing}</h1>
<div class="inputContainer">
<input is="emby-input" type="number" id="txtPrePaddingMinutes" pattern="[0-9]*" required="required" min="0" step="1" label="${LabelPrePaddingMinutes}" />
<div style="display: flex; align-items: center;">
<div style="flex-grow:1;">
<input is="emby-input" type="text" id="txtPostProcessor" label="${LabelPostProcessor}" />
</div>
<button type="button" is="paper-icon-button-light" id="btnSelectPostProcessorPath" class="autoSize"><i class="md-icon">search</i></button>
</div>
</div>
<div class="inputContainer">
<input is="emby-input" type="number" id="txtPostPaddingMinutes" pattern="[0-9]*" required="required" min="0" step="1" label="${LabelPostPaddingMinutes}" />
<input is="emby-input" type="text" id="txtPostProcessorArguments" label="${LabelPostProcessorArguments}" />
<div class="fieldDescription">${LabelPostProcessorArgumentsHelp}</div>
</div>
</div>
<div>
<h1>${HeaderDefaultRecordingSettings}</h1>
<div class="inputContainer">
<div style="display: flex; align-items: center;">
<div style="flex-grow: 1;">
<input is="emby-input" type="number" id="txtPrePaddingMinutes" pattern="[0-9]*" required="required" min="0" step="1" label="${LabelStartWhenPossible}" />
</div>
<div class="fieldDescription" style="margin-left:.5em;font-size:90%;margin-top:1.3em;">
${MinutesBefore}
</div>
</div>
</div>
<div class="inputContainer">
<div style="display: flex; align-items: center;">
<div style="flex-grow: 1;">
<input is="emby-input" type="number" id="txtPostPaddingMinutes" pattern="[0-9]*" required="required" min="0" step="1" label="${LabelStopWhenPossible}" />
</div>
<div class="fieldDescription" style="margin-left:.5em;font-size:90%;margin-top:1.3em;">
${MinutesAfter}
</div>
</div>
</div>
</div>
<br />

View file

@ -65,7 +65,7 @@
</div>
<div class="checkboxContainer checkboxContainer-withDescription">
<label>
<input type="checkbox" is="emby-checkbox" id="chkThemeSong"/>
<input type="checkbox" is="emby-checkbox" id="chkThemeSong" />
<span>${LabelEnableThemeSongs}</span>
</label>
<div class="fieldDescription checkboxFieldDescription">${LabelEnableThemeSongsHelp}</div>
@ -76,16 +76,17 @@
${HeaderDisplay}
</h1>
<br />
<div class="checkboxList">
<div class="checkboxContainer checkboxContainer-withDescription">
<label>
<input type="checkbox" is="emby-checkbox" class="chkDisplayMissingEpisodes" />
<span>${LabelDisplayMissingEpisodesWithinSeasons}</span>
</label>
<label>
<input type="checkbox" is="emby-checkbox" class="chkDisplayUnairedEpisodes" />
<span>${LabelUnairedMissingEpisodesWithinSeasons}</span>
</label>
<div class="fieldDescription checkboxFieldDescription">${LabelDisplayMissingEpisodesWithinSeasonsHelp}</div>
</div>
<label class="checkboxContainer">
<input type="checkbox" is="emby-checkbox" class="chkDisplayUnairedEpisodes" />
<span>${LabelUnairedMissingEpisodesWithinSeasons}</span>
</label>
</div>
<button is="emby-button" type="submit" class="raised button-submit block btnSave hide">
<span>${ButtonSave}</span>

View file

@ -22,7 +22,8 @@
page.querySelector('#txtSeriesRecordingPath').value = config.SeriesRecordingPath || '';
page.querySelector('#selectConversionFormat').value = config.RecordingEncodingFormat || '';
page.querySelector('#chkEnableRecordingSubfolders').checked = config.EnableRecordingSubfolders || false;
page.querySelector('#txtPostProcessor').value = config.RecordingPostProcessor || '';
page.querySelector('#txtPostProcessorArguments').value = config.RecordingPostProcessorArguments || '';
Dashboard.hideLoadingMsg();
}
@ -57,7 +58,9 @@
config.RecordingEncodingFormat = form.querySelector('#selectConversionFormat').value;
config.PrePaddingSeconds = $('#txtPrePaddingMinutes', form).val() * 60;
config.PostPaddingSeconds = $('#txtPostPaddingMinutes', form).val() * 60;
config.EnableRecordingSubfolders = form.querySelector('#chkEnableRecordingSubfolders').checked;
config.RecordingPostProcessor = $('#txtPostProcessor', form).val();
config.RecordingPostProcessorArguments = $('#txtPostProcessorArguments', form).val();
ApiClient.updateNamedConfiguration("livetv", config).then(function () {
Dashboard.processServerConfigurationUpdateResult();
@ -164,6 +167,26 @@
});
});
$('#btnSelectPostProcessorPath', page).on("click.selectDirectory", function () {
require(['directorybrowser'], function (directoryBrowser) {
var picker = new directoryBrowser();
picker.show({
includeFiles: true,
callback: function (path) {
if (path) {
$('#txtPostProcessor', page).val(path);
}
picker.close();
}
});
});
});
}).on('pageshow', "#liveTvSettingsPage", function () {
LibraryMenu.setTabs('livetvadmin', 1, getTabs);

View file

@ -1,4 +1,4 @@
define(['events', 'libraryBrowser', 'imageLoader', 'listView', 'cardBuilder', 'emby-itemscontainer'], function (events, libraryBrowser, imageLoader, listView, cardBuilder) {
define(['events', 'libraryBrowser', 'imageLoader', 'listView', 'cardBuilder', 'apphost', 'emby-itemscontainer'], function (events, libraryBrowser, imageLoader, listView, cardBuilder, appHost) {
'use strict';
return function (view, params, tabContent) {
@ -25,7 +25,7 @@
StartIndex: 0,
Limit: pageSize
},
view: libraryBrowser.getSavedView(key) || 'Poster'
view: libraryBrowser.getSavedView(key) || (appHost.preferVisualCards ? 'PosterCard' : 'Poster')
};
libraryBrowser.loadSavedQueryValues(key, pageData.query);

View file

@ -25,7 +25,7 @@
StartIndex: 0,
Limit: pageSize
},
view: libraryBrowser.getSavedView(key) || 'Poster'
view: libraryBrowser.getSavedView(key) || (appHost.preferVisualCards ? 'PosterCard' : 'Poster')
};
pageData.query.ParentId = params.topParentId;

View file

@ -1,4 +1,4 @@
define(['events', 'libraryBrowser', 'imageLoader', 'alphaPicker', 'listView', 'cardBuilder', 'emby-itemscontainer'], function (events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder) {
define(['events', 'libraryBrowser', 'imageLoader', 'alphaPicker', 'listView', 'cardBuilder', 'apphost', 'emby-itemscontainer'], function (events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost) {
'use strict';
return function (view, params, tabContent) {
@ -25,7 +25,7 @@
StartIndex: 0,
Limit: pageSize
},
view: libraryBrowser.getSavedView(key) || 'Poster'
view: libraryBrowser.getSavedView(key) || (appHost.preferVisualCards ? 'PosterCard' : 'Poster')
};
libraryBrowser.loadSavedQueryValues(key, pageData.query);
@ -92,7 +92,8 @@
context: 'movies',
cardLayout: true,
showTitle: true,
showYear: true
showYear: true,
vibrant: true
});
}
else if (viewStyle == "Banner") {
@ -120,7 +121,8 @@
context: 'movies',
showTitle: true,
showYear: true,
cardLayout: true
cardLayout: true,
vibrant: true
});
}
else {
@ -131,7 +133,9 @@
shape: "portrait",
context: 'movies',
centerText: true,
overlayPlayButton: true
overlayPlayButton: true,
showTitle: true,
showYear: true
});
}

View file

@ -1,4 +1,4 @@
define(['events', 'libraryBrowser', 'imageLoader', 'alphaPicker', 'listView', 'cardBuilder', 'emby-itemscontainer'], function (events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder) {
define(['events', 'libraryBrowser', 'imageLoader', 'alphaPicker', 'listView', 'cardBuilder', 'apphost', 'emby-itemscontainer'], function (events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost) {
'use strict';
return function (view, params, tabContent) {
@ -25,7 +25,7 @@
StartIndex: 0,
Limit: pageSize
},
view: libraryBrowser.getSavedView(key) || 'PosterCard'
view: libraryBrowser.getSavedView(key) || (appHost.preferVisualCards ? 'PosterCard' : 'Poster')
};
pageData.query.ParentId = params.topParentId;

View file

@ -1,4 +1,4 @@
define(['events', 'libraryBrowser', 'imageLoader', 'alphaPicker', 'listView', 'cardBuilder', 'emby-itemscontainer'], function (events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder) {
define(['events', 'libraryBrowser', 'imageLoader', 'alphaPicker', 'listView', 'cardBuilder', 'apphost', 'emby-itemscontainer'], function (events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost) {
'use strict';
return function (view, params, tabContent) {
@ -23,7 +23,7 @@
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
Limit: LibraryBrowser.getDefaultPageSize()
},
view: libraryBrowser.getSavedView(key) || 'PosterCard'
view: libraryBrowser.getSavedView(key) || (appHost.preferVisualCards ? 'PosterCard' : 'Poster')
};
pageData.query.ParentId = params.topParentId;

View file

@ -1,4 +1,4 @@
define(['libraryBrowser', 'cardBuilder'], function (libraryBrowser, cardBuilder) {
define(['libraryBrowser', 'cardBuilder', 'apphost'], function (libraryBrowser, cardBuilder, appHost) {
'use strict';
return function (view, params, tabContent) {
@ -20,7 +20,7 @@
Fields: "DateCreated,ItemCounts",
StartIndex: 0
},
view: libraryBrowser.getSavedView(key) || 'PosterCard'
view: libraryBrowser.getSavedView(key) || (appHost.preferVisualCards ? 'PosterCard' : 'Poster')
};
pageData.query.ParentId = params.topParentId;

View file

@ -94,9 +94,11 @@
"OptionEnableAccessToAllLibraries": "Enable access to all libraries",
"DeviceAccessHelp": "This only applies to devices that can be uniquely identified and will not prevent browser access. Filtering user device access will prevent them from using new devices until they've been approved here.",
"LabelDisplayMissingEpisodesWithinSeasons": "Display missing episodes within seasons",
"LabelDisplayMissingEpisodesWithinSeasonsHelp": "This must also be enabled for TV libraries in Emby Server setup.",
"LabelUnairedMissingEpisodesWithinSeasons": "Display unaired episodes within seasons",
"ImportMissingEpisodesHelp": "If enabled, information about missing episodes will be imported into your Emby database and displayed within seasons and series. This may cause significantly longer library scans.",
"HeaderVideoPlaybackSettings": "Video Playback Settings",
"OptionDownloadInternetMetadataTvPrograms": "Download internet metadata for programs listed in the guide",
"HeaderPlaybackSettings": "Playback Settings",
"LabelAudioLanguagePreference": "Audio language preference:",
"LabelSubtitleLanguagePreference": "Subtitle language preference:",
@ -339,8 +341,10 @@
"TabFavorites": "Favorites",
"TabMyLibrary": "My Library",
"ButtonCancelRecording": "Cancel Recording",
"LabelPrePaddingMinutes": "Pre-padding minutes:",
"LabelPostPaddingMinutes": "Post-padding minutes:",
"LabelStartWhenPossible": "Start when possible:",
"LabelStopWhenPossible": "Stop when possible:",
"MinutesBefore": "minutes before",
"MinutesAfter": "minutes after",
"HeaderWhatsOnTV": "What's On",
"TabStatus": "Status",
"TabSettings": "Settings",
@ -1248,7 +1252,7 @@
"HeaderSetupTVGuide": "Setup TV Guide",
"LabelDataProvider": "Data provider:",
"OptionSendRecordingsToAutoOrganize": "Automatically organize recordings into existing series folders in other libraries",
"HeaderDefaultPadding": "Default Padding",
"HeaderDefaultRecordingSettings": "Default Recording Settings",
"OptionEnableRecordingSubfolders": "Create sub-folders for categories such as Sports, Kids, etc.",
"HeaderSubtitles": "Subtitles",
"HeaderVideos": "Videos",
@ -2024,5 +2028,9 @@
"SynologyUpdateInstructions": "Please login to DSM and go to Package Center to update.",
"LatestFromLibrary": "Latest {0}",
"LabelMoviePrefix": "Movie prefix:",
"LabelMoviePrefixHelp": "If a prefix is applied to movie titles, enter it here so that Emby can handle it properly."
"LabelMoviePrefixHelp": "If a prefix is applied to movie titles, enter it here so that Emby can handle it properly.",
"HeaderRecordingPostProcessing": "Recording Post Processing",
"LabelPostProcessorArguments": "Post-processor command line arguments:",
"LabelPostProcessorArgumentsHelp": "Use {path} as the path to the recording file.",
"LabelPostProcessor": "Post-processing application:"
}