A music player that connects to your cloud/distributed storage.
1module UI.Other.State exposing (..)
2
3import Alien
4import Common exposing (ServiceWorkerStatus(..))
5import Dict
6import Notifications
7import Return exposing (return)
8import Time
9import UI.Common.State as Common
10import UI.Ports as Ports
11import UI.Types exposing (..)
12
13
14
15-- 🔱
16
17
18installedServiceWorker : Manager
19installedServiceWorker model =
20 case model.serviceWorkerStatus of
21 InstallingNew ->
22 Return.singleton { model | serviceWorkerStatus = WaitingForActivation }
23
24 _ ->
25 Return.singleton { model | serviceWorkerStatus = Activated }
26
27
28installingServiceWorker : Manager
29installingServiceWorker model =
30 Return.singleton { model | serviceWorkerStatus = InstallingNew }
31
32
33redirectToBrain : Alien.Event -> Manager
34redirectToBrain event model =
35 return model (Ports.toBrain event)
36
37
38reloadApp : Manager
39reloadApp model =
40 return model (Ports.reloadApp ())
41
42
43setIsOnline : Bool -> Manager
44setIsOnline bool model =
45 { model | isOnline = bool }
46 |> Return.singleton
47 |> Return.command
48 (case model.nowPlaying of
49 Just { isPlaying, item } ->
50 let
51 trackId =
52 (Tuple.second item.identifiedTrack).id
53 in
54 Ports.reloadAudioNodeIfNeeded
55 { play = isPlaying
56 , progress =
57 if model.rememberProgress then
58 Dict.get trackId model.progress
59
60 else
61 Nothing
62 , trackId = trackId
63 }
64
65 Nothing ->
66 Cmd.none
67 )
68 |> Return.andThen
69 (case ( model.isOnline, bool ) of
70 ( False, True ) ->
71 syncHypaethralData
72
73 _ ->
74 Return.singleton
75 )
76
77
78setCurrentTime : Time.Posix -> Manager
79setCurrentTime time model =
80 Return.singleton { model | currentTime = time }
81
82
83setCurrentTimeZone : Time.Zone -> Manager
84setCurrentTimeZone zone model =
85 Return.singleton { model | currentTimeZone = zone }
86
87
88
89-- ⚗️
90
91
92syncHypaethralData : Manager
93syncHypaethralData model =
94 model
95 |> Common.showNotification (Notifications.casual "Syncing")
96 |> Return.command (Ports.toBrain <| Alien.trigger Alien.SyncHypaethralData)