diff --git a/elm.json b/elm.json index aee6e416..80eab943 100644 --- a/elm.json +++ b/elm.json @@ -28,6 +28,7 @@ "elm/time": "1.0.0", "elm/url": "1.0.0", "elm/virtual-dom": "1.0.2", + "elm-community/dict-extra": "2.4.0", "elm-community/html-extra": "3.4.0", "elm-community/list-extra": "8.5.2", "elm-community/maybe-extra": "5.3.0", diff --git a/src/Applications/UI/Playlists/Alfred.elm b/src/Applications/UI/Playlists/Alfred.elm index b28aff83..1573ebbd 100644 --- a/src/Applications/UI/Playlists/Alfred.elm +++ b/src/Applications/UI/Playlists/Alfred.elm @@ -1,6 +1,9 @@ module UI.Playlists.Alfred exposing (create, select) import Alfred exposing (..) +import Conditional exposing (ifThenElse) +import Dict +import Dict.Extra as Dict import List.Extra as List import Material.Icons.Round as Icons import Playlists exposing (..) @@ -15,13 +18,8 @@ import UI.Types as UI create : List IdentifiedTrack -> List Playlist -> Alfred UI.Msg create tracks playlists = let - playlistNames = - playlists - |> List.map .name - |> List.sortBy String.toLower - index = - makeIndex playlistNames + makeIndex playlists in Alfred.create { action = createAction tracks @@ -80,13 +78,8 @@ createAction tracks ctx = select : List Playlist -> Alfred UI.Msg select playlists = let - playlistNames = - playlists - |> List.map .name - |> List.sortBy String.toLower - index = - makeIndex playlistNames + makeIndex playlists in Alfred.create { action = selectAction playlists @@ -110,16 +103,27 @@ selectAction playlists { result } = -- ㊙️ -makeIndex playlistNames = - playlistNames +makeIndex playlists = + playlists + |> Dict.groupBy + (\p -> ifThenElse p.autoGenerated "AutoGenerated Directory Playlists" "Your Playlists") + |> Dict.toList + |> List.reverse + |> List.map + (\( k, v ) -> + ( k + , v + |> List.map + (\playlist -> + { icon = Just (Icons.queue_music 16) + , title = playlist.name + , value = Alfred.StringValue playlist.name + } + ) + |> List.sortBy (.title >> String.toLower) + ) + ) |> List.map - (\name -> - { icon = Just (Icons.queue_music 16) - , title = name - , value = Alfred.StringValue name - } + (\( k, v ) -> + { name = Just k, items = v } ) - |> (\items -> - { name = Nothing, items = items } - ) - |> List.singleton