lib/sup/modes/edit_message_mode.rb in sup-0.14.1.1 vs lib/sup/modes/edit_message_mode.rb in sup-0.15.0

- old
+ new

@@ -195,25 +195,33 @@ def save_message_to_file sig = sig_lines.join("\n") @file = Tempfile.new ["sup.#{self.class.name.gsub(/.*::/, '').camel_to_hyphy}", ".eml"] @file.puts format_headers(@header - NON_EDITABLE_HEADERS).first @file.puts - @file.puts @body.join("\n") + + begin + text = @body.join("\n") + rescue Encoding::CompatibilityError + text = @body.map { |x| x.fix_encoding! }.join("\n") + debug "encoding problem while writing message, trying to rescue, but expect errors: #{text}" + end + + @file.puts text @file.puts sig if ($config[:edit_signature] and !@sig_edited) @file.close end def set_sig_edit_flag sig = sig_lines.join("\n") if $config[:edit_signature] - pbody = @body.join("\n") + pbody = @body.map { |x| x.fix_encoding! }.join("\n").fix_encoding! blen = pbody.length slen = sig.length if blen > slen and pbody[blen-slen..blen] == sig @sig_edited = false - @body = pbody[0..blen-slen].split("\n") + @body = pbody[0..blen-slen].fix_encoding!.split("\n") else @sig_edited = true end end end @@ -317,11 +325,11 @@ BufferManager.flash "Can't read #{fn}: #{e.message}" end end def delete_attachment - i = curpos - @attachment_lines_offset - DECORATION_LINES - 2 + i = curpos - @attachment_lines_offset - (@selectors.empty? ? 0 : DECORATION_LINES) - @selectors.size if i >= 0 && i < @attachments.size && BufferManager.ask_yes_or_no("Delete attachment #{@attachment_names[i]}?") @attachments.delete_at i @attachment_names.delete_at i update end @@ -549,13 +557,13 @@ @header.each do |k, v| next if v.nil? || v.empty? m.header[k] = case v when String - (k.match(/subject/i) ? mime_encode_subject(v) : mime_encode_address(v)).fix_encoding! + (k.match(/subject/i) ? mime_encode_subject(v).dup.fix_encoding! : mime_encode_address(v)).dup.fix_encoding! when Array - (v.map { |v| mime_encode_address v }.join ", ").fix_encoding! + (v.map { |v| mime_encode_address v }.join ", ").dup.fix_encoding! end end m.header["Date"] = date.rfc2822 m.header["Message-Id"] = @message_id @@ -633,15 +641,15 @@ def mentions_attachments? if HookManager.enabled? "mentions-attachments" HookManager.run "mentions-attachments", :header => @header, :body => @body else - @body.any? { |l| l =~ /^[^>]/ && l =~ /\battach(ment|ed|ing|)\b/i } + @body.any? { |l| l.fix_encoding! =~ /^[^>]/ && l.fix_encoding! =~ /\battach(ment|ed|ing|)\b/i } end end def top_posting? - @body.join("\n") =~ /(\S+)\s*Excerpts from.*\n(>.*\n)+\s*\Z/ + @body.map { |x| x.fix_encoding! }.join("\n").fix_encoding! =~ /(\S+)\s*Excerpts from.*\n(>.*\n)+\s*\Z/ end def sig_lines p = Person.from_address(@header["From"]) from_email = p && p.email