imapget 0.1.0 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 24c3643da9e9ab040c44f280b07e4f8e9f654ce5
4
- data.tar.gz: 99b0c5f0416b2a32ed7cafce338a31155d568a79
2
+ SHA256:
3
+ metadata.gz: fe656b65453bccee9c4e108fa5c88f00647beeaccaae7b579cf5892f9e8c4236
4
+ data.tar.gz: d3a01358001af8415f4aff124863f7f5cc59008408cf14a8c2f034298eb043c4
5
5
  SHA512:
6
- metadata.gz: b16c28b4d1b57ead67cdc88caaff2de8fad7e687ba3f98e72ae124cefb0e3d981ff152f04c0e9e142314ac3e58073306f57c39998ba6648e295df150a30e1400
7
- data.tar.gz: 357e07e15487f26cea34867070bae2bc505e416c736a1e8ee842c6e89da80cde11386cdc2c192dc1dcb2e400666f86836817600f2af56401ce7b761b4b098260
6
+ metadata.gz: 431bc3e4b193c523cc044fcba3c5c49ca8d18daeabd28387170e5eabede4cf674fdec6eb8b95a7fe59bee399b85ef23daa0dd32ee8d15319333f4038a1863a37
7
+ data.tar.gz: 5a06d9e2e9898dc41bc1ada7ef41c083683d94bb7c5e34ab92c2bc6f5e778d9dcb9d1531123f73d5b91e0a9a434fe89412b9ec8b69d670dc743f9dd2e0bae29b
data/ChangeLog CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  = Revision history for imapget
4
4
 
5
+ == 0.3.0 [2022-08-19]
6
+
7
+ * Introduced default config section.
8
+ * Switched config to strings.
9
+
10
+ == 0.2.1 [2016-03-25]
11
+
12
+ * Fixed regression introduced in 0.2.0.
13
+
14
+ == 0.2.0 [2016-02-13]
15
+
16
+ * Fixed batch fetching.
17
+ * Internal refactoring.
18
+
5
19
  == 0.1.0 [2014-04-14]
6
20
 
7
21
  * Added options <tt>--dupes</tt> and <tt>--uniq</tt>.
data/README CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  == VERSION
4
4
 
5
- This documentation refers to imapget version 0.1.0
5
+ This documentation refers to imapget version 0.3.0
6
6
 
7
7
 
8
8
  == DESCRIPTION
@@ -14,7 +14,7 @@ server! Thus, it's different from your typical *sync* tool.
14
14
 
15
15
  == LINKS
16
16
 
17
- Documentation:: https://blackwinter.github.io/imapget/
17
+ Documentation:: https://blackwinter.github.io/imapget
18
18
  Source code:: https://github.com/blackwinter/imapget
19
19
  RubyGem:: https://rubygems.org/gems/imapget
20
20
 
@@ -26,7 +26,7 @@ RubyGem:: https://rubygems.org/gems/imapget
26
26
 
27
27
  == LICENSE AND COPYRIGHT
28
28
 
29
- Copyright (C) 2009-2014 Jens Wille
29
+ Copyright (C) 2009-2022 Jens Wille
30
30
 
31
31
  imapget is free software: you can redistribute it and/or modify it under
32
32
  the terms of the GNU Affero General Public License as published by the Free
data/Rakefile CHANGED
@@ -1,4 +1,4 @@
1
- require File.expand_path(%q{../lib/imapget/version}, __FILE__)
1
+ require_relative 'lib/imapget/version'
2
2
 
3
3
  begin
4
4
  require 'hen'
@@ -13,9 +13,9 @@ begin
13
13
  email: %q{jens.wille@gmail.com},
14
14
  license: %q{AGPL-3.0},
15
15
  homepage: :blackwinter,
16
- dependencies: %w[cyclops] << ['ruby-nuggets', '>= 0.9.8'],
16
+ dependencies: { cyclops: '~> 0.3', nuggets: '~> 1.5' },
17
17
 
18
- required_ruby_version: '>= 1.9.3'
18
+ required_ruby_version: '>= 2.1'
19
19
  }
20
20
  }}
21
21
  rescue LoadError => err
data/example/config.yaml CHANGED
@@ -1,27 +1,28 @@
1
1
  ### Global settings
2
2
 
3
- :base_dir: /var/backup/mail # Point to storage location or specify on command-line.
4
- :strategy: :exclude # This is the default strategy.
3
+ default_config:
4
+ base_dir: /var/backup/mail # Point to storage location or specify on command-line.
5
+ strategy: exclude # This is the default strategy.
5
6
 
6
7
 
7
8
  ### Profiles
8
9
 
9
10
  # Get all mailboxes (via SSL), *except* Spam and Trash.
10
11
  you-1:
11
- :host: imap.example.com
12
- :port: 123
13
- :ssl: true
14
- :user: login
15
- :exclude:
12
+ host: imap.example.com
13
+ port: 123
14
+ ssl: true
15
+ user: login
16
+ exclude:
16
17
  - Spam
17
18
  - Trash
18
19
 
19
20
  # Get *only* mailboxes INBOX, Sent, and Drafts.
20
21
  you-2:
21
- :host: imap.example.com
22
- :user: login2
23
- :strategy: :include
24
- :include:
22
+ host: imap.example.com
23
+ user: login2
24
+ strategy: include
25
+ include:
25
26
  - INBOX
26
27
  - Sent
27
28
  - Drafts
data/lib/imapget/cli.rb CHANGED
@@ -50,7 +50,7 @@ class IMAPGet
50
50
  end
51
51
 
52
52
  def run(arguments)
53
- profiles, default_config = config.partition { |k,| k.is_a?(String) }
53
+ default_config, profiles = config.delete(:default_config), config.to_a
54
54
 
55
55
  (arguments.empty? ? profiles.map(&:first) : arguments).each { |profile|
56
56
  profile_config = profile_config(profile, profiles, default_config) or next
@@ -67,7 +67,7 @@ class IMAPGet
67
67
  } }
68
68
  else
69
69
  imapget.get(options[:directory] ||
70
- File.join(profile_config[:base_dir] || '.', profile))
70
+ File.join(profile_config[:base_dir] || '.', profile.to_s))
71
71
  end
72
72
  }
73
73
  end
@@ -3,7 +3,7 @@ class IMAPGet
3
3
  module Version
4
4
 
5
5
  MAJOR = 0
6
- MINOR = 1
6
+ MINOR = 3
7
7
  TINY = 0
8
8
 
9
9
  class << self
data/lib/imapget.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  # #
4
4
  # imapget -- Download IMAP mails #
5
5
  # #
6
- # Copyright (C) 2009-2014 Jens Wille #
6
+ # Copyright (C) 2009-2016 Jens Wille #
7
7
  # #
8
8
  # Authors: #
9
9
  # Jens Wille <jens.wille@gmail.com> #
@@ -68,7 +68,7 @@ class IMAPGet
68
68
  end)
69
69
  }
70
70
 
71
- @strategy = options.fetch(:strategy, DEFAULT_STRATEGY)
71
+ @strategy = options.fetch(:strategy, DEFAULT_STRATEGY).to_sym
72
72
  end
73
73
 
74
74
  def mailboxes
@@ -90,9 +90,12 @@ class IMAPGet
90
90
  else raise TypeError, "MailboxList or String expected, got #{mailbox.class}"
91
91
  end
92
92
 
93
+ _excl = excl && name =~ excl
94
+ _incl = incl && name =~ incl
95
+
93
96
  case strategy
94
- when :include then (excl && name =~ excl) || !(incl && name =~ incl)
95
- when :exclude then (excl && name =~ excl) && !(incl && name =~ incl)
97
+ when :include then _excl || !_incl
98
+ when :exclude then _excl && !_incl
96
99
  end
97
100
  end
98
101
 
@@ -130,26 +133,23 @@ class IMAPGet
130
133
  }
131
134
  }
132
135
 
133
- dupes = hash.flat_map { |_, uids| uids.drop(1) if uids.size > 1 }.compact
134
-
135
- log "#{name}: #{dupes.size}" unless quiet
136
-
137
- dupes
136
+ hash.flat_map { |_, uids| uids.drop(1) if uids.size > 1 }.tap { |dupes|
137
+ dupes.compact!; log "#{name}: #{dupes.size}" unless quiet
138
+ }
138
139
  end
139
140
 
140
141
  def delete!(name, uids)
141
- unless uids.empty?
142
- log "#{name}: #{uids.size}"
142
+ return if uids.empty?
143
143
 
144
- yield if block_given?
144
+ log "#{name}: #{uids.size}"
145
145
 
146
- imap.select(name)
147
- count = imap.store(uids, '+FLAGS', [Net::IMAP::DELETED]).size
146
+ yield if block_given?
148
147
 
