Working "add" dialog.

This commit is contained in:
Martin Rotter 2017-09-21 11:41:27 +02:00
parent 45ea9a68be
commit 5b0735bd68
16 changed files with 243 additions and 39 deletions

View file

@ -335,7 +335,8 @@ HEADERS += src/core/feeddownloader.h \
src/services/inoreader/definitions.h \
src/services/inoreader/inoreaderentrypoint.h \
src/services/inoreader/network/inoreadernetworkfactory.h \
src/services/inoreader/inoreaderserviceroot.h
src/services/inoreader/inoreaderserviceroot.h \
src/services/inoreader/gui/formeditinoreaderaccount.h
SOURCES += src/core/feeddownloader.cpp \
src/core/feedsmodel.cpp \
@ -460,7 +461,8 @@ SOURCES += src/core/feeddownloader.cpp \
src/miscellaneous/externaltool.cpp \
src/services/inoreader/inoreaderentrypoint.cpp \
src/services/inoreader/network/inoreadernetworkfactory.cpp \
src/services/inoreader/inoreaderserviceroot.cpp
src/services/inoreader/inoreaderserviceroot.cpp \
src/services/inoreader/gui/formeditinoreaderaccount.cpp
OBJECTIVE_SOURCES += src/miscellaneous/disablewindowtabbing.mm
@ -487,7 +489,8 @@ FORMS += src/gui/toolbareditor.ui \
src/gui/settings/settingsbrowsermail.ui \
src/gui/settings/settingsfeedsmessages.ui \
src/gui/settings/settingsdownloads.ui \
src/services/tt-rss/gui/formeditttrssaccount.ui
src/services/tt-rss/gui/formeditttrssaccount.ui \
src/services/inoreader/gui/formeditinoreaderaccount.ui
equals(USE_WEBENGINE, true) {
HEADERS += src/gui/locationlineedit.h \

View file

@ -53,7 +53,7 @@ void FormAddAccount::addSelectedAccount() {
m_model->addServiceAccount(new_root, true);
}
else {
qCritical("Cannot create new account.");
qWarning("Cannot create new account.");
}
}

View file

@ -0,0 +1,67 @@
// This file is part of RSS Guard.
//
// Copyright (C) 2011-2017 by Martin Rotter <rotter.martinos@gmail.com>
//
// RSS Guard is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// RSS Guard is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with RSS Guard. If not, see <http://www.gnu.org/licenses/>.
#include "services/inoreader/gui/formeditinoreaderaccount.h"
#include "gui/guiutilities.h"
#include "miscellaneous/application.h"
#include "miscellaneous/iconfactory.h"
#include "services/inoreader/inoreaderserviceroot.h"
FormEditInoreaderAccount::FormEditInoreaderAccount(QWidget* parent) : QDialog(parent), m_editableRoot(nullptr) {
m_ui.setupUi(this);
GuiUtilities::applyDialogProperties(*this, qApp->icons()->miscIcon(QSL("inoreader")));
m_ui.m_lblTestResult->setStatus(WidgetWithStatus::StatusType::Information,
tr("Not tested yet."),
tr("Not tested yet."));
m_ui.m_lblTestResult->label()->setWordWrap(true);
connect(m_ui.m_btnTestSetup, &QPushButton::clicked, this, &FormEditInoreaderAccount::testSetup);
connect(&m_network, &InoreaderNetworkFactory::accessGranted, [this]() {
m_ui.m_lblTestResult->setStatus(WidgetWithStatus::StatusType::Ok,
tr("Tested successfully. You may be prompted to login once more."),
tr("Your access was approved."));
});
connect(&m_network, &InoreaderNetworkFactory::error, [this](const QString& err) {
m_ui.m_lblTestResult->setStatus(WidgetWithStatus::StatusType::Error,
tr("There is error. %1").arg(err),
tr("There was error during testing."));
});
}
FormEditInoreaderAccount::~FormEditInoreaderAccount() {}
void FormEditInoreaderAccount::testSetup() {
if (m_network.isLoggedIn()) {
m_ui.m_lblTestResult->setStatus(WidgetWithStatus::StatusType::Information,
tr("Access granted successfully."),
tr("Access granted successfully."));
}
else {
m_network.logIn();
m_ui.m_lblTestResult->setStatus(WidgetWithStatus::StatusType::Progress,
tr("Requested access approval. Respond to it, please."),
tr("Access approval was requested via OAuth 2.0 protocol."));
}
}
InoreaderServiceRoot* FormEditInoreaderAccount::execForCreate() {
setWindowTitle(tr("Add new Inoreader account"));
exec();
return m_editableRoot;
}

