jpmobile 2.0.11 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. data/Gemfile +3 -4
  2. data/README.rdoc +5 -12
  3. data/Rakefile +1 -1
  4. data/VERSION.yml +2 -2
  5. data/jpmobile.gemspec +3 -2
  6. data/lib/jpmobile.rb +1 -15
  7. data/lib/jpmobile/emoticon.rb +2 -65
  8. data/lib/jpmobile/emoticon/z_combine.rb +1 -17
  9. data/lib/jpmobile/lookup_context.rb +1 -1
  10. data/lib/jpmobile/mail.rb +29 -59
  11. data/lib/jpmobile/mailer.rb +1 -1
  12. data/lib/jpmobile/mobile/abstract_mobile.rb +36 -60
  13. data/lib/jpmobile/mobile/android.rb +0 -2
  14. data/lib/jpmobile/mobile/iphone.rb +25 -1
  15. data/lib/jpmobile/rack.rb +1 -6
  16. data/lib/jpmobile/rails.rb +2 -2
  17. data/lib/jpmobile/resolver.rb +18 -13
  18. data/lib/jpmobile/trans_sid.rb +9 -8
  19. data/lib/jpmobile/util.rb +1 -54
  20. data/lib/tasks/jpmobile_tasks.rake +4 -4
  21. data/spec/rack/jpmobile/emoticon_spec.rb +0 -167
  22. data/spec/rack/jpmobile/mobile_by_ua_spec.rb +1 -5
  23. data/spec/unit/emoticon_spec.rb +0 -60
  24. data/spec/unit/mail_spec.rb +0 -86
  25. data/spec/unit/receive_mail_spec.rb +0 -46
  26. data/spec/unit/util_spec.rb +0 -43
  27. data/test/rails/overrides/Gemfile +4 -19
  28. data/test/rails/overrides/app/controllers/template_path_controller.rb +0 -12
  29. data/test/rails/overrides/spec/mailers/mobile_mailer_spec.rb +0 -10
  30. data/test/rails/overrides/spec/requests/template_path_spec.rb +0 -72
  31. metadata +43 -166
  32. data/lib/jpmobile/emoticon/google.rb +0 -2421
  33. data/lib/jpmobile/emoticon/unicode.rb +0 -2253
  34. data/lib/jpmobile/mobile/android_tablet.rb +0 -12
  35. data/lib/jpmobile/mobile/black_berry.rb +0 -10
  36. data/lib/jpmobile/mobile/google_emoticon.rb +0 -29
  37. data/lib/jpmobile/mobile/ipad.rb +0 -12
  38. data/lib/jpmobile/mobile/tablet.rb +0 -16
  39. data/lib/jpmobile/mobile/unicode_emoticon.rb +0 -43
  40. data/spec/rack/jpmobile/black_berry_spec.rb +0 -20
  41. data/spec/unit/email-fixtures/bounce_with_utf8_part.eml +0 -42
  42. data/spec/unit/email-fixtures/iphone-mail3.eml +0 -56
  43. data/spec/unit/email-fixtures/iphone-message.eml +0 -27
  44. data/spec/unit/mobile/iphone_spec.rb +0 -34
  45. data/spec/unit/variants_spec.rb +0 -128
  46. data/test/rails/overrides/app/views/template_path/smart_phone_only.html.erb +0 -1
  47. data/test/rails/overrides/app/views/template_path/smart_phone_only_smart_phone.html.erb +0 -1
  48. data/test/rails/overrides/app/views/template_path/with_ipd.html.erb +0 -1
  49. data/test/rails/overrides/app/views/template_path/with_ipd_tablet_ipad.html.erb +0 -1
  50. data/test/rails/overrides/app/views/template_path/with_tblt.html.erb +0 -1
  51. data/test/rails/overrides/app/views/template_path/with_tblt_tablet.html.erb +0 -1
  52. data/test/rails/overrides/spec/fixtures/mobile_mailer/bounced-jp.eml +0 -72
  53. data/tools/e4u_conv.rb +0 -122
data/Gemfile CHANGED
@@ -1,11 +1,10 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
3
  group :development, :test do
4
- gem 'mail', '~> 2.3.0'
5
4
  gem 'jeweler'
