A music player that connects to your cloud/distributed storage.
1module Queue exposing (EngineItem, Item, makeEngineItem, makeItem, makeTrackUrl)
2
3import Dict exposing (Dict)
4import List.Extra as List
5import Sources exposing (Source)
6import Sources.Processing exposing (HttpMethod(..))
7import Sources.Services
8import Time
9import Tracks exposing (IdentifiedTrack, Tags, Track)
10
11
12
13-- 🌳
14
15
16type alias Item =
17 { manualEntry : Bool
18 , identifiedTrack : IdentifiedTrack
19 }
20
21
22type alias EngineItem =
23 { isCached : Bool
24 , progress : Maybe Float
25 , sourceId : String
26 , trackId : String
27 , trackTags : Tags
28 , trackPath : String
29 , url : String
30 }
31
32
33
34-- 🔱
35
36
37makeEngineItem : Time.Posix -> List Source -> List String -> Dict String Float -> Track -> EngineItem
38makeEngineItem timestamp sources cachedTrackIds progressTable track =
39 { isCached = List.member track.id cachedTrackIds
40 , progress = Dict.get track.id progressTable
41 , sourceId = track.sourceId
42 , trackId = track.id
43 , trackPath = track.path
44 , trackTags = track.tags
45 , url = makeTrackUrl timestamp sources track
46 }
47
48
49makeItem : Bool -> IdentifiedTrack -> Item
50makeItem isManualEntry identifiedTrack =
51 { manualEntry = isManualEntry
52 , identifiedTrack = identifiedTrack
53 }
54
55
56makeTrackUrl : Time.Posix -> List Source -> Track -> String
57makeTrackUrl timestamp sources track =
58 sources
59 |> List.find (.id >> (==) track.sourceId)
60 |> Maybe.map (makeTrackUrl_ timestamp track)
61 |> Maybe.withDefault "<missing-source>"
62
63
64
65-- ㊙️
66
67
68makeTrackUrl_ : Time.Posix -> Track -> Source -> String
69makeTrackUrl_ timestamp track source =
70 Sources.Services.makeTrackUrl
71 source.service
72 timestamp
73 source.id
74 source.data
75 Get
76 track.path