Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FIX: Do not display chat replies as threads in transcripts #24768

Merged
merged 2 commits into from
Dec 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
29 changes: 16 additions & 13 deletions plugins/chat/lib/chat/transcript_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,8 @@ def generate_markdown
rendered_markdown = []
rendered_thread_markdown = []
all_messages_same_user = messages.count(:user_id) == 1
threading_enabled = @channel.threading_enabled?
thread_id = threading_enabled ? messages.first.thread_id : nil

open_bbcode_tag =
TranscriptBBCode.new(
Expand All @@ -175,27 +177,27 @@ def generate_markdown
multiquote: messages.length > 1,
chained: !all_messages_same_user,
no_link: @opts[:no_link],
thread_id: messages.first.thread_id,
thread_id: thread_id,
thread_ranges: @thread_ranges,
include_reactions: @opts[:include_reactions],
)

group_messages(messages).each do |id, message_group|
message = message_group.first
(threading_enabled ? group_messages(messages) : messages).each do |message_data|
message = threading_enabled ? message_data.first : message_data

if previous_message.present? &&
(
previous_message.user_id != message.user_id ||
previous_message.thread_id != message.thread_id
)
user_changed = previous_message&.user_id != message.user_id
thread_changed = threading_enabled && previous_message&.thread_id != message.thread_id

if previous_message.present? && (user_changed || thread_changed)
rendered_markdown << open_bbcode_tag.render
thread_id = threading_enabled ? message.thread_id : nil

open_bbcode_tag =
TranscriptBBCode.new(
acting_user: @acting_user,
chained: !all_messages_same_user,
no_link: @opts[:no_link],
thread_id: message.thread_id,
thread_id: thread_id,
thread_ranges: @thread_ranges,
include_reactions: @opts[:include_reactions],
)
Expand All @@ -208,8 +210,9 @@ def generate_markdown
end

previous_message = message
next if !threading_enabled

if message_group.length > 1
if message_data.length > 1
previous_thread_message = nil
rendered_thread_markdown.clear

Expand All @@ -221,7 +224,7 @@ def generate_markdown
include_reactions: @opts[:include_reactions],
)

message_group[1..].each do |thread_message|
message_data[1..].each do |thread_message|
if previous_thread_message.present? &&
previous_thread_message.user_id != thread_message.user_id
rendered_thread_markdown << thread_bbcode_tag.render
Expand All @@ -247,7 +250,7 @@ def generate_markdown
end
rendered_thread_markdown << thread_bbcode_tag.render
end
thread_id = message_group.first.thread_id
thread_id = message_data.first.thread_id
if thread_id.present?
thread = Chat::Thread.find(thread_id)
if thread&.replies_count > 0
Expand All @@ -267,7 +270,7 @@ def generate_markdown
private

def group_messages(messages)
messages.group_by { |msg| msg.thread_id || msg.id }
messages.group_by { |msg| msg.thread_id || msg.id }.values
end

def messages
Expand Down
2 changes: 2 additions & 0 deletions plugins/chat/spec/lib/chat/channel_archive_service_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,8 @@ def start_archive
end

xit "creates the correct posts for a channel with messages and threads" do
channel.update!(threading_enabled: true)

create_messages(2)
create_threaded_messages(6, title: "a new thread")
create_messages(7)
Expand Down
31 changes: 31 additions & 0 deletions plugins/chat/spec/lib/chat/transcript_service_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,37 @@ def service(message_ids, opts: {})
MARKDOWN
end

xit "generates the correct markdown for messages that are in reply to other messages" do
channel.update!(threading_enabled: false)
thread = Fabricate(:chat_thread, channel: channel)

message1 =
Fabricate(
:chat_message,
user: user1,
chat_channel: channel,
thread: thread,
message: "an extremely insightful response :)",
)
message2 = Fabricate(:chat_message, user: user2, chat_channel: channel, message: "says you!")
message3 =
Fabricate(:chat_message, user: user1, chat_channel: channel, thread: thread, message: "aw :(")

expect(service([message1.id, message2.id, message3.id]).generate_markdown).to eq(<<~MARKDOWN)
[chat quote="martinchat;#{message1.id};#{message1.created_at.iso8601}" channel="The Beam Discussions" channelId="#{channel.id}" multiQuote="true" chained="true"]
an extremely insightful response :)
[/chat]

[chat quote="brucechat;#{message2.id};#{message2.created_at.iso8601}" chained="true"]
says you!
[/chat]

[chat quote="martinchat;#{message3.id};#{message3.created_at.iso8601}" chained="true"]
aw :(
[/chat]
MARKDOWN
end

it "generates the correct markdown if a message has text and an upload" do
SiteSetting.authorized_extensions = "mp4|mp3|pdf|jpg"
message =
Expand Down