libis-format 1.3.8.1 → 2.0.0

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.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +2 -0
  3. data/.gitignore +20 -0
  4. data/.travis.yml +70 -0
  5. data/Gemfile +0 -12
  6. data/README.md +2 -2
  7. data/Rakefile +8 -0
  8. data/base/Dockerfile +35 -0
  9. data/base/Dockerfile.alpine +20 -0
  10. data/base/Dockerfile.rvm +56 -0
  11. data/base/rework_path +20 -0
  12. data/bin/{pdf_tool → pdf_copy} +2 -3
  13. data/data/PDFA_def.ps +3 -3
  14. data/data/eciRGB_v2.icc +0 -0
  15. data/data/types.yml +4 -17
  16. data/docker_cfg.yml +1 -0
  17. data/lib/libis/format/cli/convert.rb +4 -4
  18. data/lib/libis/format/cli/prompt_helper.rb +24 -32
  19. data/lib/libis/format/command_line.rb +3 -2
  20. data/lib/libis/format/config.rb +23 -19
  21. data/lib/libis/format/converter/audio_converter.rb +31 -56
  22. data/lib/libis/format/converter/base.rb +36 -16
  23. data/lib/libis/format/converter/chain.rb +32 -62
  24. data/lib/libis/format/converter/fop_pdf_converter.rb +8 -4
  25. data/lib/libis/format/converter/image_assembler.rb +82 -0
  26. data/lib/libis/format/converter/image_converter.rb +45 -248
  27. data/lib/libis/format/converter/image_splitter.rb +80 -0
  28. data/lib/libis/format/converter/image_watermarker.rb +261 -0
  29. data/lib/libis/format/converter/jp2_converter.rb +38 -36
  30. data/lib/libis/format/converter/office_converter.rb +28 -22
  31. data/lib/libis/format/converter/pdf_assembler.rb +66 -0
  32. data/lib/libis/format/converter/pdf_converter.rb +52 -200
  33. data/lib/libis/format/converter/pdf_optimizer.rb +70 -0
  34. data/lib/libis/format/converter/pdf_splitter.rb +65 -0
  35. data/lib/libis/format/converter/pdf_watermarker.rb +110 -0
  36. data/lib/libis/format/converter/repository.rb +13 -7
  37. data/lib/libis/format/converter/spreadsheet_converter.rb +16 -10
  38. data/lib/libis/format/converter/video_converter.rb +73 -109
  39. data/lib/libis/format/converter/xslt_converter.rb +11 -13
  40. data/lib/libis/format/converter.rb +1 -1
  41. data/lib/libis/format/identifier.rb +46 -44
  42. data/lib/libis/format/info.rb +27 -0
  43. data/lib/libis/format/library.rb +147 -0
  44. data/lib/libis/format/tool/droid.rb +30 -29
  45. data/lib/libis/format/tool/extension_identification.rb +26 -24
  46. data/lib/libis/format/tool/{ff_mpeg.rb → ffmpeg.rb} +10 -17
  47. data/lib/libis/format/tool/fido.rb +27 -22
  48. data/lib/libis/format/tool/file_tool.rb +24 -11
  49. data/lib/libis/format/tool/fop_pdf.rb +14 -25
  50. data/lib/libis/format/tool/identification_tool.rb +40 -38
  51. data/lib/libis/format/tool/office_to_pdf.rb +18 -30
  52. data/lib/libis/format/tool/pdf_copy.rb +47 -0
  53. data/lib/libis/format/tool/pdf_merge.rb +19 -25
  54. data/lib/libis/format/tool/pdf_optimizer.rb +19 -22
  55. data/lib/libis/format/tool/pdf_split.rb +33 -6
  56. data/lib/libis/format/tool/pdf_to_pdfa.rb +31 -45
  57. data/lib/libis/format/tool/pdfa_validator.rb +30 -24
  58. data/lib/libis/format/tool/spreadsheet_to_ods.rb +18 -29
  59. data/lib/libis/format/tool.rb +3 -4
  60. data/lib/libis/format/version.rb +1 -3
  61. data/lib/libis/format/yaml_loader.rb +71 -0
  62. data/lib/libis/format.rb +7 -5
  63. data/lib/libis-format.rb +0 -2
  64. data/libis-format.gemspec +19 -29
  65. data/tools/PdfTool.jar +0 -0
  66. data/tools/pdfbox/pdfbox-app-2.0.13.jar +0 -0
  67. data/tools/pdfbox/{preflight-app-3.0.3.jar → preflight-app-2.0.13.jar} +0 -0
  68. metadata +83 -152
  69. data/data/AdobeRGB1998.icc +0 -0
  70. data/lib/libis/format/converter/email_converter.rb +0 -51
  71. data/lib/libis/format/tool/eml_to_pdf.rb +0 -168
  72. data/lib/libis/format/tool/mail_to_pdf.rb +0 -447
  73. data/lib/libis/format/tool/msg_to_pdf.rb +0 -154
  74. data/lib/libis/format/tool/pdf_tool.rb +0 -52
  75. data/lib/libis/format/type_database.rb +0 -156
  76. data/lib/libis/format/type_database_impl.rb +0 -153
  77. data/tools/pdf2pdfa +0 -395
  78. data/tools/pdfbox/pdfbox-app-3.0.3.jar +0 -0
  79. /data/bin/{droid_tool → droid} +0 -0
  80. /data/bin/{fido_tool → fido} +0 -0
