diff --git a/packages/core/src/db/schemas.ts b/packages/core/src/db/schemas.ts
index 24dc472b..6fb09c8f 100644
--- a/packages/core/src/db/schemas.ts
+++ b/packages/core/src/db/schemas.ts
@@ -82,6 +82,9 @@ const SizeFilter = z.object({
// max: z.number().min(1).optional(),
// })
.optional(),
+ anime: z
+ .tuple([z.number().min(0), z.number().min(0)])
+ .optional(),
});
const SizeFilterOptions = z.object({
diff --git a/packages/core/src/streams/filterer.ts b/packages/core/src/streams/filterer.ts
index 283848fb..17e0f377 100644
--- a/packages/core/src/streams/filterer.ts
+++ b/packages/core/src/streams/filterer.ts
@@ -1606,6 +1606,10 @@ class StreamFilterer {
normaliseSizeRange(global?.movies);
} else {
minMax =
+ (isAnime
+ ? normaliseSizeRange(resolution?.anime) ||
+ normaliseSizeRange(global?.anime)
+ : undefined) ||
normaliseSizeRange(resolution?.series) ||
normaliseSizeRange(global?.series);
}
diff --git a/packages/frontend/src/components/menu/filters.tsx b/packages/frontend/src/components/menu/filters.tsx
index 9968f17b..7faaa8a1 100644
--- a/packages/frontend/src/components/menu/filters.tsx
+++ b/packages/frontend/src/components/menu/filters.tsx
@@ -2358,17 +2358,17 @@ function Content() {
- Set minimum and maximum size limits for movies and series. You
+ Set minimum and maximum size limits for movies, series, and anime series. You
can set a global limit, and also choose to set specific limits
for each resolution. For a given stream, only one set of size
filters would be used. A resolution specific limit takes
- priority.
+ priority. Anime series limits take precedence over regular series limits.
{
setUserData((prev: any) => ({
...prev,
@@ -2397,6 +2400,15 @@ function Content() {
},
}));
}}
+ onAnimeChange={(value) => {
+ setUserData((prev: any) => ({
+ ...prev,
+ size: {
+ ...prev.size,
+ global: { ...prev.size?.global, anime: value },
+ },
+ }));
+ }}
/>
@@ -2423,6 +2435,12 @@ function Content() {
MAX_SIZE,
]
}
+ animeValue={
+ userData.size?.resolution?.[resolution]?.anime || [
+ MIN_SIZE,
+ MAX_SIZE,
+ ]
+ }
onMoviesChange={(value) => {
setUserData((prev: any) => ({
...prev,
@@ -2453,6 +2471,21 @@ function Content() {
},
}));
}}
+ onAnimeChange={(value) => {
+ setUserData((prev: any) => ({
+ ...prev,
+ size: {
+ ...prev.size,
+ resolution: {
+ ...prev.size?.resolution,
+ [resolution]: {
+ ...prev.size?.resolution?.[resolution],
+ anime: value,
+ },
+ },
+ },
+ }));
+ }}
/>
))}
@@ -3543,8 +3576,10 @@ interface SizeRangeSliderProps {
help?: string;
moviesValue: [number, number];
seriesValue: [number, number];
+ animeValue: [number, number];
onMoviesChange: (value: [number, number]) => void;
onSeriesChange: (value: [number, number]) => void;
+ onAnimeChange: (value: [number, number]) => void;
min?: number;
max?: number;
}
@@ -3562,8 +3597,10 @@ function SizeRangeSlider({
help,
moviesValue,
seriesValue,
+ animeValue,
onMoviesChange,
onSeriesChange,
+ onAnimeChange,
min = MIN_SIZE,
max = MAX_SIZE,
}: SizeRangeSliderProps) {
@@ -3676,6 +3713,59 @@ function SizeRangeSlider({
+
+ {/* Anime Series Slider */}
+
+
Anime Series
+
+
+
+ newValue !== undefined &&
+ newValue?.[0] !== undefined &&
+ newValue?.[1] !== undefined &&
+ onAnimeChange([newValue[0], newValue[1]])
+ }
+ minStepsBetweenThumbs={1}
+ label="Anime Series Size Range"
+ help={help}
+ />
+
+ {formatBytes(animeValue[0])}
+ {formatBytes(animeValue[1])}
+
+
+
+
+ newValue !== undefined &&
+ onAnimeChange([newValue, animeValue[1]])
+ }
+ />
+
+ newValue !== undefined &&
+ onAnimeChange([animeValue[0], newValue])
+ }
+ />
+
+
+
);
}