chore: Minor fix
This commit is contained in:
@@ -6,58 +6,66 @@ class Messages::ForwardedMessageBuilder
|
||||
|
||||
def perform
|
||||
return {} unless @message_id
|
||||
return basic_attributes unless forwarded_message && email_data.present?
|
||||
return basic_attributes unless valid_forwarded_data?
|
||||
|
||||
build_forwarded_attributes
|
||||
end
|
||||
|
||||
def formatted_content(original_content = '')
|
||||
return original_content unless forwarded_message && email_data.present?
|
||||
return original_content.to_s unless valid_forwarded_data?
|
||||
|
||||
original_content = original_content.to_s
|
||||
original_content + forwarded_header_text + forwarded_body_text
|
||||
original_content.to_s + forwarded_header_text + forwarded_body_text
|
||||
end
|
||||
|
||||
def formatted_html_content(original_content = '')
|
||||
return original_content unless forwarded_message && email_data.present?
|
||||
return original_content unless valid_forwarded_data?
|
||||
|
||||
html_content = convert_markdown_to_html(original_content)
|
||||
|
||||
# Ensure valid HTML structure even with empty content
|
||||
return "<div dir=\"ltr\">#{forwarded_header_html}#{forwarded_body_html}</div>" if html_content.blank?
|
||||
|
||||
"<div dir=\"ltr\">#{html_content}<br><br>#{forwarded_header_html}#{forwarded_body_html}</div>"
|
||||
html_wrapper(html_content)
|
||||
end
|
||||
|
||||
def forwarded_email_data(original_content = '')
|
||||
return {} unless forwarded_message && email_data.present?
|
||||
|
||||
original_plain = strip_markdown(original_content.to_s)
|
||||
full_content = formatted_content(original_content)
|
||||
return {} unless valid_forwarded_data?
|
||||
|
||||
data = prepare_email_data
|
||||
full_content = formatted_content(original_content)
|
||||
|
||||
# HTML content - ensure quoted section is always included even if empty
|
||||
data['html_content']['quoted'] = original_plain
|
||||
data['html_content']['reply'] = full_content
|
||||
data['html_content']['full'] = formatted_html_content(original_content)
|
||||
data['html_content'].merge!({
|
||||
'quoted' => strip_markdown(original_content.to_s),
|
||||
'reply' => full_content,
|
||||
'full' => formatted_html_content(original_content)
|
||||
})
|
||||
|
||||
# Text content - ensure quoted section is always included even if empty
|
||||
data['text_content']['quoted'] = original_content.to_s
|
||||
data['text_content']['reply'] = full_content
|
||||
data['text_content']['full'] = full_content
|
||||
data['text_content'].merge!({
|
||||
'quoted' => original_content.to_s,
|
||||
'reply' => full_content,
|
||||
'full' => full_content
|
||||
})
|
||||
|
||||
data
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def valid_forwarded_data?
|
||||
forwarded_message && email_data.present?
|
||||
end
|
||||
|
||||
def html_wrapper(content)
|
||||
base = '<div dir="ltr">'
|
||||
|
||||
if content.blank?
|
||||
"#{base}#{forwarded_header_html}#{forwarded_body_html}</div>"
|
||||
else
|
||||
"#{base}#{content}<br><br>#{forwarded_header_html}#{forwarded_body_html}</div>"
|
||||
end
|
||||
end
|
||||
|
||||
def build_forwarded_attributes
|
||||
{
|
||||
content_attributes: {
|
||||
forwarded_message_id: @message_id,
|
||||
email: prepare_email_data
|
||||
# forwarded_info: formatted_info,
|
||||
}
|
||||
}
|
||||
end
|
||||
@@ -73,21 +81,27 @@ class Messages::ForwardedMessageBuilder
|
||||
end
|
||||
|
||||
def forwarded_body_text
|
||||
if email_data.dig('text_content', 'full').present?
|
||||
email_data.dig('text_content', 'full')
|
||||
elsif email_data.dig('html_content', 'full').present?
|
||||
ActionView::Base.full_sanitizer.sanitize(email_data.dig('html_content', 'full'))
|
||||
text_content = email_data.dig('text_content', 'full')
|
||||
html_content = email_data.dig('html_content', 'full')
|
||||
|
||||
if text_content.present?
|
||||
text_content
|
||||
elsif html_content.present?
|
||||
ActionView::Base.full_sanitizer.sanitize(html_content)
|
||||
else
|
||||
forwarded_message.content.to_s
|
||||
end
|
||||
end
|
||||
|
||||
def forwarded_header_html
|
||||
email = extract_email(formatted_info[:from])
|
||||
name = formatted_info[:from].split(' <').first
|
||||
|
||||
[
|
||||
'<div class="gmail_quote gmail_quote_container">',
|
||||
'<div dir="ltr" class="gmail_attr">---------- Forwarded message ---------<br>',
|
||||
"From: <strong class=\"gmail_sendername\" dir=\"auto\">#{formatted_info[:from].split(' <').first}</strong> ",
|
||||
"<span dir=\"auto\"><<a href=\"mailto:#{extract_email(formatted_info[:from])}\">#{extract_email(formatted_info[:from])}</a>></span><br>",
|
||||
"From: <strong class=\"gmail_sendername\" dir=\"auto\">#{name}</strong> ",
|
||||
"<span dir=\"auto\"><<a href=\"mailto:#{email}\">#{email}</a>></span><br>",
|
||||
"Date: #{formatted_info[:date]}<br>",
|
||||
"Subject: #{formatted_info[:subject]}<br>",
|
||||
"To: <<a href=\"mailto:#{formatted_info[:to]}\">#{formatted_info[:to]}</a>><br>",
|
||||
@@ -121,22 +135,18 @@ class Messages::ForwardedMessageBuilder
|
||||
def convert_markdown_to_html(text)
|
||||
return '' if text.blank?
|
||||
|
||||
# Basic markdown conversion
|
||||
html = text.to_s
|
||||
# Convert *text* to <b>text</b>
|
||||
html = html.gsub(/\*\*?(.*?)\*\*?/) { |m| m.start_with?('**') ? "<b>#{::Regexp.last_match(1)}</b>" : "<i>#{::Regexp.last_match(1)}</i>" }
|
||||
# Convert _text_ to <i>text</i>
|
||||
html = html.gsub(/\*\*?(.*?)\*\*?/) do |m|
|
||||
m.start_with?('**') ? "<b>#{::Regexp.last_match(1)}</b>" : "<i>#{::Regexp.last_match(1)}</i>"
|
||||
end
|
||||
|
||||
html.gsub(/_(.*?)_/, '<i>\1</i>')
|
||||
end
|
||||
|
||||
def extract_email(from_field)
|
||||
return '' if from_field.blank?
|
||||
|
||||
if from_field =~ /<(.*)>/
|
||||
::Regexp.last_match(1)
|
||||
else
|
||||
from_field
|
||||
end
|
||||
from_field =~ /<(.*)>/ ? ::Regexp.last_match(1) : from_field
|
||||
end
|
||||
|
||||
def forwarded_message
|
||||
@@ -153,18 +163,13 @@ class Messages::ForwardedMessageBuilder
|
||||
|
||||
def formatted_info
|
||||
{
|
||||
from: format_from_field,
|
||||
date: format_date_field,
|
||||
from: parse_from_field(extract_from_field),
|
||||
date: format_date_string(email_data['date'] || ''),
|
||||
subject: email_data['subject'] || '',
|
||||
to: email_data['to']&.first || ''
|
||||
}
|
||||
end
|
||||
|
||||
def format_from_field
|
||||
from_field = extract_from_field
|
||||
parse_from_field(from_field)
|
||||
end
|
||||
|
||||
def extract_from_field
|
||||
email_data['from']&.first.to_s
|
||||
end
|
||||
@@ -173,40 +178,20 @@ class Messages::ForwardedMessageBuilder
|
||||
return '' if from_field.blank?
|
||||
|
||||
if from_field =~ /(.*)<(.*)>/
|
||||
name = ::Regexp.last_match(1).strip
|
||||
email = ::Regexp.last_match(2).strip
|
||||
"#{name} <#{email}>"
|
||||
"#{::Regexp.last_match(1).strip} <#{::Regexp.last_match(2).strip}>"
|
||||
else
|
||||
from_field
|
||||
end
|
||||
end
|
||||
|
||||
def format_date_field
|
||||
date_str = extract_date_string
|
||||
format_date_string(date_str)
|
||||
end
|
||||
|
||||
def extract_date_string
|
||||
email_data['date'] || ''
|
||||
end
|
||||
|
||||
def format_date_string(date_str)
|
||||
return '' if date_str.blank?
|
||||
|
||||
parsed_date = parse_date(date_str)
|
||||
|
||||
if parsed_date
|
||||
begin
|
||||
parsed_date = DateTime.parse(date_str)
|
||||
parsed_date.strftime('%a, %b %d, %Y at %l:%M %p')
|
||||
else
|
||||
rescue StandardError
|
||||
date_str
|
||||
end
|
||||
end
|
||||
|
||||
def parse_date(date_str)
|
||||
return nil if date_str.blank?
|
||||
|
||||
DateTime.parse(date_str)
|
||||
rescue StandardError
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user