imapstore 0.4.4 → 0.5.2

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/bin/imapstore CHANGED
@@ -3,17 +3,21 @@ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
3
3
 
4
4
  require 'rubygems'
5
5
  require 'imapstore'
6
+ require 'rdoc/ri/ri_paths'
6
7
  require 'getoptions'
7
8
  #old versions of ruby require this
8
- require 'rdoc/ri/ri_paths'
9
+
10
+ def print_help
11
+ puts "Usage: imapstore -c <#{COMMAND_LIST.join(', ')}> -s <subject> -d <folder> -f <file list or glob> "
12
+ puts " -i <imapstore> -x --recursive --versioned --all -t <text of message> -p password"
13
+ puts " imapstore -h"
14
+ end
9
15
 
10
16
  COMMAND_LIST = ['ls', 'rm', 'put', 'get', 'rmdir', 'mkdir', 'quota', 'setup', 'snipplet' ]
11
- opt = GetOptions.new(%w( help subject=s command=s dir=s files=@s recursive! versioned! all! imapstore:s x! text=s))
17
+ opt = GetOptions.new(%w( help password=s subject=s command=s dir=s files=@s recursive! versioned! all! imapstore:s x! text=s ))
12
18
 
13
19
  if opt['help']
14
- puts "Usage: imapstore -c <#{COMMAND_LIST.join(', ')}> -s <subject> -d <folder> -f <file list or glob> "
15
- puts " -i <imapstore> -x --recursive --versioned --all"
16
- puts " imapstore -h"
20
+ print_help
17
21
  exit 0
18
22
  end
19
23
 
@@ -27,7 +31,7 @@ all = opt['all'] || false
27
31
  versioned = opt['versioned']
28
32
  verbose = opt['x'] || false
29
33
  text = opt['text'] || "no text"
30
-
34
+ password = opt['password']
31
35
 
32
36
 
33
37
 
@@ -40,7 +44,7 @@ if COMMAND_LIST.include? command
40
44
  end
41
45
 
42
46
  puts "Opening mailstore #{imapstore} configured in #{File.expand_path('~/.imapstore/config.yml')}" if verbose
43
- i = IMAPSTORE::Imapstore.new(File.expand_path('~/.imapstore/config.yml'), imapstore)
47
+ i = IMAPSTORE::Imapstore.new(File.expand_path('~/.imapstore/config.yml'), imapstore, password)
44
48
  puts "Mailstore #{imapstore} opened" if verbose
45
49
 
46
50
  i.versioned=versioned if versioned!=nil
@@ -116,4 +120,5 @@ end
116
120
 
117
121
  rescue
118
122
  puts "An error has occured #{$!}"
123
+ print_help
119
124
  end
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.4'
7
+ VERSION = '0.5.2'
8
8
 
9
9
  end
@@ -37,11 +37,13 @@ END
37
37
  end
38
38
  end
39
39
 
40
- def initialize(file = File.expand_path('~/.imapstore/config.yml'), imapstore="default")
40
+ def initialize(file = File.expand_path('~/.imapstore/config.yml'), imapstore="default", password=nil)
41
41
  puts "Initializing IMAP" if @verbose
42
42
  @versioned = true
43
43
  @verbose = false
44
-
44
+
45
+ @password = password
46
+
45
47
  puts "Getting configuration file #{file} for account #{imapstore}" if @verbose
46
48
  get_config(file, imapstore)
47
49
  connect
@@ -84,6 +86,7 @@ END
84
86
  end
85
87
 
86
88
  def connect()
89
+ raise "No password given" if @password == nil
87
90
  if !@imap && @email && @password && @imap_server && @imap_port
88
91
  if(@ssl == true)
89
92
  @imap = Net::IMAP.new(@imap_server, @imap_port, true)
@@ -113,7 +116,7 @@ END
113
116
 
114
117
  #COFIGURATION SECTION
115
118
  @email = aConfig[imapstore]['email']