metadata CHANGED
@@ -1,114 +1,87 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libis-format
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.8.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kris Dekeyser
8
+ autorequire:
8
9
  bindir: bin
9
10
  cert_chain: []
10
- date: 1980-01-02 00:00:00.000000000 Z
11
+ date: 2020-11-09 00:00:00.000000000 Z
11
12
  dependencies:
12
13
  - !ruby/object:Gem::Dependency
13
- name: chromaprint
14
- requirement: !ruby/object:Gem::Requirement
15
- requirements:
16
- - - "~>"
17
- - !ruby/object:Gem::Version
18
- version: 0.0.2
19
- type: :runtime
20
- prerelease: false
21
- version_requirements: !ruby/object:Gem::Requirement
22
- requirements:
23
- - - "~>"
24
- - !ruby/object:Gem::Version
25
- version: 0.0.2
26
- - !ruby/object:Gem::Dependency
27
- name: deep_dive
28
- requirement: !ruby/object:Gem::Requirement
29
- requirements:
30
- - - "~>"
31
- - !ruby/object:Gem::Version
32
- version: '0.3'
33
- type: :runtime
34
- prerelease: false
35
- version_requirements: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '0.3'
40
- - !ruby/object:Gem::Dependency
41
- name: libis-tools
14
+ name: rake
42
15
  requirement: !ruby/object:Gem::Requirement
43
16
  requirements:
44
17
  - - "~>"
45
18
  - !ruby/object:Gem::Version
46
- version: '1.1'
47
- type: :runtime
19
+ version: '10.3'
20
+ type: :development
48
21
  prerelease: false
49
22
  version_requirements: !ruby/object:Gem::Requirement
50
23
  requirements:
51
24
  - - "~>"
52
25
  - !ruby/object:Gem::Version
53
- version: '1.1'
26
+ version: '10.3'
54
27
  - !ruby/object:Gem::Dependency
55
- name: mail
28
+ name: rspec
56
29
  requirement: !ruby/object:Gem::Requirement
57
30
  requirements:
58
31
  - - "~>"
59
32
  - !ruby/object:Gem::Version
60
- version: '2.9'
61
- type: :runtime
33
+ version: '3.1'
34
+ type: :development
62
35
  prerelease: false
63
36
  version_requirements: !ruby/object:Gem::Requirement
64
37
  requirements:
65
38
  - - "~>"
66
39
  - !ruby/object:Gem::Version
67
- version: '2.9'
40
+ version: '3.1'
68
41
  - !ruby/object:Gem::Dependency
69
- name: mini_magick
42
+ name: awesome_print
70
43
  requirement: !ruby/object:Gem::Requirement
71
44
  requirements:
72
- - - "~>"
45
+ - - ">="
73
46
  - !ruby/object:Gem::Version
