logsrv/logsrv_api/lib/logsrv.ex

80 lines
1.3 KiB
Elixir

defmodule Logsrv do
@moduledoc """
Documentation for `Logsrv`.
"""
def dir do
Application.get_env(:logsrv, :dir) <> "/"
end
def dir(subdir) do
"#{dir()}/#{subdir}/"
end
def journals do
dir(:journals)
|> File.ls!
end
def pages do
dir(:pages)
|> File.ls!
end
def compare(fd) do
sync_conflict_fd = fd
orig_fd = fd
|> String.replace(~r/\.sync.*/,"\.md")
sync_conflict = sync_conflict_fd |> File.read!
orig = orig_fd |> File.read!
# FOR NOW, just return the diff
diff = orig
|> String.myers_difference(sync_conflict)
diff
|> Kernel.inspect()
|> Jason.encode!
end
def conflicts do
{conflicts(journals()), conflicts(pages())}
end
def conflicts(list) do
list
|> Enum.filter( fn (fd) ->
fd |> String.match?(~r/.*sync.*/)
end)
end
def resolve_conflicts do
{journal_conflicts, pages_conflicts} = conflicts()
[
journal_conflicts
|> Enum.map( fn(fd) ->
%{
:type => :journal,
:date => fd |> Logsrv.Helpers.to_date,
:file => fd,
:diff => compare(dir(:journals) <> fd),
}
end),
pages_conflicts
|> Enum.map( fn(fd) ->
%{
:type => :page,
:file => fd,
:diff => compare(dir(:pages) <> fd),
} end)
]
|> List.flatten()
end
end