imap-backup 7.0.2 → 8.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cb709e6431c47afc24c55d39ef7d9213fc0c27b42929c0692843a254cfd83c1d
4
- data.tar.gz: 702d93af210afa826e64c0b5b1a4d1e16780c6078201e4a8db13dd4703ac62d3
3
+ metadata.gz: 6f852c0552212ba77c4e4dda834b8727860a788ea73ecf395255c248b9f728e4
4
+ data.tar.gz: 1a33b9e2efd04d4e9dcd4e48b401d7001330de8950477947aa4547d15c9554e8
5
5
  SHA512:
6
- metadata.gz: 04a0c173fea0dd80e87443db040383402eb9eacbc7f557b4db8339cfd16c20153b068da8f4ade84d82643e3e9d3b9a76f04d654cbbc931620ef197546b24492a
7
- data.tar.gz: e3cb1c12f73c421a66e41016b826ecdf3d199fd5920f9e5cbb04e0ef41619984791c8ce436283a91e6264707b04db7ecef94703f5df9af4c64cbcbb75c0fd7d7
6
+ metadata.gz: 10ec5bf1f6426652d8b1875e1dbc4150ac7191aea988fbe2235d9966cb3394df1a6353d541f1de0c65a13c15a3b01d3502d4c36634427831244f2996a80d5bf6
7
+ data.tar.gz: eba30293362b4bc0c79e3a389cf56d3d218addec339fbc802aa245df8ef8f6f0f7b0588f6ee7ec1b5def04dbdddff39bea91370718d0dab0026cf2189474e82d
data/README.md CHANGED
@@ -80,7 +80,6 @@ Alternatively, add it to your crontab.
80
80
  * [remote folders](docs/commands/remote-folders.md)
81
81
  * [restore](docs/commands/restore.md)
82
82
  * [setup](docs/commands/setup.md)
83
- * [status](docs/commands/status.md)
84
83
  * [utils export-to-thunderbird](docs/commands/utils-export-to-thunderbird.md)
85
84
  * [utils ignore-history](docs/commands/utils-ignore-history.md)
86
85
 
@@ -1,6 +1,6 @@
1
1
  Configuration is stored in a JSON file.
2
2
 
3
- The format is documented [here](./docs/files/config.json).
3
+ The format is documented [here](files/config.md).
4
4
 
5
5
  # Folders
6
6
 
@@ -11,6 +11,8 @@ specific folders.
11
11
 
12
12
  You can override the parameters passed to `Net::IMAP` with `connection_options`.
13
13
 
