- #!/usr/bin/env perl
-
- =pod
-
- =head1 NAME
-
- wrt-feed - print an Atom or JSON feed from given wrt entries
-
- =head1 USAGE
-
- # Print most recent entries:
- wrt feed
- wrt feed --json
-
- # Print entries for a specific month:
- wrt feed 2019/11
- wrt feed --json 2019/11
-
- =head1 DESCRIPTION
-
- Detailed documentation can be found in the L<App::WRT> man page or at
- L<https://code.p1k3.com/gitea/brennen/wrt>.
-
- =head1 LICENSE
-
- wrt is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- =head1 AUTHOR
-
- Brennen Bearnes <code@p1k3.com>
-
- =cut
-
- use 5.14.0;
-
- use strict;
- use warnings;
- no warnings 'uninitialized';
- use utf8;
- use open qw(:std :utf8);
-
- # use Data::Dumper;
- use App::WRT;
-
- use Carp;
- use Getopt::Long qw(GetOptionsFromArray);
- use Pod::Usage;
-
- # If invoked directly from the command-line, caller() will return undef.
- # Execute main() with a callback to print output directly, and a copy of
- # our real @ARGV:
- if (not caller()) {
- my $output = sub { say @_; };
- my $retval = main($output, @ARGV);
- exit($retval);
- }
-
- sub main {
- my ($output, @local_argv) = @_;
- # Handle options, including help generated from the POD above. See:
- # - http://perldoc.perl.org/Getopt/Long.html#User-defined-subroutines-to-handle-options
- # - https://metacpan.org/pod/Pod::Usage
- # - http://michael.thegrebs.com/2014/06/08/Pod-Usage/
- my $from_stdin = 0;
- my $print_json = 0;
- my $config_file = 'wrt.json';
- GetOptionsFromArray(
- \@local_argv,
-
- stdin => \$from_stdin,
- json => \$print_json,
- 'config=s' => \$config_file,
- help => sub { pod2usage(0) },
-
- ) or pod2usage(2);
-
- unless (-e $config_file) {
- croak "No wrt config file found. Tried: $config_file";
- }
-
- my $w = App::WRT::new_from_file($config_file);
-
- # With --stdin, take names of entries to display from standard input, one line
- # per name. Otherwise, take names from arguments if any are given, or fall
- # back to most recent entries.
- my @to_display = ();
- if ($from_stdin) {
- while (my $entry = <>) {
- chomp($entry);
- push @to_display, $entry;
- }
- } elsif (@local_argv) {
- (@to_display) = @local_argv;
- }
-
- my (@expanded_to_display) = map { $w->expand_alias($_) } @to_display;
-
- foreach my $entry (@expanded_to_display) {
- unless ($w->{entries}->is_extant($entry)) {
- # TODO: Better error reporting strategy, print this on stderr:
- say("No such entry: $entry");
- return 1;
- }
- }
-
- if (@expanded_to_display) {
- if ($print_json) {
- $output->( $w->feed_print_json(@expanded_to_display) );
- } else {
- $output->( $w->feed_print(@expanded_to_display) );
- }
- } else {
- if ($print_json) {
- $output->( $w->feed_print_json_recent() );
- } else {
- $output->( $w->feed_print_recent() );
- }
- }
-
- return 0;
- }
-
- 1;
|