149
- log "#{count} DELETED!"
148
+ imap.select(name)
150
149
 
151
- count
152
- end
150
+ imap.store(uids, '+FLAGS', [Net::IMAP::DELETED]).size.tap { |count|
151
+ log "#{count} DELETED!"
152
+ }
153
153
  end
154
154
 
155
155
  def uniq!(name, &block)
@@ -169,22 +169,21 @@ class IMAPGet
169
169
  end
170
170
 
171
171
  def fetch_batch(batch, fetch_attr = FETCH_ATTR, &block)
172
- if batch.size == 1
173
- case set = batch.first
174
- when Array
175
- batch = set.first .. (set.first + set.last - 1)
176
- when Range
177
- batch = set.first .. (set.last - 1) if set.exclude_end?
178
- end
179
- end
172
+ case set = batch.first
173
+ when Array
174
+ batch = set.first .. (set.first + set.last - 1)
175
+ when Range
176
+ batch = set.first .. (set.last - 1) if set.exclude_end?
177
+ end if batch.size == 1
180
178
 
181
- imap.uid_fetch(batch, fetch_attr).each(&block)
179
+ mails = imap.uid_fetch(batch, fetch_attr)
180
+ mails.each(&block) if mails
182
181
  end
183
182
 
184
183
  def fetch(mail, dir, name)
185
184
  uid = mail.attr['UID'].to_s
186
185
  file = File.join(dir, uid)
187
- exists = File.exists?(file)
186
+ exists = File.exist?(file)
188
187
 
189
188
  if deleted?(mail)
190
189
  if exists
metadata CHANGED
@@ -1,57 +1,63 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: imapget
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jens Wille
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-14 00:00:00.000000000 Z
11
+ date: 2022-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cyclops
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '0.3'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '0.3'
27
27
  - !ruby/object:Gem::Dependency
28
- name: ruby-nuggets
28
+ name: nuggets
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.9.8
33
+ version: '1.5'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.9.8
40
+ version: '1.5'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: hen
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.9'
45
48
  - - ">="
46
49
  - !ruby/object:Gem::Version
47
- version: '0'
50
+ version: 0.9.1
48
51
  type: :development
49
52
  prerelease: false
50
53
  version_requirements: !ruby/object:Gem::Requirement
51
54
  requirements:
55
+ - - "~>"
56
+ - !ruby/object:Gem::Version
57
+ version: '0.9'
52
58
  - - ">="
53
59
  - !ruby/object:Gem::Version
54
- version: '0'
60
+ version: 0.9.1
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: rake
57
63
  requirement: !ruby/object:Gem::Requirement
@@ -91,19 +97,14 @@ licenses:
91
97
  metadata: {}
92
98
  post_install_message: |2+
93
99
 
94
- imapget-0.1.0 [2014-04-14]:
100
+ imapget-0.3.0 [2022-08-19]:
95
101
 
96
- * Added options <tt>--dupes</tt> and <tt>--uniq</tt>.
97
- * Added STARTTLS support.
98
- * Added LOGIN as fallback for AUTHENTICATE.
99
- * Added +batch_size+ option.
100
- * Dropped +use_ssl+ options; use +ssl+ instead.
101
- * Dropped support for Ruby 1.8.
102
- * Internal refactoring.
102
+ * Introduced default config section.
103
+ * Switched config to strings.
103
104
 
104
105
  rdoc_options:
105
106
  - "--title"
106
- - imapget Application documentation (v0.1.0)
107
+ - imapget Application documentation (v0.3.0)
107
108
  - "--charset"
108
109
  - UTF-8
109
110
  - "--line-numbers"
@@ -116,16 +117,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
116
117
  requirements:
117
118
  - - ">="
118
119
  - !ruby/object:Gem::Version
119
- version: 1.9.3
120
+ version: '2.1'
120
121
  required_rubygems_version: !ruby/object:Gem::Requirement
121
122
  requirements:
122
123
  - - ">="
123
124
  - !ruby/object:Gem::Version
124
125
  version: '0'
125
126
  requirements: []
126
- rubyforge_project:
127
- rubygems_version: 2.2.2
128
- signing_key:
127
+ rubygems_version: 3.3.5
128
+ signing_key:
129
129
  specification_version: 4
130
130
  summary: Get IMAP mails.
131
131
  test_files: []
132
+ ...