74
- version: 5.0.1
75
- type: :runtime
47
+ version: '0'
48
+ type: :development
76
49
  prerelease: false
77
50
  version_requirements: !ruby/object:Gem::Requirement
78
51
  requirements:
79
- - - "~>"
52
+ - - ">="
80
53
  - !ruby/object:Gem::Version
81
- version: 5.0.1
54
+ version: '0'
82
55
  - !ruby/object:Gem::Dependency
83
- name: msg_extractor
56
+ name: equivalent-xml
84
57
  requirement: !ruby/object:Gem::Requirement
85
58
  requirements:
86
59
  - - "~>"
87
60
  - !ruby/object:Gem::Version
88
- version: '0.1'
89
- type: :runtime
61
+ version: '0.5'
62
+ type: :development
90
63
  prerelease: false
91
64
  version_requirements: !ruby/object:Gem::Requirement
92
65
  requirements:
93
66
  - - "~>"
94
67
  - !ruby/object:Gem::Version
95
- version: '0.1'
68
+ version: '0.5'
96
69
  - !ruby/object:Gem::Dependency
97
- name: naturally
70
+ name: nokogiri
98
71
  requirement: !ruby/object:Gem::Requirement
99
72
  requirements:
100
- - - "~>"
73
+ - - ">="
101
74
  - !ruby/object:Gem::Version
102
- version: '2.2'
103
- type: :runtime
75
+ version: '0'
76
+ type: :development
104
77
  prerelease: false
105
78
  version_requirements: !ruby/object:Gem::Requirement
106
79
  requirements:
107
- - - "~>"
80
+ - - ">="
108
81
  - !ruby/object:Gem::Version
109
- version: '2.2'
82
+ version: '0'
110
83
  - !ruby/object:Gem::Dependency
111
- name: new_rfc_2047
84
+ name: libis-tools
112
85
  requirement: !ruby/object:Gem::Requirement
113
86
  requirements:
114
87
  - - "~>"
@@ -125,156 +98,109 @@ dependencies:
125
98
  name: os
126
99
  requirement: !ruby/object:Gem::Requirement
127
100
  requirements:
128
- - - "~>"
101
+ - - '='
129
102
  - !ruby/object:Gem::Version
130
- version: '1.1'
103
+ version: 0.9.6
131
104
  type: :runtime
132
105
  prerelease: false
133
106
  version_requirements: !ruby/object:Gem::Requirement
134
107
  requirements:
135
- - - "~>"
108
+ - - '='
136
109
  - !ruby/object:Gem::Version
137
- version: '1.1'
110
+ version: 0.9.6
138
111
  - !ruby/object:Gem::Dependency
139
- name: pdfinfo
112
+ name: mini_magick
140
113
  requirement: !ruby/object:Gem::Requirement
141
114
  requirements:
142
115
  - - "~>"
143
116
  - !ruby/object:Gem::Version
144
- version: '1.4'
117
+ version: '4.3'
145
118
  type: :runtime
146
119
  prerelease: false
147
120
  version_requirements: !ruby/object:Gem::Requirement
148
121
  requirements:
149
122
  - - "~>"
150
123
  - !ruby/object:Gem::Version
151
- version: '1.4'
124
+ version: '4.3'
152
125
  - !ruby/object:Gem::Dependency
153
- name: pdfkit
126
+ name: deep_dive
154
127
  requirement: !ruby/object:Gem::Requirement
155
128
  requirements:
156
129
  - - "~>"
157
130
  - !ruby/object:Gem::Version
158
- version: '0.8'
131
+ version: '0.3'
159
132
  type: :runtime
160
133
  prerelease: false
161
134
  version_requirements: !ruby/object:Gem::Requirement
162
135
  requirements:
163
136
  - - "~>"
164
137
  - !ruby/object:Gem::Version
165
- version: '0.8'
138
+ version: '0.3'
166
139
  - !ruby/object:Gem::Dependency
167
- name: word_wrap
140
+ name: chromaprint
168
141
  requirement: !ruby/object:Gem::Requirement
169
142
  requirements:
