package shakuhachi

  1. Overview
  2. Docs
A music collection manager

Install

dune-project
 Dependency

Authors

Maintainers

Sources

0.1.0.tar.gz
sha256=bb7f91cc44c09f922d2a614e9e01fd0d2976840bacf839a8b99de63c6fc5b3b8
sha512=f02827db4228b017bb2ad7d64cb1c0667831ec2341e6f759266ec834e40627c2affeace143c6d5e769b3acce63f889b3cbd1a9ca4768091840e8fce1d4750f86

doc/src/shakuhachi.config/format.ml.html

Source file format.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
(**********************************************************************************************)
(*                                                                                            *)
(* This file is part of shakuhachi: a music collection manager                                *)
(* Copyright (C) 2025 Yves Ndiaye                                                             *)
(*                                                                                            *)
(* shakuhachi is free software: you can redistribute it and/or modify it under the terms      *)
(* of the GNU General Public License as published by the Free Software Foundation,            *)
(* either version 3 of the License, or (at your option) any later version.                    *)
(*                                                                                            *)
(* shakuhachi is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;    *)
(* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR           *)
(* PURPOSE.  See the GNU General Public License for more details.                             *)
(* You should have received a copy of the GNU General Public License along with shakuhachi.   *)
(* If not, see <http://www.gnu.org/licenses/>.                                                *)
(*                                                                                            *)
(**********************************************************************************************)

module Keys = struct
  let filename = "filename"
  let music_list = "music_list"
  let artist_list = "artist_list"
  let album_list = "album_list"
  let music_remove = "music_remove"
end

module Default = struct
  open SkhcQuery

  let filename =
    Printf.sprintf "%s-%s %s%s" Keys.disc Keys.track Keys.title Keys.extension

  let music_list = Printf.sprintf "%s - %s" Keys.artist Keys.title
  let album_list = Printf.sprintf "%s - %s" Keys.artist Keys.album
  let artist_list = Printf.sprintf "%s - %s" Keys.id Keys.artist

  let music_remove =
    Printf.sprintf "%s - %s: %s" Keys.artist Keys.title SkhcQuery.Keys.path
end

type t = {
  filename : string;
  music_list : string;
  album_list : string;
  artist_list : string;
  music_remove : string;
}

let section = "format"

let default : t =
  let open Default in
  { filename; music_list; album_list; artist_list; music_remove }

let init ~filename ~music_list ~album_list ~artist_list ~music_remove =
  { filename; music_list; artist_list; album_list; music_remove }

let conv ~default key section =
  match Section.assoc key section with Some e -> e | None -> default

let of_section section =
  let filename = conv ~default:Default.filename Keys.filename section in
  let music_list = conv ~default:Default.music_list Keys.music_list section in
  let artist_list =
    conv ~default:Default.artist_list Keys.artist_list section
  in
  let album_list = conv ~default:Default.album_list Keys.album_list section in
  let music_remove =
    conv ~default:Default.music_remove Keys.music_remove section
  in
  { filename; music_list; artist_list; album_list; music_remove }

let to_section t =
  let { filename; music_list; artist_list; album_list; music_remove } = t in
  Section.init section
    [
      (Keys.filename, filename);
      (Keys.music_list, music_list);
      (Keys.album_list, album_list);
      (Keys.artist_list, artist_list);
      (Keys.music_remove, music_remove);
    ]

let filename t = t.filename
let music_list t = t.music_list
let artist_list t = t.artist_list
let album_list t = t.album_list
let music_remove t = t.music_remove