mms2r 3.6.4 → 3.7.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.
- data/Gemfile +2 -19
- data/Gemfile.lock +26 -24
- data/History.txt +6 -0
- data/Manifest.txt +1 -0
- data/README.txt +1 -2
- data/Rakefile +7 -41
- data/dev_tools/debug_sprint_nokogiri_parsing.rb +1 -1
- data/lib/ext/object.rb +12 -4
- data/lib/mms2r.rb +0 -5
- data/lib/mms2r/media.rb +1 -0
- data/lib/mms2r/media/sprint.rb +51 -1
- data/lib/mms2r/version.rb +25 -0
- data/mms2r.gemspec +28 -40
- data/test/fixtures/handsets.yml +1 -1
- data/test/fixtures/sprint-ajax-response-failure.html +173 -0
- data/test/fixtures/sprint-ajax-response-success.json +1 -0
- data/test/fixtures/sprint-image-missing-message.mail +183 -0
- data/test/test_helper.rb +8 -2
- data/test/test_mms2r_media.rb +2 -2
- data/test/test_pm_sprint_com.rb +78 -0
- metadata +176 -121
- data/.gemtest +0 -0
data/Gemfile
CHANGED
@@ -1,20 +1,3 @@
|
|
1
|
-
|
1
|
+
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
gem "nokogiri"
|
6
|
-
gem "mail"
|
7
|
-
gem "exifr"
|
8
|
-
# gem "psych"
|
9
|
-
|
10
|
-
group :development, :test do
|
11
|
-
gem "rdoc"
|
12
|
-
gem "rubyforge"
|
13
|
-
gem "gemcutter"
|
14
|
-
gem "hoe"
|
15
|
-
gem "rcov"
|
16
|
-
gem "test-unit", "=1.2.3"
|
17
|
-
gem "mocha"
|
18
|
-
end
|
19
|
-
|
20
|
-
# vim: syntax=ruby
|
3
|
+
gemspec
|
data/Gemfile.lock
CHANGED
@@ -1,31 +1,38 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
mms2r (3.7.0)
|
5
|
+
exifr (>= 1.0.3)
|
6
|
+
json (>= 1.6.0)
|
7
|
+
mail (>= 2.4.0)
|
8
|
+
nokogiri (>= 1.5.0)
|
9
|
+
rake (= 0.9.2.2)
|
10
|
+
|
1
11
|
GEM
|
2
|
-
remote:
|
12
|
+
remote: https://rubygems.org/
|
3
13
|
specs:
|
4
|
-
exifr (1.1.
|
5
|
-
gemcutter (0.7.1)
|
6
|
-
hoe (2.12.5)
|
7
|
-
rake (~> 0.8)
|
14
|
+
exifr (1.1.2)
|
8
15
|
i18n (0.6.0)
|
9
|
-
json (1.
|
10
|
-
|
11
|
-
mail (2.4.0)
|
16
|
+
json (1.7.3)
|
17
|
+
mail (2.4.4)
|
12
18
|
i18n (>= 0.4.0)
|
13
19
|
mime-types (~> 1.16)
|
14
20
|
treetop (~> 1.4.8)
|
15
21
|
metaclass (0.0.1)
|
16
|
-
mime-types (1.
|
17
|
-
mocha (0.
|
22
|
+
mime-types (1.18)
|
23
|
+
mocha (0.11.4)
|
18
24
|
metaclass (~> 0.0.1)
|
19
|
-
|
25
|
+
multi_json (1.3.5)
|
26
|
+
nokogiri (1.5.2)
|
20
27
|
polyglot (0.3.3)
|
21
28
|
rake (0.9.2.2)
|
22
|
-
rcov (0.9.11)
|
23
29
|
rdoc (3.12)
|
24
30
|
json (~> 1.4)
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
31
|
+
simplecov (0.6.4)
|
32
|
+
multi_json (~> 1.0)
|
33
|
+
simplecov-html (~> 0.5.3)
|
34
|
+
simplecov-html (0.5.3)
|
35
|
+
test-unit (2.4.8)
|
29
36
|
treetop (1.4.10)
|
30
37
|
polyglot
|
31
38
|
polyglot (>= 0.3.1)
|
@@ -34,13 +41,8 @@ PLATFORMS
|
|
34
41
|
ruby
|
35
42
|
|
36
43
|
DEPENDENCIES
|
37
|
-
|
38
|
-
gemcutter
|
39
|
-
hoe
|
40
|
-
mail
|
44
|
+
mms2r!
|
41
45
|
mocha
|
42
|
-
nokogiri
|
43
|
-
rcov
|
44
46
|
rdoc
|
45
|
-
|
46
|
-
test-unit
|
47
|
+
simplecov
|
48
|
+
test-unit
|
data/History.txt
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
### 3.7.0 / 2012-05-31 (The Teenager - Edgar's brother via Eric's face)
|
2
|
+
|
3
|
+
* 2 major enhancements
|
4
|
+
* Improve processing of Sprint media - James McGrath
|
5
|
+
* Remove Hoe and gemcutter dependencies
|
6
|
+
|
1
7
|
### 3.6.4 / 2012-04-22 (Molly - Pickles' mother)
|
2
8
|
|
3
9
|
* 1 minor enhancement
|
data/Manifest.txt
CHANGED
data/README.txt
CHANGED
@@ -5,9 +5,8 @@
|
|
5
5
|
== DESCRIPTION
|
6
6
|
|
7
7
|
MMS2R by Mike Mondragon
|
8
|
-
http://mms2r.rubyforge.org/
|
9
8
|
https://github.com/monde/mms2r
|
10
|
-
https://
|
9
|
+
https://rubygems.org/gems/mms2r
|
11
10
|
http://peepcode.com/products/mms2r-pdf
|
12
11
|
|
13
12
|
MMS2R is a library that decodes the parts of an MMS message to disk while
|
data/Rakefile
CHANGED
@@ -1,45 +1,11 @@
|
|
1
|
-
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
2
3
|
|
3
|
-
|
4
|
-
require 'hoe'
|
5
|
-
rescue LoadError
|
6
|
-
require 'rubygems'
|
7
|
-
require 'hoe'
|
8
|
-
end
|
9
|
-
|
10
|
-
|
11
|
-
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), "lib")
|
12
|
-
require 'mms2r'
|
13
|
-
require 'rake'
|
14
|
-
|
15
|
-
Hoe.plugin :bundler
|
16
|
-
Hoe.spec('mms2r') do |p|
|
17
|
-
p.version = MMS2R::Media::VERSION
|
18
|
-
p.rubyforge_name = 'mms2r'
|
19
|
-
p.author = ['Mike Mondragon']
|
20
|
-
p.email = ['mikemondragon@gmail.com']
|
21
|
-
p.summary = 'Extract user media from MMS (and not carrier cruft)'
|
22
|
-
p.description = p.paragraphs_of('README.txt', 2..5).join("\n\n")
|
23
|
-
p.url = p.paragraphs_of('README.txt', 1).first.strip
|
24
|
-
p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
|
25
|
-
p.readme_file = 'README.txt'
|
26
|
-
p.history_file = 'History.txt'
|
27
|
-
p.extra_deps << ['nokogiri', '>= 1.4.4']
|
28
|
-
p.extra_deps << ['mail', '>= 2.2.10']
|
29
|
-
p.extra_deps << ['uuidtools', '>= 2.1.1']
|
30
|
-
p.extra_deps << ['exifr', '>= 1.0.3']
|
31
|
-
p.clean_globs << 'coverage'
|
32
|
-
end
|
4
|
+
require 'rake/testtask'
|
33
5
|
|
34
|
-
|
35
|
-
|
36
|
-
Rcov::RcovTask.new do |rcov|
|
37
|
-
rcov.pattern = 'test/**/test_*.rb'
|
38
|
-
rcov.verbose = true
|
39
|
-
rcov.rcov_opts << "--exclude rcov.rb"
|
40
|
-
end
|
41
|
-
rescue
|
42
|
-
task :rcov => :check_dependencies
|
6
|
+
Rake::TestTask.new do |t|
|
7
|
+
t.libs << 'test'
|
43
8
|
end
|
44
9
|
|
45
|
-
|
10
|
+
desc "Run tests"
|
11
|
+
task :default => :test
|
@@ -26,7 +26,7 @@ puts "NUMBER: #{number}"
|
|
26
26
|
text = doc.search("/html/body//pre").first.inner_html
|
27
27
|
puts "TEXT: #{text}"
|
28
28
|
|
29
|
-
# just see what they say this MMS is it really doesn't mean anything, the
|
29
|
+
# just see what they say this MMS is it really doesn't mean anything, the
|
30
30
|
# content is in faux image with a RECIPIENT in its URI path
|
31
31
|
text = doc.search("/html/body//tr[2]/td//b")
|
32
32
|
case text.text
|
data/lib/ext/object.rb
CHANGED
@@ -1,11 +1,19 @@
|
|
1
1
|
class Object
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
unless respond_to?(:blank?)
|
4
|
+
|
5
|
+
def blank?
|
6
|
+
respond_to?(:empty?) ? empty? : !self
|
7
|
+
end
|
8
|
+
|
5
9
|
end
|
6
10
|
|
7
|
-
|
8
|
-
|
11
|
+
unless respond_to?(:present?)
|
12
|
+
|
13
|
+
def present?
|
14
|
+
!blank?
|
15
|
+
end
|
16
|
+
|
9
17
|
end
|
10
18
|
|
11
19
|
end
|
data/lib/mms2r.rb
CHANGED
data/lib/mms2r/media.rb
CHANGED
data/lib/mms2r/media/sprint.rb
CHANGED
@@ -7,6 +7,7 @@
|
|
7
7
|
require 'net/http'
|
8
8
|
require 'nokogiri'
|
9
9
|
require 'cgi'
|
10
|
+
require 'json'
|
10
11
|
|
11
12
|
module MMS2R
|
12
13
|
|
@@ -92,14 +93,64 @@ module MMS2R
|
|
92
93
|
# the user. (note) we'll have to verify that if they attach multiple texts
|
93
94
|
# to the MMS then Sprint stacks it up in multiple <pre>'s. The only <pre>
|
94
95
|
# tag in the document is for text from the user.
|
96
|
+
# if there is no text media found in the mail body - then we go to more
|
97
|
+
# extreme measures.
|
98
|
+
text_found = false
|
99
|
+
|
95
100
|
doc.search("/html/body//pre").each do |pre|
|
96
101
|
type = 'text/plain'
|
97
102
|
text = pre.inner_html.strip
|
98
103
|
next if text.empty?
|
104
|
+
|
105
|
+
text_found = true
|
99
106
|
type, text = transform_text(type, text)
|
100
107
|
type, file = sprint_write_file(type, text.strip)
|
101
108
|
add_file(type, file) unless type.nil? || file.nil?
|
102
109
|
end
|
110
|
+
# if no text was found, there still might be a message with images
|
111
|
+
# that can be seen at the end of the "View Entire Message" link
|
112
|
+
if !text_found
|
113
|
+
view_entire_message_link = doc.search("a").find { |link| link.inner_html == "View Entire Message"}
|
114
|
+
# if we can't find the view entire message link, give up
|
115
|
+
if view_entire_message_link
|
116
|
+
# Sprint uses AJAX/json to serve up the content at the end of the link so this is conveluted
|
117
|
+
url = view_entire_message_link.attr("href")
|
118
|
+
# extract the "invite" param out of the url - this will be the id we pass to the ajax path below
|
119
|
+
inviteMessageId = CGI::parse(URI::parse(url).query)["invite"].first
|
120
|
+
|
121
|
+
if inviteMessageId
|
122
|
+
json_url = "http://pictures.sprintpcs.com/ui-refresh/guest/getMessageContainerJSON.do%3FcomponentType%3DmediaDetail&invite=#{inviteMessageId}&externalMessageId=#{inviteMessageId}"
|
123
|
+
# pull down the json from the url and parse it
|
124
|
+
uri = URI.parse(json_url)
|
125
|
+
connection = Net::HTTP.new(uri.host, uri.port)
|
126
|
+
response = connection.get2(
|
127
|
+
uri.request_uri,
|
128
|
+
{ "User-Agent" => MMS2R::Media::USER_AGENT }
|
129
|
+
)
|
130
|
+
content = response.body
|
131
|
+
|
132
|
+
# if the content has expired, sprint sends back html "content expired page
|
133
|
+
# json will fail to parse
|
134
|
+
begin
|
135
|
+
json = JSON.parse(content)
|
136
|
+
|
137
|
+
# there may be multiple "results" in the json - due to multiple images
|
138
|
+
# cycle through them and extract the "description" which is the text
|
139
|
+
# message the sender sent with the images
|
140
|
+
json["Results"].each do |result|
|
141
|
+
type = 'text/plain'
|
142
|
+
text = result["description"] ? result["description"].strip : nil
|
143
|
+
next if text.empty?
|
144
|
+
type, text = transform_text(type, text)
|
145
|
+
type, file = sprint_write_file(type, text.strip)
|
146
|
+
add_file(type, file) unless type.nil? || file.nil?
|
147
|
+
end
|
148
|
+
rescue JSON::ParserError => e
|
149
|
+
log("#{self.class} processing error, #{$!}", :error)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
103
154
|
end
|
104
155
|
|
105
156
|
##
|
@@ -151,7 +202,6 @@ module MMS2R
|
|
151
202
|
log("#{self.class} processing error, #{$!}", :error)
|
152
203
|
next
|
153
204
|
end
|
154
|
-
|
155
205
|
# if the Sprint content server uses response code 500 when the content is purged
|
156
206
|
# the content type will text/html and the body will be the message
|
157
207
|
if response.content_type == 'text/html' && response.code == "500"
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module MMS2R
|
2
|
+
class Version
|
3
|
+
|
4
|
+
def self.major
|
5
|
+
3
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.minor
|
9
|
+
7
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.patch
|
13
|
+
0
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.pre
|
17
|
+
nil
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.to_s
|
21
|
+
[major, minor, patch, pre].compact.join('.')
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
data/mms2r.gemspec
CHANGED
@@ -1,45 +1,33 @@
|
|
1
|
-
|
1
|
+
$:.unshift File.expand_path("../lib", __FILE__)
|
2
|
+
require "mms2r/version"
|
2
3
|
|
3
|
-
Gem::Specification.new do |
|
4
|
-
s.name = "mms2r"
|
5
|
-
s.version = "3.6.2"
|
4
|
+
Gem::Specification.new do |gem|
|
6
5
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.TMail.txt", "README.txt"]
|
13
|
-
s.files = ["Gemfile", "Gemfile.lock", "History.txt", "Manifest.txt", "README.TMail.txt", "README.txt", "Rakefile", "conf/1nbox.net.yml", "conf/aliases.yml", "conf/bellsouth.net.yml", "conf/from.yml", "conf/mediamessaging.o2.co.uk.yml", "conf/messaging.nextel.com.yml", "conf/mms.3ireland.ie.yml", "conf/mms.ae.yml", "conf/mms.alltel.com.yml", "conf/mms.att.net.yml", "conf/mms.dobson.net.yml", "conf/mms.luxgsm.lu.yml", "conf/mms.mobileiam.ma.yml", "conf/mms.mtn.co.za.yml", "conf/mms.mycricket.com.yml", "conf/mms.myhelio.com.yml", "conf/mms.netcom.no.yml", "conf/mms.o2online.de.yml", "conf/mms.three.co.uk.yml", "conf/mms.uscc.net.mail", "conf/mms.vodacom4me.co.za.yml", "conf/mms2r_media.yml", "conf/mobile.indosat.net.id.yml", "conf/msg.telus.com.yml", "conf/orangemms.net.yml", "conf/pm.sprint.com.yml", "conf/pxt.vodafone.net.nz.yml", "conf/rci.rogers.com.yml", "conf/sms.sasktel.com.yml", "conf/tmomail.net.yml", "conf/txt.bell.ca.yml", "conf/unicel.com.yml", "conf/vmpix.com.yml", "conf/vzwpix.com.yml", "conf/waw.plspictures.com.yml", "dev_tools/anonymizer.rb", "dev_tools/debug_sprint_nokogiri_parsing.rb", "init.rb", "lib/ext/mail.rb", "lib/ext/object.rb", "lib/mms2r.rb", "lib/mms2r/media.rb", "lib/mms2r/media/sprint.rb", "mms2r.gemspec", "test/fixtures/1nbox-2images-01.mail", "test/fixtures/1nbox-2images-02.mail", "test/fixtures/1nbox-2images-03.mail", "test/fixtures/1nbox-2images-04.mail", "test/fixtures/3ireland-mms-01.mail", "test/fixtures/ad_new.txt", "test/fixtures/alltel-image-01.mail", "test/fixtures/alltel-mms-01.mail", "test/fixtures/alltel-mms-03.mail", "test/fixtures/apple-double-image-01.mail", "test/fixtures/att-blackberry-02.mail", "test/fixtures/att-blackberry.mail", "test/fixtures/att-image-01.mail", "test/fixtures/att-image-02.mail", "test/fixtures/att-iphone-01.mail", "test/fixtures/att-iphone-02.mail", "test/fixtures/att-iphone-03.mail", "test/fixtures/att-text-01.mail", "test/fixtures/bell-canada-image-01.mail", "test/fixtures/cingularme-text-01.mail", "test/fixtures/cingularme-text-02.mail", "test/fixtures/dici_un_mois_georgie.txt", "test/fixtures/dobson-image-01.mail", "test/fixtures/dot.jpg", "test/fixtures/generic.mail", "test/fixtures/handsets.yml", "test/fixtures/helio-image-01.mail", "test/fixtures/helio-message-01.mail", "test/fixtures/iconv-fr-text-01.mail", "test/fixtures/indosat-image-01.mail", "test/fixtures/indosat-image-02.mail", "test/fixtures/info2go-image-01.mail", "test/fixtures/iphone-image-01.mail", "test/fixtures/luxgsm-image-01.mail", "test/fixtures/maroctelecom-france-mms-01.mail", "test/fixtures/mediamessaging_o2_co_uk-image-01.mail", "test/fixtures/mmode-image-01.mail", "test/fixtures/mms.ae-image-01.mail", "test/fixtures/mms.mycricket.com-pic-and-text.mail", "test/fixtures/mms.mycricket.com-pic.mail", "test/fixtures/mmsreply.t-mobile.co.uk-text-image-01.mail", "test/fixtures/mobile.mycingular.com-text-01.mail", "test/fixtures/mtn-southafrica-mms.mail", "test/fixtures/mycingular-image-01.mail", "test/fixtures/netcom-image-01.mail", "test/fixtures/nextel-image-01.mail", "test/fixtures/nextel-image-02.mail", "test/fixtures/nextel-image-03.mail", "test/fixtures/nextel-image-04.mail", "test/fixtures/o2-de-image-01.mail", "test/fixtures/orange-uk-image-01.mail", "test/fixtures/orangefrance-text-and-image.mail", "test/fixtures/orangepoland-text-01.mail", "test/fixtures/orangepoland-text-02.mail", "test/fixtures/pics.cingularme.com-image-01.mail", "test/fixtures/pxt-image-01.mail", "test/fixtures/rogers-canada-mms-01.mail", "test/fixtures/sasktel-image-01.mail", "test/fixtures/sprint-broken-image-01.mail", "test/fixtures/sprint-image-01.mail", "test/fixtures/sprint-new-image-01.mail", "test/fixtures/sprint-pcs-text-01.mail", "test/fixtures/sprint-purged-image-01.mail", "test/fixtures/sprint-text-01.mail", "test/fixtures/sprint-two-images-01.mail", "test/fixtures/sprint-video-01.mail", "test/fixtures/sprint.mov", "test/fixtures/suncom-blackberry.mail", "test/fixtures/telus-image-01.mail", "test/fixtures/three-uk-image-01.mail", "test/fixtures/tmo.blackberry.net-image-01.mail", "test/fixtures/tmobile-blackberry-02.mail", "test/fixtures/tmobile-blackberry.mail", "test/fixtures/tmobile-image-01.mail", "test/fixtures/tmobile-image-02.mail", "test/fixtures/unicel-image-01.mail", "test/fixtures/us-cellular-image-01.mail", "test/fixtures/verizon-blackberry.mail", "test/fixtures/verizon-image-01.mail", "test/fixtures/verizon-image-02.mail", "test/fixtures/verizon-image-03.mail", "test/fixtures/verizon-text-01.mail", "test/fixtures/verizon-video-01.mail", "test/fixtures/virgin-mobile-image-01.mail", "test/fixtures/virgin.ca-text-01.mail", "test/fixtures/vodacom4me-co-za-01.mail", "test/fixtures/vodacom4me-co-za-02.mail", "test/fixtures/vodacom4me-southafrica-mms-01.mail", "test/fixtures/vodacom4me-southafrica-mms-04.mail", "test/fixtures/vtext-text-01.mail", "test/fixtures/vzwpix.com-image-01.mail", "test/fixtures/waw.plspictures.com-image-01.mail", "test/hax.rb", "test/test_1nbox_net.rb", "test/test_bell_canada.rb", "test/test_bellsouth_net.rb", "test/test_helper.rb", "test/test_mediamessaging_o2_co_uk.rb", "test/test_messaging_nextel_com.rb", "test/test_messaging_sprintpcs_com.rb", "test/test_mms2r_media.rb", "test/test_mms_3ireland_ie.rb", "test/test_mms_ae.rb", "test/test_mms_alltel_com.rb", "test/test_mms_att_net.rb", "test/test_mms_dobson_net.rb", "test/test_mms_luxgsm_lu.rb", "test/test_mms_mobileiam_ma.rb", "test/test_mms_mtn_co_za.rb", "test/test_mms_mycricket_com.rb", "test/test_mms_myhelio_com.rb", "test/test_mms_netcom_no.rb", "test/test_mms_o2online_de.rb", "test/test_mms_three_co_uk.rb", "test/test_mms_uscc_net.rb", "test/test_mms_vodacom4me_co_za.rb", "test/test_mobile_indosat_net_id.rb", "test/test_msg_telus_com.rb", "test/test_orangemms_net.rb", "test/test_pm_sprint_com.rb", "test/test_pxt_vodafone_net_nz.rb", "test/test_rci_rogers_com.rb", "test/test_sms_sasktel_com.rb", "test/test_tmomail_net.rb", "test/test_unicel_com.rb", "test/test_vmpix_com.rb", "test/test_vzwpix_com.rb", "test/test_waw_plspictures_com.rb", "vendor/plugins/mms2r/lib/autotest/discover.rb", "vendor/plugins/mms2r/lib/autotest/mms2r.rb", ".gemtest"]
|
14
|
-
s.homepage = "https://github.com/monde/mms2r"
|
15
|
-
s.rdoc_options = ["--main", "README.txt"]
|
16
|
-
s.require_paths = ["lib"]
|
17
|
-
s.rubyforge_project = "mms2r"
|
18
|
-
s.rubygems_version = "1.8.10"
|
19
|
-
s.summary = "Extract user media from MMS (and not carrier cruft)"
|
20
|
-
s.test_files = ["test/test_orangemms_net.rb", "test/test_waw_plspictures_com.rb", "test/test_mediamessaging_o2_co_uk.rb", "test/test_vzwpix_com.rb", "test/test_unicel_com.rb", "test/test_messaging_sprintpcs_com.rb", "test/test_mms_luxgsm_lu.rb", "test/test_rci_rogers_com.rb", "test/test_mms_uscc_net.rb", "test/test_mms_netcom_no.rb", "test/test_1nbox_net.rb", "test/test_sms_sasktel_com.rb", "test/test_mms_att_net.rb", "test/test_mobile_indosat_net_id.rb", "test/test_messaging_nextel_com.rb", "test/test_mms_mtn_co_za.rb", "test/test_mms_vodacom4me_co_za.rb", "test/test_pxt_vodafone_net_nz.rb", "test/test_mms_dobson_net.rb", "test/test_helper.rb", "test/test_msg_telus_com.rb", "test/test_mms_o2online_de.rb", "test/test_mms2r_media.rb", "test/test_bell_canada.rb", "test/test_tmomail_net.rb", "test/test_mms_3ireland_ie.rb", "test/test_pm_sprint_com.rb", "test/test_mms_alltel_com.rb", "test/test_mms_mobileiam_ma.rb", "test/test_mms_mycricket_com.rb", "test/test_bellsouth_net.rb", "test/test_mms_three_co_uk.rb", "test/test_vmpix_com.rb", "test/test_mms_myhelio_com.rb", "test/test_mms_ae.rb"]
|
6
|
+
gem.add_dependency 'rake', ['= 0.9.2.2']
|
7
|
+
gem.add_dependency 'nokogiri', ['>= 1.5.0']
|
8
|
+
gem.add_dependency 'mail', ['>= 2.4.0']
|
9
|
+
gem.add_dependency 'exifr', ['>= 1.0.3']
|
10
|
+
gem.add_dependency 'json', ['>= 1.6.0']
|
21
11
|
|
22
|
-
|
23
|
-
|
12
|
+
gem.add_development_dependency "rdoc"
|
13
|
+
gem.add_development_dependency "simplecov"
|
14
|
+
gem.add_development_dependency 'test-unit'
|
15
|
+
gem.add_development_dependency 'mocha'
|
24
16
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
s.add_dependency(%q<uuidtools>, [">= 2.1.1"])
|
42
|
-
s.add_dependency(%q<exifr>, [">= 1.0.3"])
|
43
|
-
s.add_dependency(%q<hoe>, ["~> 2.12"])
|
44
|
-
end
|
17
|
+
gem.name = "mms2r"
|
18
|
+
gem.version = MMS2R::Version.to_s
|
19
|
+
gem.platform = Gem::Platform::RUBY
|
20
|
+
gem.authors = ["Mike Mondragon"]
|
21
|
+
gem.email = ["mikemondragon@gmail.com"]
|
22
|
+
gem.homepage = "https://github.com/monde/mms2r"
|
23
|
+
gem.summary = "Extract user media from MMS (and not carrier cruft)"
|
24
|
+
gem.description = open(File.join(File.dirname(__FILE__), 'README.txt')).readlines[6...22].join
|
25
|
+
gem.rubyforge_project = "mms2r"
|
26
|
+
gem.rubygems_version = ">= 1.3.6"
|
27
|
+
gem.files = `git ls-files`.split("\n")
|
28
|
+
gem.require_path = ['lib']
|
29
|
+
gem.rdoc_options = ["--main", "README.txt"]
|
30
|
+
gem.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.TMail.txt", "README.txt"]
|
31
|
+
|
32
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
45
33
|
end
|
data/test/fixtures/handsets.yml
CHANGED
@@ -0,0 +1,173 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
3
|
+
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
23
|
+
|
24
|
+
<head>
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
<meta name="ROBOTS" content="NOINDEX,NOFOLLOW"/>
|
29
|
+
<title>Pictures from Sprint</title>
|
30
|
+
<link rel="shortcut icon" type="image/x-icon" href="/retailers/PCSNEXTEL/ui-refresh/images/icons/favicon.ico"/>
|
31
|
+
<link rel="stylesheet" type="text/css" href="/combined.css.h-968716942.pack" charset="utf-8"/>
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
<link rel="stylesheet" type="text/css" href="/combined.css.h-865380446.pack" charset="utf-8"/>
|
44
|
+
|
45
|
+
|
46
|
+
<script type="text/javascript" src="/combined.js.h2135702050.pack" charset="utf-8"></script>
|
47
|
+
<script type="text/javascript" src="/js/ui-refresh/jsprops.jsp"></script>
|
48
|
+
|
49
|
+
</head>
|
50
|
+
<body class="yui-skin-sam" onload=";javascript:YAHOO.com.sprint.pm.util.functions.isLoginPageLoadedIntoIframe();" onunload="">
|
51
|
+
|
52
|
+
|
53
|
+
<div id="com-sprint-pm-panel-container" class="com-sprint-pm-panel-container"></div>
|
54
|
+
|
55
|
+
<div id="com-xoom-widget-result-dialog"></div>
|
56
|
+
|
57
|
+
<div id="custom-doc" class="yui-t7">
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
<div id="hd">
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
<div id="com-sprint-pm-brand"><a href="http://www.sprintpcs.com" target="_blank"></a></div>
|
74
|
+
|
75
|
+
<div class="yui-g">
|
76
|
+
<img src="/retailers/PCSNEXTEL/ui-refresh/images/sprint-nav.gif" width="963" height="57" alt="Sprint Navigation" usemap="#sprint_nav_Map"/>
|
77
|
+
</div>
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
<map id="sprint_nav_Map" name="sprint_nav_Map">
|
84
|
+
<area shape="rect" title="Support" alt="Support" coords="537,15,620,44" href="http://support.sprint.com/support" onclick="javascript:YAHOO.com.sprint.pm.util.functions.removeSSOCookie();"/>
|
85
|
+
<area shape="rect" title="Community" alt="Community" coords="429,15,533,44" href="http://community.sprint.com/" onclick="javascript:YAHOO.com.sprint.pm.util.functions.removeSSOCookie();"/>
|
86
|
+
<area shape="rect" title="Digital Lounge" alt="Digital Lounge" coords="305,15,425,44" href="http://www.sprint.com/digitallounge" onclick="javascript:YAHOO.com.sprint.pm.util.functions.removeSSOCookie();"/>
|
87
|
+
<area shape="rect" title="Shop" alt="Shop" coords="230,15,300,44" href="http://www.nextel.com/en/shop/" onclick="javascript:YAHOO.com.sprint.pm.util.functions.removeSSOCookie();"/>
|
88
|
+
<area shape="rect" title="My Sprint" alt="My Sprint" coords="137,15,225,44" onclick="javascript:YAHOO.com.sprint.pm.util.functions.removeSSOCookie();" href="https://mysprint.sprint.com/mysprint/pages/secure/myaccount/landingPage.jsp"/>
|
89
|
+
<area shape="rect" title="Sprint.com" alt="Sprint.com" coords="0,0,110,44" onclick="javascript:YAHOO.com.sprint.pm.util.functions.removeSSOCookie();" href="http://www.sprint.com"/>
|
90
|
+
</map>
|
91
|
+
</div>
|
92
|
+
|
93
|
+
<div id="bd">
|
94
|
+
<div id="yui-main">
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
|
102
|
+
<div class="yui-navset">
|
103
|
+
<ul class="yui-nav"><li class="yui-li-empty-tab-nav"></li></ul>
|
104
|
+
<div class="yui-content">
|
105
|
+
<div id="com-sprint-pm-configurable-content-holder" class="yui-g">
|
106
|
+
|
107
|
+
<div class="com-sprint-pm-one-panel-box">
|
108
|
+
<div class="com-sprint-pm-one-panel-content">
|
109
|
+
<div class="com-sprint-pm-title-heading"><img src="/retailers/PCSNEXTEL/ui-refresh/images/title/title_error.gif"/></div><br/><br/>
|
110
|
+
<div>Sorry, but the shared album or picture has been removed by its owner.</div><br/>
|
111
|
+
</div>
|
112
|
+
</div>
|
113
|
+
|
114
|
+
<div class="com-sprint-pm-one-panel-verisign-logo">
|
115
|
+
</div>
|
116
|
+
</div>
|
117
|
+
</div>
|
118
|
+
</div>
|
119
|
+
|
120
|
+
</div><!-- /yui-main -->
|
121
|
+
</div> <!-- close bd -->
|
122
|
+
|
123
|
+
<div id="ft">
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
<div id="com-sprint-pm-footer" >
|
144
|
+
<div class="yui-ge">
|
145
|
+
<div class="yui-u first">
|
146
|
+
<ul id="com-sprint-pm-footerLinks">
|
147
|
+
<li>Order by phone 1-800-2-SPRINT</li>
|
148
|
+
<li><a href="http://www2.sprint.com/mr/aboutsprint.do" target="_blank" title="About Us">About Us</a></li>
|
149
|
+
<li><a href="http://www.sprint.com/contactus/" target="_blank" title="Contact Us">Contact Us</a></li>
|
150
|
+
<li><a href="http://www.sprint.com/legal/picturemail_terms_and_conditions.html" target="_blank" title="Terms of Use">Terms of Use</a></li>
|
151
|
+
<li class="pm-last"><a href="http://www.sprint.com/legal/privacy.html" target="_blank" title="Privacy Policy">Privacy Policy</a></li>
|
152
|
+
</ul>
|
153
|
+
</div>
|
154
|
+
<div class="yui-u" id="com-sprint-pm-copyright">
|
155
|
+
© 2012 Sprint. All rights reserved.<br/>
|
156
|
+
</div>
|
157
|
+
</div>
|
158
|
+
|
159
|
+
|
160
|
+
|
161
|
+
<script type="text/javascript" src="/combined.js.h845901428.pack" charset="utf-8"></script>
|
162
|
+
<script type="text/javascript"> _uacct = "UA-822828-4"; _udn=".sprintpcs.com"; YAHOO.com.sprint.pm.util.functions.urchinTracker(); </script>
|
163
|
+
|
164
|
+
|
165
|
+
</div>
|
166
|
+
|
167
|
+
</div> <!-- close custom-doc -->
|
168
|
+
</body>
|
169
|
+
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
</html>
|