jmcarbo-imapstore 0.4.7 → 0.4.9

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -9,11 +9,11 @@ $hoe = Hoe.new('imapstore', IMAPSTORE::VERSION) do |p|
9
9
  #p.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
10
10
  p.rubyforge_name = p.name # TODO this is default value
11
11
  p.extra_deps = [
12
- ['rdoc','>= 2.2.0'],
13
12
  ['tmail','>= 1.2.3'],
14
13
  ['getoptions','>= 0.1']
15
14
  ]
16
15
  p.extra_dev_deps = [
16
+ ['rdoc','>= 2.2.0'],
17
17
  ['newgem', ">= #{::Newgem::VERSION}"]
18
18
  ]
19
19
 
data/lib/imapstore.rb CHANGED
@@ -4,6 +4,6 @@ $:.unshift(File.dirname(__FILE__)) unless
4
4
  require 'imapstore/imapstore.rb'
5
5
 
6
6
  module IMAPSTORE
7
- VERSION = '0.4.7'
7
+ VERSION = '0.4.9'
8
8
 
9
9
  end
@@ -244,11 +244,7 @@ END
244
244
 
245
245
  def transverse(target_folder = "INBOX", glob = /.+/, recursive = false, dot_files = false, folder_only=false)
246
246
  file_list=[]
247
-
248
-
249
-
250
-
251
- begin
247
+ #begin
252
248
  target_folder = "" if target_folder == "/"
253
249
 
254
250
  puts "..... fetching #{target_folder} " if @verbose
