From 52b52c7b09a51af60a847d8956824f0dcae8c99b Mon Sep 17 00:00:00 2001 From: Guillermo Ramos Date: Tue, 4 Feb 2020 18:11:46 +0100 Subject: And closer --- assets/css/app.css | 13 +++++++ lib/waev/export.ex | 53 +++++++++++++++++++++++----- lib/waev_web/templates/exports/show.html.eex | 25 +++++++++---- lib/waev_web/templates/layout/app.html.eex | 9 +---- 4 files changed, 77 insertions(+), 23 deletions(-) diff --git a/assets/css/app.css b/assets/css/app.css index fec0b3f..72ef09d 100644 --- a/assets/css/app.css +++ b/assets/css/app.css @@ -1,3 +1,16 @@ /* This file is for your main application css. */ @import "./phoenix.css"; + +.wa-back { + background-color: #dddddd; +} + +.wa-message { + margin: 15px 0 15px 0; + background-color: white; +} + +.wa-message-date { + text-align: right; +} diff --git a/lib/waev/export.ex b/lib/waev/export.ex index 5140a89..a69fa33 100644 --- a/lib/waev/export.ex +++ b/lib/waev/export.ex @@ -1,6 +1,12 @@ defmodule Waev.Export do + require Logger + defmodule Party do defstruct name: nil, photo: nil + + def lookup(name) do + %Party{name: name, photo: nil} + end end defmodule Message do @@ -12,7 +18,20 @@ defmodule Waev.Export do defstruct filename: nil end - defstruct party: nil, date: nil, text: nil, attachment: nil + defstruct side: nil, date: nil, text: nil, attachment: nil + + def parse(side, datetime, text) do + {text, attachment} = + case Regex.run(~r/^([^ ]+) \(archivo adjunto\)$/u, text) do + [^text, filename] -> + {nil, %File{filename: filename}} + + nil -> + {text, nil} + end + + %Message{side: side, date: datetime, text: text, attachment: attachment} + end end defstruct left: nil, right: nil, messages: [] @@ -36,23 +55,39 @@ defmodule Waev.Export do true -> export = File.stream!("#{path()}/#{e}/chat.txt") + |> Enum.take(200) |> Enum.reduce(%Waev.Export{}, fn line, export -> line = String.trim(line) case Regex.run(~r/^(\d+\/\d+\/\d+ \d+:\d+) - ([^:]+): (.*)$/u, line) do # Match: new message [^line, datetime, name, text] -> - party = nil + {export, side} = + case {export.left, export.right, name} do + {nil, _, _} -> + {%{export | left: Party.lookup(name)}, :left} + + {%{name: left}, _, left} -> + {export, :left} + + {_, nil, _} -> + {%{export | right: Party.lookup(name)}, :right} - message = - case Regex.run(~r/^([^ ]+) \(archivo adjunto\)$/u, text) do - [^text, filename] -> - %Message{party: party, date: datetime, text: nil, attachment: filename} + {_, %{name: right}, right} -> + {export, :right} - nil -> - %Message{party: party, date: datetime, text: text, attachment: nil} + {left, right, name} -> + Logger.error( + "Found a third party!? (left, right, name) = #{ + inspect({left.name, right.name, name}) + }" + ) + + {export, nil} end + message = Message.parse(side, datetime, text) + %{export | messages: [message | export.messages]} # Otherwise: text continuing from the previous one. We need to @@ -74,7 +109,7 @@ defmodule Waev.Export do export end end - end) + end) {:ok, export} diff --git a/lib/waev_web/templates/exports/show.html.eex b/lib/waev_web/templates/exports/show.html.eex index b8cb69c..2d72e2e 100644 --- a/lib/waev_web/templates/exports/show.html.eex +++ b/lib/waev_web/templates/exports/show.html.eex @@ -1,20 +1,33 @@ ID: <%= @id %> -