summaryrefslogtreecommitdiff
path: root/lib/Config/ClawsMail.pm
blob: 9c1163613c9f59141c7f3f60cf7d29cd3a72ce42 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package Config::ClawsMail; 
use Moo;
# VERSION 
use Config::INI::Reader;
use Config::ClawsMail::Account;
use Config::ClawsMail::PasswordStoreParser;
use Types::Standard qw(HashRef InstanceOf);
use Path::Tiny;
use namespace::clean;
 
# ABSTRACT: Claws-Mail config parser 
 
has accounts => (
    is => 'ro',
    isa => HashRef[InstanceOf['Config::ClawsMail::Account']],
    default => sub { +{}; },
);
 
sub BUILDARGS {
    my ($class,@etc) = @_;
 
    my $args = $class->next::method(@etc);
    return $args if $args->{accounts};
 
    my $config_file = delete $args->{config_file}
        || path($ENV{HOME},'.claws-mail','accountrc');
    my $config_hash = Config::INI::Reader->read_file(
        $config_file,
    );
    my $password_file = delete $args->{password_file}
        || path($ENV{HOME},'.claws-mail','passwordstorerc');
    my $password_hash = Config::ClawsMail::PasswordStoreParser->read_file(
        $password_file,
    );
 
    for my $account_id (keys %{$config_hash}) {
        my $account_conf = $config_hash->{$account_id};
        my $password_conf = $password_hash->{$account_id};
        my $account = Config::ClawsMail::Account->new_from_config($account_conf,$password_conf);
        $args->{accounts}{$account->account_name} = $account;
    }
 
    return $args;
}
 
1;