imapstore 0.4.4 → 0.5.2

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/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