pinchflat/lib/pinchflat/settings/setting.ex
Kieran e9f6b45953
[Enhancement] Add rate limiting to yt-dlp requests; prevent saving Media Items when throttled by YouTube (#559)
* Added sleep interval to settings

* Added new sleep setting to yt-dlp runner and added tests

* Added setting for form; updated setting name

* Updated form label

* Prevented saving/updating of media items if being throttled by youtube

* Added the bot message to the list of non-retryable errors

* Fixed typo
2025-01-14 11:38:40 -08:00

50 lines
1.2 KiB
Elixir

defmodule Pinchflat.Settings.Setting do
@moduledoc """
The Setting schema.
"""
use Ecto.Schema
import Ecto.Changeset
@allowed_fields [
:onboarding,
:pro_enabled,
:yt_dlp_version,
:apprise_version,
:apprise_server,
:video_codec_preference,
:audio_codec_preference,
:youtube_api_key,
:extractor_sleep_interval_seconds
]
@required_fields [
:onboarding,
:pro_enabled,
:video_codec_preference,
:audio_codec_preference,
:extractor_sleep_interval_seconds
]
schema "settings" do
field :onboarding, :boolean, default: true
field :pro_enabled, :boolean, default: false
field :yt_dlp_version, :string
field :apprise_version, :string
field :apprise_server, :string
field :youtube_api_key, :string
field :route_token, :string
field :extractor_sleep_interval_seconds, :integer, default: 0
field :video_codec_preference, :string
field :audio_codec_preference, :string
end
@doc false
def changeset(setting, attrs) do
setting
|> cast(attrs, @allowed_fields)
|> validate_required(@required_fields)
|> validate_number(:extractor_sleep_interval_seconds, greater_than: 0)
end
end