Skip to content

Commit

Permalink
Merge pull request discourse#4115 from sghebuz/mbox-improvements
Browse files Browse the repository at this point in the history
Mbox importer improvements (attachments and better subject strip)
  • Loading branch information
SamSaffron committed Mar 31, 2016
2 parents 9fbfa49 + 94cd87b commit 5f6601c
Showing 1 changed file with 55 additions and 2 deletions.
57 changes: 55 additions & 2 deletions script/import_scripts/mbox.rb
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,28 @@ def create_indices
end

def clean_title(title)
title.gsub(/^Re: */i, '')
#Strip mailing list name from subject
title = title.gsub(/\[[^\]]+\]+/, '').strip

original_length = title.length

#Strip Reply prefix from title (Standard and localized)
title = title.gsub(/^Re: */i, '')
title = title.gsub(/^R: */i, '') #Italian
title = title.gsub(/^RIF: */i, '') #Italian

#Strip Forward prefix from title (Standard and localized)
title = title.gsub(/^Fwd: */i, '')
title = title.gsub(/^I: */i, '') #Italian

title.strip

#In case of mixed localized prefixes there could be many of them if the mail client didn't strip the localized ones
if original_length > title.length
clean_title(title)
else
title
end
end

def clean_raw(raw)
Expand Down Expand Up @@ -156,7 +177,23 @@ def create_forum_topics

raw = selected.force_encoding(selected.encoding).encode("UTF-8")

title = mail.subject.gsub(/\[[^\]]+\]+/, '').strip
title = mail.subject

# import the attachments
mail.attachments.each do |attachment|
tmp = Tempfile.new("discourse-email-attachment")
begin
# read attachment
File.open(tmp.path, "w+b") { |f| f.write attachment.body.decoded }
# create the upload for the user
upload = Upload.create_for(user_id_from_imported_user_id(mail.from.first) || Discourse::SYSTEM_USER_ID, tmp, attachment.filename, tmp.size )
if upload && upload.errors.empty?
raw << "\n\n#{receiver.attachment_markdown(upload)}\n\n"
end
ensure
tmp.try(:close!) rescue nil
end
end

{ id: t['id'],
title: clean_title(title),
Expand Down Expand Up @@ -197,6 +234,22 @@ def import_replies
selected = receiver.select_body
raw = selected.force_encoding(selected.encoding).encode("UTF-8")

# import the attachments
mail.attachments.each do |attachment|
tmp = Tempfile.new("discourse-email-attachment")
begin
# read attachment
File.open(tmp.path, "w+b") { |f| f.write attachment.body.decoded }
# create the upload for the user
upload = Upload.create_for(user_id_from_imported_user_id(mail.from.first) || Discourse::SYSTEM_USER_ID, tmp, attachment.filename, tmp.size )
if upload && upload.errors.empty?
raw << "\n\n#{receiver.attachment_markdown(upload)}\n\n"
end
ensure
tmp.try(:close!) rescue nil
end
end

{ id: id,
topic_id: topic_id,
user_id: user_id_from_imported_user_id(mail.from.first) || Discourse::SYSTEM_USER_ID,
Expand Down

0 comments on commit 5f6601c

Please sign in to comment.