View file

@ -0,0 +1,52 @@
// This file is part of RSS Guard.
//
// Copyright (C) 2011-2017 by Martin Rotter <rotter.martinos@gmail.com>
//
// RSS Guard is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// RSS Guard is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with RSS Guard. If not, see <http://www.gnu.org/licenses/>.
#ifndef FORMEDITINOREADERACCOUNT_H
#define FORMEDITINOREADERACCOUNT_H
#include <QDialog>
#include "ui_formeditinoreaderaccount.h"
#include "services/inoreader/network/inoreadernetworkfactory.h"
namespace Ui {
class FormEditInoreaderAccount;
}
class InoreaderServiceRoot;
class FormEditInoreaderAccount : public QDialog {
Q_OBJECT
public:
explicit FormEditInoreaderAccount(QWidget* parent = 0);
virtual ~FormEditInoreaderAccount();
InoreaderServiceRoot* execForCreate();
private slots:
void testSetup();
private:
Ui::FormEditInoreaderAccount m_ui;
InoreaderNetworkFactory m_network;
InoreaderServiceRoot* m_editableRoot;
};
#endif // FORMEDITINOREADERACCOUNT_H

View file

@ -0,0 +1,99 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>FormEditInoreaderAccount</class>
<widget class="QDialog" name="FormEditInoreaderAccount">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>157</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<widget class="QDialogButtonBox" name="m_buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
<item row="0" column="0">
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QPushButton" name="m_btnTestSetup">
<property name="text">
<string>&amp;Test login</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="LabelWithStatus" name="m_lblTestResult" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="layoutDirection">
<enum>Qt::RightToLeft</enum>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>LabelWithStatus</class>
<extends>QWidget</extends>
<header>labelwithstatus.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>m_btnTestSetup</tabstop>
</tabstops>
<resources/>
<connections>
<connection>
<sender>m_buttonBox</sender>
<signal>accepted()</signal>
<receiver>FormEditInoreaderAccount</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>m_buttonBox</sender>
<signal>rejected()</signal>
<receiver>FormEditInoreaderAccount</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View file