170
143
  - - "~>"
171
144
  - !ruby/object:Gem::Version
172
- version: '1.0'
145
+ version: 0.0.2
173
146
  type: :runtime
174
147
  prerelease: false
175
148
  version_requirements: !ruby/object:Gem::Requirement
176
149
  requirements:
177
150
  - - "~>"
178
151
  - !ruby/object:Gem::Version
179
- version: '1.0'
180
- - !ruby/object:Gem::Dependency
181
- name: awesome_print
182
- requirement: !ruby/object:Gem::Requirement
183
- requirements:
184
- - - ">="
185
- - !ruby/object:Gem::Version
186
- version: '0'
187
- type: :development
188
- prerelease: false
189
- version_requirements: !ruby/object:Gem::Requirement
190
- requirements:
191
- - - ">="
192
- - !ruby/object:Gem::Version
193
- version: '0'
194
- - !ruby/object:Gem::Dependency
195
- name: equivalent-xml
196
- requirement: !ruby/object:Gem::Requirement
197
- requirements:
198
- - - ">="
199
- - !ruby/object:Gem::Version
200
- version: '0'
201
- type: :development
202
- prerelease: false
203
- version_requirements: !ruby/object:Gem::Requirement
204
- requirements:
205
- - - ">="
206
- - !ruby/object:Gem::Version
207
- version: '0'
208
- - !ruby/object:Gem::Dependency
209
- name: rake
210
- requirement: !ruby/object:Gem::Requirement
211
- requirements:
212
- - - ">="
213
- - !ruby/object:Gem::Version
214
- version: '0'
215
- type: :development
216
- prerelease: false
217
- version_requirements: !ruby/object:Gem::Requirement
218
- requirements:
219
- - - ">="
220
- - !ruby/object:Gem::Version
221
- version: '0'
222
- - !ruby/object:Gem::Dependency
223
- name: rspec
224
- requirement: !ruby/object:Gem::Requirement
225
- requirements:
226
- - - ">="
227
- - !ruby/object:Gem::Version
228
- version: '0'
229
- type: :development
230
- prerelease: false
231
- version_requirements: !ruby/object:Gem::Requirement
232
- requirements:
233
- - - ">="
234
- - !ruby/object:Gem::Version
235
- version: '0'
152
+ version: 0.0.2
236
153
  - !ruby/object:Gem::Dependency
237
- name: nokogiri
154
+ name: naturally
238
155
  requirement: !ruby/object:Gem::Requirement
239
156
  requirements:
240
- - - ">="
157
+ - - "~>"
241
158
  - !ruby/object:Gem::Version
242
- version: '0'
243
- type: :development
159
+ version: '2.1'
160
+ type: :runtime
244
161
  prerelease: false
245
162
  version_requirements: !ruby/object:Gem::Requirement
246
163
  requirements:
247
- - - ">="
164
+ - - "~>"
248
165
  - !ruby/object:Gem::Version
249
- version: '0'
250
- description: Collection of tools and classes that help to identify file formats and
251
- create derivative copies.
166
+ version: '2.1'
167
+ description: Collection of tools and classes that help to identify formats of binary
168
+ files and create derivative copies (e.g. PDF from Word).
252
169
  email:
253
170
  - kris.dekeyser@libis.be
254
171
  executables:
255
- - droid_tool
256
- - fido_tool
172
+ - droid
173
+ - fido
257
174
  - formatinfo
258
175
  - libis_format
259
- - pdf_tool
176
+ - pdf_copy
260
177
  extensions: []
261
178
  extra_rdoc_files: []
262
179
  files:
180
+ - ".coveralls.yml"
181
+ - ".gitignore"
182
+ - ".travis.yml"
263
183
  - Gemfile
264
184
  - LICENSE.txt
265
185
  - README.md
266
- - bin/droid_tool
267
- - bin/fido_tool
186
+ - Rakefile
187
+ - base/Dockerfile
188
+ - base/Dockerfile.alpine
189
+ - base/Dockerfile.rvm
190
+ - base/rework_path
191
+ - bin/droid
192
+ - bin/fido
268
193
  - bin/formatinfo
