Skip to content
Snippets Groups Projects
Commit cc330421 authored by lain's avatar lain
Browse files

Better activities in ostatus.

parent d23f3e3c
No related branches found
No related tags found
No related merge requests found
defmodule Pleroma.Web.OStatus.ActivityRepresenter do
def to_simple_form(activity, user) do
h = fn(str) -> [to_charlist(str)] end
updated_at = activity.updated_at
|> NaiveDateTime.to_iso8601
inserted_at = activity.inserted_at
|> NaiveDateTime.to_iso8601
[
{:"activity:object-type", ['http://activitystrea.ms/schema/1.0/note']},
{:"activity:verb", ['http://activitystrea.ms/schema/1.0/post']},
{:id, h.(activity.data["id"])},
{:title, ['New note by #{user.nickname}']},
{:content, [type: 'html'], h.(activity.data["object"]["content"])},
{:published, h.(inserted_at)},
{:updated, h.(updated_at)}
]
end
end
defmodule Pleroma.Web.OStatus.FeedRepresenter do
alias Pleroma.Web.OStatus
alias Pleroma.Web.OStatus.UserRepresenter
alias Pleroma.Web.OStatus.{UserRepresenter, ActivityRepresenter}
def to_simple_form(user, activities, users) do
most_recent_update = List.first(activities).updated_at
......@@ -8,7 +8,10 @@ def to_simple_form(user, activities, users) do
h = fn(str) -> [to_charlist(str)] end
entries = []
entries = Enum.map(activities, fn(activity) ->
{:entry, ActivityRepresenter.to_simple_form(activity, user)}
end)
[{
:feed, [
xmlns: 'http://www.w3.org/2005/Atom',
......@@ -17,10 +20,9 @@ def to_simple_form(user, activities, users) do
{:id, h.(OStatus.feed_path(user))},
{:title, ['#{user.nickname}\'s timeline']},
{:updated, h.(most_recent_update)},
{:entries, []},
{:link, [rel: 'hub', href: h.(OStatus.pubsub_path)], []},
{:author, UserRepresenter.to_simple_form(user)}
]
] ++ entries
}]
end
end
......@@ -23,4 +23,8 @@ def feed(conn, %{"nickname" => nickname}) do
|> put_resp_content_type("application/atom+xml")
|> send_resp(200, response)
end
def temp(conn, params) do
IO.inspect(params)
end
end
......@@ -58,10 +58,11 @@ def user_fetcher(username) do
plug :accepts, ["xml", "atom"]
end
scope "/users", Pleroma.Web do
scope "/", Pleroma.Web do
pipe_through :ostatus
get "/:nickname/feed", OStatus.OStatusController, :feed
get "/users/:nickname/feed", OStatus.OStatusController, :feed
post "/push/hub", OStatus.OStatusController, :temp
end
scope "/.well-known", Pleroma.Web do
......
defmodule Pleroma.Web.Websub.WebsubServerSubscription do
use Ecto.Schema
schema "websub_server_subscriptions" do
field :topic, :string
field :callback, :string
field :secret, :string
field :valid_until, :naive_datetime
field :state, :string
end
end
defmodule Pleroma.Repo.Migrations.CreateWebsubServerSubscription do
use Ecto.Migration
def change do
create table(:websub_server_subscriptions) do
add :topic, :string
add :callback, :string
add :secret, :string
add :valid_until, :naive_datetime
add :state, :string
timestamps()
end
end
end
defmodule Pleroma.Web.OStatus.ActivityRepresenterTest do
use Pleroma.DataCase
alias Pleroma.Web.OStatus.ActivityRepresenter
alias Pleroma.User
import Pleroma.Factory
test "a note activity" do
note_activity = insert(:note_activity)
updated_at = note_activity.updated_at
|> NaiveDateTime.to_iso8601
inserted_at = note_activity.inserted_at
|> NaiveDateTime.to_iso8601
user = User.get_cached_by_ap_id(note_activity.data["actor"])
expected = """
<activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
<activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
<id>#{note_activity.data["id"]}</id>
<title>New note by #{user.nickname}</title>
<content type="html">#{note_activity.data["object"]["content"]}</content>
<published>#{inserted_at}</published>
<updated>#{updated_at}</updated>
"""
tuple = ActivityRepresenter.to_simple_form(note_activity, user)
res = :xmerl.export_simple_content(tuple, :xmerl_xml) |> IO.iodata_to_binary
assert clean(res) == clean(expected)
end
defp clean(string) do
String.replace(string, ~r/\s/, "")
end
end
......@@ -2,7 +2,7 @@ defmodule Pleroma.Web.OStatus.FeedRepresenterTest do
use Pleroma.DataCase
import Pleroma.Factory
alias Pleroma.User
alias Pleroma.Web.OStatus.{FeedRepresenter, UserRepresenter}
alias Pleroma.Web.OStatus.{FeedRepresenter, UserRepresenter, ActivityRepresenter}
alias Pleroma.Web.OStatus
test "returns a feed of the last 20 items of the user" do
......@@ -18,16 +18,21 @@ test "returns a feed of the last 20 items of the user" do
user_xml = UserRepresenter.to_simple_form(user)
|> :xmerl.export_simple_content(:xmerl_xml)
entry_xml = ActivityRepresenter.to_simple_form(note_activity, user)
|> :xmerl.export_simple_content(:xmerl_xml)
expected = """
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:activity="http://activitystrea.ms/spec/1.0/">
<id>#{OStatus.feed_path(user)}</id>
<title>#{user.nickname}'s timeline</title>
<updated>#{most_recent_update}</updated>
<entries />
<link rel="hub" href="#{OStatus.pubsub_path}" />
<author>
#{user_xml}
</author>
<entry>
#{entry_xml}
</entry>
</feed>
"""
assert clean(res) == clean(expected)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment