GODT-2003: introduces 3 phases user state (SignedOut/Locked/Connected)

WIP: introduced UserState enum in GUI and implemented logic.
This commit is contained in:
Xavier Michelon
2022-11-15 17:24:54 +01:00
parent 49b3c18903
commit e087a7972e
27 changed files with 1516 additions and 1276 deletions

View File

@ -128,7 +128,8 @@ QQmlComponent *createRootQmlComponent(QQmlApplicationEngine &engine)
qmlRegisterSingletonInstance("Proton", 1, 0, "Backend", &app().backend());
qmlRegisterType<UserList>("Proton", 1, 0, "UserList");
qmlRegisterType<bridgepp::User>("Proton", 1, 0, "User");
qRegisterMetaType<UserState>("UserState");
qmlRegisterUncreatableType<EUserState>("Proton", 1, 0, "EUserState", "Enum type is not creatable");
auto rootComponent = new QQmlComponent(&engine, &engine);
engine.addImportPath(qrcQmlDir);

View File

@ -136,7 +136,20 @@ Item {
spacing: 0
Label {
colorScheme: root.colorScheme
text: root.user && root.user.loggedIn ? root.usedSpace : qsTr("Signed out")
text: {
if (!root.user)
return qsTr("Signed out")
switch (root.user.state) {
case EUserState.SignedOut:
default:
return qsTr("Signed out")
case EUserState.Locked:
return qsTr("Connecting...")
case EUserState.Connected:
return root.usedSpace
}
}
color: root.usedSpaceColor
type: {
switch (root.type) {
@ -148,7 +161,7 @@ Item {
Label {
colorScheme: root.colorScheme
text: root.user && root.user.loggedIn ? " / " + root.totalSpace : ""
text: root.user && root.user.state == EUserState.Connected ? " / " + root.totalSpace : ""
color: root.colorScheme.text_weak
type: {
switch (root.type) {
@ -172,7 +185,7 @@ Item {
id: storage_bar_filled
radius: ProtonStyle.storage_bar_radius
color: root.usedSpaceColor
visible: root.user ? parent.visible && root.user.loggedIn : false
visible: root.user ? parent.visible && (root.user.state == EUserState.Connected) : false
anchors {
top : parent.top
bottom : parent.bottom

View File

@ -87,7 +87,7 @@ Item {
colorScheme: root.colorScheme
user: root.user
type: AccountDelegate.LargeView
enabled: root.user ? root.user.loggedIn : false
enabled: root.user ? (root.user.state === EUserState.Connected) : false
}
Button {
@ -95,7 +95,7 @@ Item {
colorScheme: root.colorScheme
text: qsTr("Sign out")
secondary: true
visible: root.user ? root.user.loggedIn : false
visible: root.user ? (root.user.state === EUserState.Connected) : false
onClicked: {
if (!root.user) return
root.user.logout()
@ -107,7 +107,7 @@ Item {
colorScheme: root.colorScheme
text: qsTr("Sign in")
secondary: true
visible: root.user ? !root.user.loggedIn : false
visible: root.user ? (root.user.state === EUserState.SignedOut) : false
onClicked: {
if (!root.user) return
root.showSignIn()
@ -123,6 +123,7 @@ Item {
if (!root.user) return
root.notifications.askDeleteAccount(root.user)
}
visible: root.user ? root.user.state !== EUserState.Locked : false
}
}
@ -138,7 +139,7 @@ Item {
actionText: qsTr("Configure")
description: qsTr("Using the mailbox details below (re)configure your client.")
type: SettingsItem.Button
enabled: root.user ? root.user.loggedIn : false
enabled: root.user ? root.user.state === EUserState.Connected : false
visible: root.user ? !root.user.splitMode || root.user.addresses.length==1 : false
showSeparator: splitMode.visible
onClicked: {
@ -157,7 +158,7 @@ Item {
type: SettingsItem.Toggle
checked: root.user ? root.user.splitMode : false
visible: root.user ? root.user.addresses.length > 1 : false
enabled: root.user ? root.user.loggedIn : false
enabled: root.user ? (root.user.state === EUserState.Connected) : false
showSeparator: addressSelector.visible
onClicked: {
if (!splitMode.checked){
@ -173,7 +174,7 @@ Item {
RowLayout {
Layout.fillWidth: true
enabled: root.user ? root.user.loggedIn : false
enabled: root.user ? (root.user.state === EUserState.Connected) : false
visible: root.user ? root.user.splitMode : false
ComboBox {
@ -214,7 +215,7 @@ Item {
anchors.bottomMargin: root._spacing
spacing: root._spacing
visible: root.user ? root.user.loggedIn : false
visible: root.user ? (root.user.state === EUserState.Connected) : false
property string currentAddress: addressSelector.displayText

View File

@ -276,7 +276,7 @@ QtObject {
}
if (u) {
if (c === 1 && u.loggedIn === false) {
if (c === 1 && (u.state === EUserState.SignedOut)) {
mainWindow.showAndRise()
}
}

View File

@ -56,7 +56,7 @@ ColumnLayout {
text: "LoggedIn"
enabled: user !== undefined && user.username.length > 0
checked: user ? user.loggedIn : false
checked: user ? root.user.state == EUserState.Connected : false
onCheckedChanged: {
if (!user) {
@ -73,11 +73,11 @@ ColumnLayout {
return
}
user.loggedIn = true
user.state = EUserState.Connected
user.resetLoginRequests()
return
} else {
user.loggedIn = false
user.state = EUserState.SignedOut
user.resetLoginRequests()
}
}

View File

@ -75,11 +75,11 @@ ColumnLayout {
onClicked: {
var newUserObject = Backend.userComponent.createObject(Backend)
newUserObject.username = Backend.loginUser.username.length > 0 ? Backend.loginUser.username : "test@protonmail.com"
newUserObject.loggedIn = true
newUserObject.state = EUserState.Connected
newUserObject.setupGuideSeen = true // Backend.loginUser.setupGuideSeen
Backend.loginUser.username = ""
Backend.loginUser.loggedIn = false
Backend.loginUser.state = EUserState.SignedOut
Backend.loginUser.setupGuideSeen = false
Backend.users.append( { object: newUserObject } )

View File

@ -68,7 +68,7 @@ Window {
if (showSetupGuide) {
var newUserObject = root.userComponent.createObject(root)
newUserObject.username = "LerooooyJenkins@protonmail.com"
newUserObject.loggedIn = true
newUserObject.state = EUserState.Connected
newUserObject.setupGuideSeen = false
root.users.append( { object: newUserObject } )
}
@ -266,7 +266,7 @@ Window {
if (hasUserOnStart) {
var newUserObject = root.userComponent.createObject(root)
newUserObject.username = "LerooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooyJenkins@protonmail.com"
newUserObject.loggedIn = true
newUserObject.loggedIn = EUserState.Connected
newUserObject.setupGuideSeen = true
root.users.append( { object: newUserObject } )
}

View File

@ -185,7 +185,7 @@ Item {
var user = Backend.users.get(index)
accounts.currentIndex = index
if (!user) return
if (user.loggedIn) {
if (user.state !== EUserState.SignedOut) {
rightContent.showAccount()
} else {
signIn.username = user.username

View File

@ -55,7 +55,7 @@ ApplicationWindow {
// considering that users are added one-by-one
var user = Backend.users.get(first)
if (!user.loggedIn) {
if (user.state === EUserState.SignedOut) {
return
}
@ -111,7 +111,7 @@ ApplicationWindow {
return 1
}
if (Backend.users.count === 1 && u.loggedIn === false) {
if ((Backend.users.count === 1) && (u.state === EUserState.SignedOut)) {
showSignIn(u.username)
return 0
}

View File

@ -226,7 +226,7 @@ Window {
Layout.bottomMargin: 12
colorScheme: root.colorScheme
visible: viewItem.user ? !viewItem.user.loggedIn : false
visible: viewItem.user ? (viewItem.user.state === EUserState.SignedOut) : false
text: qsTr("Sign in")
onClicked: {
root.showSignIn(viewItem.username)

View File

@ -223,7 +223,7 @@ Item {
Layout.fillWidth: true
focus: true
username: Backend.users.count === 1 && Backend.users.get(0) && Backend.users.get(0).loggedIn === false ? Backend.users.get(0).username : ""
username: Backend.users.count === 1 && Backend.users.get(0) && (Backend.users.get(0).state === EUserState.SignedOut) ? Backend.users.get(0).username : ""
}
// Right margin