Files
torrentio/addon/lib/configuration.js
2023-10-31 21:01:02 +02:00

82 lines
2.7 KiB
JavaScript

import { DebridOptions } from '../moch/options.js';
import { QualityFilter, Providers, SizeFilter } from './filter.js';
import { LanguageOptions } from './languages.js';
export const PreConfigurations = {
lite: {
config: liteConfig(),
serialized: configValue(liteConfig()),
manifest: {
id: 'com.stremio.torrentio.lite.addon',
name: 'Torrentio Lite',
description: 'Preconfigured Lite version of Torrentio addon.'
+ ' To configure advanced options visit https://torrentio.strem.fun/lite'
}
},
brazuca: {
config: brazucaConfig(),
serialized: configValue(brazucaConfig()),
manifest: {
id: 'com.stremio.torrentio.brazuca.addon',
name: 'Torrentio Brazuca',
description: 'Preconfigured version of Torrentio addon for Brazilian content.'
+ ' To configure advanced options visit https://torrentio.strem.fun/brazuca',
logo: 'https://i.ibb.co/8mgRZPp/GwxAcDV.png'
}
}
}
const keysToSplit = [Providers.key, LanguageOptions.key, QualityFilter.key, SizeFilter.key, DebridOptions.key];
const keysToUppercase = [SizeFilter.key];
export function parseConfiguration(configuration) {
if (!configuration) {
return undefined;
}
if (PreConfigurations[configuration]) {
return PreConfigurations[configuration].config;
}
const configValues = configuration.split('|')
.reduce((map, next) => {
const parameterParts = next.split('=');
if (parameterParts.length === 2) {
map[parameterParts[0].toLowerCase()] = parameterParts[1];
}
return map;
}, {});
keysToSplit
.filter(key => configValues[key])
.forEach(key => configValues[key] = configValues[key].split(',')
.map(value => keysToUppercase.includes(key) ? value.toUpperCase() : value.toLowerCase()))
return configValues;
}
function liteConfig() {
const config = {};
config[Providers.key] = Providers.options
.filter(provider => !provider.foreign)
.map(provider => provider.key);
config[QualityFilter.key] = ['scr', 'cam']
config['limit'] = 1;
return config;
}
function brazucaConfig() {
const config = {};
config[Providers.key] = Providers.options
.filter(provider => !provider.foreign || provider.foreign === '🇵🇹')
.map(provider => provider.key);
config[LanguageOptions.key] = ['portuguese'];
return config;
}
function configValue(config) {
return Object.entries(config)
.map(([key, value]) => `${key}=${Array.isArray(value) ? value.join(',') : value}`)
.join('|');
}
export function getManifestOverride(config) {
const preConfig = Object.values(PreConfigurations).find(pre => pre.config === config);
return preConfig ? preConfig.manifest : {};
}