Conversations: Add a function to 'import' old DMs.

This commit is contained in:
lain 2019-05-08 17:37:00 +02:00
parent 289b8224ac
commit fcf2f38d20
3 changed files with 38 additions and 0 deletions

View File

@ -72,4 +72,18 @@ def create_or_bump_for(activity) do
e -> {:error, e}
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

View File

@ -1061,4 +1061,10 @@ def contain_timeline(timeline, user) do
contain_activity(activity, user)
end)
end
def fetch_direct_messages_query() do
Activity
|> restrict_type(%{"type" => "Create"})
|> restrict_visibility(%{visibility: "direct"})
end
end

View File

@ -9,6 +9,24 @@ defmodule Pleroma.ConversationTest do
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
assert {:ok, %Conversation{} = conversation} =
Conversation.create_for_ap_id("https://some_ap_id")