Projekt

Allgemein

Profil

Herunterladen (1,91 KB) Statistiken
| Zweig: | Markierung: | Revision:
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