Commit e745151b authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

perform filtering by via, platform etc. before the main loop

parent 45ce7793
Loading
Loading
Loading
Loading
+65 −26
Original line number Diff line number Diff line
@@ -24,6 +24,51 @@ my %default = (
	admode  => 'deparr',
);

sub result_has_line {
	my ( $result, @lines ) = @_;
	my $line = $result->line;

	if ( List::MoreUtils::any { $line =~ m{^$_} } @lines ) {
		return 1;
	}
	return 0;
}

sub result_has_platform {
	my ( $result, @platforms ) = @_;
	my $platform = ( split( qr{ }, $result->platform // '' ) )[0];

	if ( List::MoreUtils::any { $_ eq $platform } @platforms ) {
		return 1;
	}
	return 0;
}

sub result_has_train_type {
	my ( $result, @train_types ) = @_;
	my $train_type = $result->type;

	if ( List::MoreUtils::any { $train_type =~ m{^$_} } @train_types ) {
		return 1;
	}
	return 0;
}

sub result_has_via {
	my ( $result, $via ) = @_;

	if ( not $result->can('route_post') ) {
		return 1;
	}

	my @route = $result->route_post;

	if ( List::MoreUtils::any { m{$via}i } @route ) {
		return 1;
	}
	return 0;
}

sub log_api_access {
	my $counter = 1;
	if ( -r $ENV{DBFAKEDISPLAY_STATS} ) {
@@ -322,6 +367,7 @@ sub handle_request {
	my $callback       = $self->param('callback');
	my $with_related   = !$self->param('no_related');
	my $save_defaults  = $self->param('save_defaults') // 0;
	my $limit          = $self->param('limit') // 0;
	my @train_types    = split( /,/, $self->param('train_types') // q{} );
	my %opt;

@@ -458,33 +504,26 @@ sub handle_request {
		}
	}

	for my $result (@results) {
		my $platform   = ( split( qr{ }, $result->platform // '' ) )[0];
		my $line       = $result->line;
		my $train_type = $result->type;
		my $delay      = $result->delay;
		if ( $via and $result->can('route_post') ) {
			$via =~ s{ , \s* }{|}gx;
			my @route = $result->route_post;
			if ( not( List::MoreUtils::any { m{$via}i } @route ) ) {
				next;
	if (@lines) {
		@results = grep { result_has_line( $_, @lines ) } @results;
	}

	if (@platforms) {
		@results = grep { result_has_platform( $_, @platforms ) } @results;
	}
		if ( @platforms
			and not( List::MoreUtils::any { $_ eq $platform } @platforms ) )
		{
			next;
		}
		if ( @lines and not( List::MoreUtils::any { $line =~ m{^$_} } @lines ) )
		{
			next;

	if ($via) {
		$via =~ s{ , \s* }{|}gx;
		@results = grep { result_has_via( $_, $via ) } @results;
	}
		if ( @train_types
			and
			not( List::MoreUtils::any { $train_type =~ m{^$_} } @train_types ) )
		{
			next;

	if (@train_types) {
		@results = grep { result_has_train_type( $_, @train_types ) } @results;
	}

	for my $result (@results) {
		my $platform = ( split( qr{ }, $result->platform // '' ) )[0];
		my $delay = $result->delay;
		if ( $backend eq 'iris' and $admode eq 'arr' and not $result->arrival )
		{
			next;