diff options
author | Yorhel <git@yorhel.nl> | 2021-01-09 16:44:13 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2021-01-09 16:44:13 +0100 |
commit | 5d275ce2ceb1112c1e02bbe9134b22ac478975fc (patch) | |
tree | 11d3fb560bee52af8f4ab7c2cac73bce6f04799c /lib/VNWeb/Misc | |
parent | 1ec958ba9d2e40c65246bd29f28b2b50364b2a5a (diff) |
AdvSearch: Apply new saved default queries to listings instead of old filters
Diffstat (limited to 'lib/VNWeb/Misc')
-rw-r--r-- | lib/VNWeb/Misc/HomePage.pm | 25 | ||||
-rw-r--r-- | lib/VNWeb/Misc/Redirects.pm | 8 |
2 files changed, 19 insertions, 14 deletions
diff --git a/lib/VNWeb/Misc/HomePage.pm b/lib/VNWeb/Misc/HomePage.pm index d1ad1c31..5d4164a9 100644 --- a/lib/VNWeb/Misc/HomePage.pm +++ b/lib/VNWeb/Misc/HomePage.pm @@ -1,7 +1,7 @@ package VNWeb::Misc::HomePage; use VNWeb::Prelude; -use VNWeb::Filters; +use VNWeb::AdvSearch; use VNWeb::Discussions::Lib 'enrich_boards'; @@ -10,13 +10,13 @@ sub screens_ { state $stats ||= tuwf->dbRowi('SELECT count(*) as total, count(*) filter(where', $where, ') as subset from images i'); state $sample ||= 100*min 1, (200 / $stats->{subset}) * ($stats->{total} / $stats->{subset}); - my $filt = auth->pref('filter_vn') && eval { filter_parse v => auth->pref('filter_vn') }; - my $lst = $filt ? tuwf->dbAlli( + my $filt = advsearch_default 'v'; + my $lst = $filt->{query} ? tuwf->dbAlli( # Assumption: If we randomly select 30 matching VNs, there'll be at least 4 VNs with qualified screenshots # (As of Sep 2020, over half of the VNs in the database have screenshots, so that assumption usually works) 'SELECT * FROM ( SELECT DISTINCT ON (v.id) i.id, i.width, i,height, v.id AS vid, v.title - FROM (SELECT id, title FROM vn v WHERE NOT v.hidden AND ', filter_vn_query($filt), ' ORDER BY random() LIMIT', \30, ') v + FROM (SELECT id, title FROM vn v WHERE NOT v.hidden AND ', $filt->sql_where(), ' ORDER BY random() LIMIT', \30, ') v JOIN vn_screenshots vs ON v.id = vs.id JOIN images i ON i.id = vs.scr WHERE ', $where, ' @@ -161,23 +161,28 @@ sub recent_vn_posts_ { sub releases_ { my($released) = @_; - my $filt = auth->pref('filter_release') && eval { filter_parse r => auth->pref('filter_release') }; - $filt = { $filt ? %$filt : (), date_before => undef, date_after => undef, released => $released?1:0 }; + my $filt = advsearch_default 'r'; + + # Drop any top-level date filters + $filt->{query} = [ grep !(ref $_ eq 'ARRAY' && $_->[0] eq 'released'), $filt->{query}->@* ] if $filt->{query}; + delete $filt->{query} if $filt->{query} && $filt->{query}[0] eq 'released'; + + # Add the release date as filter, we need to construct a filter for the header link anyway + $filt->{query} = [ 'and', [ released => $released ? '<=' : '>', 1 ], $filt->{query} || () ]; # XXX This query is kinda slow, an index on releases.released would probably help. my $lst = tuwf->dbAlli(' SELECT id, title, original, released FROM releases r - WHERE NOT hidden AND released', $released ? '<=' : '>', \strftime('%Y%m%d', gmtime), ' - AND ', filter_release_query($filt), ' + WHERE NOT hidden AND ', $filt->sql_where(), ' ORDER BY released', $released ? 'DESC' : '', ', id LIMIT 10' ); enrich_flatten plat => id => id => 'SELECT id, platform FROM releases_platforms WHERE id IN', $lst; enrich_flatten lang => id => id => 'SELECT id, lang FROM releases_lang WHERE id IN', $lst; h1_ sub { - a_ href => '/r?fil='.VNDB::Func::fil_serialize($filt).';o=a;s=released', 'Upcoming Releases' if !$released; - a_ href => '/r?fil='.VNDB::Func::fil_serialize($filt).';o=d;s=released', 'Just Released' if $released; + a_ href => '/r?f='.$filt->query_encode().';o=a;s=released', 'Upcoming Releases' if !$released; + a_ href => '/r?f='.$filt->query_encode().';o=d;s=released', 'Just Released' if $released; }; ul_ sub { li_ sub { diff --git a/lib/VNWeb/Misc/Redirects.pm b/lib/VNWeb/Misc/Redirects.pm index 964c4e24..4a84150b 100644 --- a/lib/VNWeb/Misc/Redirects.pm +++ b/lib/VNWeb/Misc/Redirects.pm @@ -1,7 +1,7 @@ package VNWeb::Misc::Redirects; use VNWeb::Prelude; -use VNWeb::Filters; +use VNWeb::AdvSearch; # VNDB URLs don't have a trailing /, redirect if we get one. @@ -28,11 +28,11 @@ TUWF::get qr{/v/rand}, sub { state $stats ||= tuwf->dbRowi('SELECT COUNT(*) AS total, COUNT(*) FILTER(WHERE NOT hidden) AS subset FROM vn'); state $sample ||= 100*min 1, (100 / $stats->{subset}) * ($stats->{total} / $stats->{subset}); - my $filt = auth->pref('filter_vn') && eval { filter_parse v => auth->pref('filter_vn') }; + my $filt = advsearch_default 'v'; my $vn = tuwf->dbVali(' SELECT id - FROM vn v', $filt ? '' : ('TABLESAMPLE SYSTEM (', \$sample, ')'), ' - WHERE NOT hidden AND', filter_vn_query($filt||{}), ' + FROM vn v', $filt->{query} ? '' : ('TABLESAMPLE SYSTEM (', \$sample, ')'), ' + WHERE NOT hidden AND', $filt->sql_where(), ' ORDER BY random() LIMIT 1' ); return tuwf->resNotFound if !$vn; |