6
- gem 'rails', '~> 3.1.8'
7
- gem 'rspec', '~> 2.8.0'
8
- gem 'rspec-rails', '~> 2.8.0'
5
+ gem 'rails', '~> 3.2.0'
6
+ gem 'rspec'
7
+ gem 'rspec-rails'
9
8
  gem 'webrat'
10
9
  gem 'geokit'
11
10
  gem 'sqlite3-ruby'
data/README.rdoc CHANGED
@@ -1,7 +1,7 @@
1
1
  = jpmobile: A Rails plugin for Japanese mobile-phones
2
2
 
3
3
  == jpmobileとは
4
- 携帯電話特有の機能を Rails 3.1 や Rack middleware で利用するためのプラグイン。
4
+ 携帯電話特有の機能を Rails 3.2 や Rack middleware で利用するためのプラグイン。
5
5
  以下の機能を備える。
6
6
 
7
7
  * 携帯電話のキャリア判別
@@ -18,11 +18,13 @@
18
18
  * メールの受信(experimental)
19
19
  * 絵文字と漢字コードの変換
20
20
 
21
- また Rails 3.1 に以下の機能を追加する
21
+ また Rails 3.2 に以下の機能を追加する
22
22
  * ビューへの自動振分け
23
23
  * 位置情報取得などのリンクヘルパーの追加
24
24
  * セッションIDをフォーム/リンクに付与(Trans SID)
25
25
 
26
+ 他のバージョンの Rails については {Versions : Jpmobile vs Rails}[https://github.com/jpmobile/jpmobile/wiki/Version-:-Jpmobile-vs-Rails] を参照。
27
+
26
28
  == インストール
27
29
  === Rails pluginとしてインストールする場合
28
30
  % rails plugin install git://github.com/jpmobile/jpmobile.git
@@ -150,19 +152,10 @@ jpmobileを読み込むとDoCoMo、Au、SoftBankの絵文字を透過的に扱
150
152
  * Rails の場合は vendor/plugins に配置し、下記の設定を追加することで有効になる。
151
153
  # Rack middleware を追加するメソッド
152
154
  Rails.application.config.jpmobile.mobile_filter
153
- or
154
- Jpmobile.config.mobile_filter
155
155
 
156
156
  * 下記の設定を追加することで、<form> タグの accept-charset が変更される。
157
157
  # <form accept-charset="Shift_JIS" ...> などに変更する
158
158
  Rails.application.config.jpmobile.form_accept_charset_conversion = true
159
- or
160
- Jpmobile.config.form_accept_charset_conversion = true
161
-
162
- * Andriod/iPhone では Google 絵文字や Unicode 6.0 絵文字が使われています。下記の設定を追加すると、互換性をもたせるために3キャリアの絵文字に変換することができます。また表示の変換も可能です。
163
- Rails.application.config.jpmobile.smart_phone_emoticon_compatibility = true
164
- or
165
- Jpmobile.config.smart_phone_emoticon_compatibility = true
166
159
 
167
160
  携帯電話上では特に問題とならない。PCブラウザでテストする際に問題となるためのオプション。
168
161
 
@@ -246,7 +239,7 @@ Androidの場合はindex_smart_phone_android.html.erb、Windows Phoneの場合
246
239
  end
247
240
 
248
241
  trans_sid 機能を使う場合には cookie session store を使用することができません。
249
- また Rails 3.1 では Cookie が使える場合にはそちらが優先されてしまうため、:always を指定した場合に問題になる場合があります。
242
+ また Rails 3.2 では Cookie が使える場合にはそちらが優先されてしまうため、:always を指定した場合に問題になる場合があります。
250
243
  trans_sid を使用する際には、例えば config/initializers/session_store.rb で
251
244
  Rails.application.config.session_store :active_record_store
252
245
  Rails.application.config.session_options = {:cookie_only => false}
data/Rakefile CHANGED
@@ -22,7 +22,7 @@ begin
22
22
  gem.files.exclude 'spec'
23
23
  gem.files.exclude 'vendor'
24
24
 
25
- gem.add_development_dependency('rails', '>=3.1.0')
25
+ gem.add_development_dependency('rails', '>=3.2.0')
26
26
  gem.add_development_dependency('jeweler', '>=1.5.1')
27
27
  gem.add_development_dependency('rspec', '>=2.6.0')
28
28
  gem.add_development_dependency('rspec-rails', '>=2.6.0')
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
- :major: 2
2
+ :major: 3
3
3
  :minor: 0
4
- :patch: 11
4
+ :patch: 0
5
5
  :build:
data/jpmobile.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{jpmobile}
8
- s.version = "2.0.11"
8
+ s.version = "3.0.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Yoji Shidara", "Shin-ichiro OGAWA"]
12
- s.date = %q{2012-11-27}
12
+ s.date = %q{2011-01-28}
13
13
  s.description = %q{A Rails plugin for Japanese mobile-phones}
