A music player that connects to your cloud/distributed storage. diffuse.sh
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869module UI.Sources.Query exposing (..)
import Dictimport Json.Decode as Decodeimport Sources exposing (Source)import Url exposing (Url)import Url.Parser as Urlimport Url.Parser.Query as Query
requestedAddition : Url -> BoolrequestedAddition url = case Url.parse (urlParser identity) url of Nothing -> False
Just [] -> False
Just (_ :: _) -> True
sourcesFromUrl : Url -> List SourcesourcesFromUrl url = url |> Url.parse (urlParser <| List.filterMap fromUrl) |> Maybe.withDefault []
-- 🔬
fromUrl : String -> Maybe SourcefromUrl json = json |> Decode.decodeString sourceParser |> Result.toMaybe
urlParser individualParser = individualParser |> Query.custom "source" |> Url.query
sourceParser : Decode.Decoder SourcesourceParser = Decode.andThen (\{ service, data } -> if Dict.member "name" data then Decode.succeed { id = "FILL_IN_LATER" , data = data , directoryPlaylists = True , enabled = True , service = service }
else Decode.fail "Missing `name` in `data` dictionary" ) <| Decode.map2 (\s d -> { service = s, data = d }) (Decode.field "kind" Sources.serviceDecoder) (Decode.field "data" <| Decode.dict Decode.string)