A music player that connects to your cloud/distributed storage. diffuse.sh
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164module Tracks.Encoding exposing (decodeFavourite, decodeTrack, encodeFavourite, encodeMaybe, encodeSortBy, encodeSortDirection, encodeTags, encodeTrack, favouriteDecoder, sortByDecoder, sortDirectionDecoder, tagsDecoder, trackDecoder)
import Json.Decode as Decodeimport Json.Encode as Encodeimport Tracks exposing (..)
-- ENCODE
encodeFavourite : Favourite -> Encode.ValueencodeFavourite fav = Encode.object [ ( "artist", Encode.string fav.artist ) , ( "title", Encode.string fav.title ) ]
encodeSortBy : SortBy -> Encode.ValueencodeSortBy v = case v of Artist -> Encode.string "ARTIST"
Album -> Encode.string "ALBUM"
PlaylistIndex -> Encode.string "PLAYLIST_INDEX"
Title -> Encode.string "TITLE"
encodeSortDirection : SortDirection -> Encode.ValueencodeSortDirection v = case v of Asc -> Encode.string "ASC"
Desc -> Encode.string "DESC"
encodeTrack : Track -> Encode.ValueencodeTrack track = Encode.object [ ( "id", Encode.string track.id ) , ( "path", Encode.string track.path ) , ( "sourceId", Encode.string track.sourceId ) , ( "tags", encodeTags track.tags ) ]
encodeTags : Tags -> Encode.ValueencodeTags tags = Encode.object [ ( "disc", Encode.int tags.disc ) , ( "nr", Encode.int tags.nr )
-- , ( "album", Encode.string tags.album ) , ( "artist", Encode.string tags.artist ) , ( "title", Encode.string tags.title )
-- , ( "genre", encodeMaybe tags.genre Encode.string ) , ( "picture", encodeMaybe tags.picture Encode.string ) , ( "year", encodeMaybe tags.year Encode.int ) ]
encodeMaybe : Maybe a -> (a -> Encode.Value) -> Encode.ValueencodeMaybe maybe encoder = maybe |> Maybe.map encoder |> Maybe.withDefault Encode.null
-- DECODE
decodeFavourite : Decode.Value -> Maybe FavouritedecodeFavourite = Decode.decodeValue favouriteDecoder >> Result.toMaybe
decodeTrack : Decode.Value -> Maybe TrackdecodeTrack = Decode.decodeValue trackDecoder >> Result.toMaybe
favouriteDecoder : Decode.Decoder FavouritefavouriteDecoder = Decode.map2 Favourite (Decode.field "artist" Decode.string) (Decode.field "title" Decode.string)
sortByDecoder : Decode.Decoder SortBysortByDecoder = Decode.andThen (\string -> case string of "ARTIST" -> Decode.succeed Artist
"ALBUM" -> Decode.succeed Album
"PLAYLIST_INDEX" -> Decode.succeed PlaylistIndex
"TITLE" -> Decode.succeed Title
_ -> Decode.fail "Invalid SortBy" ) Decode.string
sortDirectionDecoder : Decode.Decoder SortDirectionsortDirectionDecoder = Decode.andThen (\string -> case string of "ASC" -> Decode.succeed Asc
"DESC" -> Decode.succeed Desc
_ -> Decode.fail "Invalid SortDirection" ) Decode.string
tagsDecoder : Decode.Decoder TagstagsDecoder = Decode.map8 Tags (Decode.field "disc" Decode.int) (Decode.field "nr" Decode.int) (Decode.field "album" Decode.string) (Decode.field "artist" Decode.string) (Decode.field "title" Decode.string) (Decode.maybe <| Decode.field "genre" Decode.string) (Decode.maybe <| Decode.field "picture" Decode.string) (Decode.maybe <| Decode.field "year" Decode.int)
trackDecoder : Decode.Decoder TracktrackDecoder = Decode.map4 Track (Decode.field "id" Decode.string) (Decode.field "path" Decode.string) (Decode.field "sourceId" Decode.string) (Decode.field "tags" tagsDecoder)