mirror of
https://github.com/Viren070/AIOStreams.git
synced 2025-12-01 23:14:04 +01:00
feat(frontend): move more stuff into pro only mode
This commit is contained in:
@@ -244,32 +244,48 @@ function Content() {
|
||||
<FaBolt className="text-lg mr-3" />
|
||||
Cache
|
||||
</TabsTrigger>
|
||||
<TabsTrigger value="resolution">
|
||||
<BiSolidCameraMovie className="text-lg mr-3" />
|
||||
Resolution
|
||||
</TabsTrigger>
|
||||
<TabsTrigger value="quality">
|
||||
<MdMovieFilter className="text-lg mr-3" />
|
||||
Quality
|
||||
</TabsTrigger>
|
||||
<TabsTrigger value="encode">
|
||||
<FaFilm className="text-lg mr-3" />
|
||||
Encode
|
||||
</TabsTrigger>
|
||||
|
||||
<>
|
||||
<TabsTrigger value="resolution">
|
||||
<BiSolidCameraMovie className="text-lg mr-3" />
|
||||
Resolution
|
||||
</TabsTrigger>
|
||||
</>
|
||||
|
||||
{mode == 'pro' && (
|
||||
<>
|
||||
<TabsTrigger value="quality">
|
||||
<MdMovieFilter className="text-lg mr-3" />
|
||||
Quality
|
||||
</TabsTrigger>
|
||||
</>
|
||||
)}
|
||||
{mode === 'pro' && (
|
||||
<>
|
||||
<TabsTrigger value="encode">
|
||||
<FaFilm className="text-lg mr-3" />
|
||||
Encode
|
||||
</TabsTrigger>
|
||||
</>
|
||||
)}
|
||||
{mode === 'pro' && (
|
||||
<TabsTrigger value="stream-type">
|
||||
<MdVideoLibrary className="text-lg mr-3" />
|
||||
Stream Type
|
||||
</TabsTrigger>
|
||||
)}
|
||||
<TabsTrigger value="visual-tag">
|
||||
<MdHdrOn className="text-lg mr-3" />
|
||||
Visual Tag
|
||||
</TabsTrigger>
|
||||
<TabsTrigger value="audio-tag">
|
||||
<BsSpeakerFill className="text-lg mr-3" />
|
||||
Audio Tag
|
||||
</TabsTrigger>
|
||||
{mode === 'pro' && (
|
||||
<TabsTrigger value="visual-tag">
|
||||
<MdHdrOn className="text-lg mr-3" />
|
||||
Visual Tag
|
||||
</TabsTrigger>
|
||||
)}
|
||||
{mode === 'pro' && (
|
||||
<TabsTrigger value="audio-tag">
|
||||
<BsSpeakerFill className="text-lg mr-3" />
|
||||
Audio Tag
|
||||
</TabsTrigger>
|
||||
)}
|
||||
{mode === 'pro' && (
|
||||
<TabsTrigger value="audio-channel">
|
||||
<MdSurroundSound className="text-lg mr-3" />
|
||||
@@ -284,14 +300,20 @@ function Content() {
|
||||
<MdPerson className="text-lg mr-3" />
|
||||
Seeders
|
||||
</TabsTrigger>
|
||||
<TabsTrigger value="title-matching">
|
||||
<FaEquals className="text-lg mr-3" />
|
||||
Matching
|
||||
</TabsTrigger>
|
||||
<TabsTrigger value="keyword">
|
||||
<MdTextFields className="text-lg mr-3" />
|
||||
Keyword
|
||||
</TabsTrigger>
|
||||
{mode === 'pro' && (
|
||||
<>
|
||||
<TabsTrigger value="title-matching">
|
||||
<FaEquals className="text-lg mr-3" />
|
||||
Matching
|
||||
</TabsTrigger>
|
||||
</>
|
||||
)}
|
||||
{mode === 'pro' && (
|
||||
<TabsTrigger value="keyword">
|
||||
<MdTextFields className="text-lg mr-3" />
|
||||
Keyword
|
||||
</TabsTrigger>
|
||||
)}
|
||||
{mode === 'pro' && (
|
||||
<TabsTrigger value="stream-expression">
|
||||
<TbFilterCode className="text-lg mr-3" />
|
||||
@@ -2059,38 +2081,43 @@ function Content() {
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
<NumberInput
|
||||
help="Limit for results by service"
|
||||
label="Service Limit"
|
||||
value={userData.resultLimits?.service || undefined}
|
||||
min={0}
|
||||
defaultValue={undefined}
|
||||
onValueChange={(value) => {
|
||||
setUserData((prev) => ({
|
||||
...prev,
|
||||
resultLimits: {
|
||||
...prev.resultLimits,
|
||||
service: value || undefined,
|
||||
},
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
<NumberInput
|
||||
help="Limit for results by addon"
|
||||
label="Addon Limit"
|
||||
value={userData.resultLimits?.addon || undefined}
|
||||
min={0}
|
||||
defaultValue={undefined}
|
||||
onValueChange={(value) => {
|
||||
setUserData((prev) => ({
|
||||
...prev,
|
||||
resultLimits: {
|
||||
...prev.resultLimits,
|
||||
addon: value || undefined,
|
||||
},
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
{mode === 'pro' && (
|
||||
<NumberInput
|
||||
help="Limit for results by service"
|
||||
label="Service Limit"
|
||||
value={userData.resultLimits?.service || undefined}
|
||||
min={0}
|
||||
defaultValue={undefined}
|
||||
onValueChange={(value) => {
|
||||
setUserData((prev) => ({
|
||||
...prev,
|
||||
resultLimits: {
|
||||
...prev.resultLimits,
|
||||
service: value || undefined,
|
||||
},
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
{mode === 'pro' && (
|
||||
<NumberInput
|
||||
help="Limit for results by addon"
|
||||
label="Addon Limit"
|
||||
value={userData.resultLimits?.addon || undefined}
|
||||
min={0}
|
||||
defaultValue={undefined}
|
||||
onValueChange={(value) => {
|
||||
setUserData((prev) => ({
|
||||
...prev,
|
||||
resultLimits: {
|
||||
...prev.resultLimits,
|
||||
addon: value || undefined,
|
||||
},
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
|
||||
<NumberInput
|
||||
help="Limit for results by resolution"
|
||||
label="Resolution Limit"
|
||||
@@ -2107,54 +2134,61 @@ function Content() {
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
<NumberInput
|
||||
help="Limit for results by quality"
|
||||
label="Quality Limit"
|
||||
value={userData.resultLimits?.quality || undefined}
|
||||
min={0}
|
||||
defaultValue={undefined}
|
||||
onValueChange={(value) => {
|
||||
setUserData((prev) => ({
|
||||
...prev,
|
||||
resultLimits: {
|
||||
...prev.resultLimits,
|
||||
quality: value || undefined,
|
||||
},
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
<NumberInput
|
||||
help="Limit for results by indexer"
|
||||
label="Indexer Limit"
|
||||
value={userData.resultLimits?.indexer || undefined}
|
||||
min={0}
|
||||
defaultValue={undefined}
|
||||
onValueChange={(value) => {
|
||||
setUserData((prev) => ({
|
||||
...prev,
|
||||
resultLimits: {
|
||||
...prev.resultLimits,
|
||||
indexer: value || undefined,
|
||||
},
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
<NumberInput
|
||||
help="Limit for results by release group"
|
||||
label="Release Group Limit"
|
||||
value={userData.resultLimits?.releaseGroup || undefined}
|
||||
min={0}
|
||||
defaultValue={undefined}
|
||||
onValueChange={(value) => {
|
||||
setUserData((prev) => ({
|
||||
...prev,
|
||||
resultLimits: {
|
||||
...prev.resultLimits,
|
||||
releaseGroup: value || undefined,
|
||||
},
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
|
||||
{mode === 'pro' && (
|
||||
<NumberInput
|
||||
help="Limit for results by quality"
|
||||
label="Quality Limit"
|
||||
value={userData.resultLimits?.quality || undefined}
|
||||
min={0}
|
||||
defaultValue={undefined}
|
||||
onValueChange={(value) => {
|
||||
setUserData((prev) => ({
|
||||
...prev,
|
||||
resultLimits: {
|
||||
...prev.resultLimits,
|
||||
quality: value || undefined,
|
||||
},
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
{mode === 'pro' && (
|
||||
<NumberInput
|
||||
help="Limit for results by indexer"
|
||||
label="Indexer Limit"
|
||||
value={userData.resultLimits?.indexer || undefined}
|
||||
min={0}
|
||||
defaultValue={undefined}
|
||||
onValueChange={(value) => {
|
||||
setUserData((prev) => ({
|
||||
...prev,
|
||||
resultLimits: {
|
||||
...prev.resultLimits,
|
||||
indexer: value || undefined,
|
||||
},
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
{mode === 'pro' && (
|
||||
<NumberInput
|
||||
help="Limit for results by release group"
|
||||
label="Release Group Limit"
|
||||
value={userData.resultLimits?.releaseGroup || undefined}
|
||||
min={0}
|
||||
defaultValue={undefined}
|
||||
onValueChange={(value) => {
|
||||
setUserData((prev) => ({
|
||||
...prev,
|
||||
resultLimits: {
|
||||
...prev.resultLimits,
|
||||
releaseGroup: value || undefined,
|
||||
},
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
</SettingsCard>
|
||||
</>
|
||||
|
||||
@@ -171,86 +171,92 @@ function Content() {
|
||||
)}
|
||||
</SettingsCard>
|
||||
)}
|
||||
<SettingsCard
|
||||
title="External Downloads"
|
||||
description="Adds a stream that automatically opens the stream in your browser below every stream for easier downloading"
|
||||
>
|
||||
<Switch
|
||||
label="Enable"
|
||||
side="right"
|
||||
value={userData.externalDownloads}
|
||||
onValueChange={(value) => {
|
||||
setUserData((prev) => ({
|
||||
...prev,
|
||||
externalDownloads: value,
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
</SettingsCard>
|
||||
<SettingsCard
|
||||
title="Statistic Streams"
|
||||
description="AIOStreams will return the statistics of stream fetches and response times for each addon if enabled."
|
||||
>
|
||||
<Switch
|
||||
label="Enable"
|
||||
side="right"
|
||||
value={userData.showStatistics}
|
||||
onValueChange={(value) => {
|
||||
setUserData((prev) => ({
|
||||
...prev,
|
||||
showStatistics: value,
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
<Select
|
||||
label="Statistics Position"
|
||||
help="Whether to show the statistic streams at the top or bottom of the stream list."
|
||||
disabled={!userData.showStatistics}
|
||||
options={[
|
||||
{ label: 'Top', value: 'top' },
|
||||
{ label: 'Bottom', value: 'bottom' },
|
||||
]}
|
||||
value={userData.statisticsPosition || 'bottom'}
|
||||
onValueChange={(value) => {
|
||||
setUserData((prev) => ({
|
||||
...prev,
|
||||
statisticsPosition: value as 'top' | 'bottom',
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
</SettingsCard>
|
||||
<SettingsCard title="Hide Errors">
|
||||
<Switch
|
||||
label="Hide Errors"
|
||||
help="AIOStreams will attempt to return the errors in responses to streams, catalogs etc. Turning this on will hide the errors."
|
||||
side="right"
|
||||
value={userData.hideErrors}
|
||||
onValueChange={(value) => {
|
||||
setUserData((prev) => ({
|
||||
...prev,
|
||||
hideErrors: value,
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
<Combobox
|
||||
disabled={userData.hideErrors}
|
||||
label="Hide Errors for specific resources"
|
||||
options={RESOURCES.map((resource) => ({
|
||||
label: resource,
|
||||
value: resource,
|
||||
}))}
|
||||
multiple
|
||||
help="This lets you hide errors for specific resources. For example, you may want to hide errors for the catalog resource, but not for the stream resource."
|
||||
emptyMessage="No resources found"
|
||||
value={userData.hideErrorsForResources}
|
||||
onValueChange={(value) => {
|
||||
setUserData((prev) => ({
|
||||
...prev,
|
||||
hideErrorsForResources: value as (typeof RESOURCES)[number][],
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
</SettingsCard>
|
||||
{mode === 'pro' && (
|
||||
<SettingsCard
|
||||
title="External Downloads"
|
||||
description="Adds a stream that automatically opens the stream in your browser below every stream for easier downloading"
|
||||
>
|
||||
<Switch
|
||||
label="Enable"
|
||||
side="right"
|
||||
value={userData.externalDownloads}
|
||||
onValueChange={(value) => {
|
||||
setUserData((prev) => ({
|
||||
...prev,
|
||||
externalDownloads: value,
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
</SettingsCard>
|
||||
)}
|
||||
{mode === 'pro' && (
|
||||
<SettingsCard
|
||||
title="Statistic Streams"
|
||||
description="AIOStreams will return the statistics of stream fetches and response times for each addon if enabled."
|
||||
>
|
||||
<Switch
|
||||
label="Enable"
|
||||
side="right"
|
||||
value={userData.showStatistics}
|
||||
onValueChange={(value) => {
|
||||
setUserData((prev) => ({
|
||||
...prev,
|
||||
showStatistics: value,
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
<Select
|
||||
label="Statistics Position"
|
||||
help="Whether to show the statistic streams at the top or bottom of the stream list."
|
||||
disabled={!userData.showStatistics}
|
||||
options={[
|
||||
{ label: 'Top', value: 'top' },
|
||||
{ label: 'Bottom', value: 'bottom' },
|
||||
]}
|
||||
value={userData.statisticsPosition || 'bottom'}
|
||||
onValueChange={(value) => {
|
||||
setUserData((prev) => ({
|
||||
...prev,
|
||||
statisticsPosition: value as 'top' | 'bottom',
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
</SettingsCard>
|
||||
)}
|
||||
{mode === 'pro' && (
|
||||
<SettingsCard title="Hide Errors">
|
||||
<Switch
|
||||
label="Hide Errors"
|
||||
help="AIOStreams will attempt to return the errors in responses to streams, catalogs etc. Turning this on will hide the errors."
|
||||
side="right"
|
||||
value={userData.hideErrors}
|
||||
onValueChange={(value) => {
|
||||
setUserData((prev) => ({
|
||||
...prev,
|
||||
hideErrors: value,
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
<Combobox
|
||||
disabled={userData.hideErrors}
|
||||
label="Hide Errors for specific resources"
|
||||
options={RESOURCES.map((resource) => ({
|
||||
label: resource,
|
||||
value: resource,
|
||||
}))}
|
||||
multiple
|
||||
help="This lets you hide errors for specific resources. For example, you may want to hide errors for the catalog resource, but not for the stream resource."
|
||||
emptyMessage="No resources found"
|
||||
value={userData.hideErrorsForResources}
|
||||
onValueChange={(value) => {
|
||||
setUserData((prev) => ({
|
||||
...prev,
|
||||
hideErrorsForResources: value as (typeof RESOURCES)[number][],
|
||||
}));
|
||||
}}
|
||||
/>
|
||||
</SettingsCard>
|
||||
)}
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user