diff options
author | Yorhel <git@yorhel.nl> | 2020-12-13 12:44:29 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2020-12-13 12:44:31 +0100 |
commit | 59ded4ae7c3d2435268f82f176c3694d7c5a74ba (patch) | |
tree | aa15272264fb15e7ad738c79d12beaa450933e8c | |
parent | c52d6069ede8f995cc5d2eb09f93dbe66c2cfea7 (diff) |
AdvSearch: Add release producer filter
Mostly for feature parity with the old filters.
-rw-r--r-- | elm/AdvSearch/Fields.elm | 15 | ||||
-rw-r--r-- | elm/AdvSearch/Producers.elm | 29 | ||||
-rw-r--r-- | lib/VNWeb/AdvSearch.pm | 1 |
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' : () }; |