imap-backup 7.0.2 → 8.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +5 -3
- data/docs/configuration.md +3 -1
- data/lib/imap/backup/account/connection/backup_folders.rb +13 -3
- data/lib/imap/backup/account/connection.rb +2 -6
- data/lib/imap/backup/account/folder.rb +5 -5
- data/lib/imap/backup/account.rb +13 -1
- data/lib/imap/backup/cli/backup.rb +12 -5
- data/lib/imap/backup/cli/helpers.rb +56 -18
- data/lib/imap/backup/cli/local.rb +91 -33
- data/lib/imap/backup/cli/migrate.rb +5 -1
- data/lib/imap/backup/cli/mirror.rb +6 -2
- data/lib/imap/backup/cli/remote.rb +95 -3
- data/lib/imap/backup/cli/restore.rb +14 -9
- data/lib/imap/backup/cli/setup.rb +7 -2
- data/lib/imap/backup/cli/stats.rb +3 -2
- data/lib/imap/backup/cli/utils.rb +13 -10
- data/lib/imap/backup/cli.rb +26 -46
- data/lib/imap/backup/client/default.rb +1 -1
- data/lib/imap/backup/configuration.rb +4 -4
- data/lib/imap/backup/downloader.rb +1 -1
- data/lib/imap/backup/mirror.rb +1 -1
- data/lib/imap/backup/setup/account/header.rb +86 -35
- data/lib/imap/backup/setup/account.rb +16 -14
- data/lib/imap/backup/setup.rb +6 -4
- data/lib/imap/backup/version.rb +2 -2
- metadata +2 -5
- data/lib/imap/backup/cli/accounts.rb +0 -43
- data/lib/imap/backup/cli/folders.rb +0 -29
- data/lib/imap/backup/cli/status.rb +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ccb9808337c50af0fe59f2cdc85dedcbab50b5b0980a60e2ccf10fc3734b9f37
|
4
|
+
data.tar.gz: e0b67bd5bfb040220f54c9a662c90ad545fce9c84a5fadaf6d93a485ac865ffc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4070e85e86a627a0791924cba209d044dd71fd54a7d0d79a7c34b9aade4d4827ae020ed3a78d5e4169d0d8aa188ce34741f5a6a44d4f0ae1b035e6bbead30df8
|
7
|
+
data.tar.gz: b20ac83f5bffea68ab4dd3ae12fcef6df78cb20aab136864ba97e23ddaa414fe344e122d430bf1de242e393e50ccef916ee4e1fba77353836aee9e148c5a3da8
|
data/README.md
CHANGED
@@ -70,7 +70,6 @@ Alternatively, add it to your crontab.
|
|
70
70
|
# Commands
|
71
71
|
|
72
72
|
* [backup](docs/commands/backup.md)
|
73
|
-
* [folders](docs/commands/folders.md)
|
74
73
|
* [local accounts](docs/commands/local-accounts.md)
|
75
74
|
* [local folders](docs/commands/local-folders.md)
|
76
75
|
* [local list](docs/commands/local-list.md)
|
@@ -80,7 +79,6 @@ Alternatively, add it to your crontab.
|
|
80
79
|
* [remote folders](docs/commands/remote-folders.md)
|
81
80
|
* [restore](docs/commands/restore.md)
|
82
81
|
* [setup](docs/commands/setup.md)
|
83
|
-
* [status](docs/commands/status.md)
|
84
82
|
* [utils export-to-thunderbird](docs/commands/utils-export-to-thunderbird.md)
|
85
83
|
* [utils ignore-history](docs/commands/utils-ignore-history.md)
|
86
84
|
|
@@ -105,4 +103,8 @@ If you have problems:
|
|
105
103
|
|
106
104
|
# Development
|
107
105
|
|
108
|
-
See the [Development documentation](./docs/development.md)
|
106
|
+
See the [Development documentation](./docs/development.md) for notes
|
107
|
+
on development and testing.
|
108
|
+
|
109
|
+
See [the CHANGELOG](./CHANGELOG.md) to a list of changes that have been
|
110
|
+
made in each release.
|
data/docs/configuration.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Configuration is stored in a JSON file.
|
2
2
|
|
3
|
-
The format is documented [here](
|
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
|
|
@@ -12,16 +12,26 @@ module Imap::Backup
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def run
|
15
|
+
all_names = Account::Connection::FolderNames.new(client: client, account: account).run
|
16
|
+
|
15
17
|
names =
|
16
18
|
if account.folders&.any?
|
17
19
|
account.folders.map { |af| af[:name] }
|
18
20
|
else
|
19
|
-
|
21
|
+
all_names
|
20
22
|
end
|
21
23
|
|
22
|
-
|
24
|
+
all_names.map do |name|
|
25
|
+
backup =
|
26
|
+
if account.folder_blacklist
|
27
|
+
!names.include?(name)
|
28
|
+
else
|
29
|
+
names.include?(name)
|
30
|
+
end
|
31
|
+
next if !backup
|
32
|
+
|
23
33
|
Account::Folder.new(account.connection, name)
|
24
|
-
end
|
34
|
+
end.compact
|
25
35
|
end
|
26
36
|
end
|
27
37
|
end
|
@@ -27,12 +27,8 @@ module Imap::Backup
|
|
27
27
|
Account::Connection::BackupFolders.new(client: client, account: account).run
|
28
28
|
end
|
29
29
|
|
30
|
-
def
|
31
|
-
|
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
|
30
|
+
def namespaces
|
31
|
+
client.namespace
|
36
32
|
end
|
37
33
|
|
38
34
|
def run_backup(refresh: false)
|
@@ -100,24 +100,24 @@ module Imap::Backup
|
|
100
100
|
end
|
101
101
|
|
102
102
|
def delete_multi(uids)
|
103
|
-
|
103
|
+
add_flags(uids, [:Deleted])
|
104
104
|
client.expunge
|
105
105
|
end
|
106
106
|
|
107
|
-
def
|
107
|
+
def set_flags(uids, flags)
|
108
108
|
client.select(utf7_encoded_name)
|
109
109
|
flags.reject! { |f| f == :Recent }
|
110
110
|
client.uid_store(uids, "FLAGS", flags)
|
111
111
|
end
|
112
112
|
|
113
|
-
def
|
113
|
+
def add_flags(uids, flags)
|
114
114
|
# Use read-write access, via `select`
|
115
115
|
client.select(utf7_encoded_name)
|
116
116
|
flags.reject! { |f| f == :Recent }
|
117
117
|
client.uid_store(uids, "+FLAGS", flags)
|
118
118
|
end
|
119
119
|
|
120
|
-
def
|
120
|
+
def remove_flags(uids, flags)
|
121
121
|
client.select(utf7_encoded_name)
|
122
122
|
client.uid_store(uids, "-FLAGS", flags)
|
123
123
|
end
|
@@ -126,7 +126,7 @@ module Imap::Backup
|
|
126
126
|
existing = uids
|
127
127
|
return if existing.empty?
|
128
128
|
|
129
|
-
|
129
|
+
add_flags(existing, [:Deleted])
|
130
130
|
client.expunge
|
131
131
|
end
|
132
132
|
|
data/lib/imap/backup/account.rb
CHANGED
@@ -8,6 +8,7 @@ module Imap::Backup
|
|
8
8
|
attr_reader :password
|
9
9
|
attr_reader :local_path
|
10
10
|
attr_reader :folders
|
11
|
+
attr_reader :folder_blacklist
|
11
12
|
attr_reader :mirror_mode
|
12
13
|
attr_reader :server
|
13
14
|
attr_reader :connection_options
|
@@ -19,6 +20,7 @@ module Imap::Backup
|
|
19
20
|
@password = options[:password]
|
20
21
|
@local_path = options[:local_path]
|
21
22
|
@folders = options[:folders]
|
23
|
+
@folder_blacklist = options[:folder_blacklist]
|
22
24
|
@mirror_mode = options[:mirror_mode]
|
23
25
|
@server = options[:server]
|
24
26
|
@connection_options = options[:connection_options]
|
@@ -57,6 +59,7 @@ module Imap::Backup
|
|
57
59
|
h = {username: @username, password: @password}
|
58
60
|
h[:local_path] = @local_path if @local_path
|
59
61
|
h[:folders] = @folders if @folders
|
62
|
+
h[:folder_blacklist] = true if @folder_blacklist
|
60
63
|
h[:mirror_mode] = true if @mirror_mode
|
61
64
|
h[:server] = @server if @server
|
62
65
|
h[:connection_options] = @connection_options if @connection_options
|
@@ -85,6 +88,10 @@ module Imap::Backup
|
|
85
88
|
update(:folders, value)
|
86
89
|
end
|
87
90
|
|
91
|
+
def folder_blacklist=(value)
|
92
|
+
update(:folder_blacklist, value)
|
93
|
+
end
|
94
|
+
|
88
95
|
def mirror_mode=(value)
|
89
96
|
update(:mirror_mode, value)
|
90
97
|
end
|
@@ -94,7 +101,12 @@ module Imap::Backup
|
|
94
101
|
end
|
95
102
|
|
96
103
|
def connection_options=(value)
|
97
|
-
parsed =
|
104
|
+
parsed =
|
105
|
+
if value == ""
|
106
|
+
nil
|
107
|
+
else
|
108
|
+
JSON.parse(value, symbolize_names: true)
|
109
|
+
end
|
98
110
|
update(:connection_options, parsed)
|
99
111
|
end
|
100
112
|
|
@@ -3,21 +3,28 @@ module Imap::Backup
|
|
3
3
|
include Thor::Actions
|
4
4
|
include CLI::Helpers
|
5
5
|
|
6
|
-
attr_reader :
|
7
|
-
attr_reader :refresh
|
6
|
+
attr_reader :options
|
8
7
|
|
9
8
|
def initialize(options)
|
10
9
|
super([])
|
11
|
-
@
|
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
|
-
|
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
|
@@ -1,16 +1,24 @@
|
|
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
|
8
|
-
def self.
|
7
|
+
def self.config_option
|
9
8
|
method_option(
|
10
|
-
"
|
11
|
-
type: :
|
12
|
-
desc: "
|
13
|
-
aliases: ["-
|
9
|
+
"config",
|
10
|
+
type: :string,
|
11
|
+
desc: "supply the configuration file path (default: ~/.imap-backup/config.json)",
|
12
|
+
aliases: ["-c"]
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.format_option
|
17
|
+
method_option(
|
18
|
+
"format",
|
19
|
+
type: :string,
|
20
|
+
desc: "the output type, 'text' for plain text or 'json'",
|
21
|
+
aliases: ["-f"]
|
14
22
|
)
|
15
23
|
end
|
16
24
|
|
@@ -22,34 +30,64 @@ module Imap::Backup
|
|
22
30
|
aliases: ["-q"]
|
23
31
|
)
|
24
32
|
end
|
33
|
+
|
34
|
+
def self.verbose_option
|
35
|
+
method_option(
|
36
|
+
"verbose",
|
37
|
+
type: :boolean,
|
38
|
+
desc: "increase the amount of logging",
|
39
|
+
aliases: ["-v"]
|
40
|
+
)
|
41
|
+
end
|
25
42
|
end
|
26
43
|
end
|
27
44
|
|
28
|
-
def
|
29
|
-
|
30
|
-
|
31
|
-
|
45
|
+
def options
|
46
|
+
@symbolized_options ||= # rubocop:disable Naming/MemoizedInstanceVariableName
|
47
|
+
begin
|
48
|
+
options = super()
|
49
|
+
options.each.with_object({}) do |(k, v), acc|
|
50
|
+
key =
|
51
|
+
if k.is_a?(String)
|
52
|
+
k.gsub("-", "_").intern
|
53
|
+
else
|
54
|
+
k
|
55
|
+
end
|
56
|
+
acc[key] = v
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def load_config(**options)
|
62
|
+
path = options[:config]
|
63
|
+
require_exists = options.key?(:require_exists) ? options[:require_exists] : true
|
64
|
+
if require_exists
|
65
|
+
exists = Configuration.exist?(path: path)
|
66
|
+
if !exists
|
67
|
+
expected = path || Configuration.default_pathname
|
68
|
+
raise ConfigurationNotFound, "Configuration file '#{expected}' not found"
|
69
|
+
end
|
32
70
|
end
|
71
|
+
Configuration.new(path: path)
|
33
72
|
end
|
34
73
|
|
35
|
-
def account(email)
|
36
|
-
|
37
|
-
account = accounts.find { |a| a.username == email }
|
74
|
+
def account(config, email)
|
75
|
+
account = config.accounts.find { |a| a.username == email }
|
38
76
|
raise "#{email} is not a configured account" if !account
|
39
77
|
|
40
78
|
account
|
41
79
|
end
|
42
80
|
|
43
|
-
def connection(email)
|
44
|
-
account = account(email)
|
81
|
+
def connection(config, email)
|
82
|
+
account = account(config, email)
|
45
83
|
|
46
84
|
Account::Connection.new(account)
|
47
85
|
end
|
48
86
|
|
49
|
-
def each_connection(names)
|
50
|
-
accounts
|
87
|
+
def each_connection(config, names)
|
88
|
+
config.accounts.each do |account|
|
89
|
+
next if names.any? && !names.include?(account.username)
|
51
90
|
|
52
|
-
accounts.each do |account|
|
53
91
|
yield account.connection
|
54
92
|
end
|
55
93
|
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,39 +6,56 @@ module Imap::Backup
|
|
8
6
|
MAX_SUBJECT = 60
|
9
7
|
|
10
8
|
desc "accounts", "List locally backed-up accounts"
|
9
|
+
config_option
|
10
|
+
format_option
|
11
11
|
def accounts
|
12
|
-
|
13
|
-
|
12
|
+
config = load_config(**options)
|
13
|
+
names = config.accounts.map(&:username)
|
14
|
+
case options[:format]
|
15
|
+
when "json"
|
16
|
+
list = names.map { |n| {username: n} }
|
17
|
+
Kernel.puts list.to_json
|
18
|
+
else
|
19
|
+
names.each { |n| Kernel.puts n }
|
20
|
+
end
|
14
21
|
end
|
15
22
|
|
16
23
|
desc "folders EMAIL", "List backed up folders"
|
24
|
+
config_option
|
25
|
+
format_option
|
17
26
|
def folders(email)
|
18
|
-
|
27
|
+
config = load_config(**options)
|
28
|
+
connection = connection(config, email)
|
19
29
|
|
20
|
-
connection.local_folders
|
21
|
-
|
30
|
+
folders = connection.local_folders
|
31
|
+
case options[:format]
|
32
|
+
when "json"
|
33
|
+
list = folders.map { |_s, f| {name: f.name} }
|
34
|
+
Kernel.puts list.to_json
|
35
|
+
else
|
36
|
+
folders.each do |_s, f|
|
37
|
+
Kernel.puts %("#{f.name}")
|
38
|
+
end
|
22
39
|
end
|
23
40
|
end
|
24
41
|
|
25
42
|
desc "list EMAIL FOLDER", "List emails in a folder"
|
43
|
+
config_option
|
44
|
+
format_option
|
26
45
|
def list(email, folder_name)
|
27
|
-
|
46
|
+
config = load_config(**options)
|
47
|
+
connection = connection(config, email)
|
28
48
|
|
29
|
-
|
49
|
+
serializer, _folder = connection.local_folders.find do |(_s, f)|
|
30
50
|
f.name == folder_name
|
31
51
|
end
|
32
|
-
raise "Folder '#{folder_name}' not found" if !
|
33
|
-
|
34
|
-
Kernel.puts format(
|
35
|
-
"%-10<uid>s %-#{MAX_SUBJECT}<subject>s - %<date>s",
|
36
|
-
{uid: "UID", subject: "Subject", date: "Date"}
|
37
|
-
)
|
38
|
-
Kernel.puts "-" * (12 + MAX_SUBJECT + 28)
|
39
|
-
|
40
|
-
uids = folder_serializer.uids
|
52
|
+
raise "Folder '#{folder_name}' not found" if !serializer
|
41
53
|
|
42
|
-
|
43
|
-
|
54
|
+
case options[:format]
|
55
|
+
when "json"
|
56
|
+
list_emails_as_json serializer
|
57
|
+
else
|
58
|
+
list_emails_as_text serializer
|
44
59
|
end
|
45
60
|
end
|
46
61
|
|
@@ -50,29 +65,52 @@ module Imap::Backup
|
|
50
65
|
If more than one UID is given, they are separated by a header indicating
|
51
66
|
the UID.
|
52
67
|
DESC
|
68
|
+
config_option
|
69
|
+
format_option
|
53
70
|
def show(email, folder_name, uids)
|
54
|
-
|
71
|
+
config = load_config(**options)
|
72
|
+
connection = connection(config, email)
|
55
73
|
|
56
|
-
|
74
|
+
serializer, _folder = connection.local_folders.find do |(_s, f)|
|
57
75
|
f.name == folder_name
|
58
76
|
end
|
59
|
-
raise "Folder '#{folder_name}' not found" if !
|
77
|
+
raise "Folder '#{folder_name}' not found" if !serializer
|
60
78
|
|
61
79
|
uid_list = uids.split(",")
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
HEADER
|
69
|
-
end
|
70
|
-
Kernel.puts message.body
|
80
|
+
|
81
|
+
case options[:format]
|
82
|
+
when "json"
|
83
|
+
show_emails_as_json serializer, uid_list
|
84
|
+
else
|
85
|
+
show_emails_as_text serializer, uid_list
|
71
86
|
end
|
72
87
|
end
|
73
88
|
|
74
89
|
no_commands do
|
75
|
-
def
|
90
|
+
def list_emails_as_json(serializer)
|
91
|
+
emails = serializer.each_message.map do |message|
|
92
|
+
{
|
93
|
+
uid: message.uid,
|
94
|
+
date: message.date.to_s,
|
95
|
+
subject: message.subject || ""
|
96
|
+
}
|
97
|
+
end
|
98
|
+
Kernel.puts emails.to_json
|
99
|
+
end
|
100
|
+
|
101
|
+
def list_emails_as_text(serializer)
|
102
|
+
Kernel.puts format(
|
103
|
+
"%-10<uid>s %-#{MAX_SUBJECT}<subject>s - %<date>s",
|
104
|
+
{uid: "UID", subject: "Subject", date: "Date"}
|
105
|
+
)
|
106
|
+
Kernel.puts "-" * (12 + MAX_SUBJECT + 28)
|
107
|
+
|
108
|
+
serializer.each_message.map do |message|
|
109
|
+
list_message_as_text message
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def list_message_as_text(message)
|
76
114
|
m = {
|
77
115
|
uid: message.uid,
|
78
116
|
date: message.date.to_s,
|
@@ -84,6 +122,26 @@ module Imap::Backup
|
|
84
122
|
Kernel.puts format("% 10<uid>u: %-#{MAX_SUBJECT}<subject>s - %<date>s", m)
|
85
123
|
end
|
86
124
|
end
|
125
|
+
|
126
|
+
def show_emails_as_json(serializer, uids)
|
127
|
+
emails = serializer.each_message(uids).map do |m|
|
128
|
+
m.to_h.tap { |h| h[:body] = m.body }
|
129
|
+
end
|
130
|
+
Kernel.puts emails.to_json
|
131
|
+
end
|
132
|
+
|
133
|
+
def show_emails_as_text(serializer, uids)
|
134
|
+
serializer.each_message(uids).each do |message|
|
135
|
+
if uids.count > 1
|
136
|
+
Kernel.puts <<~HEADER
|
137
|
+
#{'-' * 80}
|
138
|
+
#{format('| UID: %-71s |', message.uid)}
|
139
|
+
#{'-' * 80}
|
140
|
+
HEADER
|
141
|
+
end
|
142
|
+
Kernel.puts message.body
|
143
|
+
end
|
144
|
+
end
|
87
145
|
end
|
88
146
|
end
|
89
147
|
end
|
@@ -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
|
-
|
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
|
-
|
61
|
+
@config = load_config(config: config_path)
|
58
62
|
end
|
59
63
|
|
60
64
|
def destination_account
|