@ -23,14 +23,14 @@
#include "miscellaneous/databasequeries.h"
#include "miscellaneous/iconfactory.h"
#include "services/inoreader/definitions.h"
#include "services/inoreader/gui/formeditinoreaderaccount.h"
#include "services/inoreader/inoreaderserviceroot.h"
#include "services/inoreader/network/inoreadernetworkfactory.h"
InoreaderEntryPoint::InoreaderEntryPoint() {}
InoreaderEntryPoint::~InoreaderEntryPoint() {}
ServiceRoot* InoreaderEntryPoint::createNewRoot() const {
return nullptr;
FormEditInoreaderAccount form_acc(qApp->mainFormWidget());
return form_acc.execForCreate();
}
QList<ServiceRoot*> InoreaderEntryPoint::initializeSubtree() const {

View file

@ -23,9 +23,6 @@
class InoreaderEntryPoint : public ServiceEntryPoint {
public:
explicit InoreaderEntryPoint();
virtual ~InoreaderEntryPoint();
ServiceRoot* createNewRoot() const;
QList<ServiceRoot*> initializeSubtree() const;

View file

@ -76,12 +76,14 @@ void InoreaderNetworkFactory::initializeOauth() {
});
connect(&m_oauth2, &QOAuth2AuthorizationCodeFlow::granted, [=]() {
qDebug("Inoreader: Oauth2 granted.");
emit accessGranted();
});
connect(&m_oauth2, &QOAuth2AuthorizationCodeFlow::error, [](const QString& error, const QString& error_description, const QUrl& uri) {
Q_UNUSED(error)
connect(&m_oauth2, &QOAuth2AuthorizationCodeFlow::error, [=](QString err, QString error_description, QUrl uri) {
Q_UNUSED(err)
Q_UNUSED(uri)
qCritical("Inoreader: We have error: '%s'.", qPrintable(error_description));
emit error(error_description);
});
connect(&m_oauth2, &QOAuth2AuthorizationCodeFlow::authorizeWithBrowser, [](const QUrl& url) {
qApp->web()->openUrlInExternalBrowser(url.toString());

View file

@ -35,6 +35,10 @@ class InoreaderNetworkFactory : public QObject {
void logIn();
void logInIfNeeded();
signals:
void accessGranted();
void error(QString& description);
private:
void initializeOauth();

View file

@ -95,12 +95,14 @@ OwnCloudServiceRoot* FormEditOwnCloudAccount::execForCreate() {
void FormEditOwnCloudAccount::execForEdit(OwnCloudServiceRoot* existing_root) {
setWindowTitle(tr("Edit existing ownCloud News account"));
m_editableRoot = existing_root;
m_ui->m_txtUsername->lineEdit()->setText(existing_root->network()->authUsername());
m_ui->m_txtPassword->lineEdit()->setText(existing_root->network()->authPassword());
m_ui->m_txtUrl->lineEdit()->setText(existing_root->network()->url());
m_ui->m_checkServerSideUpdate->setChecked(existing_root->network()->forceServerSideUpdate());
m_ui->m_spinLimitMessages->setValue(existing_root->network()->batchSize());
exec();
}

View file

@ -26,10 +26,6 @@
#include "services/owncloud/gui/formeditowncloudaccount.h"
#include "services/owncloud/owncloudserviceroot.h"
OwnCloudServiceEntryPoint::OwnCloudServiceEntryPoint() {}
OwnCloudServiceEntryPoint::~OwnCloudServiceEntryPoint() {}
ServiceRoot* OwnCloudServiceEntryPoint::createNewRoot() const {
FormEditOwnCloudAccount form_acc(qApp->mainFormWidget());

View file

@ -23,9 +23,6 @@
class OwnCloudServiceEntryPoint : public ServiceEntryPoint {
public:
explicit OwnCloudServiceEntryPoint();
virtual ~OwnCloudServiceEntryPoint();
ServiceRoot* createNewRoot() const;
QList<ServiceRoot*> initializeSubtree() const;

View file

@ -23,10 +23,6 @@
#include "miscellaneous/databasequeries.h"
#include "services/standard/standardserviceroot.h"
StandardServiceEntryPoint::StandardServiceEntryPoint() {}
StandardServiceEntryPoint::~StandardServiceEntryPoint() {}
bool StandardServiceEntryPoint::isSingleInstanceService() const {
return true;
}

View file

@ -23,9 +23,6 @@
class StandardServiceEntryPoint : public ServiceEntryPoint {
public:
explicit StandardServiceEntryPoint();
virtual ~StandardServiceEntryPoint();
bool isSingleInstanceService() const;
QString name() const;
QString description() const;

View file

@ -25,12 +25,6 @@
#include "services/tt-rss/gui/formeditttrssaccount.h"
#include "services/tt-rss/ttrssserviceroot.h"
#include <QPointer>
TtRssServiceEntryPoint::TtRssServiceEntryPoint() {}
TtRssServiceEntryPoint::~TtRssServiceEntryPoint() {}
bool TtRssServiceEntryPoint::isSingleInstanceService() const {
return false;
}
@ -59,8 +53,9 @@ QString TtRssServiceEntryPoint::code() const {
}
ServiceRoot* TtRssServiceEntryPoint::createNewRoot() const {
QScopedPointer<FormEditTtRssAccount> form_acc(new FormEditTtRssAccount(qApp->mainFormWidget()));
return form_acc->execForCreate();
FormEditTtRssAccount form_acc(qApp->mainFormWidget());
return form_acc.execForCreate();
}
QList<ServiceRoot*> TtRssServiceEntryPoint::initializeSubtree() const {

View file

@ -23,9 +23,6 @@
class TtRssServiceEntryPoint : public ServiceEntryPoint {
public:
explicit TtRssServiceEntryPoint();
virtual ~TtRssServiceEntryPoint();
bool isSingleInstanceService() const;
QString name() const;
QString description() const;