A music player that connects to your cloud/distributed storage.
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

Refactor equalizer state

+92 -136
+9 -3
src/Applications/UI.elm
··· 10 10 import Css exposing (url) 11 11 import Debouncer.Basic as Debouncer 12 12 import Dict 13 + import Equalizer 13 14 import Keyboard 14 15 import LastFm 15 16 import Maybe.Extra as Maybe ··· 139 140 |> Debouncer.toDebouncer 140 141 141 142 ----------------------------------------- 143 + -- Equalizer 144 + ----------------------------------------- 145 + , eqKnobOperation = Nothing 146 + , eqSettings = Equalizer.defaultSettings 147 + 148 + ----------------------------------------- 142 149 -- Instances 143 150 ----------------------------------------- 144 151 , alfred = Nothing ··· 149 156 -- Children (TODO) 150 157 ----------------------------------------- 151 158 , authentication = Authentication.initialModel url 152 - , equalizer = Equalizer.initialModel 153 159 , playlists = Playlists.initialModel 154 160 , queue = Queue.initialModel 155 161 , sources = Sources.initialModel ··· 249 255 -- Equalizer 250 256 ----------------------------------------- 251 257 ActivateKnob a b -> 252 - Equalizer.organize (Equalizer.activateKnob a b) 258 + Equalizer.activateKnob a b 253 259 254 260 AdjustKnob a -> 255 - Equalizer.organize (Equalizer.adjustKnob a) 261 + Equalizer.adjustKnob a 256 262 257 263 DeactivateKnob _ -> 258 264 Equalizer.deactivateKnob
+50 -85
src/Applications/UI/Equalizer/State.elm
··· 8 8 import Json.Decode as Decode 9 9 import Management 10 10 import Material.Icons as Icons 11 - import Monocle.Lens as Lens exposing (Lens) 12 - import Return exposing (return) 13 - import UI.Equalizer.Types as Equalizer exposing (..) 11 + import Return exposing (andThen, return) 14 12 import UI.Ports as Ports 15 13 import UI.Reply exposing (Reply(..)) 16 14 import UI.Types as UI exposing (..) ··· 18 16 19 17 20 18 21 - -- 🌳 22 - 23 - 24 - type alias Model = 25 - { low : Float 26 - , mid : Float 27 - , high : Float 28 - , volume : Float 29 - 30 - -- 31 - , activeKnob : Maybe Knob 32 - , startCoordinates : Coordinates 33 - } 34 - 35 - 36 - initialModel : Model 37 - initialModel = 38 - { low = defaultSettings.low 39 - , mid = defaultSettings.mid 40 - , high = defaultSettings.high 41 - , volume = defaultSettings.volume 42 - 43 - -- Knob interactions 44 - -------------------- 45 - , activeKnob = Nothing 46 - , startCoordinates = { x = 0, y = 0 } 47 - } 48 - 49 - 50 - lens : Lens UI.Model Equalizer.Model 51 - lens = 52 - { get = .equalizer 53 - , set = \equalizer ui -> { ui | equalizer = equalizer } 54 - } 55 - 56 - 57 - 58 19 -- 📣 59 20 60 21 61 - organize : Organizer Equalizer.Model -> Manager 62 - organize = 63 - Management.organize lens 64 - 65 - 66 - 67 - -- 🔱 68 - 69 - 70 - activateKnob : Knob -> Pointer.Event -> Organizer Equalizer.Model 22 + activateKnob : Knob -> Pointer.Event -> Manager 71 23 activateKnob theKnob { pointer } model = 72 - Return.singleton 73 - { model 74 - | activeKnob = Just theKnob 75 - , startCoordinates = Coordinates.fromTuple pointer.clientPos 76 - } 24 + { knob = theKnob 25 + , startingPosition = Coordinates.fromTuple pointer.clientPos 26 + } 27 + |> (\m -> { model | eqKnobOperation = Just m }) 28 + |> Return.singleton 77 29 78 30 79 - adjustKnob : Pointer.Event -> Organizer Equalizer.Model 31 + adjustKnob : Pointer.Event -> Manager 80 32 adjustKnob { pointer } model = 81 33 let 82 34 start = 83 - model.startCoordinates 35 + case model.eqKnobOperation of 36 + Just { startingPosition } -> 37 + startingPosition 38 + 39 + Nothing -> 40 + { x = 0, y = 0 } 84 41 85 42 end = 86 43 (\( a, b ) -> { x = a, y = b }) ··· 102 59 |> min maxAngle 103 60 104 61 value = 105 - case ( distance > 10, model.activeKnob ) of 62 + case ( distance > 10, Maybe.map .knob model.eqKnobOperation ) of 106 63 ( True, Just Volume ) -> 107 64 Just ( Volume, (maxAngle + angle) / (maxAngle * 2) ) 108 65 ··· 112 69 _ -> 113 70 Nothing 114 71 115 - newModel = 72 + settings = 73 + model.eqSettings 74 + 75 + newSettings = 116 76 case value of 117 77 Just ( Low, v ) -> 118 - { model | low = v } 78 + { settings | low = v } 119 79 120 80 Just ( Mid, v ) -> 121 - { model | mid = v } 81 + { settings | mid = v } 122 82 123 83 Just ( High, v ) -> 124 - { model | high = v } 84 + { settings | high = v } 125 85 126 86 Just ( Volume, v ) -> 127 - { model | volume = v } 87 + { settings | volume = v } 128 88 129 89 Nothing -> 130 - model 90 + settings 131 91 in 132 92 case value of 133 93 Just ( knobType, v ) -> 134 - return newModel (adjustKnobUsingPort knobType v) 94 + return { model | eqSettings = newSettings } (adjustKnobUsingPort knobType v) 135 95 136 96 Nothing -> 137 - Return.singleton newModel 97 + Return.singleton { model | eqSettings = newSettings } 138 98 139 99 140 100 deactivateKnob : Manager 141 101 deactivateKnob model = 142 - model 143 - |> organize (\m -> Return.singleton { m | activeKnob = Nothing }) 144 - |> Return.andThen User.saveEnclosedUserData 102 + User.saveEnclosedUserData { model | eqKnobOperation = Nothing } 145 103 146 104 147 105 resetKnob : Knob -> Manager 148 106 resetKnob knob model = 149 107 model 150 - |> organize (resetKnobOrganizer knob) 151 - |> Return.andThen User.saveEnclosedUserData 108 + |> resetKnobOrganizer knob 109 + |> andThen User.saveEnclosedUserData 152 110 153 111 154 112 ··· 175 133 } 176 134 177 135 178 - adjustAllKnobs : Equalizer.Model -> Cmd Msg 179 - adjustAllKnobs model = 136 + adjustAllKnobs : Settings -> Cmd Msg 137 + adjustAllKnobs eqSettings = 180 138 Cmd.batch 181 - [ adjustKnobUsingPort Low model.low 182 - , adjustKnobUsingPort Mid model.mid 183 - , adjustKnobUsingPort High model.high 184 - , adjustKnobUsingPort Volume model.volume 139 + [ adjustKnobUsingPort Low eqSettings.low 140 + , adjustKnobUsingPort Mid eqSettings.mid 141 + , adjustKnobUsingPort High eqSettings.high 142 + , adjustKnobUsingPort Volume eqSettings.volume 185 143 ] 186 144 187 145 ··· 189 147 -- ㊙️ 190 148 191 149 192 - resetKnobOrganizer : Knob -> Organizer Equalizer.Model 150 + resetKnobOrganizer : Knob -> Manager 193 151 resetKnobOrganizer knob model = 152 + let 153 + d = 154 + defaultSettings 155 + 156 + s = 157 + model.eqSettings 158 + in 194 159 case knob of 195 160 Low -> 196 - reset { model | low = defaultSettings.low } Low defaultSettings.low 161 + reset Low { s | low = d.low } d.low model 197 162 198 163 Mid -> 199 - reset { model | mid = defaultSettings.mid } Mid defaultSettings.mid 164 + reset Mid { s | mid = d.mid } d.mid model 200 165 201 166 High -> 202 - reset { model | high = defaultSettings.high } High defaultSettings.high 167 + reset High { s | high = d.high } d.high model 203 168 204 169 Volume -> 205 - reset { model | volume = defaultSettings.volume } Volume defaultSettings.volume 170 + reset Volume { s | volume = d.volume } d.volume model 206 171 207 172 208 - reset : Equalizer.Model -> Knob -> Float -> ( Equalizer.Model, Cmd Msg ) 209 - reset newModel knobType value = 210 - ( newModel 173 + reset : Knob -> Equalizer.Settings -> Float -> Manager 174 + reset knobType newSettings value model = 175 + ( { model | eqSettings = newSettings } 211 176 , adjustKnobUsingPort knobType value 212 177 )
-20
src/Applications/UI/Equalizer/Types.elm
··· 1 - module UI.Equalizer.Types exposing (..) 2 - 3 - import Coordinates exposing (Coordinates) 4 - import Equalizer exposing (..) 5 - 6 - 7 - 8 - -- 🌳 9 - 10 - 11 - type alias Model = 12 - { low : Float 13 - , mid : Float 14 - , high : Float 15 - , volume : Float 16 - 17 - -- 18 - , activeKnob : Maybe Knob 19 - , startCoordinates : Coordinates 20 - }
+9 -10
src/Applications/UI/Equalizer/View.elm
··· 18 18 import Material.Icons as Icons 19 19 import Svg.Styled 20 20 import Svg.Styled.Attributes 21 - import UI.Equalizer.Types as Equalizer 22 21 import UI.Kit 23 22 import UI.Navigation exposing (..) 24 23 import UI.Page ··· 29 28 -- 🗺 30 29 31 30 32 - view : Equalizer.Model -> Html Msg 33 - view model = 31 + view : Settings -> Html Msg 32 + view settings = 34 33 UI.Kit.receptacle 35 34 { scrolling = True } 36 35 [ ----------------------------------------- ··· 56 55 57 56 -- 58 57 , UI.Kit.centeredContent 59 - [ eqView model ] 58 + [ eqView settings ] 60 59 ] 61 60 62 61 63 - eqView : Equalizer.Model -> Html Msg 64 - eqView model = 62 + eqView : Settings -> Html Msg 63 + eqView settings = 65 64 chunk 66 65 [ C.text_center ] 67 66 [ chunk ··· 74 73 ------------ 75 74 , C.dark__border_base00 76 75 ] 77 - [ knob Volume model.volume 76 + [ knob Volume settings.volume 78 77 ] 79 78 80 79 -- ··· 89 88 ------------ 90 89 , C.dark__border_base00 91 90 ] 92 - [ knob Low model.low 93 - , knob Mid model.mid 94 - , knob High model.high 91 + [ knob Low settings.low 92 + , knob Mid settings.mid 93 + , knob High settings.high 95 94 ] 96 95 ] 97 96
+6 -2
src/Applications/UI/Types.elm
··· 43 43 import UI.Authentication.ContextMenu as Authentication 44 44 import UI.Demo as Demo 45 45 import UI.DnD as DnD 46 - import UI.Equalizer.Types as Equalizer 47 46 import UI.Navigation as Navigation 48 47 import UI.Notifications 49 48 import UI.Page as Page exposing (Page) ··· 124 123 , debounce : Debouncer Msg Msg 125 124 126 125 ----------------------------------------- 126 + -- Equalizer 127 + ----------------------------------------- 128 + , eqKnobOperation : Maybe Equalizer.KnobOperation 129 + , eqSettings : Equalizer.Settings 130 + 131 + ----------------------------------------- 127 132 -- Instances 128 133 ----------------------------------------- 129 134 , alfred : Maybe (Alfred Msg) ··· 134 139 -- Children (TODO) 135 140 ----------------------------------------- 136 141 , authentication : Authentication.Model 137 - , equalizer : Equalizer.Model 138 142 , queue : Queue.Model 139 143 , playlists : Playlists.Model 140 144 , sources : Sources.Model
+1 -9
src/Applications/UI/User/State/Export.elm
··· 13 13 14 14 saveEnclosedUserData : Manager 15 15 saveEnclosedUserData model = 16 - let 17 - equalizerSettings = 18 - { low = model.equalizer.low 19 - , mid = model.equalizer.mid 20 - , high = model.equalizer.high 21 - , volume = model.equalizer.volume 22 - } 23 - in 24 16 { cachedTracks = model.tracks.cached 25 - , equalizerSettings = equalizerSettings 17 + , equalizerSettings = model.eqSettings 26 18 , grouping = model.tracks.grouping 27 19 , onlyShowCachedTracks = model.tracks.cachedOnly 28 20 , onlyShowFavourites = model.tracks.favouritesOnly
+8 -5
src/Applications/UI/User/State/Import.elm
··· 189 189 importEnclosed : Json.Decode.Value -> Model -> Return3.Return Model Msg Reply 190 190 importEnclosed value model = 191 191 let 192 - { equalizer, playlists, queue, tracks } = 192 + { playlists, queue, tracks } = 193 193 model 194 + 195 + equalizerSettings = 196 + model.eqSettings 194 197 in 195 198 case decodeEnclosedData value of 196 199 Ok data -> 197 200 let 198 - newEqualizer = 199 - { equalizer 201 + newEqualizerSettings = 202 + { equalizerSettings 200 203 | low = data.equalizerSettings.low 201 204 , mid = data.equalizerSettings.mid 202 205 , high = data.equalizerSettings.high ··· 226 229 } 227 230 in 228 231 ( { model 229 - | equalizer = newEqualizer 232 + | eqSettings = newEqualizerSettings 230 233 , playlists = newPlaylists 231 234 , queue = newQueue 232 235 , tracks = newTracks 233 236 } 234 237 -- 235 238 , Cmd.batch 236 - [ Equalizer.adjustAllKnobs newEqualizer 239 + [ Equalizer.adjustAllKnobs newEqualizerSettings 237 240 , Ports.setRepeat data.repeat 238 241 ] 239 242 --
+2 -2
src/Applications/UI/View.elm
··· 68 68 (if Maybe.isJust model.contextMenu || Maybe.isJust model.alfred then 69 69 [ on "tap" (Json.Decode.succeed HideOverlay) ] 70 70 71 - else if Maybe.isJust model.equalizer.activeKnob then 71 + else if Maybe.isJust model.eqKnobOperation then 72 72 [ Pointer.onMove AdjustKnob 73 73 , Pointer.onUp DeactivateKnob 74 74 , Pointer.onCancel DeactivateKnob ··· 176 176 -------- 177 177 , case model.page of 178 178 Page.Equalizer -> 179 - Lazy.lazy Equalizer.view model.equalizer 179 + Lazy.lazy Equalizer.view model.eqSettings 180 180 181 181 Page.Index -> 182 182 nothing
+7
src/Library/Equalizer.elm
··· 1 1 module Equalizer exposing (..) 2 2 3 + import Coordinates exposing (Coordinates) 3 4 import Json.Decode 4 5 import Json.Encode 5 6 ··· 13 14 | Mid 14 15 | High 15 16 | Volume 17 + 18 + 19 + type alias KnobOperation = 20 + { knob : Knob 21 + , startingPosition : Coordinates 22 + } 16 23 17 24 18 25 type alias Settings =