package shakuhachi

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file queryArtist.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
(*****************************************************************************)
(*                                                                           *)
(*  Copyright (C) 2026 Yves Ndiaye                                           *)
(*                                                                           *)
(* This Source Code Form is subject to the terms of the Mozilla Public       *)
(* License, v. 2.0. If a copy of the MPL was not distributed with this       *)
(* file, You can obtain one at https://mozilla.org/MPL/2.0/.                 *)
(*                                                                           *)
(*****************************************************************************)

include QueryUtil

(* TODO: Change the query to compute other field. *)
let matches_node _subfields artist node =
  let id = SkhcDb.Artist.id artist in
  let name = SkhcDb.Artist.name artist in
  let sort_name = SkhcDb.Artist.sort_name artist in
  let flag = SkhcDb.Artist.flag artist in
  let artwork = SkhcDb.Artist.artwork artist in
  let rating = SkhcDb.Artist.rating artist in
  match node with
  | Node.Substring s ->
      let insensible = true in
      let regex = false in
      matches ~insensible regex s name || omatches ~insensible regex s sort_name
  | Field (FString s) -> (
      let regex = Field.String.regex s in
      let insensible = Field.String.insensible s in
      let field = Field.String.field s in
      match field with
      | SortName fsort_name ->
          omatches ~insensible regex fsort_name sort_name
      | Title ftitle ->
          matches ~insensible regex ftitle name
      | Artist fartist ->
          matches ~insensible regex fartist name
      | Path fpath ->
          matches ~insensible regex fpath name
      | AlbumArtist falbum_artist ->
          matches ~insensible regex falbum_artist name
      | Composer fcomposer ->
          matches ~insensible regex fcomposer name
      | Album _falbum ->
          false
      | Genre _fgenre ->
          false
      | FileExtension _ ->
          false
    )
  | Field (FBool b) -> (
      match b with
      | Flag b ->
          flag = b
      | Art b ->
          let cover = Option.is_some artwork in
          b = cover
    )
  | Field (FInt i) -> (
      match i with
      | Id fid ->
          Range.matches fid id
      | Rating frating ->
          rating
          |> Option.map (Range.matches frating)
          |> Option.value ~default:false
      | Track _ftrack ->
          false
      | Year _fyear ->
          false
      | Plays _fcount ->
          false
      | Size _fsize ->
          false
      | AlbumCount _fcount ->
          false
      | Disc _fdisc ->
          false
      | Length _flength ->
          false
    )
  | Field (FFloat f) -> (
      match f with
      | AvgDuration _favg_duration ->
          false
      | AvgRating _favg_rating ->
          false
      | AvgSize _favg_size ->
          false
    )