Revert "Remove conversation URI (#11423)" (#11424)

This reverts commit 75f7f9930e.
pull/11430/head
Eugen Rochko 2019-07-28 17:47:37 +02:00 committed by GitHub
parent 75f7f9930e
commit b9b0313c78
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 42 additions and 17 deletions

View File

@ -67,6 +67,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
sensitive: @object['sensitive'] || false, sensitive: @object['sensitive'] || false,
visibility: visibility_from_audience, visibility: visibility_from_audience,
thread: replied_to_status, thread: replied_to_status,
conversation: conversation_from_uri(@object['conversation']),
media_attachment_ids: process_attachments.take(4).map(&:id), media_attachment_ids: process_attachments.take(4).map(&:id),
poll: process_poll, poll: process_poll,
} }
@ -261,6 +262,16 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
ActivityPub::FetchRepliesWorker.perform_async(status.id, uri) unless uri.nil? ActivityPub::FetchRepliesWorker.perform_async(status.id, uri) unless uri.nil?
end 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 def visibility_from_audience
if equals_or_includes?(@object['to'], ActivityPub::TagManager::COLLECTIONS[:public]) if equals_or_includes?(@object['to'], ActivityPub::TagManager::COLLECTIONS[:public])
:public :public

View File

@ -4,10 +4,17 @@
# Table name: conversations # Table name: conversations
# #
# id :bigint(8) not null, primary key # id :bigint(8) not null, primary key
# uri :string
# created_at :datetime not null # created_at :datetime not null
# updated_at :datetime not null # updated_at :datetime not null
# #
class Conversation < ApplicationRecord class Conversation < ApplicationRecord
validates :uri, uniqueness: true, if: :uri?
has_many :statuses has_many :statuses
def local?
uri.nil?
end
end end

View File

@ -1,13 +1,14 @@
# frozen_string_literal: true # frozen_string_literal: true
class ActivityPub::NoteSerializer < ActivityPub::Serializer class ActivityPub::NoteSerializer < ActivityPub::Serializer
context_extensions :atom_uri, :sensitive, context_extensions :atom_uri, :conversation, :sensitive,
:hashtag, :emoji, :focal_point, :blurhash :hashtag, :emoji, :focal_point, :blurhash
attributes :id, :type, :summary, attributes :id, :type, :summary,
:in_reply_to, :published, :url, :in_reply_to, :published, :url,
:attributed_to, :to, :cc, :sensitive, :attributed_to, :to, :cc, :sensitive,
:atom_uri, :in_reply_to_atom_uri :atom_uri, :in_reply_to_atom_uri,
:conversation
attribute :content attribute :content
attribute :content_map, if: :language? attribute :content_map, if: :language?
@ -109,6 +110,16 @@ class ActivityPub::NoteSerializer < ActivityPub::Serializer
OStatus::TagManager.instance.uri_for(object.thread) OStatus::TagManager.instance.uri_for(object.thread)
end 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? def local?
object.account.local? object.account.local?
end end

View File

@ -1,5 +1,3 @@
# frozen_string_literal: true
class RemoveBoostsWideningAudience < ActiveRecord::Migration[5.2] class RemoveBoostsWideningAudience < ActiveRecord::Migration[5.2]
disable_ddl_transaction! disable_ddl_transaction!

View File

@ -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

View File

@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # 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 # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -203,8 +203,10 @@ ActiveRecord::Schema.define(version: 2019_07_28_084117) do
end end
create_table "conversations", force: :cascade do |t| create_table "conversations", force: :cascade do |t|
t.string "uri"
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.index ["uri"], name: "index_conversations_on_uri", unique: true
end end
create_table "custom_emoji_categories", force: :cascade do |t| create_table "custom_emoji_categories", force: :cascade do |t|

View File

@ -1,5 +1,13 @@
require 'rails_helper' require 'rails_helper'
RSpec.describe Conversation, type: :model do 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 end