Add a way to migrate settings stored at the browser to the server

This commit is contained in:
Eike Kettner
2021-05-27 01:07:36 +02:00
parent 5a4f6c0595
commit e406718cb7
9 changed files with 338 additions and 85 deletions

View File

@ -12,7 +12,7 @@ import Comp.NotificationManage
import Comp.ScanMailboxManage
import Comp.UiSettingsManage
import Data.Flags exposing (Flags)
import Data.UiSettings exposing (UiSettings)
import Data.UiSettings exposing (StoredUiSettings, UiSettings)
type alias Model =
@ -62,3 +62,4 @@ type Msg
| ScanMailboxMsg Comp.ScanMailboxManage.Msg
| UiSettingsMsg Comp.UiSettingsManage.Msg
| UpdateSettings
| ReceiveBrowserSettings StoredUiSettings

View File

@ -1,4 +1,4 @@
module Page.UserSettings.Update exposing (update)
module Page.UserSettings.Update exposing (UpdateResult, update)
import Comp.ChangePasswordForm
import Comp.EmailSettingsManage
@ -11,7 +11,15 @@ import Data.UiSettings exposing (UiSettings)
import Page.UserSettings.Data exposing (..)
update : Flags -> UiSettings -> Msg -> Model -> ( Model, Cmd Msg, Maybe UiSettings )
type alias UpdateResult =
{ model : Model
, cmd : Cmd Msg
, sub : Sub Msg
, newSettings : Maybe UiSettings
}
update : Flags -> UiSettings -> Msg -> Model -> UpdateResult
update flags settings msg model =
case msg of
SetTab t ->
@ -25,23 +33,25 @@ update flags settings msg model =
( em, c ) =
Comp.EmailSettingsManage.init flags
in
( { m | emailSettingsModel = em }
, Cmd.map EmailSettingsMsg c
, Nothing
)
{ model = { m | emailSettingsModel = em }
, cmd = Cmd.map EmailSettingsMsg c
, sub = Sub.none
, newSettings = Nothing
}
ImapSettingsTab ->
let
( em, c ) =
Comp.ImapSettingsManage.init flags
in
( { m | imapSettingsModel = em }
, Cmd.map ImapSettingsMsg c
, Nothing
)
{ model = { m | imapSettingsModel = em }
, cmd = Cmd.map ImapSettingsMsg c
, sub = Sub.none
, newSettings = Nothing
}
ChangePassTab ->
( m, Cmd.none, Nothing )
UpdateResult m Cmd.none Sub.none Nothing
NotificationTab ->
let
@ -49,7 +59,7 @@ update flags settings msg model =
Cmd.map NotificationMsg
(Tuple.second (Comp.NotificationManage.init flags))
in
( m, initCmd, Nothing )
UpdateResult m initCmd Sub.none Nothing
ScanMailboxTab ->
let
@ -57,73 +67,86 @@ update flags settings msg model =
Cmd.map ScanMailboxMsg
(Tuple.second (Comp.ScanMailboxManage.init flags))
in
( m, initCmd, Nothing )
UpdateResult m initCmd Sub.none Nothing
UiSettingsTab ->
( m, Cmd.none, Nothing )
UpdateResult m Cmd.none Sub.none Nothing
ChangePassMsg m ->
let
( m2, c2 ) =
Comp.ChangePasswordForm.update flags m model.changePassModel
in
( { model | changePassModel = m2 }
, Cmd.map ChangePassMsg c2
, Nothing
)
{ model = { model | changePassModel = m2 }
, cmd = Cmd.map ChangePassMsg c2
, sub = Sub.none
, newSettings = Nothing
}
EmailSettingsMsg m ->
let
( m2, c2 ) =
Comp.EmailSettingsManage.update flags m model.emailSettingsModel
in
( { model | emailSettingsModel = m2 }
, Cmd.map EmailSettingsMsg c2
, Nothing
)
{ model = { model | emailSettingsModel = m2 }
, cmd = Cmd.map EmailSettingsMsg c2
, sub = Sub.none
, newSettings = Nothing
}
ImapSettingsMsg m ->
let
( m2, c2 ) =
Comp.ImapSettingsManage.update flags m model.imapSettingsModel
in
( { model | imapSettingsModel = m2 }
, Cmd.map ImapSettingsMsg c2
, Nothing
)
{ model = { model | imapSettingsModel = m2 }
, cmd = Cmd.map ImapSettingsMsg c2
, sub = Sub.none
, newSettings = Nothing
}
NotificationMsg lm ->
let
( m2, c2 ) =
Comp.NotificationManage.update flags lm model.notificationModel
in
( { model | notificationModel = m2 }
, Cmd.map NotificationMsg c2
, Nothing
)
{ model = { model | notificationModel = m2 }
, cmd = Cmd.map NotificationMsg c2
, sub = Sub.none
, newSettings = Nothing
}
ScanMailboxMsg lm ->
let
( m2, c2 ) =
Comp.ScanMailboxManage.update flags lm model.scanMailboxModel
in
( { model | scanMailboxModel = m2 }
, Cmd.map ScanMailboxMsg c2
, Nothing
)
{ model = { model | scanMailboxModel = m2 }
, cmd = Cmd.map ScanMailboxMsg c2
, sub = Sub.none
, newSettings = Nothing
}
UiSettingsMsg lm ->
let
res =
Comp.UiSettingsManage.update flags settings lm model.uiSettingsModel
in
( { model | uiSettingsModel = res.model }
, Cmd.map UiSettingsMsg res.cmd
, res.newSettings
)
{ model = { model | uiSettingsModel = res.model }
, cmd = Cmd.map UiSettingsMsg res.cmd
, sub = Sub.map UiSettingsMsg res.sub
, newSettings = res.newSettings
}
UpdateSettings ->
update flags
settings
(UiSettingsMsg Comp.UiSettingsManage.UpdateSettings)
model
ReceiveBrowserSettings sett ->
let
lm =
Comp.UiSettingsManage.ReceiveBrowserSettings sett
in
update flags settings (UiSettingsMsg lm) model