about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--README12
-rw-r--r--cpanfile2
-rwxr-xr-xlyra.pl49
-rwxr-xr-xscripts/fortunes.pl97
-rwxr-xr-xscripts/kirch.sh6
6 files changed, 33 insertions, 134 deletions
diff --git a/.gitignore b/.gitignore
index f20153b..36ec77b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
 README.org
+scripts/
diff --git a/README b/README
index 6b8d4ca..24470d8 100644
--- a/README
+++ b/README
@@ -14,15 +14,3 @@ Default directory is assumed to be `$HOME/fortunes'.
 
 This program is not useful if you have `strfile' installed, just use it
 & place the datafiles in fortune directory.
-
-
-1 Usage
-═══════
-
-  Get the fortunes by executing `fortunes.pl' & `kirch.sh' from scripts
-  directory. Read the source before running them, it's short.
-
-  ┌────
-  │ lyra mst # Print a random fortune from mst fortunes.
-  │ lyra ls # List all fortune files.
-  └────
diff --git a/cpanfile b/cpanfile
index f850fca..e611047 100644
--- a/cpanfile
+++ b/cpanfile
@@ -1,3 +1 @@
 requires 'Path::Tiny', '0.114';
-requires 'IPC::Run3', '0.048';
-requires 'HTTP::Simple', '0.004';
diff --git a/lyra.pl b/lyra.pl
index e2b57c8..6ad63dd 100755
--- a/lyra.pl
+++ b/lyra.pl
@@ -2,29 +2,44 @@
 
 use strict;
 use warnings;
-use feature 'say';
 
 use Path::Tiny;
-use IPC::Run3;
 
-my $fortune_dir = "$ENV{HOME}/fortunes";
+my @fortunes;
+my @fortune_paths = ("$ENV{HOME}/fortunes/", "/usr/share/games/fortune/");
 
-if ( $ARGV[0] ) {
-    if (-e "$fortune_dir/$ARGV[0]") {
-        my $fortune_file = "$fortune_dir/$ARGV[0]";
-        random($fortune_file);
-    } elsif ( $ARGV[0] eq "ls") {
-        run3[ "ls", $fortune_dir];
-    } else {
-        say "lyra: no such fortune";
+if (scalar @ARGV) {
+    foreach my $arg (@ARGV) {
+        foreach (@fortune_paths) {
+            my $path = path($_);
+            if (-e "$path/$arg") {
+                my $fortune_file = "$path/$arg";
+                read_fortunes("$path/$arg")
+            }
+        }
     }
 } else {
-    say "Usage: lyra <fortune>";
+    foreach (@fortune_paths) {
+        my $path = path($_);
+        if (-d $path) {
+            for ($path->children) {
+                read_fortunes($_) unless $_ =~ /\.dat$/i;
+            }
+        } else {
+            read_fortunes($path);
+        }
+    }
+}
+
+
+if (scalar @fortunes > 0) {
+    print $fortunes[ rand @fortunes ], "\n" ;
+} else {
+    print "lyra: no such fortune.\n";
 }
 
-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 read_fortunes {
+    my $path = shift @_;
+    my $file = path($path)->absolute;
+    push @fortunes, split(/\n%\n/, $file->slurp);
 }
diff --git a/scripts/fortunes.pl b/scripts/fortunes.pl
deleted file mode 100755
index ec785e3..0000000
--- a/scripts/fortunes.pl
+++ /dev/null
@@ -1,97 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use warnings;
-use feature 'say';
-
-use Path::Tiny;
-use IPC::Run3;
-
-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",
-
-    # levonk quotes (had starred kirch's fortunes repo, checked
-    # profile & found this).
-    "levon"
-        => "https://raw.githubusercontent.com/levonk/fortune/master/levonkquotes",
-);
-
-if ( $ARGV[0] ) {
-    if    ( $ARGV[0] eq "latest") { get_latest(); }
-    elsif ( $ARGV[0] eq "mirror") { get_mirror(); }
-    else { say "fortunes.pl: no such option"; }
-} else { say "Usage: ./fortunes.pl latest or ./fortune.pl mirror"; }
-
-sub get_latest {
-    foreach my $fortune (sort keys %fortunes) {
-        ftp("$fortune_dir/$fortune", $fortunes{$fortune});
-            $? # We assume non-zero is an error.
-        ? warn "[WARN] Failed to get $fortune :: $?\n"
-        : say "got $fortune";
-    }
-}
-
-sub get_mirror {
-    require HTTP::Simple;
-
-    # Ignore a warning, next line would've printed a warning.
-    no warnings 'once';
-    $HTTP::Simple::UA->verify_SSL(1);
-
-    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", @_]; }
diff --git a/scripts/kirch.sh b/scripts/kirch.sh
deleted file mode 100755
index cb79343..0000000
--- a/scripts/kirch.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-mkdir -p /tmp \
-    && git -C /tmp clone https://github.com/JKirchartz/fortunes.git kirch \
-    && cd /tmp/kirch && rm -r README.md LICENSE Makefile bin \
-    && cp -r /tmp/kirch/* $HOME/fortunes/