-
-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add all backend settings to the forms #184
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -50,6 +50,14 @@ | |||||||||||||||||||
|
||||||||||||||||||||
<form method="POST" action={actionUrl} use:enhance class="my-8 flex flex-col gap-2"> | ||||||||||||||||||||
<CheckboxField {form} name="debug" {formData} fieldDescription="Requires restart" /> | ||||||||||||||||||||
<CheckboxField {form} name="debug_database" {formData} fieldDescription="Requires restart" /> | ||||||||||||||||||||
<CheckboxField {form} name="force_refresh" {formData} fieldDescription="Requires restart" /> | ||||||||||||||||||||
<CheckboxField | ||||||||||||||||||||
{form} | ||||||||||||||||||||
name="map_metadata" | ||||||||||||||||||||
{formData} | ||||||||||||||||||||
fieldDescription="Requires restart, inits an empty database based on the symlinked files" | ||||||||||||||||||||
Gaisberg marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||
/> | ||||||||||||||||||||
Comment on lines
+55
to
+60
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧹 Nitpick (assertive) Enhance map_metadata field description The description could be clearer about the relationship between the database and symlinked files. Consider updating the description to: "Requires restart. Initializes an empty database and maps metadata from the existing symlinked media files." |
||||||||||||||||||||
<CheckboxField {form} name="log" {formData} fieldDescription="Requires restart" /> | ||||||||||||||||||||
<TextField {form} name="rclone_path" {formData} /> | ||||||||||||||||||||
<TextField {form} name="library_path" {formData} /> | ||||||||||||||||||||
|
@@ -71,6 +79,53 @@ | |||||||||||||||||||
fieldDescription="In seconds" | ||||||||||||||||||||
/> | ||||||||||||||||||||
|
||||||||||||||||||||
<ArrayField {form} name="video_extensions" {formData}> | ||||||||||||||||||||
{#each $formData.video_extensions as _, i} | ||||||||||||||||||||
<Form.ElementField {form} name="video_extensions[{i}]"> | ||||||||||||||||||||
<Form.Control let:attrs> | ||||||||||||||||||||
<div class="flex items-center gap-2"> | ||||||||||||||||||||
<Input | ||||||||||||||||||||
type="text" | ||||||||||||||||||||
spellcheck="false" | ||||||||||||||||||||
autocomplete="false" | ||||||||||||||||||||
Gaisberg marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||
{...attrs} | ||||||||||||||||||||
bind:value={$formData.video_extensions[i]} | ||||||||||||||||||||
/> | ||||||||||||||||||||
|
||||||||||||||||||||
<div class="flex items-center gap-2"> | ||||||||||||||||||||
<Form.Button | ||||||||||||||||||||
type="button" | ||||||||||||||||||||
size="sm" | ||||||||||||||||||||
variant="destructive" | ||||||||||||||||||||
on:click={() => { | ||||||||||||||||||||
removeField('video_extensions', i); | ||||||||||||||||||||
}} | ||||||||||||||||||||
> | ||||||||||||||||||||
<Trash2 class="h-4 w-4" /> | ||||||||||||||||||||
</Form.Button> | ||||||||||||||||||||
</div> | ||||||||||||||||||||
</div> | ||||||||||||||||||||
</Form.Control> | ||||||||||||||||||||
</Form.ElementField> | ||||||||||||||||||||
{/each} | ||||||||||||||||||||
|
||||||||||||||||||||
<div class="flex w-full items-center justify-between gap-2"> | ||||||||||||||||||||
<p class="text-sm text-muted-foreground">Add Video Extension</p> | ||||||||||||||||||||
<Form.Button | ||||||||||||||||||||
type="button" | ||||||||||||||||||||
size="sm" | ||||||||||||||||||||
variant="outline" | ||||||||||||||||||||
on:click={() => { | ||||||||||||||||||||
addField('video_extensions'); | ||||||||||||||||||||
}} | ||||||||||||||||||||
> | ||||||||||||||||||||
<Plus class="h-4 w-4" /> | ||||||||||||||||||||
</Form.Button> | ||||||||||||||||||||
</div> | ||||||||||||||||||||
</ArrayField> | ||||||||||||||||||||
Gaisberg marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||
|
||||||||||||||||||||
<TextField {form} name="proxy_url" label="Downloader Proxy URL" {formData} /> | ||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧹 Nitpick (assertive) Add URL validation and description for proxy field The proxy URL field should include format validation and a description of supported proxy protocols. Consider updating the field to: -<TextField {form} name="proxy_url" label="Downloader Proxy URL" {formData} />
+<TextField
+ {form}
+ name="proxy_url"
+ label="Downloader Proxy URL"
+ {formData}
+ pattern="^(http|https|socks4|socks5)://.*$"
+ fieldDescription="Supported formats: http://, https://, socks4://, socks5://"
+/> 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||
|
||||||||||||||||||||
<GroupCheckboxField | ||||||||||||||||||||
fieldTitle="Downloaders" | ||||||||||||||||||||
fieldDescription="Enable only one downloader at a time" | ||||||||||||||||||||
|
@@ -82,58 +137,44 @@ | |||||||||||||||||||
{formData} | ||||||||||||||||||||
isForGroup={true} | ||||||||||||||||||||
/> | ||||||||||||||||||||
<CheckboxField | ||||||||||||||||||||
{form} | ||||||||||||||||||||
name="alldebrid_enabled" | ||||||||||||||||||||
label="All-Debrid" | ||||||||||||||||||||
{formData} | ||||||||||||||||||||
isForGroup={true} | ||||||||||||||||||||
/> | ||||||||||||||||||||
<CheckboxField {form} name="torbox_enabled" label="Torbox" {formData} isForGroup={true} /> | ||||||||||||||||||||
<CheckboxField {form} name="alldebrid_enabled" label="AllDebrid" {formData} isForGroup={true} /> | ||||||||||||||||||||
<CheckboxField {form} name="torbox_enabled" label="TorBox" {formData} isForGroup={true} /> | ||||||||||||||||||||
Gaisberg marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||
</GroupCheckboxField> | ||||||||||||||||||||
|
||||||||||||||||||||
{#if $formData.realdebrid_enabled} | ||||||||||||||||||||
<div transition:slide> | ||||||||||||||||||||
<TextField {form} name="realdebrid_api_key" {formData} isProtected={true} /> | ||||||||||||||||||||
</div> | ||||||||||||||||||||
|
||||||||||||||||||||
<div transition:slide> | ||||||||||||||||||||
<CheckboxField | ||||||||||||||||||||
<TextField | ||||||||||||||||||||
{form} | ||||||||||||||||||||
name="realdebrid_proxy_enabled" | ||||||||||||||||||||
label="Real-Debrid Proxy" | ||||||||||||||||||||
name="realdebrid_api_key" | ||||||||||||||||||||
label="Real-Debrid API Key" | ||||||||||||||||||||
{formData} | ||||||||||||||||||||
fieldDescription="Use proxy for Real-Debrid API" | ||||||||||||||||||||
isProtected={true} | ||||||||||||||||||||
/> | ||||||||||||||||||||
</div> | ||||||||||||||||||||
|
||||||||||||||||||||
{#if $formData.realdebrid_proxy_enabled} | ||||||||||||||||||||
<div transition:slide> | ||||||||||||||||||||
<TextField {form} name="realdebrid_proxy_url" {formData} /> | ||||||||||||||||||||
</div> | ||||||||||||||||||||
{/if} | ||||||||||||||||||||
{/if} | ||||||||||||||||||||
|
||||||||||||||||||||
{#if $formData.alldebrid_enabled} | ||||||||||||||||||||
<div transition:slide> | ||||||||||||||||||||
<TextField {form} name="alldebrid_api_key" {formData} isProtected={true} /> | ||||||||||||||||||||
<TextField | ||||||||||||||||||||
{form} | ||||||||||||||||||||
name="alldebrid_api_key" | ||||||||||||||||||||
label="AllDebrid API Key" | ||||||||||||||||||||
{formData} | ||||||||||||||||||||
isProtected={true} | ||||||||||||||||||||
/> | ||||||||||||||||||||
</div> | ||||||||||||||||||||
{/if} | ||||||||||||||||||||
|
||||||||||||||||||||
{#if $formData.torbox_enabled} | ||||||||||||||||||||
<div transition:slide> | ||||||||||||||||||||
<CheckboxField | ||||||||||||||||||||
<TextField | ||||||||||||||||||||
{form} | ||||||||||||||||||||
name="alldebrid_proxy_enabled" | ||||||||||||||||||||
label="All-Debrid Proxy" | ||||||||||||||||||||
name="torbox_api_key" | ||||||||||||||||||||
label="TorBox API Key" | ||||||||||||||||||||
{formData} | ||||||||||||||||||||
fieldDescription="Use proxy for All-Debrid API" | ||||||||||||||||||||
isProtected={true} | ||||||||||||||||||||
/> | ||||||||||||||||||||
</div> | ||||||||||||||||||||
|
||||||||||||||||||||
{#if $formData.alldebrid_proxy_enabled} | ||||||||||||||||||||
<div transition:slide> | ||||||||||||||||||||
<TextField {form} name="alldebrid_proxy_url" {formData} /> | ||||||||||||||||||||
</div> | ||||||||||||||||||||
{/if} | ||||||||||||||||||||
{/if} | ||||||||||||||||||||
|
||||||||||||||||||||
<NumberField | ||||||||||||||||||||
|
@@ -165,12 +206,6 @@ | |||||||||||||||||||
fieldDescription="In MB, -1 for unlimited" | ||||||||||||||||||||
/> | ||||||||||||||||||||
|
||||||||||||||||||||
{#if $formData.torbox_enabled} | ||||||||||||||||||||
<div transition:slide> | ||||||||||||||||||||
<TextField {form} name="torbox_api_key" {formData} /> | ||||||||||||||||||||
</div> | ||||||||||||||||||||
{/if} | ||||||||||||||||||||
|
||||||||||||||||||||
<CheckboxField {form} name="notifications_enabled" label="Notifications" {formData} /> | ||||||||||||||||||||
|
||||||||||||||||||||
{#if $formData.notifications_enabled} | ||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Configuration setup is well documented, but example files are missing
The project has clear documentation in README.md about environment variables and configuration through docker-compose.yml, but it would benefit from example configuration files. Consider:
config.example/
) with template filesserver-config.example.json
to demonstrate the expected format🔗 Analysis chain
Verify availability of example configuration files.
Ignoring both
/config
andserver-config.json
might make it difficult for new developers to set up the project. Please ensure that:Let's verify the existence of example configurations:
Let me gather more information about configuration-related files and documentation.
Let me check the complete environment variables documentation in the README to ensure proper setup instructions are available.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
Length of output: 571
Script:
Length of output: 1175
Script:
Length of output: 882