14
+ See the Ruby Standard Library documentation for `Net::IMAP` of details of [supported parameters](https://ruby-doc.org/stdlib-3.1.2/libdoc/net-imap/rdoc/Net/IMAP.html#method-c-new).
15
+
14
16
  Specifically, if you are using a self-signed certificate and get SSL errors, e.g.
15
17
  `certificate verify failed`, you can choose to not verify the TLS connection.
16
18
 
@@ -27,14 +27,6 @@ module Imap::Backup
27
27
  Account::Connection::BackupFolders.new(client: client, account: account).run
28
28
  end
29
29
 
30
- def status
31
- ensure_account_folder
32
- backup_folders.map do |folder|
33
- s = Serializer.new(account.local_path, folder.name)
34
- {name: folder.name, local: s.uids, remote: folder.uids}
35
- end
36
- end
37
-
38
30
  def run_backup(refresh: false)
39
31
  Logger.logger.info "Running backup of account: #{account.username}"
40
32
  # start the connection so we get logging messages in the right order
@@ -3,21 +3,28 @@ module Imap::Backup
3
3
  include Thor::Actions
4
4
  include CLI::Helpers
5
5
 
6
- attr_reader :account_names
7
- attr_reader :refresh
6
+ attr_reader :options
8
7
 
9
8
  def initialize(options)
10
9
  super([])
11
- @account_names = (options[:accounts] || "").split(",")
12
- @refresh = options.key?(:refresh) ? !!options[:refresh] : false
10
+ @options = options
13
11
  end
14
12
 
15
13
  no_commands do
16
14
  def run
17
- each_connection(account_names) do |connection|
15
+ config = load_config(**options)
16
+ each_connection(config, emails) do |connection|
18
17
  connection.run_backup(refresh: refresh)
19
18
  end
20
19
  end
20
+
21
+ def emails
22
+ (options[:accounts] || "").split(",")
23
+ end
24
+
25
+ def refresh
26
+ options.key?(:refresh) ? !!options[:refresh] : false
27
+ end
21
28
  end
22
29
  end
23
30
  end
@@ -3,16 +3,18 @@ module Imap::Backup
3
3
  include Thor::Actions
4
4
  include CLI::Helpers
5
5
 
6
- attr_reader :account_names
6
+ attr_reader :emails
7
+ attr_reader :options
7
8
 
8
9
  def initialize(options)
9
10
  super([])
10
- @account_names = (options[:accounts] || "").split(",")
11
+ @options = options
11
12
  end
12
13
 
13
14
  no_commands do
14
15
  def run
15
- each_connection(account_names) do |connection|
16
+ config = load_config(**options)
17
+ each_connection(config, emails) do |connection|
16
18
  Kernel.puts connection.account.username
17
19
  # TODO: Make folder_names private once this command
18
20
  # has been removed.
@@ -24,6 +26,10 @@ module Imap::Backup
24
26
  folders.each { |f| Kernel.puts "\t#{f}" }
25
27
  end
26
28
  end
29
+
30
+ def emails
31
+ (options[:accounts] || "").split(",")
32
+ end
27
33
  end
28
34
  end
29
35
  end
@@ -1,10 +1,18 @@
1
1
  require "imap/backup"
2
- require "imap/backup/cli/accounts"
3
2
 
4
3
  module Imap::Backup
5
4
  module CLI::Helpers
6
5
  def self.included(base)
7
6
  base.class_eval do
7
+ def self.config_option
8
+ method_option(
9
+ "config",
10
+ type: :string,
11
+ desc: "supply the configuration file path (default: ~/.imap-backup/config.json)",
12
+ aliases: ["-c"]
13
+ )
14
+ end
15
+
8
16
  def self.verbose_option
9
17
  method_option(
10
18
  "verbose",
@@ -25,31 +33,49 @@ module Imap::Backup
25
33
  end
26
34
  end
27
35
 
36
+ def load_config(**options)
37
+ opts = symbolized(options)
38
+ path = opts[:config]
39
+ require_exists = opts.key?(:require_exists) ? opts[:require_exists] : true
40
+ if require_exists
41
+ exists = Configuration.exist?(path: path)
42
+ if !exists
43
+ expected = path || Configuration.default_pathname
44
+ raise ConfigurationNotFound, "Configuration file '#{expected}' not found"
45
+ end
46
+ end
47
+ Configuration.new(path: path)
48
+ end
49
+
28
50
  def symbolized(options)
29
51
  options.each.with_object({}) do |(k, v), acc|
30
- key = k.gsub("-", "_").intern
52
+ key =
53
+ if k.is_a?(String)
54
+ k.gsub("-", "_").intern
55
+ else
56
+ k
57
+ end
31
58
  acc[key] = v
32
59
  end
33
60
  end
34
61
 
35
- def account(email)
36
- accounts = CLI::Accounts.new
37
- account = accounts.find { |a| a.username == email }
62
+ def account(config, email)
63
+ account = config.accounts.find { |a| a.username == email }
38
64
  raise "#{email} is not a configured account" if !account
39
65
 
40
66
  account
41
67
  end
42
68
 
43
- def connection(email)
44
- account = account(email)
69
+ def connection(config, email)
70
+ account = account(config, email)
45
71
 
46
72
  Account::Connection.new(account)
47
73
  end
48
74
 
49
- def each_connection(names)
50
- accounts = CLI::Accounts.new(names)
75
+ def each_connection(config, names)
76
+ config.accounts.each do |account|
77
+ next if names.any? && !names.include?(account.username)
51
78
 
52
- accounts.each do |account|
53
79
  yield account.connection
54
80
  end
55
81
  rescue ConfigurationNotFound
@@ -1,5 +1,3 @@
1
- require "imap/backup/cli/accounts"
2
-
3
1
  module Imap::Backup
4
2
  class CLI::Local < Thor
5
3
  include Thor::Actions
@@ -8,14 +6,17 @@ module Imap::Backup
8
6
  MAX_SUBJECT = 60
9
7
 
10
8
  desc "accounts", "List locally backed-up accounts"
9
+ config_option
11
10
  def accounts
12
- accounts = CLI::Accounts.new
13
- accounts.each { |a| Kernel.puts a.username }
11
+ config = load_config(**symbolized(options))
12
+ config.accounts.each { |a| Kernel.puts a.username }
14
13
  end
15
14
 
16
15
  desc "folders EMAIL", "List backed up folders"
16
+ config_option
17
17
  def folders(email)
18
- connection = connection(email)
18
+ config = load_config(**symbolized(options))
19
+ connection = connection(config, email)
19
20
 
20
21
  connection.local_folders.each do |_s, f|
21
22
  Kernel.puts %("#{f.name}")
@@ -23,8 +24,10 @@ module Imap::Backup
23
24
  end
24
25
 
25
26
  desc "list EMAIL FOLDER", "List emails in a folder"
27
+ config_option
26
28
  def list(email, folder_name)
27
- connection = connection(email)
29
+ config = load_config(**symbolized(options))
30
+ connection = connection(config, email)
28
31
 
29
32
  folder_serializer, _folder = connection.local_folders.find do |(_s, f)|
30
33
  f.name == folder_name
@@ -50,8 +53,10 @@ module Imap::Backup
50
53
  If more than one UID is given, they are separated by a header indicating
51
54
  the UID.
52
55
  DESC
56
+ config_option
53
57
  def show(email, folder_name, uids)
54
- connection = connection(email)
58
+ config = load_config(**symbolized(options))
59
+ connection = connection(config, email)
55
60
 
56
61
  folder_serializer, _folder = connection.local_folders.find do |(_s, f)|
57
62
  f.name == folder_name
@@ -3,9 +3,11 @@ require "imap/backup/migrator"
3
3
  module Imap::Backup
4
4
  class CLI::Migrate < Thor
5
5
  include Thor::Actions
6
+ include CLI::Helpers
6
7
 
7
8
  attr_reader :destination_email
8
9
  attr_reader :destination_prefix
10
+ attr_reader :config_path
9
11
  attr_reader :reset
10
12
  attr_reader :source_email
11
13
  attr_reader :source_prefix
@@ -13,6 +15,7 @@ module Imap::Backup
13
15
  def initialize(
14
16
  source_email,
15
17
  destination_email,
18
+ config: nil,
16
19
  destination_prefix: "",
17
20
  reset: false,
18
21
  source_prefix: ""
@@ -20,6 +23,7 @@ module Imap::Backup
20
23
  super([])
21
24
  @destination_email = destination_email
22
25
  @destination_prefix = destination_prefix
26
+ @config_path = config
23
27
  @reset = reset
24
28
  @source_email = source_email
25
29
  @source_prefix = source_prefix
@@ -44,7 +48,7 @@ module Imap::Backup
44
48
  end
45
49
 
46
50
  def config
47
- Configuration.new
51
+ @config ||= load_config(config: config_path)
48
52
  end
49
53
 
50
54
  def destination_account
@@ -3,21 +3,25 @@ require "imap/backup/mirror"
3
3
  module Imap::Backup
4
4
  class CLI::Mirror < Thor
5
5
  include Thor::Actions
6
+ include CLI::Helpers
6
7
 
7
8
  attr_reader :destination_email
8
9
  attr_reader :destination_prefix
10
+ attr_reader :config_path
9
11
  attr_reader :source_email
10
12
  attr_reader :source_prefix
11
13
 
12
14
  def initialize(
13
15
  source_email,
14
16
  destination_email,
17
+ config: nil,
15
18
  destination_prefix: "",
16
19
  source_prefix: ""
17
20
  )
18
21
  super([])
19
22
  @destination_email = destination_email
20
23
  @destination_prefix = destination_prefix
24
+ @config_path = config
21
25
  @source_email = source_email
22
26
  @source_prefix = source_prefix
23
27
  end
@@ -27,7 +31,7 @@ module Imap::Backup
27
31
  check_accounts!
28
32
  warn_if_source_account_is_not_in_mirror_mode
29
33
 
30
- CLI::Backup.new(accounts: source_email).run
34
+ CLI::Backup.new(config: config_path, accounts: source_email).run
31
35
 
32
36
  folders.each do |serializer, folder|
33
37
  Mirror.new(serializer, folder).run
@@ -54,7 +58,7 @@ module Imap::Backup
54
58
  end
55
59
 
56
60
  def config
57
- Configuration.new
61
+ @config = load_config(config: config_path)
58
62
  end
59
63
 
60
64
  def destination_account
@@ -4,8 +4,12 @@ module Imap::Backup
4
4
  include CLI::Helpers
5
5
 
6
6
  desc "folders EMAIL", "List account folders"
7
+ config_option
8
+ verbose_option
9
+ quiet_option
7
10
  def folders(email)
8
- connection = connection(email)
11
+ config = load_config(**symbolized(options))
12
+ connection = connection(config, email)
9
13
 
10
14
  connection.folder_names.each do |name|
11
15
  Kernel.puts %("#{name}")
@@ -4,33 +4,38 @@ module Imap::Backup
4
4
  include CLI::Helpers
5
5
 
6
6
  attr_reader :email
7
- attr_reader :account_names
7
+ attr_reader :options
8
8
 
9
9
  def initialize(email = nil, options)
10
10
  super([])
11
11
  @email = email
12
- @account_names = options[:accounts].split(",") if options.key?(:accounts)
12
+ @options = options
13
13
  end
14
14
 
15
15
  no_commands do
16
16
  def run
17
+ config = load_config(**options)
17
18
  case
18
- when email && !account_names
19
- connection = connection(email)
19
+ when email && !emails
20
+ connection = connection(config, email)
20
21
  connection.restore
21
- when !email && !account_names
22
+ when !email && !emails
22
23
  Logger.logger.info "Calling restore without an EMAIL parameter is deprecated"
23
- each_connection([], &:restore)
24
- when email && account_names.any?
24
+ each_connection(config, [], &:restore)
25
+ when email && emails.any?
25
26
  raise "Pass either an email or the --accounts option, not both"
26
- when account_names.any?
27
+ when emails.any?
27
28
  Logger.logger.info(
28
29
  "Calling restore with the --account option is deprected, " \
29
30
  "please pass a single EMAIL argument"
30
31
  )
31
- each_connection(account_names, &:restore)
32
+ each_connection(config, emails, &:restore)
32
33
  end
33
34
  end
35
+
36
+ def emails
37
+ @emails ||= options[:accounts].split(",") if options.key?(:accounts)
38
+ end
34
39
  end
35
40
  end
36
41
  end
@@ -1,14 +1,19 @@
1
1
  module Imap::Backup
2
2
  class CLI::Setup < Thor
3
3
  include Thor::Actions
4
+ include CLI::Helpers
4
5
 
5
- def initialize
6
+ attr_reader :options
7
+
8
+ def initialize(options)
6
9
  super([])
10
+ @options = options
7
11
  end
8
12
 
9
13
  no_commands do
10
14
  def run
11
- Setup.new.run
15
+ config = load_config(**options, require_exists: false)
16
+ Setup.new(config: config).run
12
17
  end
13
18
  end
14
19
  end
@@ -14,7 +14,7 @@ module Imap::Backup
14
14
  attr_reader :email
15
15
  attr_reader :options
16
16
 
17
- def initialize(email, options = {})
17
+ def initialize(email, options)
18
18
  super([])
19
19
  @email = email
20
20
  @options = options
@@ -31,7 +31,8 @@ module Imap::Backup
31
31
  end
32
32
 
33
33
  def stats
34
- connection = connection(email)
34
+ config = load_config(**options)
35
+ connection = connection(config, email)
35
36
 
36
37
  connection.backup_folders.map do |folder|
37
38
  next if !folder.exist?
@@ -11,8 +11,10 @@ module Imap::Backup
11
11
  verbose_option
12
12
  quiet_option
13
13
  def ignore_history(email)
14
- Imap::Backup::Logger.setup_logging symbolized(options)
15
- connection = connection(email)
14
+ opts = symbolized(options)
15
+ Imap::Backup::Logger.setup_logging opts
16
+ config = load_config(**opts)
17
+ connection = connection(config, email)
16
18
 
17
19
  connection.backup_folders.each do |folder|
18
20
  next if !folder.exist?
@@ -49,7 +51,8 @@ module Imap::Backup
49
51
  force = opts.key?(:force) ? opts[:force] : false
50
52
  profile_name = opts[:profile]
51
53
 
52
- connection = connection(email)
54
+ config = load_config(**opts)
55
+ connection = connection(config, email)
53
56
  profile = thunderbird_profile(profile_name)
54
57
 
55
58
  if !profile
@@ -16,7 +16,6 @@ module Imap::Backup
16
16
  autoload :Restore, "imap/backup/cli/restore"
17
17
  autoload :Setup, "imap/backup/cli/setup"
18
18
  autoload :Stats, "imap/backup/cli/stats"
19
- autoload :Status, "imap/backup/cli/status"
20
19
  autoload :Utils, "imap/backup/cli/utils"
21
20
 
22
21
  include Helpers
@@ -45,6 +44,7 @@ module Imap::Backup
45
44
  The setup tool can be used to choose a specific list of folders to back up.
46
45
  DESC
47
46
  accounts_option
47
+ config_option
48
48
  verbose_option
49
49
  quiet_option
50
50
  method_option(
@@ -66,6 +66,7 @@ module Imap::Backup
66
66
  and `imap-backup remote folders ACCOUNT` to get the folder list.
67
67
  DESC
68
68
  accounts_option
69
+ config_option
69
70
  def folders
70
71
  Folders.new(symbolized(options)).run
71
72
  end
@@ -96,6 +97,7 @@ module Imap::Backup
96
97
  use the `--reset` option. In this case, all existing emails are
97
98
  deleted before uploading the migrated emails.
98
99
  DESC
100
+ config_option
99
101
  verbose_option
100
102
  quiet_option
101
103
  method_option(
@@ -141,6 +143,7 @@ module Imap::Backup
141
143
  This file has a '.mirror' extension. This file contains a mapping of
142
144
  the known UIDs on the source account to those on the destination account.
143
145
  DESC
146
+ config_option
144
147
  verbose_option
145
148
  quiet_option
146
149
  method_option(
@@ -169,6 +172,7 @@ module Imap::Backup
169
172
  their original server.
170
173
  DESC
171
174
  accounts_option
175
+ config_option
172
176
  verbose_option
173
177
  quiet_option
174
178
  def restore(email = nil)
@@ -181,11 +185,12 @@ module Imap::Backup
181
185
  A menu-driven command-line application used to configure imap-backup.
182
186
  Configure email accounts to back up.
183
187
  DESC
188
+ config_option
184
189
  verbose_option
185
190
  quiet_option
186
191
  def setup
187
192
  Imap::Backup::Logger.setup_logging symbolized(options)
188
- Setup.new.run
193
+ Setup.new(symbolized(options)).run
189
194
  end
190
195
 
191
196
  desc "stats EMAIL [OPTIONS]", "Print stats for each account folder"
@@ -194,6 +199,9 @@ module Imap::Backup
194
199
  are downloaded (exist on server and locally) "both" and those which
195
200
  are only present in the backup (as they have been deleted on the server) "local".
196
201
  DESC
202
+ config_option
203
+ verbose_option
204
+ quiet_option
197
205
  method_option(
198
206
  "format",
199
207
  type: :string,
@@ -201,19 +209,10 @@ module Imap::Backup
201
209
  aliases: ["-f"]
202
210
  )
203
211
  def stats(email)
212
+ Imap::Backup::Logger.setup_logging symbolized(options)
204
213
  Stats.new(email, symbolized(options)).run
205
214
  end
206
215
 
207
- desc "status", "This command is deprecated, use `imap-backup stats ACCOUNT`"
208
- long_desc <<~DESC
209
- For each configured account and folder, lists the number of emails yet to be downloaded.
210
- This command is deprecated.
211
- DESC
212
- accounts_option
213
- def status
214
- Status.new(symbolized(options)).run
215
- end
216
-
217
216
  desc "utils SUBCOMMAND [OPTIONS]", "Various utilities"
218
217
  subcommand "utils", Utils
219
218
  end
@@ -14,12 +14,12 @@ module Imap::Backup
14
14
  File.join(CONFIGURATION_DIRECTORY, "config.json")
15
15
  end
16
16
 
17
- def self.exist?(pathname = default_pathname)
18
- File.exist?(pathname)
17
+ def self.exist?(path: nil)
18
+ File.exist?(path || default_pathname)
19
19
  end
20
20
 
21
- def initialize(pathname = self.class.default_pathname)
22
- @pathname = pathname
21
+ def initialize(path: nil)
22
+ @pathname = path || self.class.default_pathname
23
23
  end
24
24
 
25
25
  def path
@@ -11,6 +11,12 @@ module Imap::Backup
11
11
  end
12
12
  self.highline = HighLine.new
13
13
 
14
+ attr_accessor :config
15
+
16
+ def initialize(config:)
17
+ @config = config
18
+ end
19
+
14
20
  def run
15
21
  catch :done do
16
22
  loop do
@@ -62,10 +68,6 @@ module Imap::Backup
62
68
  end
63
69
  end
64
70
 
65
- def config
66
- @config ||= Configuration.new
67
- end
68
-
69
71
  def default_account_config(username)
70
72
  Imap::Backup::Account.new(
71
73
  username: username,
@@ -1,9 +1,9 @@
1
1
  module Imap; end
2
2
 
3
3
  module Imap::Backup
4
- MAJOR = 7
4
+ MAJOR = 8
5
5
  MINOR = 0
6
- REVISION = 2
7
- PRE = nil
6
+ REVISION = 0
7
+ PRE = "rc1".freeze
8
8
  VERSION = [MAJOR, MINOR, REVISION, PRE].compact.map(&:to_s).join(".")
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: imap-backup
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.0.2
4
+ version: 8.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe Yates
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-17 00:00:00.000000000 Z
11
+ date: 2022-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: highline
@@ -239,7 +239,6 @@ files:
239
239
  - lib/imap/backup/account/connection/folder_names.rb
240
240
  - lib/imap/backup/account/folder.rb
241
241
  - lib/imap/backup/cli.rb
242
- - lib/imap/backup/cli/accounts.rb
243
242
  - lib/imap/backup/cli/backup.rb
244
243
  - lib/imap/backup/cli/folders.rb
245
244
  - lib/imap/backup/cli/helpers.rb
@@ -250,7 +249,6 @@ files:
250
249
  - lib/imap/backup/cli/restore.rb
251
250
  - lib/imap/backup/cli/setup.rb
252
251
  - lib/imap/backup/cli/stats.rb
253
- - lib/imap/backup/cli/status.rb
254
252
  - lib/imap/backup/cli/utils.rb
255
253
  - lib/imap/backup/client/apple_mail.rb
256
254
  - lib/imap/backup/client/default.rb
@@ -302,9 +300,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
302
300
  version: '2.6'
303
301
  required_rubygems_version: !ruby/object:Gem::Requirement
304
302
  requirements:
305
- - - ">="
303
+ - - ">"
306
304
  - !ruby/object:Gem::Version
307
- version: '0'
305
+ version: 1.3.1
308
306
  requirements: []
309
307
  rubygems_version: 3.3.7
310
308
  signing_key:
@@ -1,43 +0,0 @@
1
- module Imap::Backup
2
- class CLI; end
3
-
4
- class CLI::Accounts
5
- include Enumerable
6
-
7
- attr_reader :required_accounts
8
-
9
- def initialize(required_accounts = [])
10
- @required_accounts = required_accounts
11
- end
12
-
13
- def each(&block)
14
- return enum_for(:each) if !block
15
-
16
- accounts.each(&block)
17
- end
18
-
19
- private
20
-
21
- def accounts
22
- @accounts ||=
23
- if required_accounts.empty?
24
- config.accounts
25
- else
26
- config.accounts.select do |account|
27
- required_accounts.include?(account.username)
28
- end
29
- end
30
- end
31
-
32
- def config
33
- @config ||= begin
34
- exists = Configuration.exist?
35
- if !exists
36
- path = Configuration.default_pathname
37
- raise ConfigurationNotFound, "Configuration file '#{path}' not found"
38
- end
39
- Configuration.new
40
- end
41
- end
42
- end
43
- end
@@ -1,26 +0,0 @@
1
- module Imap::Backup
2
- class CLI::Status < Thor
3
- include Thor::Actions
4
- include CLI::Helpers
5
-
6
- attr_reader :account_names
7
-
8
- def initialize(options)
9
- super([])
10
- @account_names = (options[:accounts] || "").split(",")
11
- end
12
-
13
- no_commands do
14
- def run
15
- each_connection(account_names) do |connection|
16
- Kernel.puts connection.account.username
17
- folders = connection.status
18
- folders.each do |f|
19
- missing_locally = f[:remote] - f[:local]
20
- Kernel.puts "#{f[:name]}: #{missing_locally.size}"
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end