116 lines
1.9 KiB
Elixir
116 lines
1.9 KiB
Elixir
defmodule Logsrv do
|
|
@moduledoc """
|
|
Documentation for `Logsrv`.
|
|
"""
|
|
def hello do
|
|
:world
|
|
end
|
|
|
|
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 get(fd) do
|
|
if fd |> File.exists? do
|
|
{:ok, fd}
|
|
else
|
|
{:error, :enoent}
|
|
end
|
|
end
|
|
|
|
def page(title) do
|
|
fd = dir(:pages) <> title <> ".md"
|
|
get fd
|
|
end
|
|
|
|
def journal(date) do
|
|
fd = dir(:journals) <> date <> ".md"
|
|
get fd
|
|
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! do
|
|
[conflicts(journals()), conflicts(pages())]
|
|
|> List.flatten()
|
|
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
|
|
|
|
def add_thought(:journals, data) do
|
|
journal_date = data.date
|
|
date_formatted = journal_date
|
|
|> Calendar.strftime("%Y_%m_%d")
|
|
content = data.content
|
|
|
|
{:ok, date_formatted}
|
|
end
|
|
|
|
end
|