kivitendo/SL/BackgroundJob/SyncEmailFolder.pm @ 360dbe68
25a3242a | Tamino Steinert | package SL::BackgroundJob::SyncEmailFolder;
|
||
e900b0a7 | Tamino Steinert | |||
use strict;
|
||||
use warnings;
|
||||
use parent qw(SL::BackgroundJob::Base);
|
||||
use SL::IMAPClient;
|
||||
17c18982 | Tamino Steinert | use SL::DB::Manager::EmailImport;
|
||
e900b0a7 | Tamino Steinert | |||
17c18982 | Tamino Steinert | sub sync_email_folder {
|
||
e900b0a7 | Tamino Steinert | my ($self) = @_;
|
||
17c18982 | Tamino Steinert | my $folder = $self->{job_obj}->data_as_hash->{folder};
|
||
e900b0a7 | Tamino Steinert | |||
my $imap_client = SL::IMAPClient->new();
|
||||
17c18982 | Tamino Steinert | my $email_import = $imap_client->update_emails_from_folder($folder);
|
||
return unless $email_import;
|
||||
e900b0a7 | Tamino Steinert | |||
a7ffa4e3 | Tamino Steinert | return "Created email import: " . $email_import->id;
|
||
17c18982 | Tamino Steinert | }
|
||
sub delete_email_imports {
|
||||
my ($self) = @_;
|
||||
my $job_obj = $self->{job_obj};
|
||||
my $email_import_ids_to_delete =
|
||||
$job_obj->data_as_hash->{email_import_ids_to_delete} || [];
|
||||
a7ffa4e3 | Tamino Steinert | my @deleted_email_imports_ids;
|
||
17c18982 | Tamino Steinert | foreach my $email_import_id (@$email_import_ids_to_delete) {
|
||
my $email_import = SL::DB::Manager::EmailImport->find_by(id => $email_import_id);
|
||||
next unless $email_import;
|
||||
$email_import->delete(cascade => 1);
|
||||
a7ffa4e3 | Tamino Steinert | push @deleted_email_imports_ids, $email_import_id;
|
||
17c18982 | Tamino Steinert | }
|
||
a7ffa4e3 | Tamino Steinert | return unless @deleted_email_imports_ids;
|
||
17c18982 | Tamino Steinert | |||
a7ffa4e3 | Tamino Steinert | return "Deleted email import(s): " . join(', ', @deleted_email_imports_ids);
|
||
e900b0a7 | Tamino Steinert | }
|
||
sub run {
|
||||
my ($self, $job_obj) = @_;
|
||||
$self->{job_obj} = $job_obj;
|
||||
a7ffa4e3 | Tamino Steinert | my @results;
|
||
push @results, $self->delete_email_imports();
|
||||
push @results, $self->sync_email_folder();
|
||||
17c18982 | Tamino Steinert | |||
a7ffa4e3 | Tamino Steinert | return join(". ", grep { $_ ne ''} @results);
|
||
e900b0a7 | Tamino Steinert | }
|
||
1;
|
||||
__END__
|
||||
=encoding utf8
|
||||
=head1 NAME
|
||||
17c18982 | Tamino Steinert | SL::BackgroundJob::SyncEmailFolder - Background job for syncing emails from a folder
|
||
e900b0a7 | Tamino Steinert | |||
=head1 SYNOPSIS
|
||||
This background job is used to sync emails from a folder. It can be used to sync
|
||||
emails from a folder on a regular basis for multiple folders. The folder to sync
|
||||
is specified in the data field 'folder' of the background job, by default the
|
||||
17c18982 | Tamino Steinert | folder 'base_folder' from IMAP client is used. Sub folders are separated by a
|
||
forward slash, e.g. 'INBOX/Archive'. Subfolders are not synced.
|
||||
e900b0a7 | Tamino Steinert | |||
=head1 BUGS
|
||||
Nothing here yet.
|
||||
=head1 AUTHOR
|
||||
Tamino Steinert E<lt>tamino.steinert@tamino.stE<gt>
|
||||
=cut
|