269
194
  - bin/libis_format
270
- - bin/pdf_tool
271
- - data/AdobeRGB1998.icc
195
+ - bin/pdf_copy
272
196
  - data/ISOcoated_v2_eci.icc
273
197
  - data/PDFA_def.ps
274
198
  - data/ead.xsd
199
+ - data/eciRGB_v2.icc
275
200
  - data/lias_formats.xml
276
201
  - data/types.yml
277
202
  - data/xlink.xsd
203
+ - docker_cfg.yml
278
204
  - lib/libis-format.rb
279
205
  - lib/libis/format.rb
280
206
  - lib/libis/format/cli/convert.rb
@@ -287,39 +213,43 @@ files:
287
213
  - lib/libis/format/converter/audio_converter.rb
288
214
  - lib/libis/format/converter/base.rb
289
215
  - lib/libis/format/converter/chain.rb
290
- - lib/libis/format/converter/email_converter.rb
291
216
  - lib/libis/format/converter/fop_pdf_converter.rb
217
+ - lib/libis/format/converter/image_assembler.rb
292
218
  - lib/libis/format/converter/image_converter.rb
219
+ - lib/libis/format/converter/image_splitter.rb
220
+ - lib/libis/format/converter/image_watermarker.rb
293
221
  - lib/libis/format/converter/jp2_converter.rb
294
222
  - lib/libis/format/converter/office_converter.rb
223
+ - lib/libis/format/converter/pdf_assembler.rb
295
224
  - lib/libis/format/converter/pdf_converter.rb
225
+ - lib/libis/format/converter/pdf_optimizer.rb
226
+ - lib/libis/format/converter/pdf_splitter.rb
227
+ - lib/libis/format/converter/pdf_watermarker.rb
296
228
  - lib/libis/format/converter/repository.rb
297
229
  - lib/libis/format/converter/spreadsheet_converter.rb
298
230
  - lib/libis/format/converter/video_converter.rb
299
231
  - lib/libis/format/converter/xslt_converter.rb
300
232
  - lib/libis/format/identifier.rb
233
+ - lib/libis/format/info.rb
234
+ - lib/libis/format/library.rb
301
235
  - lib/libis/format/tool.rb
302
236
  - lib/libis/format/tool/droid.rb
303
- - lib/libis/format/tool/eml_to_pdf.rb
304
237
  - lib/libis/format/tool/extension_identification.rb
305
- - lib/libis/format/tool/ff_mpeg.rb
238
+ - lib/libis/format/tool/ffmpeg.rb
306
239
  - lib/libis/format/tool/fido.rb
307
240
  - lib/libis/format/tool/file_tool.rb
308
241
  - lib/libis/format/tool/fop_pdf.rb
309
242
  - lib/libis/format/tool/identification_tool.rb
310
- - lib/libis/format/tool/mail_to_pdf.rb
311
- - lib/libis/format/tool/msg_to_pdf.rb
312
243
  - lib/libis/format/tool/office_to_pdf.rb
244
+ - lib/libis/format/tool/pdf_copy.rb
313
245
  - lib/libis/format/tool/pdf_merge.rb
314
246
  - lib/libis/format/tool/pdf_optimizer.rb
315
247
  - lib/libis/format/tool/pdf_split.rb
316
248
  - lib/libis/format/tool/pdf_to_pdfa.rb
317
- - lib/libis/format/tool/pdf_tool.rb
318
249
  - lib/libis/format/tool/pdfa_validator.rb
319
250
  - lib/libis/format/tool/spreadsheet_to_ods.rb
320
- - lib/libis/format/type_database.rb
321
- - lib/libis/format/type_database_impl.rb
322
251
  - lib/libis/format/version.rb
252
+ - lib/libis/format/yaml_loader.rb
323
253
  - libis-format.gemspec
324
254
  - tools/PdfTool.jar
325
255
  - tools/bcpkix-jdk15on-1.49.jar
@@ -374,13 +304,13 @@ files:
374
304
  - tools/fop/lib/xmlgraphics-commons-2.3.jar
375
305
  - tools/fop/lib/xmlgraphics-commons.LICENSE.txt
