use v5.36; use Feature::Compat::Class 0.07; package Object::Groupware::Event 0.01; class Object::Groupware::Event; use utf8; use Log::Any qw( ); use Feature::Compat::Try; field $log = Log::Any->get_logger; field $entry : param; field $begin : reader = $entry->start; field $date_begin : reader = $begin->strftime('%A %e. %B'); field $time_begin : reader = $begin->strftime('%k.%M'); field $end : reader = $entry->end; field $date_end : reader; field $time_end : reader; field $datespan : reader; field $timespan : reader; field $time_brief : reader; field $summary : reader = $entry->summary; field $description : reader = $entry->description; field $location : reader = $entry->_simple_property('location'); field $price : reader; field @attendees; field @attachments; ADJUST { if ( defined $end ) { $date_end = $end->strftime('%A %e. %B'); $time_end = $end->strftime('%k.%M'); } $datespan = ( defined $end and $date_end ne $date_begin ) ? ucfirst("$date_begin - $date_end") : ucfirst("$date_begin"); $timespan = ( defined $end and not $entry->all_day ) ? ucfirst("$date_begin kl. $time_begin-$time_end") : undef; $time_brief = $entry->all_day ? $datespan : ucfirst("$date_begin kl. $time_begin"); $description =~ s/\n\n[Pp]ris:\s*((?!\n).+)\s*\z//m; $price = $1; if ( $entry->property('attendee') ) { for ( @{ $entry->property('attendee') } ) { push @attendees, $_->parameters->{'CN'} || $_->value =~ s/^mailto://r; } } if ( $entry->property('attach') ) { for ( @{ $entry->property('attach') } ) { my $uri; try { $uri = URI->new( $_->value ) } catch ($e) { $log->errorf( 'failed to parse URI %s: %s', $uri, $e ); next; } $uri->authority and $uri->host or next; push @attachments, $uri; } } if ( $log->is_trace ) { use DDP; p $entry; p $begin; p $end; } } method attendees { !!@attendees ? [@attendees] : undef } method attachments { !!@attachments ? [@attachments] : undef } 1;