From e004630d1e55006a4d8bce8dfea0658274f69d1b Mon Sep 17 00:00:00 2001 From: Sean Whitton Date: Sun, 24 Jan 2021 11:25:03 -0700 Subject: gmi2email: factor out send_subscribed_gemtext Signed-off-by: Sean Whitton --- gmi2email | 69 ++++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 37 insertions(+), 32 deletions(-) diff --git a/gmi2email b/gmi2email index 1b04883..714e58a 100755 --- a/gmi2email +++ b/gmi2email @@ -114,42 +114,47 @@ foreach my $sub (<$subs_fh>) { chomp($gemlog = $'); } elsif (my ($uri, $y, $m, $d, $title) = /^=>\s*(\S+)\s+([0-9]{4})-([0-9]{2})-([0-9]{2})[\s-]*(.*)/) { - my ($rows) - = $dbh->selectrow_array( - "SELECT COUNT(*) FROM seen WHERE uri = \"$uri\""); - next unless $rows == 0; - my $mail = 1; - my ($type, $data); - #<<< - try { - ($type, $data) = gemini_fetch($uri, abs_links => 1); - } catch { - warn "when fetching $uri, $_"; - my ($code) = /"gemini error: ([1-6])/; - if ($code == 4) { - next; # try again next run - } else { - $mail = 0; # don't try this one again - } - }; - #>>> - $dbh->do("INSERT INTO seen VALUES (\"$uri\")"); - $mail and !$no_mail or next; - if ($type =~ m{^text/gemini}) { - gemtext_to_mail( - $data, %to_mail_opts, - gemlog => $gemlog // "unknown gemlog", - link_title => $title, - date => email_date timelocal 0, - 0, 12, $d, $m - 1, $y - )->send; - } else { - warn "$uri is not gemtext"; - } + send_subscribed_gemtext($uri, $gemlog // "unknown gemlog", + $title, timelocal 0, 0, 12, $d, $m - 1, $y); } } } +sub send_subscribed_gemtext { + my ($uri, $gemlog, $link_title, $feed_date) = @_; + my ($rows) + = $dbh->selectrow_array( + "SELECT COUNT(*) FROM seen WHERE uri = \"$uri\""); + next unless $rows == 0; + my $mail = 1; + my ($type, $data); + #<<< + try { + ($type, $data) = gemini_fetch($uri, abs_links => 1); + } catch { + warn "when fetching $uri, $_"; + my ($code) = /"gemini error: ([1-6])/; + if ($code == 4) { + return; # try again next run + } else { + $mail = 0; # don't try this one again + } + }; + #>>> + $dbh->do("INSERT INTO seen VALUES (\"$uri\")"); + $mail and !$no_mail or return; + if ($type =~ m{^text/gemini}) { + gemtext_to_mail( + $data, %to_mail_opts, + gemlog => $gemlog // "unknown gemlog", + link_title => $link_title, + date => email_date $feed_date + )->send; + } else { + warn "$uri is not gemtext"; + } +} + sub gemini_fetch { my ($uri, %opts) = @_; -- cgit v1.2.3