diff options
-rw-r--r-- | assets/css/app.css | 13 | ||||
-rw-r--r-- | lib/waev/export.ex | 53 | ||||
-rw-r--r-- | lib/waev_web/templates/exports/show.html.eex | 25 | ||||
-rw-r--r-- | 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 %> -<div class="container"> +<div class="container wa-back"> <div class="row"> <div class="column column-50"> - <%= @export.left %> + <%= @export.left.name %> </div> <div class="column column-50"> - <%= @export.right %> + <%= @export.right.name %> </div> </div> <%= for message <- @export.messages do %> <div class="row"> - <div class="column column-75"> + <%= case message.side do %> + <% :left -> %> + <div class="column wa-message column-75 "> + <% :right -> %> + <div class="column wa-message column-75 column-offset-25"> + <% nil -> %> + <div class="column wa-message column-50 column-offset-25"> + <% end %> + <%= case message.attachment do %> + <% %Waev.Export.Message.File{filename: filename} -> %> + <a href="#"><%= filename %></a> + <% nil -> %> + <% end %> <%= message.text %> - <br /> - <%= message.date %> + <div class="wa-message-date"> + <%= message.date %> + </div> </div> </div> <% end %> diff --git a/lib/waev_web/templates/layout/app.html.eex b/lib/waev_web/templates/layout/app.html.eex index 3eb7e3a..d83e5bc 100644 --- a/lib/waev_web/templates/layout/app.html.eex +++ b/lib/waev_web/templates/layout/app.html.eex @@ -11,14 +11,7 @@ <body> <header> <section class="container"> - <nav role="navigation"> - <ul> - <li><a href="https://hexdocs.pm/phoenix/overview.html">Get Started</a></li> - </ul> - </nav> - <a href="https://phoenixframework.org/" class="phx-logo"> - <img src="<%= Routes.static_path(@conn, "/images/phoenix.png") %>" alt="Phoenix Framework Logo"/> - </a> + <h1>WhatsApp Exports Viewer</h1> </section> </header> <main role="main" class="container"> |