A music player that connects to your cloud/distributed storage.
at main 1.5 kB view raw
1module UI.Sources.Query exposing (..) 2 3import Dict 4import Json.Decode as Decode 5import Sources exposing (Source) 6import Url exposing (Url) 7import Url.Parser as Url 8import Url.Parser.Query as Query 9 10 11requestedAddition : Url -> Bool 12requestedAddition url = 13 case Url.parse (urlParser identity) url of 14 Nothing -> 15 False 16 17 Just [] -> 18 False 19 20 Just (_ :: _) -> 21 True 22 23 24sourcesFromUrl : Url -> List Source 25sourcesFromUrl url = 26 url 27 |> Url.parse (urlParser <| List.filterMap fromUrl) 28 |> Maybe.withDefault [] 29 30 31 32-- 🔬 33 34 35fromUrl : String -> Maybe Source 36fromUrl json = 37 json 38 |> Decode.decodeString sourceParser 39 |> Result.toMaybe 40 41 42urlParser individualParser = 43 individualParser 44 |> Query.custom "source" 45 |> Url.query 46 47 48sourceParser : Decode.Decoder Source 49sourceParser = 50 Decode.andThen 51 (\{ service, data } -> 52 if Dict.member "name" data then 53 Decode.succeed 54 { id = "FILL_IN_LATER" 55 , data = data 56 , directoryPlaylists = True 57 , enabled = True 58 , service = service 59 } 60 61 else 62 Decode.fail "Missing `name` in `data` dictionary" 63 ) 64 <| 65 Decode.map2 66 (\s d -> { service = s, data = d }) 67 (Decode.field "kind" Sources.serviceDecoder) 68 (Decode.field "data" <| Decode.dict Decode.string)