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
53namespace Duets.Cli.Components.Commands
open Duets.Cli.Components
open Duets.Cli.SceneIndex
open Duets.Cli.Text
open Duets.Entities
[<RequireQualifiedAccess>]
module ListSongsCommand =
let private showUnfinishedTable
columns
(unfinishedSongs: Unfinished<Song> list)
=
let rows =
unfinishedSongs
|> List.map (fun (Unfinished(song, _, quality)) ->
[ song.Name
Songs.length song.Length
$"{Styles.Level.from quality}%%"
"-" ])
showTableWithTitle "Unfinished songs" columns rows
let private showFinishedTable columns (finishedSongs: Finished<Song> list) =
let rows =
finishedSongs
|> List.map (fun (Finished(song, quality)) ->
[ song.Name
Songs.length song.Length
$"{Styles.Level.from quality}%%"
$"{Styles.Level.from song.Practice}%%" ])
showTableWithTitle "Finished songs" columns rows
/// Command to list all songs, finished and unfinished.
let create
(unfinishedSongs: Unfinished<Song> list)
(finishedSongs: Finished<Song> list)
=
{ Name = "list songs"
Description =
"Lists all the songs, finished and unfinished, that your band has created"
Handler =
(fun _ ->
let columns =
[ "Name"; "Length"; "Quality"; "Practice" ]
|> List.map Styles.header
showUnfinishedTable columns unfinishedSongs
showFinishedTable columns finishedSongs
Scene.World) }