Implement RFC2822 timestamp formatting
This commit is contained in:
parent
3f0783c0a5
commit
f3253c0c6a
|
@ -14,6 +14,9 @@ defmodule Pleroma.Web.Feed.FeedView do
|
||||||
|
|
||||||
require Pleroma.Constants
|
require Pleroma.Constants
|
||||||
|
|
||||||
|
@days ~w(Mon Tue Wed Thu Fri Sat Sun)
|
||||||
|
@months ~w(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
|
||||||
|
|
||||||
@spec pub_date(String.t() | DateTime.t()) :: String.t()
|
@spec pub_date(String.t() | DateTime.t()) :: String.t()
|
||||||
def pub_date(date) when is_binary(date) do
|
def pub_date(date) when is_binary(date) do
|
||||||
date
|
date
|
||||||
|
@ -21,7 +24,7 @@ def pub_date(date) when is_binary(date) do
|
||||||
|> pub_date
|
|> pub_date
|
||||||
end
|
end
|
||||||
|
|
||||||
def pub_date(%DateTime{} = date), do: to_rfc1123(date)
|
def pub_date(%DateTime{} = date), do: to_rfc2822(date)
|
||||||
|
|
||||||
def prepare_activity(activity, opts \\ []) do
|
def prepare_activity(activity, opts \\ []) do
|
||||||
object = Object.normalize(activity, fetch: false)
|
object = Object.normalize(activity, fetch: false)
|
||||||
|
@ -52,7 +55,7 @@ def most_recent_update(activities, user, :atom) do
|
||||||
|
|
||||||
def most_recent_update(activities, user, :rss) do
|
def most_recent_update(activities, user, :rss) do
|
||||||
(List.first(activities) || user).updated_at
|
(List.first(activities) || user).updated_at
|
||||||
|> to_rfc1123()
|
|> to_rfc2822()
|
||||||
end
|
end
|
||||||
|
|
||||||
def feed_logo do
|
def feed_logo do
|
||||||
|
@ -152,21 +155,46 @@ def to_rfc3339(nd) do
|
||||||
|> Timex.format!("{RFC3339}")
|
|> Timex.format!("{RFC3339}")
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec to_rfc1123(String.t() | DateTime.t() | NativeDateTime.t()) :: String.t()
|
@spec to_rfc2822(String.t() | DateTime.t() | NativeDateTime.t()) :: String.t()
|
||||||
def to_rfc1123(datestr) when is_binary(datestr) do
|
def to_rfc2822(datestr) when is_binary(datestr) do
|
||||||
datestr
|
datestr
|
||||||
|> Timex.parse!("{ISO:Extended}")
|
|> Timex.parse!("{ISO:Extended}")
|
||||||
|> to_rfc1123()
|
|> to_rfc2822()
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_rfc1123(%DateTime{} = date) do
|
def to_rfc2822(%DateTime{} = date) do
|
||||||
date
|
date
|
||||||
|> Timex.format!("{RFC1123}")
|
|> DateTime.to_naive()
|
||||||
|
|> NaiveDateTime.to_erl()
|
||||||
|
|> rfc2822_from_erl()
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_rfc1123(nd) do
|
def to_rfc2822(nd) do
|
||||||
nd
|
nd
|
||||||
|> Timex.to_datetime()
|
|> Timex.to_datetime()
|
||||||
|> Timex.format!("{RFC1123}")
|
|> DateTime.to_naive()
|
||||||
|
|> NaiveDateTime.to_erl()
|
||||||
|
|> rfc2822_from_erl()
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Builds a RFC2822 timestamp from an Erlang timestamp
|
||||||
|
[RFC2822 3.3 - Date and Time Specification](https://tools.ietf.org/html/rfc2822#section-3.3)
|
||||||
|
This function always assumes the Erlang timestamp is in Universal time, not Local time
|
||||||
|
"""
|
||||||
|
def rfc2822_from_erl({{year, month, day} = date, {hour, minute, second}}) do
|
||||||
|
day_name = Enum.at(@days, :calendar.day_of_the_week(date) - 1)
|
||||||
|
month_name = Enum.at(@months, month - 1)
|
||||||
|
|
||||||
|
date_part = "#{day_name}, #{day} #{month_name} #{year}"
|
||||||
|
time_part = "#{pad(hour)}:#{pad(minute)}:#{pad(second)}"
|
||||||
|
|
||||||
|
date_part <> " " <> time_part <> " +0000"
|
||||||
|
end
|
||||||
|
|
||||||
|
defp pad(num) do
|
||||||
|
num
|
||||||
|
|> Integer.to_string()
|
||||||
|
|> String.pad_leading(2, "0")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<guid><%= @data["id"] %></guid>
|
<guid><%= @data["id"] %></guid>
|
||||||
<title><%= activity_title(@data, Keyword.get(@feed_config, :post_title, %{})) %></title>
|
<title><%= activity_title(@data, Keyword.get(@feed_config, :post_title, %{})) %></title>
|
||||||
<description><%= activity_description(@data) %></description>
|
<description><%= activity_description(@data) %></description>
|
||||||
<pubDate><%= to_rfc1123(@activity.data["published"]) %></pubDate>
|
<pubDate><%= to_rfc2822(@activity.data["published"]) %></pubDate>
|
||||||
<ostatus:conversation ref="<%= activity_context(@activity) %>">
|
<ostatus:conversation ref="<%= activity_context(@activity) %>">
|
||||||
<%= activity_context(@activity) %>
|
<%= activity_context(@activity) %>
|
||||||
</ostatus:conversation>
|
</ostatus:conversation>
|
||||||
|
|
Loading…
Reference in New Issue