๐Ÿ“ฆ sleepyfran / duets

๐Ÿ“„ ListSongs.Command.fs ยท 53 lines
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) }