mobile: show incorrect cloud password state

While the startup flow should make it obvious when a user is not
correctly logged into the cloud, we still do see fairly frequent
situations where a user has an incorrect password on a mobile device and
is confused about why their data isn't syncing with their PC. Now this
is clearly shown in the main menu.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2024-02-23 16:21:17 -08:00
parent fac006148f
commit 1562613084
3 changed files with 39 additions and 3 deletions

View file

@ -261,6 +261,22 @@ Kirigami.ApplicationWindow {
font.weight: Font.Normal
}
}
RowLayout {
Layout.leftMargin: Kirigami.Units.smallSpacing
Layout.topMargin: 0
Kirigami.Heading {
Layout.fillWidth: true
Layout.topMargin: 0
visible: text.length > 0
level: 5
color: "white"
text: manager.passwordState
wrapMode: Text.NoWrap
elide: Text.ElideRight
font.weight: Font.Normal
}
}
RowLayout {
Layout.leftMargin: Kirigami.Units.smallSpacing
Layout.topMargin: 0

View file

@ -393,16 +393,20 @@ void QMLManager::openLocalThenRemote(QString url)
if (credStatus != qPrefCloudStorage::CS_NOCLOUD) {
appendTextToLog(QStringLiteral("loading dives from cache failed %1").arg(error));
setNotificationText(tr("Opening local data file failed"));
if (credStatus != qPrefCloudStorage::CS_INCORRECT_USER_PASSWD)
if (credStatus != qPrefCloudStorage::CS_INCORRECT_USER_PASSWD) {
qPrefCloudStorage::set_cloud_verification_status(qPrefCloudStorage::CS_NEED_TO_VERIFY);
emit passwordStateChanged();
}
}
} else {
// if we can load from the cache, we know that we have a valid cloud account
// and we know that there was at least one successful sync with the cloud when
// that local cache was created - so there is a common ancestor
setLoadFromCloud(true);
if (qPrefCloudStorage::cloud_verification_status() == qPrefCloudStorage::CS_UNKNOWN)
if (qPrefCloudStorage::cloud_verification_status() == qPrefCloudStorage::CS_UNKNOWN) {
qPrefCloudStorage::set_cloud_verification_status(qPrefCloudStorage::CS_VERIFIED);
emit passwordStateChanged();
}
qPrefUnits::set_unit_system(git_prefs.unit_system);
qPrefTechnicalDetails::set_tankbar(git_prefs.tankbar);
qPrefTechnicalDetails::set_show_ccr_setpoint(git_prefs.show_ccr_setpoint);
@ -572,6 +576,7 @@ void QMLManager::finishSetup()
rememberOldStatus();
set_filename(qPrintable(nocloud_localstorage()));
qPrefCloudStorage::set_cloud_verification_status(qPrefCloudStorage::CS_NOCLOUD);
emit passwordStateChanged();
saveCloudCredentials(qPrefCloudStorage::cloud_storage_email(), qPrefCloudStorage::cloud_storage_password(), qPrefCloudStorage::cloud_storage_pin());
appendTextToLog(tr("working in no-cloud mode"));
int error = parse_file(existing_filename, &divelog);
@ -587,6 +592,7 @@ void QMLManager::finishSetup()
}
} else {
qPrefCloudStorage::set_cloud_verification_status(qPrefCloudStorage::CS_UNKNOWN);
emit passwordStateChanged();
appendTextToLog(tr("no cloud credentials"));
setStartPageText(RED_FONT + tr("Please enter valid cloud credentials.") + END_FONT);
}
@ -651,6 +657,7 @@ void QMLManager::saveCloudCredentials(const QString &newEmail, const QString &ne
!cloudCredentialsChanged) {
// just go back to the dive list
qPrefCloudStorage::set_cloud_verification_status(m_oldStatus);
emit passwordStateChanged();
}
if (!noCloud && !verifyCredentials(email, newPassword, pin)) {
@ -760,6 +767,7 @@ void QMLManager::deleteAccount()
qPrefCloudStorage::set_cloud_storage_email_encoded("");
qPrefCloudStorage::set_cloud_storage_password("");
qPrefCloudStorage::set_cloud_verification_status(qPrefCloudStorage::CS_NOCLOUD);
emit passwordStateChanged();
set_filename(qPrintable(nocloud_localstorage()));
setStartPageText(tr("Cloud storage account deleted."));
return;
@ -863,6 +871,7 @@ void QMLManager::revertToNoCloudIfNeeded()
qPrefCloudStorage::set_cloud_storage_password("");
rememberOldStatus();
qPrefCloudStorage::set_cloud_verification_status(qPrefCloudStorage::CS_NOCLOUD);
emit passwordStateChanged();
set_filename(qPrintable(nocloud_localstorage()));
setStartPageText(RED_FONT + tr("Failed to connect to cloud server, reverting to no cloud status") + END_FONT);
}
@ -2383,3 +2392,12 @@ QString QMLManager::getSyncState() const
return tr("(changes synced locally)");
return tr("(synced with cloud)");
}
// show the state of the cloud login
QString QMLManager::getPasswordState() const
{
auto credStatus = qPrefCloudStorage::cloud_verification_status();
if (credStatus == qPrefCloudStorage::CS_INCORRECT_USER_PASSWD)
return tr("(incorrect cloud email or password)");
return QString();
}

View file

@ -58,7 +58,7 @@ class QMLManager : public QObject {
Q_PROPERTY(bool diveListProcessing MEMBER m_diveListProcessing WRITE setDiveListProcessing NOTIFY diveListProcessingChanged)
Q_PROPERTY(bool initialized MEMBER m_initialized NOTIFY initializedChanged)
Q_PROPERTY(QString syncState READ getSyncState NOTIFY syncStateChanged)
Q_PROPERTY(QString passwordState READ getPasswordState NOTIFY passwordStateChanged)
public:
QMLManager();
~QMLManager();
@ -162,6 +162,7 @@ public:
void rememberOldStatus();
QString getSyncState() const;
QString getPasswordState() const;
public slots:
void appInitialized();
@ -297,6 +298,7 @@ signals:
void redoTextChanged();
void restartDownloadSignal();
void syncStateChanged();
void passwordStateChanged();
// From upload process
void uploadFinish(bool success, const QString &text);