diff --git a/bin/check.pl b/bin/check.pl index cb9d751d..e7d62d29 100644 --- a/bin/check.pl +++ b/bin/check.pl @@ -2,15 +2,12 @@ use warnings; use File::Spec; use File::Basename; -use lib File::Spec->catfile( - File::Basename::dirname(File::Spec->rel2abs($0)), - '..', - 'lib'); +use lib File::Spec->catfile( File::Basename::dirname( File::Spec->rel2abs($0) ), '..', 'lib' ); use Perl::Maven::Calendar; # Verify calendar format # Should the dates be in order? -Perl::Maven::Calendar::create_calendar(q{sites/en/events.json}); +Perl::Maven::Calendar::create_calendar( q{sites/en/events.json}, q{sites/en/old_events.json} ); diff --git a/lib/Perl/Maven.pm b/lib/Perl/Maven.pm index 5d494b84..4cc98e1b 100644 --- a/lib/Perl/Maven.pm +++ b/lib/Perl/Maven.pm @@ -727,8 +727,9 @@ get '/sitemap.xml' => sub { get '/events.ics' => sub { content_type 'text/calendar'; + my $old_file = path( mymaven->{root}, 'sites', mymaven->{lang}, 'old_events.json' ); my $filepath = path( mymaven->{root}, 'sites', mymaven->{lang}, 'events.json' ); - return Perl::Maven::Calendar::create_calendar($filepath); + return Perl::Maven::Calendar::create_calendar( $filepath, $old_file ); }; get '/rss/:tag' => sub { diff --git a/lib/Perl/Maven/Calendar.pm b/lib/Perl/Maven/Calendar.pm index 53ee12b1..6427f417 100644 --- a/lib/Perl/Maven/Calendar.pm +++ b/lib/Perl/Maven/Calendar.pm @@ -13,15 +13,20 @@ use Cpanel::JSON::XS qw(encode_json decode_json); use Path::Tiny qw(path); sub create_calendar { - my ($filepath) = @_; + my ( $filepath, $old_file ) = @_; my $modify_time = ( stat($filepath) )[9]; my $calendar = Data::ICal->new; my $changed = DateTime->from_epoch( epoch => $modify_time ); - my $events = decode_json( path($filepath)->slurp_utf8 ); - for my $event (@$events) { + my @events; + for my $file ( $old_file, $filepath ) { + if ( -e $file ) { + push @events, @{ decode_json( path($file)->slurp_utf8 ) }; + } + } + for my $event (@events) { my $ical_event = Data::ICal::Entry::Event->new; my $begin = DateTime->new( $event->{begin} ); my $duration = DateTime::Duration->new( $event->{duration} );