14
14
  s.email = %q{dara@shidara.net}
15
15
  s.extra_rdoc_files = [
@@ -332,3 +332,4 @@ Gem::Specification.new do |s|
332
332
  s.add_dependency(%q<rails>, [">= 3.0.3"])
333
333
  end
334
334
  end
335
+
data/lib/jpmobile.rb CHANGED
@@ -22,23 +22,14 @@ module Jpmobile
22
22
  autoload :Emobile, 'jpmobile/mobile/emobile'
23
23
  autoload :Willcom, 'jpmobile/mobile/willcom'
24
24
  autoload :Ddipocket, 'jpmobile/mobile/ddipocket'
25
-
26
25
  autoload :SmartPhone, 'jpmobile/mobile/smart_phone'
27
26
  autoload :Iphone, 'jpmobile/mobile/iphone'
28
27
  autoload :Android, 'jpmobile/mobile/android'
29
28
  autoload :WindowsPhone, 'jpmobile/mobile/windows_phone'
30
- autoload :BlackBerry, 'jpmobile/mobile/black_berry'
31
-
32
- autoload :Tablet, 'jpmobile/mobile/tablet'
33
- autoload :AndroidTablet, 'jpmobile/mobile/android_tablet'
34
- autoload :Ipad, 'jpmobile/mobile/ipad'
35
29
 
36
30
  autoload :Display, 'jpmobile/mobile/display'
37
31
 
38
- autoload :UnicodeEmoticon, 'jpmobile/mobile/unicode_emoticon'
39
- autoload :GoogleEmoticon, 'jpmobile/mobile/google_emoticon'
40
-
41
- DEFAULT_CARRIERS = %w(Docomo Au Softbank Vodafone Emobile Willcom Ddipocket Ipad AndroidTablet Iphone Android WindowsPhone BlackBerry)
32
+ DEFAULT_CARRIERS = %w(Docomo Au Softbank Vodafone Emobile Willcom Ddipocket Iphone Android WindowsPhone)
42
33
 
43
34
  def self.carriers
44
35
  @carriers ||= DEFAULT_CARRIERS.dup
@@ -61,11 +52,6 @@ module Jpmobile
61
52
 
62
53
  autoload :Mailer, 'jpmobile/mailer'
63
54
  autoload :Resolver, 'jpmobile/resolver'
64
-
65
- module_function
66
- def config
67
- ::Jpmobile::Configuration.instance
68
- end
69
55
  end
70
56
 
71
57
  if defined?(Rails)
@@ -26,19 +26,9 @@ module Jpmobile
26
26
  SJIS_REGEXP SOFTBANK_WEBCODE_REGEXP DOCOMO_SJIS_REGEXP AU_SJIS_REGEXP SOFTBANK_UNICODE_REGEXP
27
27
  EMOTICON_UNICODES UTF8_REGEXP
28
28
  CONVERSION_TABLE_TO_PC_EMAIL SOFTBANK_SJIS_REGEXP AU_EMAILJIS_REGEXP
29
- UNICODE_EMOTICONS UNICODE_EMOTICON_REGEXP UNICODE_EMOTICON_TO_CARRIER_EMOTICON
30
- GOOGLE_EMOTICONS GOOGLE_EMOTICON_REGEXP GOOGLE_EMOTICON_TO_CARRIER_EMOTICON
31
- CONVERSION_TABLE_TO_UNICODE_EMOTICON CONVERSION_TABLE_TO_GOOGLE_EMOTICON
32
- GETA_CODE GETA
33
29
  ).each do |const|
