mirror of
https://github.com/Viren070/AIOStreams.git
synced 2025-12-01 23:14:04 +01:00
feat: add 'DV Only' and 'HDR Only' visual tags
This commit is contained in:
+14
-15
@@ -1189,27 +1189,26 @@ export class AIOStreams {
|
||||
await this.precomputer.precompute(processedStreams);
|
||||
}
|
||||
|
||||
let sortedStreams = await this.sorter.sort(
|
||||
processedStreams,
|
||||
id.startsWith('kitsu') ? 'anime' : type
|
||||
);
|
||||
sortedStreams = sortedStreams.map((stream) => {
|
||||
if (stream.parsedFile?.visualTags?.includes('HDR+DV')) {
|
||||
let finalStreams = this.applyModifications(
|
||||
await this.proxifier.proxify(
|
||||
await this.filterer.applyStreamExpressionFilters(
|
||||
await this.limiter.limit(
|
||||
await this.sorter.sort(
|
||||
processedStreams,
|
||||
id.startsWith('kitsu') ? 'anime' : type
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
).map((stream) => {
|
||||
if (stream.parsedFile) {
|
||||
stream.parsedFile.visualTags = stream.parsedFile.visualTags.filter(
|
||||
(tag) => tag !== 'HDR+DV'
|
||||
(tag) => !constants.FAKE_VISUAL_TAGS.includes(tag as any)
|
||||
);
|
||||
}
|
||||
return stream;
|
||||
});
|
||||
|
||||
let finalStreams = this.applyModifications(
|
||||
await this.proxifier.proxify(
|
||||
await this.filterer.applyStreamExpressionFilters(
|
||||
await this.limiter.limit(sortedStreams)
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
if (this.userData.externalDownloads) {
|
||||
const streamsWithExternalDownloads: ParsedStream[] = [];
|
||||
for (const stream of finalStreams) {
|
||||
|
||||
@@ -3,6 +3,7 @@ import { VISUAL_TAGS } from '../utils/constants';
|
||||
import { ENCODES } from '../utils/constants';
|
||||
import { LANGUAGES } from '../utils/constants';
|
||||
import { AUDIO_CHANNELS } from '../utils/constants';
|
||||
import { FakeVisualTag } from '../utils/constants';
|
||||
const createRegex = (pattern: string): RegExp =>
|
||||
new RegExp(`(?<![^\\s\\[(_\\-.,])(${pattern})(?=[\\s\\)\\]_.\\-,]|$)`, 'i');
|
||||
|
||||
@@ -10,34 +11,19 @@ const createLanguageRegex = (pattern: string): RegExp =>
|
||||
createRegex(`${pattern}(?![ .\\-_]?sub(title)?s?)`);
|
||||
|
||||
type PARSE_REGEX = {
|
||||
resolutions: Omit<Record<(typeof RESOLUTIONS)[number], RegExp>, 'Unknown'> & {
|
||||
Unknown?: RegExp;
|
||||
};
|
||||
qualities: Omit<Record<(typeof QUALITIES)[number], RegExp>, 'Unknown'> & {
|
||||
Unknown?: RegExp;
|
||||
};
|
||||
resolutions: Omit<Record<(typeof RESOLUTIONS)[number], RegExp>, 'Unknown'>;
|
||||
qualities: Omit<Record<(typeof QUALITIES)[number], RegExp>, 'Unknown'>;
|
||||
visualTags: Omit<
|
||||
Record<(typeof VISUAL_TAGS)[number], RegExp>,
|
||||
'Unknown' | 'HDR+DV'
|
||||
> & {
|
||||
Unknown?: RegExp;
|
||||
'HDR+DV'?: RegExp;
|
||||
};
|
||||
audioTags: Omit<Record<(typeof AUDIO_TAGS)[number], RegExp>, 'Unknown'> & {
|
||||
Unknown?: RegExp;
|
||||
};
|
||||
'Unknown' | FakeVisualTag
|
||||
>;
|
||||
audioTags: Omit<Record<(typeof AUDIO_TAGS)[number], RegExp>, 'Unknown'>;
|
||||
audioChannels: Omit<
|
||||
Record<(typeof AUDIO_CHANNELS)[number], RegExp>,
|
||||
'Unknown'
|
||||
> & {
|
||||
Unknown?: RegExp;
|
||||
};
|
||||
languages: Omit<Record<(typeof LANGUAGES)[number], RegExp>, 'Unknown'> & {
|
||||
Unknown?: RegExp;
|
||||
};
|
||||
encodes: Omit<Record<(typeof ENCODES)[number], RegExp>, 'Unknown'> & {
|
||||
Unknown?: RegExp;
|
||||
};
|
||||
>;
|
||||
languages: Omit<Record<(typeof LANGUAGES)[number], RegExp>, 'Unknown'>;
|
||||
encodes: Omit<Record<(typeof ENCODES)[number], RegExp>, 'Unknown'>;
|
||||
releaseGroup: RegExp;
|
||||
};
|
||||
|
||||
|
||||
@@ -411,6 +411,36 @@ class StreamFilterer {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Temporarily add in our fake visual tags used for sorting/filtering
|
||||
// HDR+DV
|
||||
if (
|
||||
file?.visualTags?.some((tag) => tag.startsWith('HDR')) &&
|
||||
file?.visualTags?.some((tag) => tag.startsWith('DV'))
|
||||
) {
|
||||
const hdrIndex = file?.visualTags?.findIndex((tag) =>
|
||||
tag.startsWith('HDR')
|
||||
);
|
||||
const dvIndex = file?.visualTags?.findIndex((tag) =>
|
||||
tag.startsWith('DV')
|
||||
);
|
||||
const insertIndex = Math.min(hdrIndex, dvIndex);
|
||||
file?.visualTags?.splice(insertIndex, 0, 'HDR+DV');
|
||||
}
|
||||
// DV Only
|
||||
if (
|
||||
file?.visualTags?.some((tag) => tag.startsWith('DV')) &&
|
||||
!file?.visualTags?.some((tag) => tag.startsWith('HDR'))
|
||||
) {
|
||||
file?.visualTags?.push('DV Only');
|
||||
}
|
||||
// HDR Only
|
||||
if (
|
||||
file?.visualTags?.some((tag) => tag.startsWith('HDR')) &&
|
||||
!file?.visualTags?.some((tag) => tag.startsWith('DV'))
|
||||
) {
|
||||
file?.visualTags?.push('HDR Only');
|
||||
}
|
||||
|
||||
// carry out include checks first
|
||||
if (this.userData.includedStreamTypes?.includes(stream.type)) {
|
||||
includedReasons.streamType.total++;
|
||||
@@ -700,22 +730,6 @@ class StreamFilterer {
|
||||
return false;
|
||||
}
|
||||
|
||||
// temporarily add HDR+DV to visual tags list if both HDR and DV are present
|
||||
// to allow HDR+DV option in userData to work
|
||||
if (
|
||||
file?.visualTags?.some((tag) => tag.startsWith('HDR')) &&
|
||||
file?.visualTags?.some((tag) => tag.startsWith('DV'))
|
||||
) {
|
||||
const hdrIndex = file?.visualTags?.findIndex((tag) =>
|
||||
tag.startsWith('HDR')
|
||||
);
|
||||
const dvIndex = file?.visualTags?.findIndex((tag) =>
|
||||
tag.startsWith('DV')
|
||||
);
|
||||
const insertIndex = Math.min(hdrIndex, dvIndex);
|
||||
file?.visualTags?.splice(insertIndex, 0, 'HDR+DV');
|
||||
}
|
||||
|
||||
if (
|
||||
this.userData.excludedVisualTags?.some((tag) =>
|
||||
(file?.visualTags.length ? file.visualTags : ['Unknown']).includes(
|
||||
@@ -743,14 +757,13 @@ class StreamFilterer {
|
||||
)
|
||||
)
|
||||
) {
|
||||
const tag = this.userData.requiredVisualTags.find((tag) =>
|
||||
(file?.visualTags.length ? file.visualTags : ['Unknown']).includes(
|
||||
tag
|
||||
)
|
||||
);
|
||||
skipReasons.requiredVisualTag.total++;
|
||||
skipReasons.requiredVisualTag.details[tag!] =
|
||||
(skipReasons.requiredVisualTag.details[tag!] || 0) + 1;
|
||||
skipReasons.requiredVisualTag.details[
|
||||
`${this.userData.requiredVisualTags.join(', ')}`
|
||||
] =
|
||||
(skipReasons.requiredVisualTag.details[
|
||||
`${this.userData.requiredVisualTags.join(', ')}`
|
||||
] || 0) + 1;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -509,8 +509,11 @@ const QUALITIES = [
|
||||
'Unknown',
|
||||
] as const;
|
||||
|
||||
export const FAKE_VISUAL_TAGS = ['HDR+DV', 'DV Only', 'HDR Only'] as const;
|
||||
export type FakeVisualTag = (typeof FAKE_VISUAL_TAGS)[number];
|
||||
|
||||
const VISUAL_TAGS = [
|
||||
'HDR+DV',
|
||||
...FAKE_VISUAL_TAGS,
|
||||
'HDR10+',
|
||||
'HDR10',
|
||||
'DV',
|
||||
|
||||
Reference in New Issue
Block a user