about summary refs log tree commit diff stats
path: root/lyra.pl
diff options
context:
space:
mode:
Diffstat (limited to 'lyra.pl')
-rwxr-xr-xlyra.pl114
1 files changed, 81 insertions, 33 deletions
diff --git a/lyra.pl b/lyra.pl
index 3fa0700..43568f2 100755
--- a/lyra.pl
+++ b/lyra.pl
@@ -7,49 +7,97 @@ use feature 'say';
 use Path::Tiny;
 use IPC::Run3;
 
-my %dispatch = (
-    "edit" => \&edit,
-    "random" => \&random,
-    "help" => \&HelpMessage,
+my $fortune_dir = "$ENV{HOME}/fortunes";
+my %fortunes = (
+    # mst quotes.
+    mst => "http://www.trout.me.uk/quotes.txt",
+
+    # All these are from rindolf's website.
+    sholmif => "https://www.shlomifish.org/humour/fortunes/shlomif",
+    "shlomif-fav"
+        => "https://www.shlomifish.org/humour/fortunes/shlomif-fav",
+    "shlomif-factoids"
+        => "https://www.shlomifish.org/humour/fortunes/shlomif-factoids",
+    "sholmif-email-sig"
+        => "https://raw.githubusercontent.com/shlomif/shlomif-email-signature/master/shlomif-sig-quotes.txt",
+
+    # Quotes from the Joel on Software site.
+    # (http://www.joelonsoftware.com/)
+    "joel-on-software"
+        => "https://www.shlomifish.org/humour/fortunes/joel-on-software",
+
+    # Quotes from the essays and writings of Paul Graham.
+    # (http://www.paulgraham.com/)
+    "paul-graham"
+        => "https://www.shlomifish.org/humour/fortunes/paul-graham",
+
+    # “The Rules of Open-Source Programming”.
+    osp_rules => "https://www.shlomifish.org/humour/fortunes/osp_rules",
+
+    # Excerpts from the online Subversion folklore.
+    # (http://subversion.tigris.org/)
+    "subversion"
+        => "https://www.shlomifish.org/humour/fortunes/subversion",
+
+    # A collection of conversations from Freenode’s #perl .
+    "sharp-perl"
+        => "https://www.shlomifish.org/humour/fortunes/sharp-perl",
+    # A collection of conversations from Freenode’s ##programming .
+    "sharp-programming"
+        => "https://www.shlomifish.org/humour/fortunes/sharp-programming",
+
+    # katspace quotes (ref: rindolf's website).
+    "katspace_sayings"
+        => "http://katspace.com/fandom/quotes/sayings",
+    "katspace_more-sayings"
+        => "http://katspace.com/fandom/quotes/kaijen",
+    "katspace_books"
+        => "http://katspace.com/fandom/quotes/book",
+    "katspace_quotes"
+        => "http://katspace.com/fandom/quotes/quotes",
 );
 
-if ( $ARGV[0]
-         and $dispatch{ $ARGV[0] } ) {
-    $dispatch{ $ARGV[0] }->();
+if ( $ARGV[0] ) {
+    if ($fortunes{ $ARGV[0] }) {
+        my $fortune_file = "$fortune_dir/$ARGV[0]";
+        random($fortune_file); }
+    elsif ( $ARGV[0] eq "latest") { get_latest(); }
+    elsif ( $ARGV[0] eq "mirror") { get_mirror(); }
+    elsif ( $ARGV[0] eq "ls") { run3[ "ls", $fortune_dir] }
 } elsif ( scalar @ARGV == 0 ) {
-    HelpMessage();
+    say "Usage: lyra <fortune>";
 } else {
-    say "lyra: no such option";
+    say "lyra: no such fortune";
 }
 
-sub HelpMessage {
-    say qq{Usage:
-    edit
-        Edit the file. (opens in \$EDITOR)
-    random
-        Print a random fortune.
-    help
-        Show this text.}
+sub random {
+    my $fortune_file = shift @_;
+    my $file = path($fortune_file)->absolute;
+    my @fortunes = split/\n%\n/, $file->slurp;
+    say $fortunes[ rand @fortunes ]; # Print random fortune.
 }
 
-sub fortune_file_path {
-    my $fortune_file = "$ENV{HOME}/quotes.txt";
-    $fortune_file = $ARGV[1] if $ARGV[1]; # Use $ARGV[1] as path if it exists.
-    return $fortune_file;
+sub get_latest {
+    foreach my $fortune (sort keys %fortunes) {
+        ftp("$fortune_dir/$fortune", $fortunes{$fortune});
+    }
 }
 
-sub edit {
-    my @editor = split(/ /, $ENV{EDITOR});
-    push @editor, "vi"
-        unless scalar @editor; # Push "vi" if @editor is empty.
+sub get_mirror {
+    require HTTP::Simple;
 
-    my $fortune_file = fortune_file_path();
-    run3 [ @editor, $fortune_file ];
-}
+    # Ignore a warning, next line would've printed a warning.
+    no warnings 'once';
+    $HTTP::Simple::UA->verify_SSL(1);
 
-sub random {
-    my $fortune_file = fortune_file_path();
-    my $file = path($fortune_file)->absolute;
-    my @fortunes = split/\n%\n/, $file->slurp;
-    say $fortunes[ rand @fortunes ]; # Print random fortune.
+    foreach my $fortune (sort keys %fortunes) {
+        say "$fortune $fortunes{$fortune}";
+        my $status =
+            HTTP::Simple::getstore($fortunes{$fortune},
+                                   "$fortune_dir/$fortune");
+        warn "[WARN] Failed to fetch latest fortune\n"
+            unless HTTP::Simple::is_success($status);
+    }
 }
+
+sub ftp { run3 ["ftp", "-mvo", @_]; }