From 0fd3c3256dc491cd84202c66600547b50979b936 Mon Sep 17 00:00:00 2001 From: "Bradley M. Kuhn" Date: Sat, 30 Nov 2013 14:05:00 -0500 Subject: [PATCH] First pass at ParseEventAndAddProposed --- calendar-import.plx | 57 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/calendar-import.plx b/calendar-import.plx index 50b83d7..16faaf7 100644 --- a/calendar-import.plx +++ b/calendar-import.plx @@ -123,19 +123,70 @@ sub read_from_process } } ############################################################################### +sub ParseEventAndAddProposed ($$$) { + my($config, $veventFile, $modString) = @_; + + my $icsImportFile = tmpnam(); + + my $newCalendar = Data::ICal->new(data => <new(filename => $veventFile); + my $entries = (defined $oldCalendar) ? $oldCalendar->entries : []; + foreach my $entry (@{$entries}) { + my $summary = $entry->property("summary"); + if (defined $summary) { + die("Multiple summary found in $veventFile") unless @{$summary} == 1; + $summary->[0]->value($modString . ": " . $summary->[0]->value); + } + $newCalendar->add_entry($entry); + } + open(SINGLE_EVENT_ICAL, ">", $icsImportFile) or DieLog("Unable to overwrite $icsImportFile: $!"); + print SINGLE_EVENT_ICAL $newCalendar->as_string; + close SINGLE_EVENT_ICAL; + DieLog("Error ($?) while writing $icsImportFile ($?): $!") unless $? == 0; + undef $newCalendar; + + my($elispFH, $elispFile) = tempfile(); + print $elispFH "(setq-default european-calendar-style t)\n" + if $config->{calendarStyle} =~ /european/i; + print $elispFH <{proposedDiary}") +ELISP_END +; + $elispFH->close(); + my @emacsOutput = read_from_process($emacsBinary, '--no-windows', + '--batch', '--no-site-file', '-l', $elispFile); + DieLog("Emacs process for exporting $privateCalendarFile and " . + "$publicCalendarFile exited with non-zero exit status of " . + "$? ($!), and output of:\n " . join("\n ", @emacsOutput)) + if ($? != 0); + my $goodCount =0; + foreach my $line (@emacsOutput) { $goodCount++; } + DieLog("Unexpected Emacs output: " . join("\n ", @emacsOutput)) + if ($goodCount > 1); + WarnLog("unable to remove temporary file: $icsImportFile: $!") + unless unlink($icsImportFile) == 1; +} +############################################################################### sub HandleProposal ($$$) { my($config, $operation, $file) = @_; if ($operation eq 'A') { - ParseEventAndAddProposed($config->{proposedDiary}, $file, "PROPOSED ADDITION"); + ParseEventAndAddProposed($config, $file, "PROPOSED ADDITION"); } elsif ($operation eq 'M') { - ParseEventAndAddProposed($config->{proposedDiary}, $file, "PROPOSED CHANGE"); + ParseEventAndAddProposed($config, $file, "PROPOSED CHANGE"); } elsif ($operation eq 'D') { chdir $config->{gitDir} or DieLog("Unable to change directory to $config->{gitDir}"); system($emacsSettings->{gitBinary}, 'checkout', $config->{myBranch}); DieLog("Unable to checkout $config->{myBranch} branch in git") unless ($? == 0); - ParseEventAndAddProposed($config->{proposedDiary}, $file, "PROPOSED DELETE:"); + ParseEventAndAddProposed($config, $file, "PROPOSED DELETE"); # Now, reset back to incoming branch, as GenerateDiaryFromNewEvents assumes that. chdir $config->{gitDir} or DieLog("Unable to change directory to $config->{gitDir}");