diff --git a/addon/lib/configuration.js b/addon/lib/configuration.js
index 6c6f691..c9f741e 100644
--- a/addon/lib/configuration.js
+++ b/addon/lib/configuration.js
@@ -1,5 +1,5 @@
const { DebridOptions } = require('../moch/options');
-const { QualityFilter, Providers } = require('./filter');
+const { QualityFilter, Providers, SizeFilter } = require('./filter');
const { LanguageOptions } = require('./languages');
const PRE_CONFIGURATIONS = {
@@ -26,7 +26,8 @@ const PRE_CONFIGURATIONS = {
}
}
-const keysToSplit = [Providers.key, LanguageOptions.key, QualityFilter.key, DebridOptions.key];
+const keysToSplit = [Providers.key, LanguageOptions.key, QualityFilter.key, SizeFilter.key, DebridOptions.key];
+const keyToUppercase = [SizeFilter.key];
function parseConfiguration(configuration) {
if (PRE_CONFIGURATIONS[configuration]) {
@@ -42,7 +43,8 @@ function parseConfiguration(configuration) {
}, {});
keysToSplit
.filter(key => configValues[key])
- .filter(key => configValues[key] = configValues[key].split(',').map(provider => provider.toLowerCase()))
+ .forEach(key => configValues[key] = configValues[key].split(',')
+ .map(value => keyToUppercase.includes(key) ? value.toUpperCase() : value.toLowerCase()))
return configValues;
}
diff --git a/addon/lib/filter.js b/addon/lib/filter.js
index 159f3f7..ec67fa9 100644
--- a/addon/lib/filter.js
+++ b/addon/lib/filter.js
@@ -1,3 +1,5 @@
+const { extractProvider, parseSize, extractSize } = require("./titleHelper");
+const { Type } = require("./types");
const Providers = {
key: 'providers',
options: [
@@ -87,7 +89,7 @@ const QualityFilter = {
key: 'brremux',
label: 'BluRay REMUX',
test(quality, bingeGroup) {
- return bingeGroup && bingeGroup.includes(this.label);
+ return bingeGroup?.includes(this.label);
}
},
{
@@ -95,7 +97,7 @@ const QualityFilter = {
label: 'HDR/HDR10+/Dolby Vision',
items: ['HDR', 'HDR10+', 'DV'],
test(quality) {
- const hdrProfiles = quality && quality.split(' ').slice(1).join() || '';
+ const hdrProfiles = quality?.split(' ')?.slice(1)?.join() || '';
return this.items.some(hdrType => hdrProfiles.includes(hdrType));
}
},
@@ -103,7 +105,7 @@ const QualityFilter = {
key: 'dolbyvision',
label: 'Dolby Vision',
test(quality) {
- const hdrProfiles = quality && quality.split(' ').slice(1).join() || '';
+ const hdrProfiles = quality?.split(' ')?.slice(1)?.join() || '';
return hdrProfiles === 'DV';
}
},
@@ -173,20 +175,26 @@ const QualityFilter = {
}
]
};
+const SizeFilter = {
+ key: 'sizefilter'
+}
const defaultProviderKeys = Providers.options.map(provider => provider.key);
function applyFilters(streams, config) {
- return filterByQuality(filterByProvider(streams, config), config);
+ return [
+ filterByProvider,
+ filterByQuality,
+ filterBySize
+ ].reduce((filteredStreams, filter) => filter(filteredStreams, config), streams);
}
function filterByProvider(streams, config) {
const providers = config.providers || defaultProviderKeys;
- if (!providers || !providers.length) {
+ if (!providers?.length) {
return streams;
}
return streams.filter(stream => {
- const match = stream.title.match(/⚙.* ([^ \n]+)/);
- const provider = match && match[1].toLowerCase();
+ const provider = extractProvider(stream.title)
return providers.includes(provider);
})
}
@@ -204,6 +212,19 @@ function filterByQuality(streams, config) {
});
}
+function filterBySize(streams, config) {
+ const sizeFilters = config[SizeFilter.key];
+ if (!sizeFilters?.length) {
+ return streams;
+ }
+ const sizeLimit = parseSize(config.type === Type.MOVIE ? sizeFilters.shift() : sizeFilters.pop());
+ return streams.filter(stream => {
+ const size = extractSize(stream.title)
+ return size <= sizeLimit;
+ })
+}
+
module.exports = applyFilters;
module.exports.Providers = Providers;
module.exports.QualityFilter = QualityFilter;
+module.exports.SizeFilter = SizeFilter;
diff --git a/addon/lib/landingTemplate.js b/addon/lib/landingTemplate.js
index 2486a75..264bcdc 100644
--- a/addon/lib/landingTemplate.js
+++ b/addon/lib/landingTemplate.js
@@ -187,7 +187,7 @@ a.install-link {
const { Providers } = require('./filter');
const { SortOptions } = require('./sort');
const { LanguageOptions } = require('./languages');
-const { QualityFilter } = require('./filter');
+const { QualityFilter, SizeFilter } = require('./filter');
const { DebridOptions } = require('../moch/options');
const { MochOptions } = require('../moch/moch');
const { PreConfigurations } = require('../lib/configuration');
@@ -197,6 +197,7 @@ function landingTemplate(manifest, config = {}) {
const sort = config[SortOptions.key] || SortOptions.options.qualitySeeders.key;
const languages = config[LanguageOptions.key] || [];
const qualityFilters = config[QualityFilter.key] || [];
+ const sizeFilter = (config[SizeFilter.key] || []).join(',');
const limit = config.limit || '';
const debridProvider = Object.keys(MochOptions).find(mochKey => config[mochKey]);
@@ -295,6 +296,10 @@ function landingTemplate(manifest, config = {}) {
+
+
+
+