diff --git a/.iex.exs b/.iex.exs
index b21b432..ebe1a24 100644
--- a/.iex.exs
+++ b/.iex.exs
@@ -11,7 +11,7 @@ alias Pinchflat.Tasks
alias Pinchflat.Media
alias Pinchflat.Profiles
alias Pinchflat.Sources
-alias Pinchflat.SettingsBackup
+alias Pinchflat.Settings
alias Pinchflat.Downloading.MediaDownloader
alias Pinchflat.YtDlp.Media, as: YtDlpMedia
diff --git a/lib/pinchflat/boot/pre_job_startup_tasks.ex b/lib/pinchflat/boot/pre_job_startup_tasks.ex
index fd9c1df..d4f4168 100644
--- a/lib/pinchflat/boot/pre_job_startup_tasks.ex
+++ b/lib/pinchflat/boot/pre_job_startup_tasks.ex
@@ -13,7 +13,7 @@ defmodule Pinchflat.Boot.PreJobStartupTasks do
require Logger
alias Pinchflat.Repo
- alias Pinchflat.SettingsBackup
+ alias Pinchflat.Settings
alias Pinchflat.YtDlp.CommandRunner
alias Pinchflat.Filesystem.FilesystemHelpers
@@ -65,8 +65,6 @@ defmodule Pinchflat.Boot.PreJobStartupTasks do
defp apply_default_settings do
{:ok, yt_dlp_version} = CommandRunner.version()
- SettingsBackup.fetch!(:onboarding, true)
- SettingsBackup.fetch!(:pro_enabled, false)
- SettingsBackup.set!(:yt_dlp_version, yt_dlp_version)
+ Settings.set(yt_dlp_version: yt_dlp_version)
end
end
diff --git a/lib/pinchflat/settings/setting.ex b/lib/pinchflat/settings/setting.ex
index 117a36f..da1b098 100644
--- a/lib/pinchflat/settings/setting.ex
+++ b/lib/pinchflat/settings/setting.ex
@@ -14,7 +14,7 @@ defmodule Pinchflat.Settings.Setting do
)a
schema "settings" do
- field :onboarding, :boolean, default: false
+ field :onboarding, :boolean, default: true
field :pro_enabled, :boolean, default: false
field :yt_dlp_version, :string
end
diff --git a/lib/pinchflat_web.ex b/lib/pinchflat_web.ex
index 67ca937..ef58d00 100644
--- a/lib/pinchflat_web.ex
+++ b/lib/pinchflat_web.ex
@@ -45,7 +45,7 @@ defmodule PinchflatWeb do
import Plug.Conn
import PinchflatWeb.Gettext
- alias Pinchflat.SettingsBackup
+ alias Pinchflat.Settings
alias PinchflatWeb.Layouts
unquote(verified_routes())
@@ -58,7 +58,7 @@ defmodule PinchflatWeb do
use Phoenix.LiveView
- alias Pinchflat.SettingsBackup
+ alias Pinchflat.Settings
unquote(html_helpers())
end
@@ -68,7 +68,7 @@ defmodule PinchflatWeb do
quote do
use Phoenix.LiveComponent
- alias Pinchflat.SettingsBackup
+ alias Pinchflat.Settings
unquote(html_helpers())
end
@@ -82,7 +82,7 @@ defmodule PinchflatWeb do
import Phoenix.Controller,
only: [get_csrf_token: 0, view_module: 1, view_template: 1]
- alias Pinchflat.SettingsBackup
+ alias Pinchflat.Settings
# Include general helpers for rendering HTML
unquote(html_helpers())
@@ -101,7 +101,7 @@ defmodule PinchflatWeb do
import PinchflatWeb.CustomComponents.TableComponents
import PinchflatWeb.CustomComponents.ButtonComponents
- alias Pinchflat.SettingsBackup
+ alias Pinchflat.Settings
alias Pinchflat.Utils.StringUtils
# Shortcut for generating JS commands
diff --git a/lib/pinchflat_web/components/layouts/partials/sidebar.html.heex b/lib/pinchflat_web/components/layouts/partials/sidebar.html.heex
index 2243f28..978c471 100644
--- a/lib/pinchflat_web/components/layouts/partials/sidebar.html.heex
+++ b/lib/pinchflat_web/components/layouts/partials/sidebar.html.heex
@@ -62,7 +62,7 @@
Pinchflat v<%= Application.spec(:pinchflat)[:vsn] %>
- yt-dlp <%= SettingsBackup.get!(:yt_dlp_version) %>
+ yt-dlp <%= Settings.get!(:yt_dlp_version) %>
diff --git a/lib/pinchflat_web/components/layouts/partials/upgrade_button_live.ex b/lib/pinchflat_web/components/layouts/partials/upgrade_button_live.ex
index 2e05506..959edae 100644
--- a/lib/pinchflat_web/components/layouts/partials/upgrade_button_live.ex
+++ b/lib/pinchflat_web/components/layouts/partials/upgrade_button_live.ex
@@ -30,7 +30,7 @@ defmodule Pinchflat.UpgradeButtonLive do
|> String.downcase()
if normalized_text == "got it!" do
- SettingsBackup.set!(:pro_enabled, true)
+ Settings.set(pro_enabled: true)
{:noreply, update(socket, :button_disabled, fn _ -> false end)}
else
diff --git a/lib/pinchflat_web/components/layouts/root.html.heex b/lib/pinchflat_web/components/layouts/root.html.heex
index f722ce3..52f7e5f 100644
--- a/lib/pinchflat_web/components/layouts/root.html.heex
+++ b/lib/pinchflat_web/components/layouts/root.html.heex
@@ -15,8 +15,8 @@
diff --git a/lib/pinchflat_web/controllers/media_profiles/media_profile_controller.ex b/lib/pinchflat_web/controllers/media_profiles/media_profile_controller.ex
index 76f9cc6..cc638ec 100644
--- a/lib/pinchflat_web/controllers/media_profiles/media_profile_controller.ex
+++ b/lib/pinchflat_web/controllers/media_profiles/media_profile_controller.ex
@@ -27,7 +27,7 @@ defmodule PinchflatWeb.MediaProfiles.MediaProfileController do
case Profiles.create_media_profile(media_profile_params) do
{:ok, media_profile} ->
redirect_location =
- if SettingsBackup.get!(:onboarding), do: ~p"/?onboarding=1", else: ~p"/media_profiles/#{media_profile}"
+ if Settings.get!(:onboarding), do: ~p"/?onboarding=1", else: ~p"/media_profiles/#{media_profile}"
conn
|> put_flash(:info, "Media profile created successfully.")
@@ -89,7 +89,7 @@ defmodule PinchflatWeb.MediaProfiles.MediaProfileController do
end
defp get_onboarding_layout do
- if SettingsBackup.get!(:onboarding) do
+ if Settings.get!(:onboarding) do
{Layouts, :onboarding}
else
{Layouts, :app}
diff --git a/lib/pinchflat_web/controllers/media_profiles/media_profile_html/new.html.heex b/lib/pinchflat_web/controllers/media_profiles/media_profile_html/new.html.heex
index b5d2c96..fe3e9e7 100644
--- a/lib/pinchflat_web/controllers/media_profiles/media_profile_html/new.html.heex
+++ b/lib/pinchflat_web/controllers/media_profiles/media_profile_html/new.html.heex
@@ -1,5 +1,5 @@
- <.link :if={!SettingsBackup.get!(:onboarding)} href={~p"/media_profiles"}>
+ <.link :if={!Settings.get!(:onboarding)} href={~p"/media_profiles"}>
<.icon name="hero-arrow-left" class="w-10 h-10 hover:dark:text-white" />
New Media Profile
diff --git a/lib/pinchflat_web/controllers/pages/page_controller.ex b/lib/pinchflat_web/controllers/pages/page_controller.ex
index fe066dd..ef1b154 100644
--- a/lib/pinchflat_web/controllers/pages/page_controller.ex
+++ b/lib/pinchflat_web/controllers/pages/page_controller.ex
@@ -11,9 +11,9 @@ defmodule PinchflatWeb.Pages.PageController do
done_onboarding = params["onboarding"] == "0"
force_onboarding = params["onboarding"] == "1"
- if done_onboarding, do: SettingsBackup.set!(:onboarding, false)
+ if done_onboarding, do: Settings.set(onboarding: false)
- if force_onboarding || SettingsBackup.get!(:onboarding) do
+ if force_onboarding || Settings.get!(:onboarding) do
render_onboarding_page(conn)
else
render_home_page(conn)
@@ -30,7 +30,7 @@ defmodule PinchflatWeb.Pages.PageController do
end
defp render_onboarding_page(conn) do
- SettingsBackup.set!(:onboarding, true)
+ Settings.set(onboarding: true)
conn
|> render(:onboarding_checklist,
diff --git a/lib/pinchflat_web/controllers/sources/source_controller.ex b/lib/pinchflat_web/controllers/sources/source_controller.ex
index 945bb94..d8e904d 100644
--- a/lib/pinchflat_web/controllers/sources/source_controller.ex
+++ b/lib/pinchflat_web/controllers/sources/source_controller.ex
@@ -37,7 +37,7 @@ defmodule PinchflatWeb.Sources.SourceController do
case Sources.create_source(source_params) do
{:ok, source} ->
redirect_location =
- if SettingsBackup.get!(:onboarding), do: ~p"/?onboarding=1", else: ~p"/sources/#{source}"
+ if Settings.get!(:onboarding), do: ~p"/?onboarding=1", else: ~p"/sources/#{source}"
conn
|> put_flash(:info, "Source created successfully.")
@@ -159,7 +159,7 @@ defmodule PinchflatWeb.Sources.SourceController do
end
defp get_onboarding_layout do
- if SettingsBackup.get!(:onboarding) do
+ if Settings.get!(:onboarding) do
{Layouts, :onboarding}
else
{Layouts, :app}
diff --git a/lib/pinchflat_web/controllers/sources/source_html/new.html.heex b/lib/pinchflat_web/controllers/sources/source_html/new.html.heex
index 0505567..2817c78 100644
--- a/lib/pinchflat_web/controllers/sources/source_html/new.html.heex
+++ b/lib/pinchflat_web/controllers/sources/source_html/new.html.heex
@@ -1,5 +1,5 @@
- <.link :if={!SettingsBackup.get!(:onboarding)} href={~p"/sources"}>
+ <.link :if={!Settings.get!(:onboarding)} href={~p"/sources"}>
<.icon name="hero-arrow-left" class="w-10 h-10 hover:dark:text-white" />
New Source
diff --git a/priv/repo/migrations/20240306173305_create_settings.exs b/priv/repo/migrations/20240306173305_create_settings.exs
index 0a1819a..5d84539 100644
--- a/priv/repo/migrations/20240306173305_create_settings.exs
+++ b/priv/repo/migrations/20240306173305_create_settings.exs
@@ -1,4 +1,4 @@
-defmodule Pinchflat.Repo.Migrations.CreateSettingsBackup do
+defmodule Pinchflat.Repo.Migrations.CreateSettings do
use Ecto.Migration
def change do
diff --git a/priv/repo/migrations/20240404172256_rename_settings_table.exs b/priv/repo/migrations/20240404172256_rename_settings_table.exs
index 6147ddf..2577e76 100644
--- a/priv/repo/migrations/20240404172256_rename_settings_table.exs
+++ b/priv/repo/migrations/20240404172256_rename_settings_table.exs
@@ -1,4 +1,4 @@
-defmodule Pinchflat.Repo.Migrations.RenameSettingsBackupTable do
+defmodule Pinchflat.Repo.Migrations.RenameSettingsTable do
use Ecto.Migration
def change do
diff --git a/priv/repo/migrations/20240404174144_create_new_settings.exs b/priv/repo/migrations/20240404174144_create_new_settings.exs
new file mode 100644
index 0000000..d8b6131
--- /dev/null
+++ b/priv/repo/migrations/20240404174144_create_new_settings.exs
@@ -0,0 +1,29 @@
+defmodule Pinchflat.Repo.Migrations.CreateNewSettings do
+ use Ecto.Migration
+
+ def up do
+ create table(:settings) do
+ add :onboarding, :boolean, default: true, null: false
+ add :pro_enabled, :boolean, default: false, null: false
+ add :yt_dlp_version, :string
+ end
+
+ # Make an initial record because this will be the only one ever inserted
+ execute "INSERT INTO settings (onboarding, pro_enabled, yt_dlp_version) VALUES (true, false, NULL)"
+
+ # Set the value of onboarding to the previous version set in `settings_backup`
+ execute """
+ UPDATE settings
+ SET onboarding = COALESCE((SELECT value = 'true' FROM settings_backup WHERE name = 'onboarding'), true)
+ """
+
+ execute """
+ UPDATE settings
+ SET pro_enabled = COALESCE((SELECT value = 'true' FROM settings_backup WHERE name = 'pro_enabled'), false)
+ """
+ end
+
+ def down do
+ drop table(:settings)
+ end
+end
diff --git a/priv/repo/migrations/20240404174144_create_settings.exs b/priv/repo/migrations/20240404174144_create_settings.exs
deleted file mode 100644
index fc906e1..0000000
--- a/priv/repo/migrations/20240404174144_create_settings.exs
+++ /dev/null
@@ -1,18 +0,0 @@
-defmodule Pinchflat.Repo.Migrations.CreateSettings do
- use Ecto.Migration
-
- def up do
- create table(:settings) do
- add :onboarding, :boolean, default: false, null: false
- add :pro_enabled, :boolean, default: false, null: false
- add :yt_dlp_version, :string
- end
-
- # Make an initial record because this will be the only one ever inserted
- execute "INSERT INTO settings (onboarding, pro_enabled, yt_dlp_version) VALUES (false, false, NULL)"
- end
-
- def down do
- drop table(:settings)
- end
-end
diff --git a/test/pinchflat/boot/pre_job_startup_tasks_test.exs b/test/pinchflat/boot/pre_job_startup_tasks_test.exs
index ae2f954..7dd8ec2 100644
--- a/test/pinchflat/boot/pre_job_startup_tasks_test.exs
+++ b/test/pinchflat/boot/pre_job_startup_tasks_test.exs
@@ -1,25 +1,24 @@
defmodule Pinchflat.Boot.PreJobStartupTasksTest do
use Pinchflat.DataCase
- alias Pinchflat.SettingsBackup
- alias Pinchflat.SettingsBackup.SettingBackup
+ alias Pinchflat.Settings
alias Pinchflat.Boot.PreJobStartupTasks
+ # TODO: write tests for things like cookie file creation
+
describe "apply_default_settings" do
setup do
- Repo.delete_all(SettingBackup)
+ Settings.set(yt_dlp_version: nil)
:ok
end
test "sets default settings" do
- assert_raise Ecto.NoResultsError, fn -> SettingsBackup.get!(:onboarding) end
- assert_raise Ecto.NoResultsError, fn -> SettingsBackup.get!(:pro_enabled) end
+ assert Settings.get!(:yt_dlp_version) == nil
PreJobStartupTasks.start_link()
- assert SettingsBackup.get!(:onboarding)
- refute SettingsBackup.get!(:pro_enabled)
+ assert Settings.get!(:yt_dlp_version)
end
end
end
diff --git a/test/pinchflat_web/controllers/media_profile_controller_test.exs b/test/pinchflat_web/controllers/media_profile_controller_test.exs
index 55eff76..df1013b 100644
--- a/test/pinchflat_web/controllers/media_profile_controller_test.exs
+++ b/test/pinchflat_web/controllers/media_profile_controller_test.exs
@@ -6,7 +6,7 @@ defmodule PinchflatWeb.MediaProfileControllerTest do
import Pinchflat.ProfilesFixtures
alias Pinchflat.Repo
- alias Pinchflat.SettingsBackup
+ alias Pinchflat.Settings
@create_attrs %{name: "some name", output_path_template: "output_template.{{ ext }}"}
@update_attrs %{
@@ -16,7 +16,7 @@ defmodule PinchflatWeb.MediaProfileControllerTest do
@invalid_attrs %{name: nil, output_path_template: nil}
setup do
- SettingsBackup.set!(:onboarding, false)
+ Settings.set(onboarding: false)
:ok
end
@@ -35,7 +35,7 @@ defmodule PinchflatWeb.MediaProfileControllerTest do
end
test "renders correct layout when onboarding", %{conn: conn} do
- SettingsBackup.set!(:onboarding, true)
+ Settings.set(onboarding: true)
conn = get(conn, ~p"/media_profiles/new")
refute html_response(conn, 200) =~ "MENU"
@@ -59,14 +59,14 @@ defmodule PinchflatWeb.MediaProfileControllerTest do
end
test "redirects to onboarding when onboarding", %{conn: conn} do
- SettingsBackup.set!(:onboarding, true)
+ Settings.set(onboarding: true)
conn = post(conn, ~p"/media_profiles", media_profile: @create_attrs)
assert redirected_to(conn) == ~p"/?onboarding=1"
end
test "renders correct layout on error when onboarding", %{conn: conn} do
- SettingsBackup.set!(:onboarding, true)
+ Settings.set(onboarding: true)
conn = post(conn, ~p"/media_profiles", media_profile: @invalid_attrs)
refute html_response(conn, 200) =~ "MENU"
diff --git a/test/pinchflat_web/controllers/page_controller_test.exs b/test/pinchflat_web/controllers/page_controller_test.exs
index 0303931..e549942 100644
--- a/test/pinchflat_web/controllers/page_controller_test.exs
+++ b/test/pinchflat_web/controllers/page_controller_test.exs
@@ -1,16 +1,16 @@
defmodule PinchflatWeb.PageControllerTest do
use PinchflatWeb.ConnCase
- alias Pinchflat.SettingsBackup
+ alias Pinchflat.Settings
describe "GET / when testing onboarding" do
test "sets the onboarding setting to true when onboarding", %{conn: conn} do
_conn = get(conn, ~p"/")
- assert SettingsBackup.get!(:onboarding)
+ assert Settings.get!(:onboarding)
end
test "displays the onboarding page when onboarding is forced", %{conn: conn} do
- SettingsBackup.set!(:onboarding, false)
+ Settings.set(onboarding: false)
conn = get(conn, ~p"/?onboarding=1")
assert html_response(conn, 200) =~ "Welcome to Pinchflat"
@@ -18,14 +18,14 @@ defmodule PinchflatWeb.PageControllerTest do
test "sets the onboarding setting to false if you pass the corrent query param", %{conn: conn} do
conn = get(conn, ~p"/")
- assert SettingsBackup.get!(:onboarding)
+ assert Settings.get!(:onboarding)
_conn = get(conn, ~p"/?onboarding=0")
- refute SettingsBackup.get!(:onboarding)
+ refute Settings.get!(:onboarding)
end
test "displays the home page when not onboarding", %{conn: conn} do
- SettingsBackup.set!(:onboarding, false)
+ Settings.set(onboarding: false)
conn = get(conn, ~p"/")
assert html_response(conn, 200) =~ "MENU"
diff --git a/test/pinchflat_web/controllers/source_controller_test.exs b/test/pinchflat_web/controllers/source_controller_test.exs
index e291bda..c0ecc5f 100644
--- a/test/pinchflat_web/controllers/source_controller_test.exs
+++ b/test/pinchflat_web/controllers/source_controller_test.exs
@@ -7,13 +7,13 @@ defmodule PinchflatWeb.SourceControllerTest do
import Pinchflat.ProfilesFixtures
alias Pinchflat.Repo
- alias Pinchflat.SettingsBackup
+ alias Pinchflat.Settings
alias Pinchflat.Downloading.MediaDownloadWorker
alias Pinchflat.SlowIndexing.MediaCollectionIndexingWorker
setup do
media_profile = media_profile_fixture()
- SettingsBackup.set!(:onboarding, false)
+ Settings.set(onboarding: false)
{
:ok,
@@ -47,7 +47,7 @@ defmodule PinchflatWeb.SourceControllerTest do
end
test "renders correct layout when onboarding", %{conn: conn} do
- SettingsBackup.set!(:onboarding, true)
+ Settings.set(onboarding: true)
conn = get(conn, ~p"/sources/new")
refute html_response(conn, 200) =~ "MENU"
@@ -74,14 +74,14 @@ defmodule PinchflatWeb.SourceControllerTest do
test "redirects to onboarding when onboarding", %{conn: conn, create_attrs: create_attrs} do
expect(YtDlpRunnerMock, :run, 1, &runner_function_mock/3)
- SettingsBackup.set!(:onboarding, true)
+ Settings.set(onboarding: true)
conn = post(conn, ~p"/sources", source: create_attrs)
assert redirected_to(conn) == ~p"/?onboarding=1"
end
test "renders correct layout on error when onboarding", %{conn: conn, invalid_attrs: invalid_attrs} do
- SettingsBackup.set!(:onboarding, true)
+ Settings.set(onboarding: true)
conn = post(conn, ~p"/sources", source: invalid_attrs)
refute html_response(conn, 200) =~ "MENU"