376
306
  - tools/fop/lib/xmlgraphics-commons.NOTICE.txt
377
- - tools/pdf2pdfa
378
- - tools/pdfbox/pdfbox-app-3.0.3.jar
379
- - tools/pdfbox/preflight-app-3.0.3.jar
307
+ - tools/pdfbox/pdfbox-app-2.0.13.jar
308
+ - tools/pdfbox/preflight-app-2.0.13.jar
380
309
  homepage: ''
381
310
  licenses:
382
311
  - MIT
383
312
  metadata: {}
313
+ post_install_message:
384
314
  rdoc_options: []
385
315
  require_paths:
386
316
  - lib
@@ -388,14 +318,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
388
318
  requirements:
389
319
  - - ">="
390
320
  - !ruby/object:Gem::Version
391
- version: '3.2'
321
+ version: '0'
392
322
  required_rubygems_version: !ruby/object:Gem::Requirement
393
323
  requirements:
394
324
  - - ">="
395
325
  - !ruby/object:Gem::Version
396
326
  version: '0'
397
327
  requirements: []
398
- rubygems_version: 4.0.8
328
+ rubygems_version: 3.0.8
329
+ signing_key:
399
330
  specification_version: 4
400
331
  summary: LIBIS File format format services.
401
332
  test_files: []
