mournmail 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/mournmail/message_mode.rb +8 -4
- data/lib/mournmail/message_rendering.rb +26 -14
- data/lib/mournmail/version.rb +1 -1
- data/mournmail.gemspec +1 -0
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 55cea609c299af267b279b8434b661ec471776fe26c5175fdc363a527cc3cc7e
|
4
|
+
data.tar.gz: b77b32b8fb3923a8e545cd1cd5084dab346974a4f9aa210ae353f76e17839370
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a891f54dc0e39e09d72a5a8eb9e0272560226fe417eb809462f245bf77e535a9dcaacdf34600e45933723dd0b81378d64e73f1538dcb8c5f2e7c4ffea370078a
|
7
|
+
data.tar.gz: f0bee693b1b02a51449e38ca5d001a085f999040be22dcb5d29e1782dffd3dd31698312b9abde9f1fbc57528a72e031df05fa75ed4a6ee2c7535cd318063991e
|
@@ -13,7 +13,7 @@ module Mournmail
|
|
13
13
|
# See http://nihongo.jp/support/mail_guide/dev_guide.txt
|
14
14
|
MAILTO_REGEXP = URI.regexp("mailto")
|
15
15
|
URI_REGEXP = /(https?|ftp):\/\/[^ \t\n>)"]*[^] \t\n>.,:)"]+|#{MAILTO_REGEXP}/
|
16
|
-
MIME_REGEXP = /^\[(([
|
16
|
+
MIME_REGEXP = /^\[(([0-9.]+) [A-Za-z._\-]+\/[A-Za-z._\-]+.*|PGP\/MIME .*)\]$/
|
17
17
|
URI_OR_MIME_REGEXP = /#{URI_REGEXP}|#{MIME_REGEXP}/
|
18
18
|
|
19
19
|
define_syntax :field_name, /^[A-Za-z\-]+: /
|
@@ -64,7 +64,7 @@ module Mournmail
|
|
64
64
|
def current_part
|
65
65
|
@buffer.save_excursion do
|
66
66
|
@buffer.beginning_of_line
|
67
|
-
if @buffer.looking_at?(/\[([
|
67
|
+
if @buffer.looking_at?(/\[([0-9.]+) .*\]/)
|
68
68
|
index = match_string(1)
|
69
69
|
indices = index.split(".").map(&:to_i)
|
70
70
|
@buffer[:mournmail_mail].dig_part(*indices)
|
@@ -130,8 +130,12 @@ module Mournmail
|
|
130
130
|
else
|
131
131
|
file_name = "mournmail"
|
132
132
|
end
|
133
|
-
f = Tempfile.open(file_name)
|
134
|
-
|
133
|
+
f = Tempfile.open(file_name, binmode: true)
|
134
|
+
s = part.decoded
|
135
|
+
if part.charset
|
136
|
+
s = s.encode(part.charset)
|
137
|
+
end
|
138
|
+
f.write(s)
|
135
139
|
f.close
|
136
140
|
if ext == "txt"
|
137
141
|
find_file(f.path)
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require "mail"
|
2
|
+
require "html2text"
|
2
3
|
|
3
4
|
module Mournmail
|
4
5
|
module MessageRendering
|
@@ -27,16 +28,21 @@ module Mournmail
|
|
27
28
|
end
|
28
29
|
if multipart?
|
29
30
|
parts.each_with_index.map { |part, i|
|
30
|
-
|
31
|
+
no_content = sub_type == "alternative" && i > 0
|
32
|
+
part.render([*indices, i], no_content)
|
31
33
|
}.join
|
32
|
-
elsif main_type.nil? ||
|
33
|
-
s = body.decoded
|
34
|
-
|
34
|
+
elsif main_type.nil? || main_type == "text"
|
35
|
+
s = Mournmail.to_utf8(body.decoded, charset)
|
36
|
+
if sub_type == "html"
|
37
|
+
"[0 text/html]\n" + Html2Text.convert(s)
|
38
|
+
else
|
39
|
+
s
|
40
|
+
end
|
35
41
|
else
|
36
42
|
type = Mail::Encodings.decode_encode(self["content-type"].to_s,
|
37
43
|
:decode) rescue
|
38
44
|
"broken/type; error=\"#{$!} (#{$!.class})\""
|
39
|
-
"[
|
45
|
+
"[0 #{type}]\n"
|
40
46
|
end + pgp_signature
|
41
47
|
end
|
42
48
|
|
@@ -45,10 +51,10 @@ module Mournmail
|
|
45
51
|
mail = decrypt(verify: true)
|
46
52
|
return mail.dig_part(i, *rest_indices)
|
47
53
|
end
|
48
|
-
if i ==
|
54
|
+
if i == 0
|
49
55
|
return self
|
50
56
|
end
|
51
|
-
part = parts[i]
|
57
|
+
part = parts[i - 1]
|
52
58
|
if rest_indices.empty?
|
53
59
|
part
|
54
60
|
else
|
@@ -79,12 +85,13 @@ module Mournmail
|
|
79
85
|
end
|
80
86
|
|
81
87
|
refine ::Mail::Part do
|
82
|
-
def render(indices)
|
83
|
-
index = indices.join(".")
|
88
|
+
def render(indices, no_content = false)
|
89
|
+
index = indices.map { |i| i + 1 }.join(".")
|
84
90
|
type = Mail::Encodings.decode_encode(self["content-type"].to_s,
|
85
91
|
:decode) rescue
|
86
92
|
"broken/type; error=\"#{$!} (#{$!.class})\""
|
87
|
-
"[#{index} #{type}]\n" +
|
93
|
+
"[#{index} #{type}]\n" +
|
94
|
+
(no_content ? "" : render_content(indices))
|
88
95
|
end
|
89
96
|
|
90
97
|
def dig_part(i, *rest_indices)
|
@@ -92,7 +99,7 @@ module Mournmail
|
|
92
99
|
mail = Mail.new(body.to_s)
|
93
100
|
mail.dig_part(i, *rest_indices)
|
94
101
|
else
|
95
|
-
part = parts[i]
|
102
|
+
part = parts[i - 1]
|
96
103
|
if rest_indices.empty?
|
97
104
|
part
|
98
105
|
else
|
@@ -106,7 +113,8 @@ module Mournmail
|
|
106
113
|
def render_content(indices)
|
107
114
|
if multipart?
|
108
115
|
parts.each_with_index.map { |part, i|
|
109
|
-
|
116
|
+
no_content = sub_type == "alternative" && i > 0
|
117
|
+
part.render([*indices, i], no_content)
|
110
118
|
}.join
|
111
119
|
elsif main_type == "message" && sub_type == "rfc822"
|
112
120
|
mail = Mail.new(body.raw_source)
|
@@ -114,8 +122,12 @@ module Mournmail
|
|
114
122
|
elsif attachment?
|
115
123
|
""
|
116
124
|
else
|
117
|
-
if main_type == "text"
|
118
|
-
|
125
|
+
if main_type == "text"
|
126
|
+
if sub_type == "html"
|
127
|
+
Html2Text.convert(decoded).sub(/(?<!\n)\z/, "\n")
|
128
|
+
else
|
129
|
+
decoded.sub(/(?<!\n)\z/, "\n").gsub(/\r\n/, "\n")
|
130
|
+
end
|
119
131
|
else
|
120
132
|
""
|
121
133
|
end
|
data/lib/mournmail/version.rb
CHANGED
data/mournmail.gemspec
CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_runtime_dependency "rroonga"
|
28
28
|
spec.add_runtime_dependency "google-api-client"
|
29
29
|
spec.add_runtime_dependency "launchy"
|
30
|
+
spec.add_runtime_dependency "html2text"
|
30
31
|
|
31
32
|
spec.add_development_dependency "bundler"
|
32
33
|
spec.add_development_dependency "rake", "~> 12.0"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mournmail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shugo Maeda
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: textbringer
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: html2text
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: bundler
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -172,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
172
186
|
- !ruby/object:Gem::Version
|
173
187
|
version: '0'
|
174
188
|
requirements: []
|
175
|
-
rubygems_version: 3.
|
189
|
+
rubygems_version: 3.3.0.dev
|
176
190
|
signing_key:
|
177
191
|
specification_version: 4
|
178
192
|
summary: A message user agent for Textbringer.
|