116
- @password = aConfig[imapstore]['password']
119
+ @password = aConfig[imapstore]['password'] if aConfig[imapstore]['password']
117
120
  @store_tag = aConfig[imapstore]['store_tag'] || "IMAPSTORE"
118
121
  @imap_server = aConfig[imapstore]['imap_server']
119
122
  @imap_port = aConfig[imapstore]['imap_port']
@@ -217,9 +220,9 @@ END
217
220
 
218
221
  end
219
222
 
220
- def store_file( file, folder = "INBOX", subject = "")
223
+ def store_file( file, folder = "INBOX", subject = "")
221
224
 
222
- @imap.create(folder) if !@imap.list("", folder)
225
+ @imap.create(folder) if !@imap.list("", folder)
223
226
 
224
227
  size = File.size(file)
225
228
  if(size > MAX_FILE_SIZE)
@@ -242,11 +245,7 @@ END
242
245
 
243
246
  def transverse(target_folder = "INBOX", glob = /.+/, recursive = false, dot_files = false, folder_only=false)
244
247
  file_list=[]
245
-
246
-
247
-
248
-
249
- begin
248
+ #begin
250
249
  target_folder = "" if target_folder == "/"
251
250
 
252
251
  puts "..... fetching #{target_folder} " if @verbose
@@ -258,7 +257,9 @@ END
258
257
  if ((recursive == true) && (target_folder == "" ? true : folder.name.match(/^#{target_folder}(\/.+)*$/))) || (folder.name == target_folder)
259
258
  puts "..... got hit transversing #{folder.name} " if @verbose
260
259
  file_list << folder.name
261
- yield(folder.name, nil, nil, nil, nil) if block_given?
260
+ if(block_given?)
261
+ yield(folder.name, nil, nil, nil, nil, nil)
262
+ end
262
263
 
263
264
  if((!folder.attr.include? :Noselect) && (folder_only==false))
264
265
 
@@ -268,45 +269,72 @@ END
268
269
  a = @imap.fetch(message_id, "RFC822")
269
270
  mail = TMail::Mail.parse(a[0].attr["RFC822"])
270
271
  file_name = mail.subject.match(/^[^\[]+\[([^\]]+)\]/)[1]
271
- file_list << folder.name + "/" + file_name if file_name.match(glob)
272
- yield(folder.name, file_name, message_id, mail, file_name) if block_given? && file_name.match(glob)
272
+ puts "Considering #{file_name}" if @verbose
273
+
274
+ parts = mail.subject.match(/^[^\[]+\[[^\]]+\]\(([0-9]+)\-([0-9]+)\)/)
275
+ file_part = parts[1]
276
+ max_parts = parts[2]
277
+ if file_name.match(glob)
278
+ file_list << folder.name + "/" + file_name
279
+ yield(folder.name, file_name, message_id, mail, file_part, max_parts) if block_given?
280
+ end
273
281
  end
274
282
  end
275
283
  end
276
284
  end
277
- rescue
278
- end
285
+ #rescue
286
+ #end
279
287
 
280
288
  file_list.sort
281
289
  end
282
290
 
283
- def ls(target_folder = "INBOX", glob = /.+/, recursive = false, dot_files = false)
291
+ def ls(target_folder = "INBOX", glob = /.+/, recursive = false, dot_files = false)
284
292
  transverse(target_folder, glob, recursive, dot_files, false)
285
- end
286
-
287
- def get_file(target_folder = "INBOX", glob = /.+/, recursive = false, dot_files = false)
288
- file_list = transverse(target_folder, glob, recursive, dot_files, false) do |folder, file, message_id, mail, file_name|
289
-
290
- if mail && mail.multipart? then
291
- mail.parts.each do |m|
292
- if !m.main_type
293
- append_dir = folder.sub(/^#{target_folder}\/*/,"")
294
- if append_dir != ""
295
- Dir.mkdir(append_dir) if !File.exists? append_dir
293
+ end
296
294
 
297
- file_name = append_dir + "/" + file_name
298
- end
299
- File.open(file_name,"w").write(m.body)
295
+ def get_file(target_folder = "INBOX", glob = /.+/, recursive = false, dot_files = false)
296
+ multipart_files = Hash.new
297
+ file_list = transverse(target_folder, glob, recursive, dot_files, false) do |folder, file_name, message_id, mail, file_part, max_parts|
298
+ if(file_name && mail.parts)
299
+ mail.parts.each do |m|
300
+ if !m.main_type
301
+ append_dir = folder
302
+ append_dir.sub!(/^#{target_folder}\/*/,"")
303
+ if append_dir != ""
304
+ Dir.mkdir(append_dir) if !File.exists? append_dir
305
+ file_name = append_dir + "/" + file_name
300
306
  end
301
- end
307
+
308
+ if(file_part)
309
+ multipart_files[file_name] = max_parts if !multipart_files[file_name]
310
+ file_name = file_name + "_#{file_part}_#{max_parts}"
311
+ end
312
+ puts "Getting file #{file_name}" if @verbose
313
+
314
+ File.open(file_name,"w") do |f|
315
+ f.write(m.body)
316
+ end
317
+ end
318
+ end
302
319
  end
303
320
  end
304
- end
321
+
322
+ multipart_files.each do |key,value|
323
+ puts "Fusing #{key} ---- #{value}" if @verbose
324
+ File.open(key,"w") do |f|
325
+ 1.upto(value.to_i) do |step|
326
+ f.write(File.open("#{key}_#{step}_#{value}").read)
327
+ File.unlink("#{key}_#{step}_#{value}")
328
+ end
329
+ end
330
+ end
331
+ return file_list
332
+ end
305
333
 
306
334
 
307
335
 
308
336
  def rm_file(target_folder = "INBOX", glob = /.+/, recursive = false, dot_files = false)
309
- file_list = transverse(target_folder, glob, false, dot_files, false) do |folder, file, message_id, mail, file_name|
337
+ file_list = transverse(target_folder, glob, false, dot_files, false) do |folder, file_name, message_id, mail, file_part, max_parts|
310
338
  if file && message_id
311
339
  @imap.store(message_id, "+FLAGS", [:Deleted])
312
340
  @imap.expunge
@@ -324,7 +352,7 @@ END
324
352
  folders = []
325
353
  puts "..... Deleting #{target_folder}" if @verbose
326
354
 
327
- transverse(target_folder, /.+/, recursive, dot_files, false) do |folder, file, message_id, mail, file_name|
355
+ transverse(target_folder, /.+/, recursive, dot_files, false) do |folder, file, message_id, mail, file_part, max_parts|
328
356
  puts "..... assigning dir #{folder} for removal" if @verbose
329
357
  folders << folder if !(folders.include? folder)
330
358
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: imapstore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joan Marc Carbo Arnau
@@ -9,38 +9,38 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-01-11 00:00:00 +01:00
12
+ date: 2009-01-27 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: rdoc
16
+ name: tmail
17
17
  type: :runtime
18
18
  version_requirement:
19
19
  version_requirements: !ruby/object:Gem::Requirement
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 2.2.0
23
+ version: 1.2.3
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
- name: tmail
26
+ name: getoptions
27
27
  type: :runtime
28
28
  version_requirement:
29
29
  version_requirements: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.2.3
33
+ version: "0.1"
34
34
  version:
35
35
  - !ruby/object:Gem::Dependency
36
- name: getoptions
37
- type: :runtime
36
+ name: rdoc
37
+ type: :development
38
38
  version_requirement:
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - ">="
42
42
  - !ruby/object:Gem::Version
43
- version: "0.1"
43
+ version: 2.2.0
44
44
  version:
45
45
  - !ruby/object:Gem::Dependency
46
46
  name: newgem