- <%= case message.attachment do %>
- <% %Waev.Export.Message.File{filename: filename, type: :image} -> %>
-
 %>)
- <% _ -> %>
- <% end %>
-
- <%= case message.attachment do %>
- <% %Waev.Export.Message.File{filename: filename, type: :file} -> %>
-
<%= filename %>
- <% _ -> %>
+<%= for {date, blocks} <- process_messages(@export.messages) do %>
+
+ <%= for {side, block} <- blocks do %>
+
+ <%= for message <- block do %>
+ <%= case message.side do %>
+ <% :left -> %>
+
+ <%= party_avatar(assigns, @export.left, :tiny) %>
+ <% :right -> %>
+
+ <%= party_avatar(assigns, @export.right, :tiny) %>
<% end %>
-
<%= message.text |> highlight_urls() |> nl_to_br() |> raw() %>
-
- <%= message.date %>
+
+ <%= case message.attachment do %>
+ <% %Waev.Export.Message.File{filename: filename, type: :image} -> %>
+
 %>)
+ <% _ -> %>
+ <% end %>
+
+ <%= case message.attachment do %>
+ <% %Waev.Export.Message.File{filename: filename, type: :file} -> %>
+
<%= filename %>
+ <% _ -> %>
+ <% end %>
+
+
<%= message.text |> highlight_urls() |> nl_to_br() |> raw() %>
+
+ <%= message.date %>
+
+
-
-
-
+
+ <% end %>
+ <% end %>
<% end %>
<%= pagination_bar(assigns, @page, @size) %>
diff --git a/lib/waev_web/views/exports_view.ex b/lib/waev_web/views/exports_view.ex
index 3e0195f..bbdc2c7 100644
--- a/lib/waev_web/views/exports_view.ex
+++ b/lib/waev_web/views/exports_view.ex
@@ -1,6 +1,71 @@
defmodule WaevWeb.ExportsView do
use WaevWeb, :view
+ defp consolidate_block({side, messages}), do: {side, Enum.reverse(messages)}
+
+ defp consolidate_day({datestr, blocks}) do
+ # TODO use timex to pretty-print dates (translations??)
+ [d, m, y] = String.split(datestr, "/") |> Enum.map(&String.to_integer/1)
+ y = 2000 + y
+
+ m =
+ Enum.at(
+ [
+ "enero",
+ "febrero",
+ "marzo",
+ "abril",
+ "mayo",
+ "junio",
+ "julio",
+ "agosto",
+ "septiembre",
+ "octubre",
+ "noviembre",
+ "diciembre"
+ ],
+ m - 1
+ )
+
+ date = "#{d} de #{m} de #{y}"
+ {date, Enum.reverse(blocks)}
+ end
+
+ # Organize messages to make them easier to display
+ # [Waev.Export.Message] -> [{Date, [{Side, [Waev.Export.Message]}]}]
+ # Naming: ^-Days ^-Blocks^-Block
+ def process_messages(messages) do
+ messages
+ |> Enum.reduce([], fn message, days ->
+ [datestr, timestr] = String.split(message.date, " ")
+ side = message.side
+
+ case days do
+ # Insert message on the last block (same date, same side)
+ [{^datestr, [{^side, block} | old_blocks]} | old_days] ->
+ [{datestr, [{side, [message | block]} | old_blocks]} | old_days]
+
+ # Insert message on new block (same date)
+ # Old block must be reversed to keep messages in the correct order
+ [{^datestr, [{old_side, old_block} | old_blocks]} | old_days] ->
+ [
+ {datestr, [{side, [message]}, consolidate_block({old_side, old_block}) | old_blocks]}
+ | old_days
+ ]
+
+ # Insert message on new date
+ # Old blocks must be reversed to keep days in the correct order
+ [{old_datestr, old_blocks} | old_days] ->
+ [{datestr, [{side, [message]}]}, consolidate_day({old_datestr, old_blocks}) | old_days]
+
+ # Ez.
+ [] ->
+ [{datestr, [{side, [message]}]}]
+ end
+ end)
+ |> Enum.reverse()
+ end
+
def party_peek(assigns, party) do
~E"""
--
cgit v1.2.3