add priority language setting

This commit is contained in:
TheBeastLT
2021-09-14 21:15:13 +02:00
committed by TheBeastLT
parent 6b1bb8ebba
commit f1a2a69170
4 changed files with 49 additions and 7 deletions

View File

@@ -1,5 +1,6 @@
const { DebridOptions } = require('../moch/options'); const { DebridOptions } = require('../moch/options');
const { QualityFilter, Providers } = require('./filter'); const { QualityFilter, Providers } = require('./filter');
const { LanguageOptions } = require('./sort');
const PRE_CONFIGURATIONS = { const PRE_CONFIGURATIONS = {
lite: { lite: {
@@ -54,7 +55,8 @@ function liteConfig() {
function brazucaConfig() { function brazucaConfig() {
const config = {}; const config = {};
config[Providers.key] = ['nyaasi', 'comando', 'comoeubaixo', 'lapumia', 'ondebaixa']; config[Providers.key] = Providers.options.map(provider => provider.key).filter(key => key !== 'rutor');
config[LanguageOptions.key] = 'portuguese';
return config; return config;
} }

View File

@@ -167,7 +167,7 @@ button:active {
} }
.input, .btn { .input, .btn {
height: 3.5vh; height: 3.8vh;
width: 100%; width: 100%;
margin: auto; margin: auto;
margin-bottom: 10px; margin-bottom: 10px;
@@ -182,6 +182,7 @@ button:active {
`; `;
const { Providers } = require('./filter'); const { Providers } = require('./filter');
const { SortOptions } = require('./sort'); const { SortOptions } = require('./sort');
const { LanguageOptions } = require('./sort');
const { QualityFilter } = require('./filter'); const { QualityFilter } = require('./filter');
const { DebridOptions } = require('../moch/options'); const { DebridOptions } = require('../moch/options');
const { MochOptions } = require('../moch/moch'); const { MochOptions } = require('../moch/moch');
@@ -190,6 +191,7 @@ const { PreConfigurations } = require('../lib/configuration');
function landingTemplate(manifest, config = {}) { function landingTemplate(manifest, config = {}) {
const providers = config.providers || []; const providers = config.providers || [];
const sort = config[SortOptions.key] || SortOptions.options.qualitySeeders.key; const sort = config[SortOptions.key] || SortOptions.options.qualitySeeders.key;
const language = config[LanguageOptions.key];
const qualityFilters = config[QualityFilter.key] || []; const qualityFilters = config[QualityFilter.key] || [];
const limit = config.limit || ''; const limit = config.limit || '';
@@ -216,6 +218,9 @@ function landingTemplate(manifest, config = {}) {
const sortOptionsHTML = Object.values(SortOptions.options) const sortOptionsHTML = Object.values(SortOptions.options)
.map((option, i) => `<option value="${option.key}" ${i === 0 ? 'selected' : ''}>${option.description}</option>`) .map((option, i) => `<option value="${option.key}" ${i === 0 ? 'selected' : ''}>${option.description}</option>`)
.join('\n'); .join('\n');
const languageOptionsHTML = LanguageOptions.options
.map((option, i) => `<option value="${option.key}">${option.label}</option>`)
.join('\n');
const qualityFiltersHTML = Object.values(QualityFilter.options) const qualityFiltersHTML = Object.values(QualityFilter.options)
.map(option => `<option value="${option.key}">${option.label}</option>`) .map(option => `<option value="${option.key}">${option.label}</option>`)
.join('\n'); .join('\n');
@@ -277,6 +282,12 @@ function landingTemplate(manifest, config = {}) {
${sortOptionsHTML} ${sortOptionsHTML}
</select> </select>
<label class="label" for="iLanguage">Priority language:</label>
<select id="iLanguage" class="input" onchange="generateInstallLink()" title="Streams with the selected dubs/subs language will be shown on the top">
<option value="none" selected>None</option>
${languageOptionsHTML}
</select>
<label class="label" for="iQualityFilter">Exclude qualities/resolutions:</label> <label class="label" for="iQualityFilter">Exclude qualities/resolutions:</label>
<select id="iQualityFilter" class="input" name="qualityFilters[]" multiple="multiple"> <select id="iQualityFilter" class="input" name="qualityFilters[]" multiple="multiple">
${qualityFiltersHTML} ${qualityFiltersHTML}
@@ -356,6 +367,7 @@ function landingTemplate(manifest, config = {}) {
$('#iPutioClientId').val("${putioClientId}"); $('#iPutioClientId').val("${putioClientId}");
$('#iPutioToken').val("${putioToken}"); $('#iPutioToken').val("${putioToken}");
$('#iSort').val("${sort}"); $('#iSort').val("${sort}");
$('#iLanguage').val("${language || 'none'}");
$('#iLimit').val("${limit}"); $('#iLimit').val("${limit}");
generateInstallLink(); generateInstallLink();
debridProvidersChange(); debridProvidersChange();
@@ -384,6 +396,7 @@ function landingTemplate(manifest, config = {}) {
const providersValue = $('#iProviders').val().join(',') || ''; const providersValue = $('#iProviders').val().join(',') || '';
const qualityFilterValue = $('#iQualityFilter').val().join(',') || ''; const qualityFilterValue = $('#iQualityFilter').val().join(',') || '';
const sortValue = $('#iSort').val() || ''; const sortValue = $('#iSort').val() || '';
const languageValue = $('#iLanguage').val() || '';
const limitValue = $('#iLimit').val() || ''; const limitValue = $('#iLimit').val() || '';
const debridOptionsValue = $('#iDebridOptions').val().join(',') || ''; const debridOptionsValue = $('#iDebridOptions').val().join(',') || '';
@@ -398,6 +411,7 @@ function landingTemplate(manifest, config = {}) {
const providers = providersValue.length && providersValue; const providers = providersValue.length && providersValue;
const qualityFilters = qualityFilterValue.length && qualityFilterValue; const qualityFilters = qualityFilterValue.length && qualityFilterValue;
const sort = sortValue !== '${SortOptions.options.qualitySeeders.key}' && sortValue; const sort = sortValue !== '${SortOptions.options.qualitySeeders.key}' && sortValue;
const language = languageValue.length && languageValue !== 'none' && languageValue;
const limit = /^[1-9][0-9]*$/.test(limitValue) && limitValue; const limit = /^[1-9][0-9]*$/.test(limitValue) && limitValue;
const debridOptions = debridOptionsValue.length && debridOptionsValue.trim(); const debridOptions = debridOptionsValue.length && debridOptionsValue.trim();
@@ -413,6 +427,7 @@ function landingTemplate(manifest, config = {}) {
let configurationValue = [ let configurationValue = [
['${Providers.key}', providers], ['${Providers.key}', providers],
['${SortOptions.key}', sort], ['${SortOptions.key}', sort],
['${LanguageOptions.key}', language],
['${QualityFilter.key}', qualityFilters], ['${QualityFilter.key}', qualityFilters],
['limit', limit], ['limit', limit],
['${DebridOptions.key}', debridOptions], ['${DebridOptions.key}', debridOptions],

View File

@@ -6,14 +6,14 @@ const languageMapping = {
'english': '🇬🇧', 'english': '🇬🇧',
'japanese': '🇯🇵', 'japanese': '🇯🇵',
'russian': '🇷🇺', 'russian': '🇷🇺',
'portuguese': '🇵🇹',
'spanish': '🇪🇸',
'italian': '🇮🇹',
'korean': '🇰🇷', 'korean': '🇰🇷',
'chinese': '🇨🇳', 'chinese': '🇨🇳',
'french': '🇫🇷', 'french': '🇫🇷',
'german': '🇩🇪', 'german': '🇩🇪',
'dutch': '🇳🇱', 'dutch': '🇳🇱',
'portuguese': '🇵🇹',
'spanish': '🇪🇸',
'italian': '🇮🇹',
'hindi': '🇮🇳', 'hindi': '🇮🇳',
'telugu': '🇮🇳', 'telugu': '🇮🇳',
'tamil': '🇮🇳', 'tamil': '🇮🇳',
@@ -32,11 +32,13 @@ const languageMapping = {
'norwegian': '🇳🇴', 'norwegian': '🇳🇴',
'turkish': '🇹🇷', 'turkish': '🇹🇷',
'arabic': '🇸🇦', 'arabic': '🇸🇦',
'persian': '🇮🇷',
'hebrew': '🇮🇱', 'hebrew': '🇮🇱',
'vietnamese': '🇻🇳', 'vietnamese': '🇻🇳',
'indonesian': '🇮🇩', 'indonesian': '🇮🇩',
'thai': '🇹🇭' 'thai': '🇹🇭'
} }
const languages = Object.keys(languageMapping).slice(4);
function mapLanguages(languages) { function mapLanguages(languages) {
const mapped = languages const mapped = languages
@@ -49,4 +51,8 @@ function mapLanguages(languages) {
return [...new Set([].concat(mapped).concat(unmapped))]; return [...new Set([].concat(mapped).concat(unmapped))];
} }
module.exports = { mapLanguages } function containsLanguage(stream, language) {
return stream.title.includes(languageMapping[language]);
}
module.exports = { mapLanguages, containsLanguage, languages }

View File

@@ -1,4 +1,5 @@
const { QualityFilter } = require('./filter'); const { QualityFilter } = require('./filter');
const { languages, containsLanguage } = require('./languages');
const OTHER_QUALITIES = QualityFilter.options.find(option => option.key === 'other'); const OTHER_QUALITIES = QualityFilter.options.find(option => option.key === 'other');
const CAM_QUALITIES = QualityFilter.options.find(option => option.key === 'cam'); const CAM_QUALITIES = QualityFilter.options.find(option => option.key === 'cam');
@@ -28,8 +29,25 @@ const SortOptions = {
}, },
} }
} }
const LanguageOptions = {
key: 'language',
options: languages.map(lang => ({
key: lang,
label: lang.charAt(0).toUpperCase() + lang.substr(1)
}))
}
function sortStreams(streams, config) { function sortStreams(streams, config) {
const language = config[LanguageOptions.key];
if (language) {
const streamsWithLanguage = streams.filter(stream => containsLanguage(stream, language));
const streamsNoLanguage = streams.filter(stream => !streamsWithLanguage.includes(stream));
return _sortStreams(streamsWithLanguage, config).concat(_sortStreams(streamsNoLanguage, config));
}
return _sortStreams(streams, config);
}
function _sortStreams(streams, config) {
const sort = config.sort && config.sort.toLowerCase() || undefined; const sort = config.sort && config.sort.toLowerCase() || undefined;
const limit = /^[1-9][0-9]*$/.test(config.limit) && parseInt(config.limit) || undefined; const limit = /^[1-9][0-9]*$/.test(config.limit) && parseInt(config.limit) || undefined;
if (sort === SortOptions.options.seeders.key) { if (sort === SortOptions.options.seeders.key) {
@@ -138,3 +156,4 @@ function parseSize(sizeText) {
module.exports = sortStreams; module.exports = sortStreams;
module.exports.SortOptions = SortOptions; module.exports.SortOptions = SortOptions;
module.exports.LanguageOptions = LanguageOptions;