34
30
  autoload const, 'jpmobile/emoticon/z_combine'
35
31
  end
36
- %w( GOOGLE_TO_DOCOMO_UNICODE GOOGLE_TO_AU_UNICODE GOOGLE_TO_SOFTBANK_UNICODE ).each do |const|
37
- autoload const, 'jpmobile/emoticon/google'
38
- end
39
- %w( UNICODE_TO_DOCOMO_UNICODE UNICODE_TO_AU_UNICODE UNICODE_TO_SOFTBANK_UNICODE ).each do |const|
40
- autoload const, 'jpmobile/emoticon/unicode'
41
- end
42
32
 
43
33
  # +str+ のなかでDoCoMo絵文字をUnicode数値文字参照に置換した文字列を返す。
44
34
  def self.external_to_unicodecr_docomo(str)
@@ -90,52 +80,6 @@ module Jpmobile
90
80
  external_to_unicodecr_softbank(str)
91
81
  end
92
82
 
93
- # Unicode 6.0絵文字の変換
94
- def self.external_to_unicodecr_unicode60(str)
95
- str.gsub(UNICODE_EMOTICON_REGEXP) do |match|
96
- unicodes = match.unpack('U*')
97
- unicodes = unicodes.first if unicodes.size == 1
98
-
99
- if (emoticon = UNICODE_EMOTICON_TO_CARRIER_EMOTICON[unicodes]) == GETA_CODE
100
- GETA
101
- elsif emoticon
102
- case emoticon
103
- when GETA_CODE
104
- GETA
105
- when Integer
106
- "&#x%04x;" % emoticon
107
- when String
108
- emoticon
109
- end
110
- else
111
- # 変換できなければ〓に
112
- GETA
113
- end
114
- end
115
- end
116
-
117
- # Google絵文字の変換
118
- def self.external_to_unicodecr_google(str)
119
- str.gsub(GOOGLE_EMOTICON_REGEXP) do |match|
120
- unicodes = match.unpack('U*')
121
- unicodes = unicodes.first if unicodes.size == 1
122
-
123
- if emoticon = GOOGLE_EMOTICON_TO_CARRIER_EMOTICON[unicodes]
124
- case emoticon
125
- when GETA_CODE
126
- GETA
127
- when Integer
128
- "&#x%04x;" % emoticon
129
- when String
130
- emoticon
131
- end
132
- else
133
- # 変換できなければ〓に
134
- GETA
135
- end
136
- end
137
- end
138
-
139
83
  # +str+ のなかでUnicode数値文字参照で表記された絵文字を携帯側エンコーディングに置換する。
140
84
  #
141
85
  # キャリア間の変換に +conversion_table+ を使う。+conversion_table+ に+nil+を与えると、
@@ -146,7 +90,6 @@ module Jpmobile
146
90
  def self.unicodecr_to_external(str, conversion_table=nil, to_sjis=true)
