From a97df0e5365af9c2a038bf83f53c465a54f784cb Mon Sep 17 00:00:00 2001 From: Alexandre de Souza Date: Thu, 5 Oct 2023 16:34:54 -0300 Subject: [PATCH] Use default directory when using Persistence or AddFileEntry components (#2250) --- lib/livebook/settings.ex | 15 ++++++++++++++ .../add_file_entry_file_component.ex | 6 ++++-- .../session_live/persistence_component.ex | 2 +- test/livebook_web/live/session_live_test.exs | 20 +++++++++++++++++++ 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/lib/livebook/settings.ex b/lib/livebook/settings.ex index c78dd9767..3db9653a2 100644 --- a/lib/livebook/settings.ex +++ b/lib/livebook/settings.ex @@ -197,4 +197,19 @@ defmodule Livebook.Settings do _ -> FileSystem.File.new(Livebook.Config.local_file_system()) end end + + @doc """ + Gets default directory based on given hub. + """ + @spec default_dir(Livebook.Hubs.Provider.t()) :: FileSystem.File.t() + def default_dir(hub) do + file_systems = Livebook.Hubs.get_file_systems(hub) + file = default_dir() + + if Enum.any?(file_systems, &(&1.id == file.file_system_id)) do + file + else + Livebook.Config.local_file_system_home() + end + end end diff --git a/lib/livebook_web/live/session_live/add_file_entry_file_component.ex b/lib/livebook_web/live/session_live/add_file_entry_file_component.ex index 222181d4e..0385a131a 100644 --- a/lib/livebook_web/live/session_live/add_file_entry_file_component.ex +++ b/lib/livebook_web/live/session_live/add_file_entry_file_component.ex @@ -9,7 +9,6 @@ defmodule LivebookWeb.SessionLive.AddFileEntryFileComponent do def mount(socket) do {:ok, assign(socket, - file: Livebook.Config.local_file_system_home(), file_info: %{exists: true}, changeset: changeset(), error_message: nil, @@ -48,7 +47,10 @@ defmodule LivebookWeb.SessionLive.AddFileEntryFileComponent do end def update(assigns, socket) do - {:ok, assign(socket, assigns)} + {:ok, + socket + |> assign(assigns) + |> assign_new(:file, fn -> Livebook.Settings.default_dir(assigns.hub) end)} end @impl true diff --git a/lib/livebook_web/live/session_live/persistence_component.ex b/lib/livebook_web/live/session_live/persistence_component.ex index a2f89ce4a..8156042bc 100644 --- a/lib/livebook_web/live/session_live/persistence_component.ex +++ b/lib/livebook_web/live/session_live/persistence_component.ex @@ -56,7 +56,7 @@ defmodule LivebookWeb.SessionLive.PersistenceComponent do case assigns.session.origin do # If it's a forked notebook, default to the same folder {:file, file} -> FileSystem.File.containing_dir(file) - _ -> Livebook.Config.local_file_system_home() + nil -> Livebook.Settings.default_dir(assigns.hub) end end) |> assign_new(:saved_file, fn -> file end) diff --git a/test/livebook_web/live/session_live_test.exs b/test/livebook_web/live/session_live_test.exs index e92104629..508343219 100644 --- a/test/livebook_web/live/session_live_test.exs +++ b/test/livebook_web/live/session_live_test.exs @@ -911,6 +911,26 @@ defmodule LivebookWeb.SessionLiveTest do assert %{notebook: %{persist_outputs: true}} = Session.get_data(session.pid) end + + @tag :tmp_dir + test "showing all files from default directory", + %{conn: conn, session: session, tmp_dir: tmp_dir} do + old_dir = Livebook.Settings.default_dir() + new_dir = Livebook.FileSystem.File.local(tmp_dir) + + Livebook.Settings.set_default_dir(new_dir) + + {:ok, view, _} = live(conn, ~p"/sessions/#{session.id}/settings/file") + + assert render(view) =~ new_dir.path + + Livebook.Settings.set_default_dir(old_dir) + + {:ok, view, _} = live(conn, ~p"/sessions/#{session.id}/settings/file") + + refute render(view) =~ new_dir.path + assert render(view) =~ old_dir.path + end end describe "completion" do