@@ -260,7 +256,9 @@ END
260
256
  if ((recursive == true) && (target_folder == "" ? true : folder.name.match(/^#{target_folder}(\/.+)*$/))) || (folder.name == target_folder)
261
257
  puts "..... got hit transversing #{folder.name} " if @verbose
262
258
  file_list << folder.name
263
- yield(folder.name, nil, nil, nil, nil) if block_given?
259
+ if(block_given?)
260
+ yield(folder.name, nil, nil, nil, nil, nil)
261
+ end
264
262
 
265
263
  if((!folder.attr.include? :Noselect) && (folder_only==false))
266
264
 
@@ -270,45 +268,72 @@ END
270
268
  a = @imap.fetch(message_id, "RFC822")
271
269
  mail = TMail::Mail.parse(a[0].attr["RFC822"])
272
270
  file_name = mail.subject.match(/^[^\[]+\[([^\]]+)\]/)[1]
273
- file_list << folder.name + "/" + file_name if file_name.match(glob)
274
- yield(folder.name, file_name, message_id, mail, file_name) if block_given? && file_name.match(glob)
271
+ puts "Considering #{file_name}" if @verbose
272
+
273
+ parts = mail.subject.match(/^[^\[]+\[[^\]]+\]\(([0-9]+)\-([0-9]+)\)/)
274
+ file_part = parts[1]
275
+ max_parts = parts[2]
276
+ if file_name.match(glob)
277
+ file_list << folder.name + "/" + file_name
278
+ yield(folder.name, file_name, message_id, mail, file_part, max_parts) if block_given?
279
+ end
275
280
  end
276
281
  end
277
282
  end
278
283
  end
279
- rescue
280
- end
284
+ #rescue
285
+ #end
281
286
 
282
287
  file_list.sort
283
288
  end
284
289
 
285
- def ls(target_folder = "INBOX", glob = /.+/, recursive = false, dot_files = false)
290
+ def ls(target_folder = "INBOX", glob = /.+/, recursive = false, dot_files = false)
286
291
  transverse(target_folder, glob, recursive, dot_files, false)
287
- end
288
-
289
- def get_file(target_folder = "INBOX", glob = /.+/, recursive = false, dot_files = false)
290
- file_list = transverse(target_folder, glob, recursive, dot_files, false) do |folder, file, message_id, mail, file_name|
291
-
292
- if mail && mail.multipart? then
293
- mail.parts.each do |m|
294
- if !m.main_type
295
- append_dir = folder.sub(/^#{target_folder}\/*/,"")
296
- if append_dir != ""
297
- Dir.mkdir(append_dir) if !File.exists? append_dir
292
+ end
298
293
 
299
- file_name = append_dir + "/" + file_name
300
- end
301
- File.open(file_name,"w").write(m.body)
294
+ def get_file(target_folder = "INBOX", glob = /.+/, recursive = false, dot_files = false)
295
+ multipart_files = Hash.new
296
+ file_list = transverse(target_folder, glob, recursive, dot_files, false) do |folder, file_name, message_id, mail, file_part, max_parts|
297
+ if(file_name && mail.parts)
298
+ mail.parts.each do |m|
299
+ if !m.main_type
300
+ append_dir = folder
301
+ append_dir.sub!(/^#{target_folder}\/*/,"")
302
+ if append_dir != ""
303
+ Dir.mkdir(append_dir) if !File.exists? append_dir
304
+ file_name = append_dir + "/" + file_name
305
+ end
306
+
307
+ if(file_part)
308
+ multipart_files[file_name] = max_parts if !multipart_files[file_name]
309
+ file_name = file_name + "_#{file_part}_#{max_parts}"
310
+ end
311
+ puts "Getting file #{file_name}" if @verbose
312
+
313
+ File.open(file_name,"w") do |f|
314
+ f.write(m.body)
302
315
  end
303
- end
316
+ end
317
+ end
304
318
  end
305
319
  end
306
- end
320
+
321
+ multipart_files.each do |key,value|
322
+ puts "Fusing #{key} ---- #{value}" if @verbose
323
+ File.open(key,"w") do |f|
324
+ 1.upto(value.to_i) do |step|
325
+ f.write(File.open("#{key}_#{step}_#{value}").read)
326
+ File.unlink("#{key}_#{step}_#{value}")
327
+ end
328
+ end
329
+ end
330
+ return file_list
331
+ end
307
332
 
308
333
 
309
334
 
310
335
  def rm_file(target_folder = "INBOX", glob = /.+/, recursive = false, dot_files = false)
311
- file_list = transverse(target_folder, glob, false, dot_files, false) do |folder, file, message_id, mail, file_name|
336
+ file_list = transverse(target_folder, glob, false, dot_files, false) do |folder, file_name, message_id, mail, file_part, max_parts|
312
337
  if file && message_id
313
338
  @imap.store(message_id, "+FLAGS", [:Deleted])
314
339
  @imap.expunge
@@ -326,7 +351,7 @@ END
326
351
  folders = []
327
352
  puts "..... Deleting #{target_folder}" if @verbose
328
353
 
329
- transverse(target_folder, /.+/, recursive, dot_files, false) do |folder, file, message_id, mail, file_name|
354
+ transverse(target_folder, /.+/, recursive, dot_files, false) do |folder, file, message_id, mail, file_part, max_parts|
330
355
  puts "..... assigning dir #{folder} for removal" if @verbose
331
356
  folders << folder if !(folders.include? folder)
332
357
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jmcarbo-imapstore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.7
4
+ version: 0.4.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joan Marc Carbo Arnau
@@ -13,31 +13,31 @@ date: 2009-01-17 00:00:00 -08:00
13
13
  default_executable: imapstore
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: rdoc
16
+ name: tmail
17
17
  version_requirement:
18
18
  version_requirements: !ruby/object:Gem::Requirement
19
19
  requirements:
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 2.2.0
22
+ version: 1.2.3
23
23
  version:
24
24
  - !ruby/object:Gem::Dependency
25
- name: tmail
25
+ name: getoptions
26
26
  version_requirement:
27
27
  version_requirements: !ruby/object:Gem::Requirement
28
28
  requirements:
29
29
  - - ">="
30
30
  - !ruby/object:Gem::Version
31
- version: 1.2.3
31
+ version: "0.1"
32
32
  version:
33
33
  - !ruby/object:Gem::Dependency
34
- name: getoptions
34
+ name: rdoc
35
35
  version_requirement:
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: "0.1"
40
+ version: 2.2.0
41
41
  version:
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: newgem