Conversations: Add a function to 'import' old DMs.
This commit is contained in:
parent
289b8224ac
commit
fcf2f38d20
3 changed files with 38 additions and 0 deletions
|
@ -72,4 +72,18 @@ def create_or_bump_for(activity) do
|
||||||
e -> {:error, e}
|
e -> {:error, e}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
This is only meant to be run by a mix task. It creates conversations/participations for all direct messages in the database.
|
||||||
|
"""
|
||||||
|
def bump_for_all_activities() do
|
||||||
|
stream =
|
||||||
|
Pleroma.Web.ActivityPub.ActivityPub.fetch_direct_messages_query()
|
||||||
|
|> Repo.stream()
|
||||||
|
|
||||||
|
Repo.transaction(fn ->
|
||||||
|
stream
|
||||||
|
|> Enum.each(&create_or_bump_for/1)
|
||||||
|
end)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1061,4 +1061,10 @@ def contain_timeline(timeline, user) do
|
||||||
contain_activity(activity, user)
|
contain_activity(activity, user)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def fetch_direct_messages_query() do
|
||||||
|
Activity
|
||||||
|
|> restrict_type(%{"type" => "Create"})
|
||||||
|
|> restrict_visibility(%{visibility: "direct"})
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,6 +9,24 @@ defmodule Pleroma.ConversationTest do
|
||||||
|
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
|
|
||||||
|
test "it goes through old direct conversations" do
|
||||||
|
user = insert(:user)
|
||||||
|
other_user = insert(:user)
|
||||||
|
|
||||||
|
{:ok, _activity} =
|
||||||
|
CommonAPI.post(user, %{"visibility" => "direct", "status" => "hey @#{other_user.nickname}"})
|
||||||
|
|
||||||
|
Repo.delete_all(Conversation)
|
||||||
|
Repo.delete_all(Conversation.Participation)
|
||||||
|
|
||||||
|
refute Repo.one(Conversation)
|
||||||
|
|
||||||
|
Conversation.bump_for_all_activities()
|
||||||
|
|
||||||
|
assert Repo.one(Conversation)
|
||||||
|
assert length(Repo.all(Conversation.Participation)) == 2
|
||||||
|
end
|
||||||
|
|
||||||
test "it creates a conversation for given ap_id" do
|
test "it creates a conversation for given ap_id" do
|
||||||
assert {:ok, %Conversation{} = conversation} =
|
assert {:ok, %Conversation{} = conversation} =
|
||||||
Conversation.create_for_ap_id("https://some_ap_id")
|
Conversation.create_for_ap_id("https://some_ap_id")
|
||||||
|
|
Loading…
Reference in a new issue