Binary file
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base'
4
-
5
- require 'libis/format/tool/msg_to_pdf'
6
- require 'libis/format/tool/eml_to_pdf'
7
- require 'libis/format/type_database'
8
- require 'rexml/document'
9
-
10
- module Libis
11
- module Format
12
- module Converter
13
- class EmailConverter < Libis::Format::Converter::Base
14
- def self.input_types
15
- %i[MSG EML]
16
- end
17
-
18
- def self.output_types(format = nil)
19
- return [] unless input_types.include?(format)
20
-
21
- %i[PDF]
22
- end
23
-
24
- def email_convert(_)
25
- # force usage of this converter
26
- end
27
-
28
- def convert(source, target, format, opts = {})
29
- super
30
-
31
- tool = tool_for_format(opts, source)
32
- tool.run(source, target)
33
- rescue StandardError => e
34
- { command: { status: -1 }, errors: [{ error: e.message, error_class: e.class, error_trace: e.backtrace }] }
35
- end
36
-
37
- private
38
-
39
- def tool_for_format(opts, source)
40
- if opts[:source_format] == :MSG || File.extname(source).casecmp('.msg').zero?
41
- Format::Tool::MsgToPdf
42
- elsif opts[:source_format] == :EML || File.extname(source).casecmp('.eml').zero?
43
- Format::Tool::EmlToPdf
44
- else
45
- raise "Unsupported file extension #{File.extname(source)}"
46
- end
47
- end
48
- end
49
- end
50
- end
51
- end
@@ -1,168 +0,0 @@
1
- # rubocop:disable Style/Documentation, Metrics/*
2
- # frozen_string_literal: true
3
-
4
- require_relative 'mail_to_pdf'
5
-
6
- require 'mail'
7
- require 'word_wrap'
8
-
9
- module Libis
10
- module Format
11
- module Tool
12
- class EmlToPdf < MailToPdf
13
- protected
14
-
15
- def open_email(source)
16
- eml = File.read(source)
17
- begin
18
- msg = Mail.new(eml)
19
- rescue StandardError => e
20
- eml.force_encoding('ASCII-8BIT')
21
- msg = Mail.new(eml)
22
- @warnings << "Failed to parse message with default encoding, forced ASCII-8BIT: #{e.message}"
23
- end
24
- msg
25
- rescue StandardError => e
26
- raise "Failed to open message: #{e.message}"
27
- end
28
-
29
- def close_email(_msg)
30
- true
31
- end
32
-
33
- def get_body_html(msg)
34
- # Get the encoding
35
-
36
- if !msg.multipart?
37
- HTML_WRAPPER_TEMPLATE % WordWrap.ww(msg.decoded, 120, false)
38
-
39
- elsif msg.html_part
40
- body = msg.html_part.body.decoded
41
-
42
- # if the encoding is not UTF-8, then the HTML may contain metadata that specifies the encoding
43
- # the browser will use that metadata to render the HTML correctly, so we should not force it to UTF-8
44
- encoding = body.scan(/<\?xml\s[^?>]*encoding="([^"]*)"[^?>]*\?>/).flatten.first
45
- encoding ||= body.scan(/<meta\s+[^>]*charset=["']?([^"'>\s]+)["']?[^>]*>/).flatten.first
46
- encoding ||= msg.html_part.charset
47
- encoding ||= msg.content_type_parameters['charset'] || msg.charset || 'UTF-8'
48
-
49
- body.force_encoding(encoding) unless encoding.casecmp(body.encoding.name).zero?
50
-
51
- body
52
- elsif msg.text_part
53
- HTML_WRAPPER_TEMPLATE % msg.text_part.decoded
54
-
55
- else
56
- HTML_WRAPPER_TEMPLATE % ''
57
-
58
- end
59
- end
60
-
61
- def get_subject(msg)
62
- msg.subject || 'No Subject'
63
- end
64
-
65
- def get_headers(msg)
66
- headers = {}
67
- html = ''
68
-
69
- field_list = msg.header_fields
70
-
71
- %w[From To Cc Subject Date].each do |key|
72
- value = find_hdr(field_list, key)
73
- next unless value
74
-
75
- if value.is_a? Time
76
- begin
77
- headers[key.downcase.to_sym] = value.iso8601
78
- html += hdr_html(key, value.rfc2822)
79
- rescue StandardError => e
80
- logger.warn "Failed to parse date header '#{value}': #{e.message}"
81
- end
82
- else
83
- headers[key.downcase.to_sym] = value
84
- html += hdr_html(key, value)
85
- end
86
- end
87
-
88
- [headers, html]
89
- end
90
-
91
- def get_inline_attachment_data(attachments, cid)
92
- attachments.each do |attachment|
93
- next unless attachment.has_content_id?
94
- next unless attachment.cid == cid
95
-
96
- begin
97
- attachment.data.rewind
98
- rescue NoMethodError
99
- # do nothing, attachment.data is not a stream
100
- end
101
- return {
102
- mime_type: attachment.mime_type,
103
- base64: Base64.strict_encode64(attachment.read)
104
- }
105
- end
106
- nil
107
- end
108
-
109
- def get_file_attachments(attachments, _used_files)
110
- attachments.select do |attachment|
111
- !attachment.inline? &&
112
- !attachment.has_content_id? &&
113
- attachment.mime_type != 'message/rfc822'
114
- end
115
- end
116
-
117
- def get_mail_attachments(attachments)
118
- attachments.select do |attachment|
119
- !attachment.inline? &&
120
- !attachment.has_content_id? &&
121
- attachment.mime_type == 'message/rfc822'
122
- end
123
- end
124
-
125
- def get_attachment_info(attachment)
126
- if attachment.mime_type == 'message/rfc822'
127
- sub_msg = Mail.new(attachment.body.to_s)
128
- subject = sub_msg.subject.to_s.strip
129
-
130
- {
131
- embedded_msg: sub_msg,
132
- filename: subject
133
- }
134
-
135
- elsif attachment.filename
136
-
137
- {
138
- data: attachment.decoded,
139
- filename: attachment.filename
140
- }
141
-
142
- else
143
- {
144
- filename: attachment.content_id.to_s
145
- }
146
- end
147
- end
148
-
149
- private
150
-
151
- def find_hdr(list, key)
152
- hdr = list.find { |x| x.name.to_s =~ /^#{key}$/i }
153
- return nil unless hdr
154
-
155
- field = hdr.field
156
- return hdr.value unless field
157
-
158
- return field.decoded unless field.is_a? Mail::CommonDateField
159
-
160
- return field.date_time.to_time.localtime if field.respond_to?(:date_time)
161
-
162
- DateTime.parse(field.decoded).to_time.localtime
163
- end
164
- end
165
- end
166
- end
167
- end
168
- # rubocop:enable Style/Documentation, Metrics/*