jmcarbo-imapstore 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,7 +6,7 @@ require 'imapstore'
6
6
  require 'getoptions'
7
7
 
8
8
  COMMAND_LIST = ['ls', 'rm', 'put', 'get', 'rmdir', 'mkdir', 'quota', 'setup' ]
9
- opt = GetOptions.new(%w(help subject=s command=s dir=s files=@s recursive! versioned! ))
9
+ opt = GetOptions.new(%w(help subject=s command=s dir=s files=@s recursive! versioned! all! ))
10
10
 
11
11
  if opt['help']
12
12
  puts "Usage: imapstore -c <#{COMMAND_LIST.join(', ')}> -s <subject> -d <folder> -f <file list or glob> "
@@ -20,8 +20,10 @@ dir = opt['dir'] || "INBOX"
20
20
  files = opt['files'] || "*"
21
21
  subject = opt['subject'] || ""
22
22
  recursive = opt['recursive'] || false
23
+ all = opt['all'] || false
23
24
  versioned = opt['versioned']
24
25
 
26
+
25
27
  begin
26
28
  if COMMAND_LIST.include? command
27
29
  if command == 'setup'
@@ -36,16 +38,23 @@ if COMMAND_LIST.include? command
36
38
  files.each do |f|
37
39
  f = /.+/ if f == '*'
38
40
 
39
- i.ls(dir, Regexp.new(f)).each do |a|
41
+ i.ls(dir, Regexp.new(f), recursive, all).each do |a|
40
42
  puts a
41
43
  end
42
44
  end
43
45
  when 'put':
46
+
44
47
  files.each do |f|
45
- Dir.glob(f) do |f2|
48
+ local_dir = File.dirname(f)
49
+ f = local_dir + "/**/" + File.basename(f) if recursive
50
+
51
+ Dir.glob(f, all==true ? File::FNM_DOTMATCH : 0) do |f2|
46
52
  if(!File.directory? f2)
