Packages
fnord
0.7.13
0.9.40
0.9.39
0.9.38
0.9.37
0.9.36
0.9.35
0.9.34
0.9.33
0.9.32
0.9.31
0.9.30
0.9.29
0.9.28
0.9.27
0.9.26
0.9.25
0.9.24
0.9.23
0.9.22
0.9.21
0.9.20
0.9.19
0.9.18
0.9.17
0.9.16
0.9.15
0.9.14
0.9.13
0.9.12
0.9.11
0.9.10
0.9.9
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.99
0.8.98
0.8.97
0.8.96
0.8.95
0.8.94
0.8.93
0.8.92
0.8.91
0.8.90
0.8.89
0.8.88
0.8.87
0.8.86
0.8.85
0.8.84
0.8.83
0.8.82
0.8.81
0.8.80
0.8.79
0.8.78
0.8.77
0.8.76
0.8.75
0.8.74
0.8.73
0.8.72
0.8.71
0.8.70
0.8.69
0.8.68
0.8.67
0.8.66
0.8.65
0.8.64
0.8.63
0.8.62
0.8.61
0.8.60
0.8.59
0.8.58
0.8.57
0.8.56
0.8.55
0.8.54
0.8.53
0.8.52
0.8.51
0.8.50
0.8.49
0.8.48
0.8.47
0.8.46
0.8.45
0.8.44
0.8.43
0.8.42
0.8.41
0.8.40
0.8.39
0.8.38
0.8.37
0.8.36
0.8.35
0.8.34
0.8.33
0.8.32
0.8.31
0.8.30
0.8.29
0.8.27
0.8.26
0.8.25
0.8.24
0.8.23
0.8.22
0.8.21
0.8.20
0.8.19
0.8.18
0.8.17
0.8.16
0.8.15
0.8.14
0.8.13
0.8.12
0.8.11
0.8.1
0.8.0
0.7.24
0.7.23
0.7.22
0.7.21
0.7.20
0.7.19
0.7.18
0.7.17
0.7.16
0.7.15
0.7.14
0.7.13
0.7.12
0.7.11
0.7.10
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.3
0.7.2
0.7.1
0.7.0
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.1
0.6.0
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.44
0.4.43
0.4.42
0.4.41
0.4.40
0.4.39
0.4.38
0.4.37
0.4.36
0.4.35
0.4.34
0.4.33
0.4.32
0.4.30
0.4.29
0.4.28
0.4.27
0.4.26
0.4.25
0.4.24
0.4.23
0.4.22
0.4.21
0.4.20
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.0
0.1.0
AI code archaeology
Current section
Files
Jump to
Current section
Files
lib/store/project/notes.ex
defmodule Store.Project.Notes do
@filename "notes.md"
@typep project :: nil | binary() | Store.Project.t()
@typep no_notes :: {:error, any()}
@spec reset(project()) :: :ok
def reset(project \\ nil) do
project = Store.get_project(project)
new_path = project.store_path |> Path.join(@filename)
old_path = project.notes_dir
if File.exists?(new_path) do
File.rm_rf(new_path)
end
if File.exists?(old_path) do
File.rm_rf(old_path)
end
:ok
end
@spec write(project(), binary()) :: :ok | no_notes
def write(project \\ nil, content) do
project = Store.get_project(project)
project.store_path
|> Path.join(@filename)
|> File.write(content)
|> case do
:ok ->
if File.exists?(project.notes_dir) do
UI.info("Prior research notes have been upgraded to a new format")
File.rm_rf!(project.notes_dir)
UI.info("Deleted old (deprecated) prior research notes directory")
else
UI.info("Prior research notes saved")
end
:ok
other ->
other
end
end
@spec read(project()) :: {:ok, binary()} | no_notes
def read(project \\ nil) do
project
|> Store.get_project()
|> read_notes()
end
defp read_notes(project) do
project
|> read_new_notes()
|> case do
{:ok, notes} -> {:ok, notes}
{:error, :no_notes} -> project |> read_old_notes()
end
|> case do
{:ok, notes} -> {:ok, notes |> String.trim()}
other -> other
end
end
defp read_new_notes(%{store_path: store_path}) do
path = store_path |> Path.join(@filename)
if File.exists?(path) do
File.read(path)
else
{:error, :no_notes}
end
end
defp read_old_notes(project) do
project.notes_dir
|> File.ls()
|> case do
{:ok, dirs} ->
dirs
|> Enum.sort()
|> Enum.map(&Store.Project.Note.new(project, &1))
|> Enum.map(&Store.Project.Note.read_note/1)
|> Enum.filter(fn
{:ok, _} -> true
_ -> false
end)
|> Enum.map(fn {:ok, note} -> note end)
|> Enum.join("\n\n")
|> then(fn notes ->
{:ok,
"""
!!! These research notes are in an old, legacy format.
!!! They must be replaced with the new format.
#{notes}
"""}
end)
_ ->
{:error, :no_notes}
end
end
end