1 package Email::Archive::Storage::DBI;
6 use Email::Archive::Schema;
9 with q/Email::Archive::Storage/;
14 ref $_[0] eq 'Email::Archive::Schema' or die "schema must be a Email::Archive schema",
19 my ($self, $email) = @_;
20 $email = Email::Abstract->new($email);
21 $self->schema->resultset('Messages')->update_or_create({
22 message_id => $email->get_header('Message-ID'),
23 from_addr => $email->get_header('From'),
24 to_addr => $email->get_header('To'),
25 date => $email->get_header('Date'),
26 subject => $email->get_header('Subject'),
27 body => $email->get_body,
32 my ($self, $attribs) = @_;
33 my $message = $self->schema
34 ->resultset('Messages')
36 return Email::MIME->create(
38 From => $message->from_addr,
39 To => $message->to_addr,
40 Subject => $message->subject,
42 body => $message->body,
47 my ($self, $message_id) = @_;
48 $self->search({ message_id => $message_id });
53 $self->schema->deploy;
60 # naive check if table metadata exists
61 $self->schema->resultset('Metadata')->all;
70 sub storage_connect_dbic {
71 my ($self, $dsn) = @_;
72 $self->schema(Email::Archive::Schema->connect($dsn));
73 my $deployed = $self->_deployed;
74 $self->_deploy unless $deployed;