jmcarbo-imapstore 0.0.3 → 0.1.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/bin/imapstore +17 -8
- data/lib/imapstore.rb +1 -1
- data/lib/imapstore/imapstore.rb +52 -47
- metadata +3 -3
data/bin/imapstore
CHANGED
@@ -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
|
-
|
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
|
-
|
48
|
-
|
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}"
|
data/lib/imapstore.rb
CHANGED
data/lib/imapstore/imapstore.rb
CHANGED
@@ -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
|
-
|
185
|
-
|
186
|
-
|
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
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
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(
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
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
|
-
|
214
|
-
|
215
|
-
|
216
|
-
file_list << file_name
|
226
|
+
File.open(file_name,"w").write(m.body)
|
227
|
+
end
|
228
|
+
end
|
217
229
|
end
|
218
|
-
|
219
|
-
file_list
|
230
|
+
end
|
220
231
|
end
|
221
232
|
|
222
233
|
|
223
234
|
|
224
|
-
def rm_file(folder = "INBOX", glob =
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
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
|
-
|
248
|
-
|
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
|
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-
|
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.
|
40
|
+
version: 1.2.3
|
41
41
|
version:
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: hoe
|