147
91
  str.gsub(/&#x([0-9a-f]{4});/i) do |match|
148
92
  unicode = $1.scanf("%x").first
149
-
150
93
  if conversion_table
151
94
  converted = conversion_table[unicode] # キャリア間変換
152
95
  else
@@ -165,15 +108,9 @@ module Jpmobile
165
108
  end
166
109
  elsif webcode = SOFTBANK_UNICODE_TO_WEBCODE[converted-0x1000]
167
110
  [converted-0x1000].pack('U')
168
- elsif converted == GETA_CODE
111
+ elsif converted == GETA
169
112
  # PCで〓を表示する場合
170
- GETA
171
- elsif UNICODE_EMOTICONS.include?(converted) or GOOGLE_EMOTICONS.include?(converted)
172
- if unicode == GETA_CODE
173
- GETA
174
- else
175
- [converted].pack('U*')
176
- end
113
+ [GETA].pack("U")
177
114
  else
178
115
  # キャリア変換テーブルに指定されていたUnicodeに対応する
179
116
  # 携帯側エンコーディングが見つからない(変換テーブルの不備の可能性あり)。
@@ -4,8 +4,7 @@ end
4
4
 
5
5
  module Jpmobile
6
6
  module Emoticon
7
- GETA_CODE = 0x3013
8
- GETA = [GETA_CODE].pack('U')
7
+ GETA = 0x3013
9
8
 
10
9
  SJIS_TO_UNICODE = {}
11
10
  SJIS_TO_UNICODE.update(DOCOMO_SJIS_TO_UNICODE)
@@ -33,20 +32,5 @@ module Jpmobile
33
32
 
34
33
  SOFTBANK_SJIS_REGEXP = Regexp.union(*SOFTBANK_SJIS_TO_UNICODE.keys.map{|s| Jpmobile::Util.sjis_regexp(s)}).freeze
35
34
  AU_EMAILJIS_REGEXP = Regexp.union(*AU_EMAILJIS_TO_UNICODE.keys.map{|s| Jpmobile::Util.jis_regexp(s)})
36
-
37
- # for unicode/google emoticons
38
- UNICODE_EMOTICONS = (UNICODE_TO_DOCOMO_UNICODE.keys|UNICODE_TO_AU_UNICODE.keys|UNICODE_TO_SOFTBANK_UNICODE.keys).uniq
39
- GOOGLE_EMOTICONS = (GOOGLE_TO_DOCOMO_UNICODE.keys|GOOGLE_TO_AU_UNICODE.keys|GOOGLE_TO_SOFTBANK_UNICODE.keys).uniq
40
-
41
- UNICODE_EMOTICON_REGEXP = Regexp.union(*UNICODE_EMOTICONS.map{|x| x.kind_of?(Array) ? x.pack('UU') : [x].pack('U')}).freeze
42
- GOOGLE_EMOTICON_REGEXP = Regexp.union(*GOOGLE_EMOTICONS.map{|x| x.kind_of?(Array) ? x.pack('UU') : [x].pack('U')}).freeze
43
-
44
- UNICODE_EMOTICON_TO_CARRIER_EMOTICON = UNICODE_TO_DOCOMO_UNICODE.merge(UNICODE_TO_AU_UNICODE.merge(UNICODE_TO_SOFTBANK_UNICODE))
45
- GOOGLE_EMOTICON_TO_CARRIER_EMOTICON = GOOGLE_TO_SOFTBANK_UNICODE.merge(GOOGLE_TO_AU_UNICODE.merge(GOOGLE_TO_DOCOMO_UNICODE))
46
-
47
- CONVERSION_TABLE_TO_UNICODE_EMOTICON = Jpmobile::Util.invert_table(UNICODE_TO_DOCOMO_UNICODE).merge(
48
- Jpmobile::Util.invert_table(UNICODE_TO_AU_UNICODE).merge(Jpmobile::Util.invert_table(UNICODE_TO_SOFTBANK_UNICODE)))
49
- CONVERSION_TABLE_TO_GOOGLE_EMOTICON = Jpmobile::Util.invert_table(GOOGLE_TO_SOFTBANK_UNICODE).merge(
50
- Jpmobile::Util.invert_table(GOOGLE_TO_AU_UNICODE).merge(Jpmobile::Util.invert_table(GOOGLE_TO_DOCOMO_UNICODE)))
51
35
  end
52
36
  end
@@ -1,2 +1,2 @@
1
1
  # -*- coding: utf-8 -*-
2
- ActionView::LookupContext.register_detail(:mobile) {nil}
2
+ ActionView::LookupContext.register_detail(:mobile) {[]}
data/lib/jpmobile/mail.rb CHANGED
@@ -18,7 +18,7 @@ module Mail
18
18
 
19
19
  # change encoding
20
20
  def self.b_value_encode(str, encoding)
21
- str = Jpmobile::Util.encode(str, encoding.to_s)
21
+ str = Jpmobile::Util.encode(str, encoding)
22
22
  [Ruby19.encode_base64(str), encoding]
23
23
  end
24
24
  end
@@ -48,10 +48,9 @@ module Mail
48
48
  if @mobile = m
49
49
  @charset = m.mail_charset(@charset)
50
50
 
51
- if self.body
52
- self.body.content_type_with_jpmobile = self.content_type
53
- self.body.charset = @charset
54
- self.body.mobile = m
51
+ if @body
52
+ @body.charset = @charset
53
+ @body.mobile = m
55
54
  end
56
55
  end
57
56
  end
@@ -61,7 +60,7 @@ module Mail
61
60
  header['subject'].mobile = @mobile if header['subject']
62
61
  header['from'].mobile = @mobile if header['from']
63
62
  header['to'].mobile = @mobile if header['to']
64
- self.charset = @mobile.mail_charset
63
+ self.charset = @mobile.mail_charset(@charset)
65
64
 
66
65
  ready_to_send!
67
66
 
@@ -83,8 +82,7 @@ module Mail
83
82
  buffer << "\r\n"
84
83
  buffer = @mobile.utf8_to_mail_encode(buffer)
85
84
  buffer << body.encoded(content_transfer_encoding)
86
-
87
- ascii_compatible!(buffer)
85
+ buffer
88
86
  else
89
87
  encoded_without_jpmobile
90
88
  end
@@ -117,18 +115,17 @@ module Mail
117
115
  if @mobile
118
116
  @body.charset = @charset
119
117
  @body.mobile = @mobile
120
- @body.content_type_with_jpmobile = self.content_type
121
118
 
122
119
  if has_content_transfer_encoding? and
123
- ["base64", "quoted-printable"].include?(self.content_transfer_encoding) and
120
+ ["base64", "quoted-printable"].include?(content_transfer_encoding) and
124
121
  ["text"].include?(@mobile_main_type)
125
122
  @body.decode_transfer_encoding
126
123
  end
127
124
 
128
125
  if @body.multipart?
129
126
  @body.parts.each do |p|
130
- p.charset = @mobile.mail_charset(p.charset)
131
- p.mobile = @mobile
127
+ p.charset = @charset
128
+ p.mobile = @mobile
132
129
  end
133
130
  end
134
131
  end
@@ -263,9 +260,8 @@ module Mail
263
260
  self.header[:subject].charset = subject_charset unless subject_charset.blank?
264
261
 
265
262
  if @mobile
266
- subject_value = Encodings.value_decode(self.header[:subject].value)
267
- subject_converting_encoding = Jpmobile::Util.detect_encoding(subject_value)
268
- v = @mobile.to_mail_internal(subject_value, subject_converting_encoding)
263
+ v = @mobile.to_mail_internal(
264
+ Encodings.value_decode(self.header[:subject].value), subject_charset)
269
265
  if @charset == subject_charset and @mobile.mail_charset != @charset
270
266
  self.header[:subject].value = Jpmobile::Util.force_encode(v, @charset, Jpmobile::Util::UTF8)
271
267
  else
@@ -274,23 +270,10 @@ module Mail
274
270
  end
275
271
  end
276
272
 
277
- if @body_part_jpmobile and @mobile and !@charset.blank?
278
- if ["base64", "quoted-printable"].include?(self.content_transfer_encoding) and
279
- self.content_type.match(/text/)
280
- @body_part_jpmobile = Jpmobile::Util.decode(@body_part_jpmobile, self.content_transfer_encoding, @charset)
281
- self.content_transfer_encoding = @mobile.class::MAIL_CONTENT_TRANSFER_ENCODING
282
- end
283
- unless Jpmobile::Util.check_charset(@body_part_jpmobile, @charset)
284
- @body_part_jpmobile = Jpmobile::Util.correct_encoding(@body_part_jpmobile)
285
- @charset = @body_part_jpmobile.encoding.to_s
286
- end
273
+ if @body_part_jpmobile and @mobile
287
274
  @body_part_jpmobile = @mobile.decode_transfer_encoding(@body_part_jpmobile, @charset)
288
275
  end
289
276
  end
290
-
291
- def ascii_compatible!(str)
292
- Jpmobile::Util.ascii_compatible!(str)
293
- end
294
277
  end
295
278
 
296
279
  class Part
@@ -318,15 +301,10 @@ module Mail
318
301
 
319
302
  alias_method :parse_message_without_jpmobile, :parse_message
320
303
  alias_method :parse_message, :parse_message_with_jpmobile
321
-
322
- private
323
- def ascii_compatible!(str)
324
- str
325
- end
326
304
  end
327
305
 
328
306
  class Body
329
- attr_accessor :mobile, :content_type_with_jpmobile
307
+ attr_accessor :mobile
330
308
 
331
309
  # convert encoding
332
310
  def encoded_with_jpmobile(transfer_encoding = '8bit')
@@ -334,16 +312,10 @@ module Mail
334
312
  if @mobile.to_mail_body_encoded?(@raw_source)
335
313
  @raw_source
336
314
  elsif Jpmobile::Util.ascii_8bit?(@raw_source)
337
- _raw_source = if transfer_encoding == encoding
338
- @raw_source
339
- else
340
- enc = Mail::Encodings::get_encoding(get_best_encoding(transfer_encoding))
341
- enc.encode(@raw_source)
342
- end
343
- Jpmobile::Util.force_encode(_raw_source, nil, @charset)
315
+ enc = Mail::Encodings::get_encoding(get_best_encoding(transfer_encoding))
316
+ Jpmobile::Util.force_encode(enc.encode(@raw_source), nil, @charset)
344
317
  else
345
- case transfer_encoding
346
- when /quoted-printable/
318
+ if transfer_encoding == 'quoted-printable'
347
319
  # [str].pack("M").gsub(/\n/, "\r\n")
348
320
  Jpmobile::Util.force_encode([@mobile.to_mail_body(Jpmobile::Util.force_encode(@raw_source, @charset, Jpmobile::Util::UTF8))].pack("M").gsub(/\n/, "\r\n"), Jpmobile::Util::BINARY, @charset)
349
321
  # @mobile.to_mail_body(Jpmobile::Util.force_encode(@raw_source, @charset, Jpmobile::Util::UTF8))
@@ -368,25 +340,23 @@ module Mail
368
340
  def mobile=(m)
369
341
  @mobile = m
370
342
 
371
- if ["base64", "quoted-printable"].include?(self.encoding) and
372
- /text/.match(self.content_type_with_jpmobile)
373
- self.decode_transfer_encoding
374
- end
375
-
376
343
  if self.multipart? and @mobile
377
344
  self.parts.each do |part|
378
- part.charset = @mobile.mail_charset(part.charset)
345
+ part.charset = @charset
379
346
  part.mobile = @mobile
380
- part.body.charset = part.charset
347
+ part.body.charset = @charset
381
348
  part.body.mobile = @mobile
382
349
  end
383
350
  end
384
351
  end
385
352
 
386
353
  def decode_transfer_encoding
387
- _raw_source = Jpmobile::Util.decode(@raw_source, self.encoding, @charset)
354
+ _raw_source = Encodings.get_encoding(encoding).decode(@raw_source)
355
+ unless Jpmobile::Util.extract_charset(_raw_source) == @charset
356
+ @charset = Jpmobile::Util.extract_charset(_raw_source)
357
+ end
358
+ _raw_source = Jpmobile::Util.set_encoding(_raw_source, @charset)
388
359
  @raw_source = @mobile.decode_transfer_encoding(_raw_source, @charset)
389
- self.encoding = 'text'
390
360
  end
391
361
 
392
362
  def preamble_with_jpmobile
@@ -487,15 +457,15 @@ module Mail
487
457
 
488
458
  def mobile=(m)
489
459
  if @mobile = m
490
- self.charset = @mobile.mail_charset
491
- self.value = @jpmobile_raw_text
460
+ self.charset = @mobile.mail_charset(@charset)
461
+ self.value = @jpmobile_raw_text
492
462
  self.parse
493
463
  end
494
464
  end
495
465
 
496
466
  def encoded_with_jpmobile
497
467
  if @mobile
498
- self.charset = @mobile.mail_charset
468
+ self.charset = @mobile.mail_charset(@charset)
499
469
  end
500
470
 
501
471
  encoded_without_jpmobile
@@ -516,15 +486,15 @@ module Mail
516
486
 
517
487
  def mobile=(m)
518
488
  if @mobile = m
519
- self.charset = @mobile.mail_charset
520
- self.value = @jpmobile_raw_text
489
+ self.charset = @mobile.mail_charset(@charset)
490
+ self.value = @jpmobile_raw_text
521
491
  self.parse
522
492
  end
523
493
  end
524
494
 
525
495
  def encoded_with_jpmobile
526
496
  if @mobile
527
- self.charset = @mobile.mail_charset
497
+ self.charset = @mobile.mail_charset(@charset)
528
498
  end
529
499
 
530
500
  encoded_without_jpmobile