chore: Minor fix

This commit is contained in:
iamsivin
2025-04-28 22:15:07 +05:30
parent c710c55cf1
commit 32664bb840
@@ -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\">&lt;<a href=\"mailto:#{extract_email(formatted_info[:from])}\">#{extract_email(formatted_info[:from])}</a>&gt;</span><br>",
"From: <strong class=\"gmail_sendername\" dir=\"auto\">#{name}</strong> ",
"<span dir=\"auto\">&lt;<a href=\"mailto:#{email}\">#{email}</a>&gt;</span><br>",
"Date: #{formatted_info[:date]}<br>",
"Subject: #{formatted_info[:subject]}<br>",
"To: &lt;<a href=\"mailto:#{formatted_info[:to]}\">#{formatted_info[:to]}</a>&gt;<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