fixed: Syndicated Content picks wrong entries for interleaving

This commit is contained in:
Graham Knop 2008-03-25 20:07:23 +00:00
parent ab0d5cbecb
commit 0bf48f9349
3 changed files with 23 additions and 19 deletions

View file

@ -466,27 +466,21 @@ sub _create_grouped_items{
# No need to return because we're doing everything by reference.
sub _create_interleaved_items {
my($items,$rss_feeds,$maxHeadlines,$hasTermsRegex)=@_;
my $items_remain = 1;
while((@$items < $maxHeadlines) && $items_remain){
$items_remain=0;
foreach my $rss(@$rss_feeds){
if(defined $rss->{items}
&& @$items < $maxHeadlines
&& (my $item = shift @{$rss->{items}})
){
$item->{site_title}=$rss->{channel}->{title};
$item->{site_link}=$rss->{channel}->{link};
if(! $hasTermsRegex || _check_hasTerms($item,$hasTermsRegex)){
push @{$items},$item;
}
if (@{$rss->{items}}) {
$items_remain = 1;
}
}
}
my ($items, $rss_feeds, $maxHeadlines, $hasTermsRegex) = @_;
# put all items together into a single list
foreach my $rss (@$rss_feeds) {
while (my $item = shift @{$rss->{items}}) {
if ($hasTermsRegex && ! _check_hasTerms($item, $hasTermsRegex)) {
next;
}
$item->{site_title} = $rss->{channel}->{title};
$item->{site_link} = $rss->{channel}->{link};
push @$items, $item;
}
}
@$items = sort { $b->{date} <=> $a->{date} } @$items;
# limit to $maxHeadlines
@$items = @$items[0 .. ($maxHeadlines - 1)];
}
#-------------------------------------------------------------------