47
- puts "Storing file #{f2}"
48
- i.store_file(f2,dir,subject)
53
+ remote_dir = dir
54
+ append_dir = File.dirname(f2).sub(/^#{local_dir}\/*/,"")
55
+ remote_dir = remote_dir + "/" + append_dir if append_dir != ""
56
+ puts "Storing file #{f2} in remote dir \"#{remote_dir}\""
57
+ i.store_file(f2,remote_dir,subject)
49
58
  end
50
59
  end
51
60
  end
@@ -53,7 +62,7 @@ if COMMAND_LIST.include? command
53
62
  files.each do |f|
54
63
  f = /.+/ if f == '*'
55
64
  puts "Getting files"
56
- i.get_file(dir, Regexp.new(f)).each do |a|
65
+ i.get_file(dir, Regexp.new(f), recursive, all).each do |a|
57
66
  puts a
58
67
  end
59
68
  end
@@ -61,14 +70,14 @@ if COMMAND_LIST.include? command
61
70
  files.each do |f|
62
71
  f = /.+/ if f == '*'
63
72
  puts "Deleting files"
64
- i.rm_file(dir, Regexp.new(f)).each do |a|
73
+ i.rm_file(dir, Regexp.new(f), recursive, all).each do |a|
65
74
  puts a
66
75
  end
67
76
  end
68
77
  when 'mkdir':
69
78
  i.mkdir(dir)
70
79
  when 'rmdir':
71
- i.rmdir(dir)
80
+ i.rmdir(dir, recursive, all)
72
81
  when 'quota':
73
82
  q = i.quota("INBOX")
74
83
  puts "Used #{q[1]['usage'].to_s} of #{q[1]['quota'].to_s}"
@@ -4,6 +4,6 @@ $:.unshift(File.dirname(__FILE__)) unless
4
4
  require 'imapstore/imapstore.rb'
5
5
 
6
6
  module IMAPSTORE
7
- VERSION = '0.0.1'
7
+ VERSION = '0.1.0'
8
8
 
9
9
  end
@@ -180,60 +180,63 @@ END
180
180
  store_file_chunk( file, folder, subject, content)
181
181
  end
182
182
  end
183
+
184
+ def transverse(target_folder = "INBOX", glob = /.+/, recursive = false, dot_files = false, folder_only=false)
185
+ file_list=[]
186
+
187
+ @imap.list(target_folder, "*").each do |folder|
188
+ if ((recursive == true) && (folder.name.match(/^#{target_folder}(\/.+)*$/))) || (folder.name == target_folder)
189
+ file_list << folder.name
190
+ yield(folder.name, nil, nil, nil, nil) if block_given?
191
+
192
+ if((!folder.attr.include? :Noselect) && (folder_only==false))
183
193
 
184
- def ls(folder = "INBOX", glob = /.+/)
185
- if folder == "/"
186
- return @imap.list("","*").map { |d| d.name }.sort
194
+ @imap.select(folder.name)
195
+
196
+ @imap.search(["NOT", "DELETED"]).each do |message_id|
197
+ a = @imap.fetch(message_id, "RFC822")
198
+ mail = TMail::Mail.parse(a[0].attr["RFC822"])
199
+ file_name = mail.subject.match(/^[^\[]+\[([^\]]+)\]/)[1]
200
+ file_list << folder.name + "/" + file_name if file_name.match(glob)
201
+ yield(folder.name, file_name, message_id, mail, file_name) if block_given? && file_name.match(glob)
202
+ end
203
+ end
204
+ end
187
205
  end
188
-
189
- file_list = []
190
- @imap.select(folder)
191
- @imap.search(["NOT", "DELETED"]).each do |message_id|
192
- a = @imap.fetch(message_id, "RFC822")
193
- mail = TMail::Mail.parse(a[0].attr["RFC822"])
194
- file_name = mail.subject.match(/^[^\[]+\[([^\]]+)\]/)[1]
195
- file_list << file_name if file_name.match(glob)
196
- end
197
- file_list
206
+
207
+ file_list.sort
208
+ end
209
+
210
+ def ls(target_folder = "INBOX", glob = /.+/, recursive = false, dot_files = false)
211
+ transverse(target_folder, glob, recursive, dot_files, false)
198
212
  end
199
213
 
200
- def get_file(folder = "INBOX", glob = /.+/)
201
- file_list = []
202
- @imap.select(folder)
203
- @imap.search(["NOT", "DELETED"]).each do |message_id|
204
- a = @imap.fetch(message_id, "RFC822")
205
- mail = TMail::Mail.parse(a[0].attr["RFC822"])
206
- file_name = mail.subject.match(/^[^\[]+\[([^\]]+)\]/)[1]
207
- if file_name.match(glob)
208
- if mail.multipart? then
209
- mail.parts.each do |m|
210
- if !m.main_type
211
- File.open(file_name,"w").write(m.body)
214
+ def get_file(target_folder = "INBOX", glob = /.+/, recursive = false, dot_files = false)
215
+ file_list = transverse(target_folder, glob, recursive, dot_files, false) do |folder, file, message_id, mail, file_name|
216
+
217
+ if mail && mail.multipart? then
218
+ mail.parts.each do |m|
219
+ if !m.main_type
220
+ append_dir = folder.sub(/^#{target_folder}\/*/,"")
221
+ if append_dir != ""
222
+ Dir.mkdir(append_dir) if !File.exists? append_dir
223
+
224
+ file_name = append_dir + "/" + file_name
212
225
  end
213
- end
214
- end
215
-
216
- file_list << file_name
226
+ File.open(file_name,"w").write(m.body)
227
+ end
228
+ end
217
229
  end
218
- end
219
- file_list
230
+ end
220
231
  end
221
232
 
222
233
 
223
234
 
224
- def rm_file(folder = "INBOX", glob = /.+/)
225
- file_list = []
226
-
227
- @imap.select(folder)
228
- @imap.search(["NOT", "DELETED"]).each do |message_id|
229
- a = @imap.fetch(message_id, "RFC822")
230
- mail = TMail::Mail.parse(a[0].attr["RFC822"])
231
- file_name = mail.subject.match(/^[^\[]+\[([^\]]+)\]/)[1]
232
- if glob && file_name.match(glob)
233
- @imap.store(message_id, "+FLAGS", [:Deleted])
234
- file_list << file_name
235
- end
236
- end
235
+ def rm_file(folder = "INBOX", glob = /.+/, recursive = false, dot_files = false)
236
+ file_list = transverse(target_folder, glob, recursive, dot_files, false) do |folder, file, message_id, mail, file_name|
237
+ @imap.store(message_id, "+FLAGS", [:Deleted]) if file && message_id
238
+ end
239
+
237
240
  @imap.expunge
238
241
 
239
242
  file_list
@@ -243,9 +246,11 @@ END
243
246
  @imap.create(folder)
244
247
  end
245
248
 
246
- def rmdir(folder)
247
- rm_file(folder)
248
- @imap.delete(folder)
249
+ def rmdir(folder, recursive = false, dot_files = false)
250
+ transverse(target_folder, glob, false, dot_files, true) do |folder, file, message_id, mail, file_name|
251
+ rm_file(folder)
252
+ @imap.delete(folder)
253
+ end
249
254
  end
250
255
 
251
256
  def quota(folder)
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.0.3
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joan Marc Carbo Arnau
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-01-08 00:00:00 -08:00
12
+ date: 2009-01-10 00:00:00 -08:00
13
13
  default_executable: imapstore
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -37,7 +37,7 @@ dependencies:
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 1.1.0
40
+ version: 1.2.3
41
41
  version:
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: hoe