mirror of
https://github.com/livebook-dev/livebook.git
synced 2025-11-09 21:51:42 +08:00
Allow a file system to be set as default in the UI (#1450)
This commit is contained in:
parent
2554d08ed0
commit
577a1b7eb6
5 changed files with 65 additions and 8 deletions
|
|
@ -89,7 +89,15 @@ defmodule Livebook.Settings do
|
||||||
"""
|
"""
|
||||||
@spec remove_file_system(file_system_id()) :: :ok
|
@spec remove_file_system(file_system_id()) :: :ok
|
||||||
def remove_file_system(filesystem_id) do
|
def remove_file_system(filesystem_id) do
|
||||||
Storage.delete(:filesystem, filesystem_id)
|
if default_file_system_id() == filesystem_id do
|
||||||
|
storage().delete_key(:settings, "global", :default_file_system_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
storage().delete(:filesystem, filesystem_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
defp storage() do
|
||||||
|
Livebook.Storage.current()
|
||||||
end
|
end
|
||||||
|
|
||||||
defp storage_to_fs(%{type: "s3"} = config) do
|
defp storage_to_fs(%{type: "s3"} = config) do
|
||||||
|
|
@ -225,4 +233,37 @@ defmodule Livebook.Settings do
|
||||||
defp broadcast_env_vars_change(message) do
|
defp broadcast_env_vars_change(message) do
|
||||||
Phoenix.PubSub.broadcast(Livebook.PubSub, "settings", message)
|
Phoenix.PubSub.broadcast(Livebook.PubSub, "settings", message)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Sets default file system.
|
||||||
|
"""
|
||||||
|
@spec set_default_file_system(file_system_id()) :: :ok
|
||||||
|
def set_default_file_system(file_system_id) do
|
||||||
|
storage().insert(:settings, "global", default_file_system_id: file_system_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Settings default file system
|
||||||
|
"""
|
||||||
|
def default_file_system do
|
||||||
|
case storage().fetch(:filesystem, default_file_system_id()) do
|
||||||
|
{:ok, file} -> storage_to_fs(file)
|
||||||
|
:error -> Livebook.Config.local_filesystem()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Get default file system id
|
||||||
|
"""
|
||||||
|
def default_file_system_id do
|
||||||
|
case storage().fetch_key(:settings, "global", :default_file_system_id) do
|
||||||
|
{:ok, default_file_system_id} -> default_file_system_id
|
||||||
|
:error -> "local"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Settings default file system home
|
||||||
|
"""
|
||||||
|
def default_file_system_home, do: FileSystem.File.new(default_file_system())
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -462,7 +462,7 @@ defmodule LivebookWeb.HomeLive do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp determine_file(_params), do: Livebook.Config.local_filesystem_home()
|
defp determine_file(_params), do: Livebook.Settings.default_file_system_home()
|
||||||
|
|
||||||
defp open_notebook(socket, file) do
|
defp open_notebook(socket, file) do
|
||||||
case import_notebook(file) do
|
case import_notebook(file) do
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,6 @@ defmodule LivebookWeb.SessionLive.PersistenceLive do
|
||||||
<h3 class="text-2xl font-semibold text-gray-800">
|
<h3 class="text-2xl font-semibold text-gray-800">
|
||||||
Save to file
|
Save to file
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
<div class="w-full flex-col space-y-6">
|
<div class="w-full flex-col space-y-6">
|
||||||
<div class="h-full h-52">
|
<div class="h-full h-52">
|
||||||
<.live_component
|
<.live_component
|
||||||
|
|
@ -57,7 +56,6 @@ defmodule LivebookWeb.SessionLive.PersistenceLive do
|
||||||
submit_event={:confirm_file}
|
submit_event={:confirm_file}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form
|
<form
|
||||||
phx-change="set_options"
|
phx-change="set_options"
|
||||||
onsubmit="return false;"
|
onsubmit="return false;"
|
||||||
|
|
@ -84,7 +82,6 @@ defmodule LivebookWeb.SessionLive.PersistenceLive do
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="text-gray-700 whitespace-nowrap pt-2">
|
<span class="text-gray-700 whitespace-nowrap pt-2">
|
||||||
File: <%= normalize_file(@draft_file).path %>
|
File: <%= normalize_file(@draft_file).path %>
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -99,13 +96,11 @@ defmodule LivebookWeb.SessionLive.PersistenceLive do
|
||||||
>
|
>
|
||||||
Save
|
Save
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<%= live_patch("Cancel",
|
<%= live_patch("Cancel",
|
||||||
to: Routes.session_path(@socket, :page, @session.id),
|
to: Routes.session_path(@socket, :page, @session.id),
|
||||||
class: "button-base button-outlined-gray"
|
class: "button-base button-outlined-gray"
|
||||||
) %>
|
) %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%= if @saved_file do %>
|
<%= if @saved_file do %>
|
||||||
<button class="button-base button-outlined-red" phx-click="stop_saving">
|
<button class="button-base button-outlined-red" phx-click="stop_saving">
|
||||||
Stop saving to file
|
Stop saving to file
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,8 @@ defmodule LivebookWeb.SettingsLive do
|
||||||
dialog_opened?: false
|
dialog_opened?: false
|
||||||
},
|
},
|
||||||
update_check_enabled: Livebook.UpdateCheck.enabled?(),
|
update_check_enabled: Livebook.UpdateCheck.enabled?(),
|
||||||
page_title: "Livebook - Settings"
|
page_title: "Livebook - Settings",
|
||||||
|
default_file_system_id: Livebook.Settings.default_file_system_id()
|
||||||
)}
|
)}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -116,6 +117,7 @@ defmodule LivebookWeb.SettingsLive do
|
||||||
<LivebookWeb.SettingsLive.FileSystemsComponent.render
|
<LivebookWeb.SettingsLive.FileSystemsComponent.render
|
||||||
file_systems={@file_systems}
|
file_systems={@file_systems}
|
||||||
socket={@socket}
|
socket={@socket}
|
||||||
|
default_file_system_id={@default_file_system_id}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<!-- Environment variables configuration -->
|
<!-- Environment variables configuration -->
|
||||||
|
|
@ -314,10 +316,16 @@ defmodule LivebookWeb.SettingsLive do
|
||||||
|
|
||||||
def handle_event("detach_file_system", %{"id" => file_system_id}, socket) do
|
def handle_event("detach_file_system", %{"id" => file_system_id}, socket) do
|
||||||
Livebook.Settings.remove_file_system(file_system_id)
|
Livebook.Settings.remove_file_system(file_system_id)
|
||||||
|
|
||||||
file_systems = Livebook.Settings.file_systems()
|
file_systems = Livebook.Settings.file_systems()
|
||||||
{:noreply, assign(socket, file_systems: file_systems)}
|
{:noreply, assign(socket, file_systems: file_systems)}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def handle_event("make_default_file_system", %{"id" => file_system_id}, socket) do
|
||||||
|
Livebook.Settings.set_default_file_system(file_system_id)
|
||||||
|
{:noreply, assign(socket, default_file_system_id: file_system_id)}
|
||||||
|
end
|
||||||
|
|
||||||
def handle_event("save", %{"update_check_enabled" => enabled}, socket) do
|
def handle_event("save", %{"update_check_enabled" => enabled}, socket) do
|
||||||
enabled = enabled == "true"
|
enabled = enabled == "true"
|
||||||
Livebook.UpdateCheck.set_enabled(enabled)
|
Livebook.UpdateCheck.set_enabled(enabled)
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ defmodule LivebookWeb.SettingsLive.FileSystemsComponent do
|
||||||
<div class="flex items-center space-x-12">
|
<div class="flex items-center space-x-12">
|
||||||
<.file_system_info file_system={file_system} />
|
<.file_system_info file_system={file_system} />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%= unless is_struct(file_system, FileSystem.Local) do %>
|
<%= unless is_struct(file_system, FileSystem.Local) do %>
|
||||||
<button
|
<button
|
||||||
class="button-base button-outlined-red"
|
class="button-base button-outlined-red"
|
||||||
|
|
@ -31,6 +32,18 @@ defmodule LivebookWeb.SettingsLive.FileSystemsComponent do
|
||||||
</button>
|
</button>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="flex justify-end">
|
||||||
|
<%= unless @default_file_system_id == file_system_id do %>
|
||||||
|
<button
|
||||||
|
type="submit"
|
||||||
|
phx-click="make_default_file_system"
|
||||||
|
class="button-base button-outlined-gray"
|
||||||
|
phx-value-id={file_system_id}
|
||||||
|
>
|
||||||
|
Make default
|
||||||
|
</button>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue