summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2020-12-13 12:44:29 +0100
committerYorhel <git@yorhel.nl>2020-12-13 12:44:31 +0100
commit59ded4ae7c3d2435268f82f176c3694d7c5a74ba (patch)
treeaa15272264fb15e7ad738c79d12beaa450933e8c
parentc52d6069ede8f995cc5d2eb09f93dbe66c2cfea7 (diff)
AdvSearch: Add release producer filter
Mostly for feature parity with the old filters.
-rw-r--r--elm/AdvSearch/Fields.elm15
-rw-r--r--elm/AdvSearch/Producers.elm29
-rw-r--r--lib/VNWeb/AdvSearch.pm1
3 files changed, 27 insertions, 18 deletions
diff --git a/elm/AdvSearch/Fields.elm b/elm/AdvSearch/Fields.elm
index 82f5fa3e..5b1e1a02 100644
--- a/elm/AdvSearch/Fields.elm
+++ b/elm/AdvSearch/Fields.elm
@@ -258,6 +258,7 @@ type FieldModel
| FMVotecount (AR.Model Int)
| FMMinAge (AR.Model Int)
| FMDeveloper AP.Model
+ | FMProducer AP.Model
| FMRDate AD.Model
| FMResolution AE.Model
| FMEngine AEng.Model
@@ -294,6 +295,7 @@ type FieldMsg
| FSVotecount AR.Msg
| FSMinAge AR.Msg
| FSDeveloper AP.Msg
+ | FSProducer AP.Msg
| FSRDate AD.Msg
| FSResolution AE.Msg
| FSEngine AEng.Msg
@@ -346,7 +348,7 @@ fields =
, f V "" 0 FMTag AG.init (AG.fromQuery 2)
, f V "My Labels" 0 FMLabel AS.init AS.labelFromQuery
, f V "Length" 0 FMLength AS.init AS.lengthFromQuery
- , f V "Developer" 0 FMDeveloper AP.init AP.devFromQuery
+ , f V "Developer" 0 FMDeveloper AP.init (AP.fromQuery False)
, f V "Release date" 0 FMRDate AD.init AD.fromQuery
, f V "Popularity" 0 FMPopularity AR.popularityInit AR.popularityFromQuery
, f V "Rating" 0 FMRating AR.ratingInit AR.ratingFromQuery
@@ -366,7 +368,8 @@ fields =
, l R "Self-published" 0 [(QInt 63 Eq 1, "Self-published"), (QInt 63 Ne 1, "Commercially published")]
, l R "Uncensored" 0 [(QInt 64 Eq 1, "Uncensored (no mosaic)"), (QInt 64 Ne 1, "Censored (or no erotic content to censor)")]
, l R "Official" 0 [(QInt 65 Eq 1, "Official"), (QInt 65 Ne 1, "Unofficial")]
- , f R "Developer" 0 FMDeveloper AP.init AP.devFromQuery
+ , f R "Developer" 0 FMDeveloper AP.init (AP.fromQuery False)
+ , f R "Producer" 0 FMProducer AP.init (AP.fromQuery True)
, f R "Release date" 0 FMRDate AD.init AD.fromQuery
, f R "Resolution" 0 FMResolution AE.init AE.fromQuery
, f R "Age rating" 0 FMMinAge AR.minageInit AR.minageFromQuery
@@ -407,6 +410,7 @@ fieldUpdate dat msg_ (num, dd, model) =
FMTag m -> Cmd.map FSTag (A.refocus m.conf)
FMTrait m -> Cmd.map FSTrait (A.refocus m.conf)
FMDeveloper m -> Cmd.map FSDeveloper (A.refocus m.conf)
+ FMProducer m -> Cmd.map FSProducer (A.refocus m.conf)
FMResolution m -> Cmd.map FSResolution (A.refocus m.conf)
FMEngine m -> Cmd.map FSEngine (A.refocus m.conf)
_ -> Cmd.none
@@ -457,6 +461,7 @@ fieldUpdate dat msg_ (num, dd, model) =
(FSVotecount msg,FMVotecount m)-> maps FMVotecount (AR.update msg m)
(FSMinAge msg ,FMMinAge m) -> maps FMMinAge (AR.update msg m)
(FSDeveloper msg,FMDeveloper m)-> mapf FMDeveloper FSDeveloper (AP.update dat msg m)
+ (FSProducer msg, FMProducer m) -> mapf FMProducer FSProducer (AP.update dat msg m)
(FSRDate msg, FMRDate m) -> maps FMRDate (AD.update msg m)
(FSResolution msg,FMResolution m)->mapf FMResolution FSResolution (AE.update dat msg m)
(FSEngine msg, FMEngine m) -> mapf FMEngine FSEngine (AEng.update dat msg m)
@@ -517,7 +522,8 @@ fieldView dat (_, dd, model) =
FMRating m -> f FSRating (AR.ratingView m)
FMVotecount m -> f FSVotecount (AR.votecountView m)
FMMinAge m -> f FSMinAge (AR.minageView m)
- FMDeveloper m -> f FSDeveloper (AP.devView dat m)
+ FMDeveloper m -> f FSDeveloper (AP.view False dat m)
+ FMProducer m -> f FSProducer (AP.view True dat m)
FMRDate m -> f FSRDate (AD.view m)
FMResolution m -> f FSResolution (AE.view m)
FMEngine m -> f FSEngine (AEng.view m)
@@ -557,7 +563,8 @@ fieldToQuery dat (_, _, model) =
FMRating m -> AR.toQuery (QInt 10) (QStr 10) m
FMVotecount m-> AR.toQuery (QInt 11) (QStr 11) m
FMMinAge m -> AR.toQuery (QInt 10) (QStr 10) m
- FMDeveloper m-> AP.toQuery (QInt 6) m
+ FMDeveloper m-> AP.toQuery False m
+ FMProducer m -> AP.toQuery True m
FMRDate m -> AD.toQuery m
FMResolution m-> AE.toQuery m
FMEngine m -> AEng.toQuery m
diff --git a/elm/AdvSearch/Producers.elm b/elm/AdvSearch/Producers.elm
index 21a754eb..03e0b16b 100644
--- a/elm/AdvSearch/Producers.elm
+++ b/elm/AdvSearch/Producers.elm
@@ -50,10 +50,14 @@ update dat msg model =
, c )
-toQuery f m = S.toQuery f m.sel
-
-fromQuery f dat q =
- S.fromQuery f dat q |> Maybe.map (\(ndat,sel) ->
+toQuery prod m = S.toQuery (QInt (if prod then 17 else 6)) m.sel
+
+fromQuery prod dat qf = S.fromQuery (\q ->
+ case (prod, q) of
+ (False, QInt 6 op v) -> Just (op, v)
+ (True, QInt 17 op v) -> Just (op, v)
+ _ -> Nothing) dat qf
+ |> Maybe.map (\(ndat,sel) ->
( { ndat | objid = ndat.objid+1 }
, { sel = { sel | single = False }
, conf = { wrap = Search, id = "advsearch_prod" ++ String.fromInt ndat.objid, source = A.producerSource }
@@ -62,25 +66,22 @@ fromQuery f dat q =
))
-devFromQuery = fromQuery (\q ->
- case q of
- QInt 6 op v -> Just (op, v)
- _ -> Nothing)
-
-devView : Data -> Model -> (Html Msg, () -> List (Html Msg))
-devView dat model =
+view : Bool -> Data -> Model -> (Html Msg, () -> List (Html Msg))
+view prod dat model =
+ let lbl = if prod then "Producer" else "Developer"
+ in
( case Set.toList model.sel.sel of
- [] -> b [ class "grayedout" ] [ text "Developer" ]
+ [] -> b [ class "grayedout" ] [ text lbl ]
[s] -> span [ class "nowrap" ]
[ S.lblPrefix model.sel
, b [ class "grayedout" ] [ text <| "p" ++ String.fromInt s ++ ":" ]
, Dict.get s dat.producers |> Maybe.map (\p -> p.name) |> Maybe.withDefault "" |> text
]
- l -> span [] [ S.lblPrefix model.sel, text <| "Developers (" ++ String.fromInt (List.length l) ++ ")" ]
+ l -> span [] [ S.lblPrefix model.sel, text <| lbl ++ " (" ++ String.fromInt (List.length l) ++ ")" ]
, \() ->
[ div [ class "advheader" ]
- [ h3 [] [ text "Developer" ]
+ [ h3 [] [ text lbl ]
, Html.map Sel (S.opts model.sel True False)
]
, ul [] <| List.map (\s ->
diff --git a/lib/VNWeb/AdvSearch.pm b/lib/VNWeb/AdvSearch.pm
index 1b00f772..ff0bc0fc 100644
--- a/lib/VNWeb/AdvSearch.pm
+++ b/lib/VNWeb/AdvSearch.pm
@@ -346,6 +346,7 @@ f r => 4 => 'platform', { required => 0, default => undef, enum => \%PLATFORM }
};
f r => 6 => 'developer',{ vndbid => 'p' }, '=' => sub { sql 'r.id IN(SELECT id FROM releases_producers WHERE developer AND pid = vndbid_num(', \$_, '))' };
+f r => 17 => 'producer', { vndbid => 'p' }, '=' => sub { sql 'r.id IN(SELECT id FROM releases_producers WHERE pid = vndbid_num(', \$_, '))' };
f r => 7 => 'released', { fuzzyrdate => 1 }, sql => sub { sql 'r.released', $_[0], \($_ == 1 ? strftime('%Y%m%d', gmtime) : $_) };
f r => 8 => 'resolution', { type => 'array', length => 2, values => { uint => 1, max => 32767 } },
sql => sub { sql 'NOT r.patch AND r.reso_x', $_[0], \$_->[0], 'AND r.reso_y', $_[0], \$_->[1], $_->[0] ? 'AND r.reso_x > 0' : () };