[interchange] allow for bounces from Autoload routines

Stefan Hornburg <[email protected]>
Newsgroups gmane.comp.web.interchange.cvs
Message-ID <[email protected]>
commit 4ccb37a636724c0de01b785955e3a72d2f1d44d5
Author: Stefan Hornburg (Racke) <[email protected]>
Date:   Sun Mar 7 08:06:20 2010 +0100

    allow for bounces from Autoload routines
    added new autoload_inspect SpecialSub to signal skipping of further Autoload processing

 lib/Vend/Config.pm   |    8 +++++++-
 lib/Vend/Dispatch.pm |   18 ++++++++++++++----
 2 files changed, 21 insertions(+), 5 deletions(-)
---
diff --git a/lib/Vend/Config.pm b/lib/Vend/Config.pm
index f4a013e..ffda977 100644
--- a/lib/Vend/Config.pm
+++ b/lib/Vend/Config.pm
@@ -3238,7 +3238,13 @@ my @Cleanups;
 
 	Autoload => sub {
 #::logDebug("Doing Autoload dispatch...");
-		Vend::Dispatch::run_macro($Vend::Cfg->{Autoload});
+		my ($subname, $inspect_sub);
+
+		if ($subname = $Vend::Cfg->{SpecialSub}{autoload_inspect}) {
+			$inspect_sub = $Vend::Cfg->{Sub}{$subname} || $Global::GlobalSub->{$subname};
+		}
+		
+		Vend::Dispatch::run_macro($Vend::Cfg->{Autoload}, undef, $inspect_sub);
 	},
 
 	CookieLogin => sub {
diff --git a/lib/Vend/Dispatch.pm b/lib/Vend/Dispatch.pm
index cf982a1..d0b7d29 100644
--- a/lib/Vend/Dispatch.pm
+++ b/lib/Vend/Dispatch.pm
@@ -1190,7 +1190,8 @@ sub run_macro {
 	my $macro = shift
 		or return;
 	my $content_ref = shift;
-
+	my $inspect_sub = shift;
+		
 	my @mac;
 	if(ref $macro eq 'ARRAY') {
 		@mac = @$macro;
@@ -1203,6 +1204,8 @@ sub run_macro {
 	}
 
 	for my $m (@mac) {
+		my $ret;
+		
 		if ($m =~ /^\w+$/) {
 			my $sub = $Vend::Cfg->{Sub}{$m} || $Global::GlobalSub->{$m}
 				or do {
@@ -1217,13 +1220,19 @@ sub run_macro {
 					}
 					next;
 				};
-			$sub->($content_ref);
+			$ret = $sub->($content_ref);
 		}
 		elsif($m =~ /^\w+-\w+$/) {
-			Vend::Interpolate::tag_profile($m);
+			$ret = Vend::Interpolate::tag_profile($m);
 		}
 		else {
-			interpolate_html($m);
+			$ret = interpolate_html($m);
+		}
+
+		if ($inspect_sub) {
+			unless ($inspect_sub->($m, $ret)) {
+				last;
+			}
 		}
 	}
 }
@@ -1656,6 +1665,7 @@ EOF
 
 	for my $routine (@{$Vend::Cfg->{DispatchRoutines}}) {
 		$routine->();
+		return if $Vend::Sent;
 	}
 #show_times("end DispatchRoutines") if $Global::ShowTimes;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.