parent
75f7f9930e
commit
b9b0313c78
|
@ -67,6 +67,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
|||
sensitive: @object['sensitive'] || false,
|
||||
visibility: visibility_from_audience,
|
||||
thread: replied_to_status,
|
||||
conversation: conversation_from_uri(@object['conversation']),
|
||||
media_attachment_ids: process_attachments.take(4).map(&:id),
|
||||
poll: process_poll,
|
||||
}
|
||||
|
@ -261,6 +262,16 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
|||
ActivityPub::FetchRepliesWorker.perform_async(status.id, uri) unless uri.nil?
|
||||
end
|
||||
|
||||
def conversation_from_uri(uri)
|
||||
return nil if uri.nil?
|
||||
return Conversation.find_by(id: OStatus::TagManager.instance.unique_tag_to_local_id(uri, 'Conversation')) if OStatus::TagManager.instance.local_id?(uri)
|
||||
begin
|
||||
Conversation.find_or_create_by!(uri: uri)
|
||||
rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotUnique
|
||||
retry
|
||||
end
|
||||
end
|
||||
|
||||
def visibility_from_audience
|
||||
if equals_or_includes?(@object['to'], ActivityPub::TagManager::COLLECTIONS[:public])
|
||||
:public
|
||||
|
|
|
@ -4,10 +4,17 @@
|
|||
# Table name: conversations
|
||||
#
|
||||
# id :bigint(8) not null, primary key
|
||||
# uri :string
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
#
|
||||
|
||||
class Conversation < ApplicationRecord
|
||||
validates :uri, uniqueness: true, if: :uri?
|
||||
|
||||
has_many :statuses
|
||||
|
||||
def local?
|
||||
uri.nil?
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class ActivityPub::NoteSerializer < ActivityPub::Serializer
|
||||
context_extensions :atom_uri, :sensitive,
|
||||
context_extensions :atom_uri, :conversation, :sensitive,
|
||||
:hashtag, :emoji, :focal_point, :blurhash
|
||||
|
||||
attributes :id, :type, :summary,
|
||||
:in_reply_to, :published, :url,
|
||||
:attributed_to, :to, :cc, :sensitive,
|
||||
:atom_uri, :in_reply_to_atom_uri
|
||||
:atom_uri, :in_reply_to_atom_uri,
|
||||
:conversation
|
||||
|
||||
attribute :content
|
||||
attribute :content_map, if: :language?
|
||||
|
@ -109,6 +110,16 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer
|
|||
OStatus::TagManager.instance.uri_for(object.thread)
|
||||
end
|
||||
|
||||
def conversation
|
||||
return if object.conversation.nil?
|
||||
|
||||
if object.conversation.uri?
|
||||
object.conversation.uri
|
||||
else
|
||||
OStatus::TagManager.instance.unique_tag(object.conversation.created_at, object.conversation.id, 'Conversation')
|
||||
end
|
||||
end
|
||||
|
||||
def local?
|
||||
object.account.local?
|
||||
end
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class RemoveBoostsWideningAudience < ActiveRecord::Migration[5.2]
|
||||
disable_ddl_transaction!
|
||||
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class RemoveUriFromConversations < ActiveRecord::Migration[5.2]
|
||||
def up
|
||||
safety_assured { remove_column :conversations, :uri, :string }
|
||||
end
|
||||
|
||||
def down
|
||||
add_column :conversations, :uri, :string
|
||||
add_index :conversations, :uri, unique: true
|
||||
end
|
||||
end
|
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 2019_07_28_084117) do
|
||||
ActiveRecord::Schema.define(version: 2019_07_26_175042) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
@ -203,8 +203,10 @@ ActiveRecord::Schema.define(version: 2019_07_28_084117) do
|
|||
end
|
||||
|
||||
create_table "conversations", force: :cascade do |t|
|
||||
t.string "uri"
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.index ["uri"], name: "index_conversations_on_uri", unique: true
|
||||
end
|
||||
|
||||
create_table "custom_emoji_categories", force: :cascade do |t|
|
||||
|
|
|
@ -1,5 +1,13 @@
|
|||
require 'rails_helper'
|
||||
|
||||
RSpec.describe Conversation, type: :model do
|
||||
|
||||
describe '#local?' do
|
||||
it 'returns true when URI is nil' do
|
||||
expect(Fabricate(:conversation).local?).to be true
|
||||
end
|
||||
|
||||
it 'returns false when URI is not nil' do
|
||||
expect(Fabricate(:conversation, uri: 'abc').local?).to be false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Reference in New Issue