summaryrefslogtreecommitdiff
path: root/lib/VNWeb/Misc
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2021-01-09 16:44:13 +0100
committerYorhel <git@yorhel.nl>2021-01-09 16:44:13 +0100
commit5d275ce2ceb1112c1e02bbe9134b22ac478975fc (patch)
tree11d3fb560bee52af8f4ab7c2cac73bce6f04799c /lib/VNWeb/Misc
parent1ec958ba9d2e40c65246bd29f28b2b50364b2a5a (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.pm25
-rw-r--r--lib/VNWeb/Misc/Redirects.pm8
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;