From b4d2c16f4124ce944873ea621feb7f618f73f2ad Mon Sep 17 00:00:00 2001 From: Kieran Eglin Date: Mon, 3 Jun 2024 16:10:24 -0700 Subject: [PATCH] Removed and re-added codec preference columns --- lib/pinchflat/settings/setting.ex | 37 +----------- ...40603230512_refactor_codec_preferences.exs | 15 +++++ test/pinchflat/settings_test.exs | 60 ------------------- 3 files changed, 17 insertions(+), 95 deletions(-) create mode 100644 priv/repo/migrations/20240603230512_refactor_codec_preferences.exs diff --git a/lib/pinchflat/settings/setting.ex b/lib/pinchflat/settings/setting.ex index 8c393ff..bdeb623 100644 --- a/lib/pinchflat/settings/setting.ex +++ b/lib/pinchflat/settings/setting.ex @@ -16,11 +16,6 @@ defmodule Pinchflat.Settings.Setting do :audio_codec_preference ] - @virtual_fields [ - :video_codec_preference_string, - :audio_codec_preference_string - ] - @required_fields ~w( onboarding pro_enabled @@ -33,42 +28,14 @@ defmodule Pinchflat.Settings.Setting do field :apprise_version, :string field :apprise_server, :string - field :video_codec_preference, {:array, :string}, default: [] - field :audio_codec_preference, {:array, :string}, default: [] - field :video_codec_preference_string, :string, default: nil, virtual: true - field :audio_codec_preference_string, :string, default: nil, virtual: true + field :video_codec_preference, :string, default: "avc" + field :audio_codec_preference, :string, default: "m4a" end @doc false def changeset(setting, attrs) do setting |> cast(attrs, @allowed_fields) - |> cast(attrs, @virtual_fields, empty_values: []) - |> convert_codec_preference_strings() |> validate_required(@required_fields) end - - defp convert_codec_preference_strings(changeset) do - fields = [ - video_codec_preference_string: :video_codec_preference, - audio_codec_preference_string: :audio_codec_preference - ] - - Enum.reduce(fields, changeset, fn {virtual_field, actual_field}, changeset -> - case get_change(changeset, virtual_field) do - nil -> - changeset - - value -> - new_value = - value - |> String.split(">") - |> Enum.map(&String.trim/1) - |> Enum.reject(&(String.trim(&1) == "")) - |> Enum.map(&String.downcase/1) - - put_change(changeset, actual_field, new_value) - end - end) - end end diff --git a/priv/repo/migrations/20240603230512_refactor_codec_preferences.exs b/priv/repo/migrations/20240603230512_refactor_codec_preferences.exs new file mode 100644 index 0000000..a7127f1 --- /dev/null +++ b/priv/repo/migrations/20240603230512_refactor_codec_preferences.exs @@ -0,0 +1,15 @@ +defmodule Pinchflat.Repo.Migrations.RefactorCodecPreferences do + use Ecto.Migration + + def change do + alter table(:settings) do + remove :video_codec_preference, {:array, :string}, default: [] + remove :audio_codec_preference, {:array, :string}, default: [] + end + + alter table(:settings) do + add :video_codec_preference, :string, default: "avc" + add :audio_codec_preference, :string, default: "m4a" + end + end +end diff --git a/test/pinchflat/settings_test.exs b/test/pinchflat/settings_test.exs index 3c4d653..944eaf1 100644 --- a/test/pinchflat/settings_test.exs +++ b/test/pinchflat/settings_test.exs @@ -78,64 +78,4 @@ defmodule Pinchflat.SettingsTest do assert %Ecto.Changeset{} = Settings.change_setting(setting, %{onboarding: true}) end end - - describe "change_setting/2 when testing codec preferences" do - test "converts (video|audio)_codec_preference_string to an array" do - setting = Settings.record() - - new_setting = %{ - video_codec_preference_string: "avc>vp9", - audio_codec_preference_string: "aac>opus" - } - - changeset = Settings.change_setting(setting, new_setting) - - assert ["avc", "vp9"] = changeset.changes.video_codec_preference - assert ["aac", "opus"] = changeset.changes.audio_codec_preference - end - - test "removes whitespace from (video|audio)_codec_preference" do - setting = Settings.record() - - new_setting = %{ - video_codec_preference_string: " avc > > vp9 ", - audio_codec_preference_string: "aac> opus " - } - - changeset = Settings.change_setting(setting, new_setting) - - assert ["avc", "vp9"] = changeset.changes.video_codec_preference - assert ["aac", "opus"] = changeset.changes.audio_codec_preference - end - - test "downcases (video|audio)_codec_preference" do - setting = Settings.record() - - new_setting = %{ - video_codec_preference_string: "AVC>VP9", - audio_codec_preference_string: "AAC>OPUS" - } - - changeset = Settings.change_setting(setting, new_setting) - - assert ["avc", "vp9"] = changeset.changes.video_codec_preference - assert ["aac", "opus"] = changeset.changes.audio_codec_preference - end - - test "an empty value will remove the codec settings" do - Settings.set(video_codec_preference: ["avc", "vp9"]) - Settings.set(audio_codec_preference: ["aac", "opus"]) - setting = Settings.record() - - new_setting = %{ - video_codec_preference_string: "", - audio_codec_preference_string: "" - } - - changeset = Settings.change_setting(setting, new_setting) - - assert [] = changeset.changes.video_codec_preference - assert [] = changeset.changes.audio_codec_preference - end - end end