···29293030retrieveFission : HypaethralBit -> Task String (Maybe Json.Decode.Value)
3131retrieveFission bit =
3232+ let
3333+ includePublicData =
3434+ bit == Playlists
3535+ in
3236 [ ( "fileName", fileName bit )
3737+ , ( "includePublicData", Json.Encode.bool includePublicData )
3338 ]
3439 |> TaskPort.call
3540 { function = "fromFission"
···9510096101saveFission : HypaethralBit -> Json.Decode.Value -> Task String ()
97102saveFission bit data =
103103+ let
104104+ savePublicData =
105105+ bit == Playlists
106106+ in
98107 [ ( "fileName", fileName bit )
99108 , ( "data", data )
109109+ , ( "savePublicData", Json.Encode.bool savePublicData )
100110 ]
101111 |> TaskPort.call
102112 { function = "toFission"
+36-20
src/Applications/Brain/User/State.elm
···418418419419saveHypaethralDataBitsTask : List HypaethralBit -> HypaethralData -> (HypaethralBit -> Json.Value -> Task String ()) -> Task String ()
420420saveHypaethralDataBitsTask bits userData saveFn =
421421- bits
422422- |> List.map
423423- (\bit ->
424424- let
425425- value =
426426- encodeHypaethralBit bit userData
427427- in
428428- Task.andThen
429429- (\_ -> saveFn bit value)
430430- (Hypaethral.saveLocal bit value)
431431- )
432432- |> Task.sequence
433433- |> Task.map (always ())
421421+ [ --------
422422+ -- LOCAL
423423+ --------
424424+ List.map
425425+ (\bit ->
426426+ Hypaethral.saveLocal bit (encodeHypaethralBit bit userData)
427427+ )
428428+ bits
429429+ , ---------
430430+ -- REMOTE
431431+ ---------
432432+ List.map
433433+ (\bit ->
434434+ saveFn bit (encodeHypaethralBit bit userData)
435435+ )
436436+ bits
437437+ ]
438438+ |> List.concat
439439+ |> List.foldl
440440+ (\nextTask -> Task.andThen (\_ -> nextTask))
441441+ (Task.succeed ())
434442435443436444{-| Save different parts of hypaethral data,
···452460 { model | hypaethralUserData = updatedUserData }
453461454462 save saveFn =
455455- saveFn
456456- |> saveHypaethralDataBitsTask bits updatedUserData
463463+ Time.now
464464+ |> Task.andThen
465465+ (\currentTime ->
466466+ saveHypaethralDataBitsTask
467467+ bits
468468+ { updatedUserData | modifiedAt = Just currentTime }
469469+ saveFn
470470+ )
457471 |> Common.attemptTask (always Brain.Bypass)
458472 |> return updatedModel
459473 in
···470484 model.currentTime
471485 (SaveHypaethralDataBits bits)
472486 (Task.succeed ())
473473- |> return updatedModel
487487+ |> return model
474488475489 else
476490 save (Hypaethral.saveDropbox accessToken)
···649663 Alien.SecretKey
650664 |> Brain.Task.Ports.removeCache
651665 |> Task.mapError TaskPort.errorToStringCustom
666666+ |> Task.andThen (\_ -> Time.now)
652667 |> Task.andThen
653653- (\_ ->
668668+ (\currentTime ->
654669 case model.userSyncMethod of
655670 Just method ->
656671 let
657672 data =
658673 model.hypaethralUserData
659674 in
660660- saveAllHypaethralDataTask { data | modifiedAt = Just model.currentTime } method
675675+ saveAllHypaethralDataTask { data | modifiedAt = Just currentTime } method
661676662677 Nothing ->
663678 Task.succeed ()
···673688 passphrase
674689 |> Brain.Task.Ports.fabricateSecretKey
675690 |> Task.mapError TaskPort.errorToStringCustom
691691+ |> Task.andThen (\_ -> Time.now)
676692 |> Task.andThen
677677- (\_ ->
693693+ (\currentTime ->
678694 case model.userSyncMethod of
679695 Just method ->
680696 let
681697 data =
682698 model.hypaethralUserData
683699 in
684684- saveAllHypaethralDataTask { data | modifiedAt = Just model.currentTime } method
700700+ saveAllHypaethralDataTask { data | modifiedAt = Just currentTime } method
685701686702 Nothing ->
687703 Task.succeed ()
+3
src/Applications/UI.elm
···433433 ShowPlaylistListMenu a b ->
434434 Playlists.showListMenu a b
435435436436+ TogglePlaylistVisibility a ->
437437+ Playlists.toggleVisibility a
438438+436439 -----------------------------------------
437440 -- Routing
438441 -----------------------------------------
+23-14
src/Applications/UI/Playlists/State.elm
···7979 |> (\s -> s ++ " to the __" ++ properPlaylistName ++ "__ playlist")
8080 |> Notifications.success
8181 |> Common.showNotificationWithModel newModel
8282- |> andThen save
8282+ |> andThen User.savePlaylists
838384848585assistWithAddingTracksToPlaylist : List IdentifiedTrack -> Manager
···125125 , newPlaylistContext = Nothing
126126 , playlists = playlist :: model.playlists
127127 }
128128- |> save
128128+ |> User.savePlaylists
129129 |> andThen redirectToPlaylistIndexPage
130130131131 Nothing ->
···180180 else
181181 Return.singleton
182182 )
183183- |> andThen save
183183+ |> andThen User.savePlaylists
184184185185186186modify : Manager
···219219 , lastModifiedPlaylist = Just properName
220220 , playlists = newCollection ++ autoGenerated
221221 }
222222- |> save
222222+ |> User.savePlaylists
223223 |> andThen redirectToPlaylistIndexPage
224224225225 else
···284284 |> andThen User.savePlaylists
285285286286287287-save : Manager
288288-save model =
289289- model.playlists
290290- |> List.filterNot .autoGenerated
291291- |> Json.Encode.list Playlists.encode
292292- |> Alien.broadcast Alien.SavePlaylists
293293- |> Ports.toBrain
294294- |> return model
295295-296296-297287select : Playlist -> Manager
298288select playlist model =
299289 { model | page = Page.Index, selectedPlaylist = Just playlist }
···331321 coordinates
332322 in
333323 Return.singleton { model | contextMenu = Just contextMenu }
324324+325325+326326+toggleVisibility : Playlist -> Manager
327327+toggleVisibility playlist model =
328328+ let
329329+ updatedPlaylist =
330330+ { playlist | public = not playlist.public }
331331+ in
332332+ model.playlists
333333+ |> List.map
334334+ (\p ->
335335+ if p.name == playlist.name then
336336+ updatedPlaylist
337337+338338+ else
339339+ p
340340+ )
341341+ |> (\c -> { model | playlists = c })
342342+ |> User.savePlaylists
334343335344336345
+2-1
src/Applications/UI/Playlists/View.elm
···79798080 else
8181 Icons.public_off
8282- , msg = Nothing
8282+ , msg =
8383+ Just (\_ -> TogglePlaylistVisibility playlist)
8384 , title =
8485 if playlist.public then
8586 "Make private"