diff --git a/src/librssguard/services/owncloud/gui/owncloudaccountdetails.cpp b/src/librssguard/services/owncloud/gui/owncloudaccountdetails.cpp new file mode 100755 index 000000000..322c1b319 --- /dev/null +++ b/src/librssguard/services/owncloud/gui/owncloudaccountdetails.cpp @@ -0,0 +1,128 @@ +// For license of this file, see /LICENSE.md. + +#include "services/owncloud/gui/owncloudaccountdetails.h" + +#include "definitions/definitions.h" +#include "gui/guiutilities.h" +#include "miscellaneous/systemfactory.h" +#include "services/owncloud/definitions.h" +#include "services/owncloud/network/owncloudnetworkfactory.h" + +OwnCloudAccountDetails::OwnCloudAccountDetails(QWidget* parent) : QWidget(parent) { + m_ui.setupUi(this); + + m_ui.m_lblTestResult->label()->setWordWrap(true); + m_ui.m_lblServerSideUpdateInformation->setText(tr("Leaving this option on causes that updates " + "of feeds will be probably much slower and may time-out often.")); + m_ui.m_txtPassword->lineEdit()->setPlaceholderText(tr("Password for your Nextcloud account")); + m_ui.m_txtUsername->lineEdit()->setPlaceholderText(tr("Username for your Nextcloud account")); + m_ui.m_txtUrl->lineEdit()->setPlaceholderText(tr("URL of your Nextcloud server, without any API path")); + m_ui.m_lblTestResult->setStatus(WidgetWithStatus::StatusType::Information, + tr("No test done yet."), + tr("Here, results of connection test are shown.")); + m_ui.m_lblLimitMessages->setText( + tr("Limiting number of downloaded messages per feed makes updating of feeds faster but if your feed contains " + "bigger number of messages than specified limit, then some messages might not be downloaded during feed update.")); + + connect(m_ui.m_spinLimitMessages, static_cast(&QSpinBox::valueChanged), this, [=](int value) { + if (value <= 0) { + m_ui.m_spinLimitMessages->setSuffix(QSL(" ") + tr("= unlimited")); + } + else { + m_ui.m_spinLimitMessages->setSuffix(QSL(" ") + tr("messages")); + } + }); + + GuiUtilities::setLabelAsNotice(*m_ui.m_lblLimitMessages, false); + GuiUtilities::setLabelAsNotice(*m_ui.m_lblServerSideUpdateInformation, false); + + connect(m_ui.m_checkShowPassword, &QCheckBox::toggled, this, &OwnCloudAccountDetails::displayPassword); + connect(m_ui.m_txtPassword->lineEdit(), &BaseLineEdit::textChanged, this, &OwnCloudAccountDetails::onPasswordChanged); + connect(m_ui.m_txtUsername->lineEdit(), &BaseLineEdit::textChanged, this, &OwnCloudAccountDetails::onUsernameChanged); + connect(m_ui.m_txtUrl->lineEdit(), &BaseLineEdit::textChanged, this, &OwnCloudAccountDetails::onUrlChanged); + connect(m_ui.m_btnTestSetup, &QPushButton::clicked, this, &OwnCloudAccountDetails::performTest); + + setTabOrder(m_ui.m_txtUrl->lineEdit(), m_ui.m_checkDownloadOnlyUnreadMessages); + setTabOrder(m_ui.m_checkDownloadOnlyUnreadMessages, m_ui.m_checkServerSideUpdate); + setTabOrder(m_ui.m_checkServerSideUpdate, m_ui.m_spinLimitMessages); + setTabOrder(m_ui.m_spinLimitMessages, m_ui.m_txtUsername->lineEdit()); + setTabOrder(m_ui.m_txtUsername->lineEdit(), m_ui.m_txtPassword->lineEdit()); + setTabOrder(m_ui.m_txtPassword->lineEdit(), m_ui.m_checkShowPassword); + setTabOrder(m_ui.m_checkShowPassword, m_ui.m_btnTestSetup); + + onPasswordChanged(); + onUsernameChanged(); + onUrlChanged(); + displayPassword(false); +} + +void OwnCloudAccountDetails::displayPassword(bool display) { + m_ui.m_txtPassword->lineEdit()->setEchoMode(display ? QLineEdit::Normal : QLineEdit::Password); +} + +void OwnCloudAccountDetails::performTest() { + OwnCloudNetworkFactory factory; + + factory.setAuthUsername(m_ui.m_txtUsername->lineEdit()->text()); + factory.setAuthPassword(m_ui.m_txtPassword->lineEdit()->text()); + factory.setUrl(m_ui.m_txtUrl->lineEdit()->text()); + factory.setForceServerSideUpdate(m_ui.m_checkServerSideUpdate->isChecked()); + + OwnCloudStatusResponse result = factory.status(); + + if (result.networkError() != QNetworkReply::NetworkError::NoError) { + m_ui.m_lblTestResult->setStatus(WidgetWithStatus::StatusType::Error, + tr("Network error: '%1'.").arg(NetworkFactory::networkErrorText(result.networkError())), + tr("Network error, have you entered correct Nextcloud endpoint and password?")); + } + else if (result.isLoaded()) { + if (!SystemFactory::isVersionEqualOrNewer(result.version(), OWNCLOUD_MIN_VERSION)) { + m_ui.m_lblTestResult->setStatus(WidgetWithStatus::StatusType::Error, + tr("Installed version: %1, required at least: %2.").arg(result.version(), OWNCLOUD_MIN_VERSION), + tr("Selected Nextcloud News server is running unsupported version.")); + } + else { + m_ui.m_lblTestResult->setStatus(WidgetWithStatus::StatusType::Ok, + tr("Installed version: %1, required at least: %2.").arg(result.version(), OWNCLOUD_MIN_VERSION), + tr("Nextcloud News server is okay.")); + } + } + else { + m_ui.m_lblTestResult->setStatus(WidgetWithStatus::StatusType::Error, + tr("Unspecified error, did you enter correct URL?"), + tr("Unspecified error, did you enter correct URL?")); + } +} + +void OwnCloudAccountDetails::onUsernameChanged() { + const QString username = m_ui.m_txtUsername->lineEdit()->text(); + + if (username.isEmpty()) { + m_ui.m_txtUsername->setStatus(WidgetWithStatus::StatusType::Error, tr("Username cannot be empty.")); + } + else { + m_ui.m_txtUsername->setStatus(WidgetWithStatus::StatusType::Ok, tr("Username is okay.")); + } +} + +void OwnCloudAccountDetails::onPasswordChanged() { + const QString password = m_ui.m_txtPassword->lineEdit()->text(); + + if (password.isEmpty()) { + m_ui.m_txtPassword->setStatus(WidgetWithStatus::StatusType::Error, tr("Password cannot be empty.")); + } + else { + m_ui.m_txtPassword->setStatus(WidgetWithStatus::StatusType::Ok, tr("Password is okay.")); + } +} + +void OwnCloudAccountDetails::onUrlChanged() { + const QString url = m_ui.m_txtUrl->lineEdit()->text(); + + if (url.isEmpty()) { + m_ui.m_txtUrl->setStatus(WidgetWithStatus::StatusType::Error, tr("URL cannot be empty.")); + } + else { + m_ui.m_txtUrl->setStatus(WidgetWithStatus::StatusType::Ok, tr("URL is okay.")); + } +} diff --git a/src/librssguard/services/owncloud/gui/owncloudaccountdetails.h b/src/librssguard/services/owncloud/gui/owncloudaccountdetails.h new file mode 100755 index 000000000..2e8acdb66 --- /dev/null +++ b/src/librssguard/services/owncloud/gui/owncloudaccountdetails.h @@ -0,0 +1,29 @@ +// For license of this file, see /LICENSE.md. + +#ifndef OWNCLOUDACCOUNTDETAILS_H +#define OWNCLOUDACCOUNTDETAILS_H + +#include + +#include "ui_owncloudaccountdetails.h" + +class OwnCloudAccountDetails : public QWidget { + Q_OBJECT + + friend class FormEditOwnCloudAccount; + + public: + explicit OwnCloudAccountDetails(QWidget* parent = nullptr); + + private slots: + void displayPassword(bool display); + void performTest(); + void onUsernameChanged(); + void onPasswordChanged(); + void onUrlChanged(); + + private: + Ui::OwnCloudAccountDetails m_ui; +}; + +#endif // OWNCLOUDACCOUNTDETAILS_H diff --git a/src/librssguard/services/owncloud/gui/owncloudaccountdetails.ui b/src/librssguard/services/owncloud/gui/owncloudaccountdetails.ui new file mode 100755 index 000000000..7797ab5fe --- /dev/null +++ b/src/librssguard/services/owncloud/gui/owncloudaccountdetails.ui @@ -0,0 +1,213 @@ + + + OwnCloudAccountDetails + + + + 0 + 0 + 430 + 312 + + + + Form + + + + + + Download only unread messages + + + + + + + Force execution of server-side update when updating feeds from RSS Guard + + + + + + + Limit number of downloaded messages per feed + + + m_spinLimitMessages + + + + + + + + 140 + 16777215 + + + + = unlimited + + + -1 + + + 1000 + + + -1 + + + + + + + + + URL + + + m_txtUrl + + + + + + + + + + + + Some feeds require authentication, including GMail feeds. BASIC, NTLM-2 and DIGEST-MD5 authentication schemes are supported. + + + Authentication + + + false + + + false + + + + + + Username + + + m_txtUsername + + + + + + + Password + + + m_txtPassword + + + + + + + + + + + + + Show password + + + + + + + + + + + + &Test setup + + + + + + + + 0 + 0 + + + + Qt::RightToLeft + + + + + + + + + Qt::Vertical + + + + 409 + 35 + + + + + + + + + + + true + + + + + + + + + + true + + + + + + + + LineEditWithStatus + QWidget +
lineeditwithstatus.h
+ 1 +
+ + LabelWithStatus + QWidget +
labelwithstatus.h
+ 1 +
+
+ + m_checkDownloadOnlyUnreadMessages + m_checkServerSideUpdate + m_spinLimitMessages + m_checkShowPassword + m_btnTestSetup + + + +