Simplyfiyng network api.
This commit is contained in:
parent
8a7ca6b289
commit
8f051db71b
@ -980,7 +980,7 @@ bool DatabaseQueries::overwriteOwnCloudAccount(QSqlDatabase db, const QString& u
|
||||
query.bindValue(QSL(":url"), url);
|
||||
query.bindValue(QSL(":force_update"), force_server_side_feed_update ? 1 : 0);
|
||||
query.bindValue(QSL(":id"), account_id);
|
||||
query.bindValue(QSL(":msg_limit"), batch_size <= 0 ? UNLIMITED_BATCH_SIZE : batch_size);
|
||||
query.bindValue(QSL(":msg_limit"), batch_size <= 0 ? OWNCLOUD_UNLIMITED_BATCH_SIZE : batch_size);
|
||||
|
||||
if (query.exec()) {
|
||||
return true;
|
||||
@ -1003,7 +1003,7 @@ bool DatabaseQueries::createOwnCloudAccount(QSqlDatabase db, int id_to_assign, c
|
||||
q.bindValue(QSL(":password"), TextFactory::encrypt(password));
|
||||
q.bindValue(QSL(":url"), url);
|
||||
q.bindValue(QSL(":force_update"), force_server_side_feed_update ? 1 : 0);
|
||||
q.bindValue(QSL(":msg_limit"), batch_size <= 0 ? UNLIMITED_BATCH_SIZE : batch_size);
|
||||
q.bindValue(QSL(":msg_limit"), batch_size <= 0 ? OWNCLOUD_UNLIMITED_BATCH_SIZE : batch_size);
|
||||
|
||||
if (q.exec()) {
|
||||
return true;
|
||||
|
@ -57,6 +57,13 @@ QStringList NetworkFactory::extractFeedLinksFromHtmlPage(const QUrl& url, const
|
||||
return feeds;
|
||||
}
|
||||
|
||||
QPair<QByteArray, QByteArray> NetworkFactory::generateBasicAuthHeader(const QString& username, const QString& password) {
|
||||
QString basic_value = username + ":" + password;
|
||||
QString header_value = QString("Basic ") + QString(basic_value.toUtf8().toBase64());
|
||||
|
||||
return QPair<QByteArray, QByteArray>(HTTP_HEADERS_AUTHORIZATION, header_value.toLocal8Bit());
|
||||
}
|
||||
|
||||
QString NetworkFactory::networkErrorText(QNetworkReply::NetworkError error_code) {
|
||||
switch (error_code) {
|
||||
case QNetworkReply::ProtocolUnknownError:
|
||||
@ -164,23 +171,16 @@ QNetworkReply::NetworkError NetworkFactory::downloadIcon(const QList<QString>& u
|
||||
}
|
||||
|
||||
Downloader* NetworkFactory::performAsyncNetworkOperation(const QString& url, int timeout, const QByteArray& input_data,
|
||||
const QString& input_content_type,
|
||||
QNetworkAccessManager::Operation operation,
|
||||
QList<QPair<QByteArray, QByteArray>> additional_headers,
|
||||
bool protected_contents, const QString& username,
|
||||
const QString& password, bool set_basic_header) {
|
||||
const QString& password) {
|
||||
Downloader* downloader = new Downloader();
|
||||
|
||||
QObject::connect(downloader, &Downloader::completed, downloader, &Downloader::deleteLater);
|
||||
|
||||
if (!input_content_type.isEmpty()) {
|
||||
downloader->appendRawHeader("Content-Type", input_content_type.toLocal8Bit());
|
||||
}
|
||||
|
||||
if (set_basic_header) {
|
||||
QString basic_value = username + ":" + password;
|
||||
QString header_value = QString("Basic ") + QString(basic_value.toUtf8().toBase64());
|
||||
|
||||
downloader->appendRawHeader(HTTP_HEADERS_AUTHORIZATION, header_value.toLocal8Bit());
|
||||
foreach (const auto& header, additional_headers) {
|
||||
downloader->appendRawHeader(header.first, header.second);
|
||||
}
|
||||
|
||||
downloader->manipulateData(url, operation, input_data, timeout, protected_contents, username, password);
|
||||
|
@ -38,6 +38,7 @@ class NetworkFactory {
|
||||
|
||||
public:
|
||||
static QStringList extractFeedLinksFromHtmlPage(const QUrl& url, const QString& html);
|
||||
static QPair<QByteArray, QByteArray> generateBasicAuthHeader(const QString& username, const QString& password);
|
||||
|
||||
// Returns human readable text for given network error.
|
||||
static QString networkErrorText(QNetworkReply::NetworkError error_code);
|
||||
@ -45,11 +46,15 @@ class NetworkFactory {
|
||||
// Performs SYNCHRONOUS download if favicon for the site,
|
||||
// given URL belongs to.
|
||||
static QNetworkReply::NetworkError downloadIcon(const QList<QString>& urls, int timeout, QIcon& output);
|
||||
static Downloader* performAsyncNetworkOperation(const QString& url, int timeout, const QByteArray& input_data,
|
||||
const QString& input_content_type,
|
||||
static Downloader* performAsyncNetworkOperation(const QString& url,
|
||||
int timeout,
|
||||
const QByteArray& input_data,
|
||||
QNetworkAccessManager::Operation operation,
|
||||
bool protected_contents = false, const QString& username = QString(),
|
||||
const QString& password = QString(), bool set_basic_header = false);
|
||||
QList<QPair<QByteArray,
|
||||
QByteArray>> additional_headers = QList<QPair<QByteArray, QByteArray>>(),
|
||||
bool protected_contents = false,
|
||||
const QString& username = QString(),
|
||||
const QString& password = QString());
|
||||
static NetworkResult performNetworkOperation(const QString& url, int timeout, const QByteArray& input_data,
|
||||
const QString& input_content_type, QByteArray& output,
|
||||
QNetworkAccessManager::Operation operation,
|
||||
|
@ -19,10 +19,10 @@
|
||||
#ifndef OWNCLOUD_DEFINITIONS_H
|
||||
#define OWNCLOUD_DEFINITIONS_H
|
||||
|
||||
#define CONTENT_TYPE "application/json; charset=utf-8"
|
||||
#define API_VERSION "1.2"
|
||||
#define API_PATH "index.php/apps/news/api/v1-2/"
|
||||
#define MINIMAL_OC_VERSION "6.0.5"
|
||||
#define UNLIMITED_BATCH_SIZE -1
|
||||
#define OWNCLOUD_CONTENT_TYPE_JSON "application/json; charset=utf-8"
|
||||
#define OWNCLOUD_API_VERSION "1.2"
|
||||
#define OWNCLOUD_API_PATH "index.php/apps/news/api/v1-2/"
|
||||
#define OWNCLOUD_MIN_VERSION "6.0.5"
|
||||
#define OWNCLOUD_UNLIMITED_BATCH_SIZE -1
|
||||
|
||||
#endif // OWNCLOUD_DEFINITIONS_H
|
||||
|
@ -35,7 +35,7 @@ FormEditOwnCloudAccount::FormEditOwnCloudAccount(QWidget* parent)
|
||||
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_lblDescription->setText(tr("Note that at least version %1 is required.").arg(MINIMAL_OC_VERSION));
|
||||
m_ui->m_lblDescription->setText(tr("Note that at least version %1 is required.").arg(OWNCLOUD_MIN_VERSION));
|
||||
m_ui->m_txtPassword->lineEdit()->setPlaceholderText(tr("Password for your ownCloud account"));
|
||||
m_ui->m_txtUsername->lineEdit()->setPlaceholderText(tr("Username for your ownCloud account"));
|
||||
m_ui->m_txtUrl->lineEdit()->setPlaceholderText(tr("URL of your ownCloud server, without any API path"));
|
||||
@ -121,12 +121,12 @@ void FormEditOwnCloudAccount::performTest() {
|
||||
OwnCloudStatusResponse result = factory.status();
|
||||
|
||||
if (result.isLoaded()) {
|
||||
if (!SystemFactory::isVersionEqualOrNewer(result.version(), MINIMAL_OC_VERSION)) {
|
||||
if (!SystemFactory::isVersionEqualOrNewer(result.version(), OWNCLOUD_MIN_VERSION)) {
|
||||
m_ui->m_lblTestResult->setStatus(WidgetWithStatus::Error,
|
||||
tr(
|
||||
"Selected ownCloud News server is running unsupported version (%1). At least version %2 is required.").arg(
|
||||
result.version(),
|
||||
MINIMAL_OC_VERSION),
|
||||
OWNCLOUD_MIN_VERSION),
|
||||
tr("Selected ownCloud News server is running unsupported version."));
|
||||
}
|
||||
else {
|
||||
@ -134,7 +134,7 @@ void FormEditOwnCloudAccount::performTest() {
|
||||
tr(
|
||||
"ownCloud News server is okay, running with version %1, while at least version %2 is required.").arg(
|
||||
result.version(),
|
||||
MINIMAL_OC_VERSION),
|
||||
OWNCLOUD_MIN_VERSION),
|
||||
tr("ownCloud News server is okay."));
|
||||
}
|
||||
}
|
||||
|
@ -34,7 +34,8 @@
|
||||
|
||||
OwnCloudNetworkFactory::OwnCloudNetworkFactory()
|
||||
: m_url(QString()), m_fixedUrl(QString()), m_forceServerSideUpdate(false),
|
||||
m_authUsername(QString()), m_authPassword(QString()), m_batchSize(UNLIMITED_BATCH_SIZE), m_urlUser(QString()), m_urlStatus(QString()),
|
||||
m_authUsername(QString()), m_authPassword(QString()), m_batchSize(OWNCLOUD_UNLIMITED_BATCH_SIZE), m_urlUser(QString()), m_urlStatus(
|
||||
QString()),
|
||||
m_urlFolders(QString()), m_urlFeeds(QString()), m_urlMessages(QString()), m_urlFeedsUpdate(QString()),
|
||||
m_urlDeleteFeed(QString()), m_urlRenameFeed(QString()), m_userId(QString()) {}
|
||||
|
||||
@ -55,14 +56,14 @@ void OwnCloudNetworkFactory::setUrl(const QString& url) {
|
||||
}
|
||||
|
||||
// Store endpoints.
|
||||
m_urlUser = m_fixedUrl + API_PATH + "user";
|
||||
m_urlStatus = m_fixedUrl + API_PATH + "status";
|
||||
m_urlFolders = m_fixedUrl + API_PATH + "folders";
|
||||
m_urlFeeds = m_fixedUrl + API_PATH + "feeds";
|
||||
m_urlMessages = m_fixedUrl + API_PATH + "items?id=%1&batchSize=%2&type=%3";
|
||||
m_urlFeedsUpdate = m_fixedUrl + API_PATH + "feeds/update?userId=%1&feedId=%2";
|
||||
m_urlDeleteFeed = m_fixedUrl + API_PATH + "feeds/%1";
|
||||
m_urlRenameFeed = m_fixedUrl + API_PATH + "feeds/%1/rename";
|
||||
m_urlUser = m_fixedUrl + OWNCLOUD_API_PATH + "user";
|
||||
m_urlStatus = m_fixedUrl + OWNCLOUD_API_PATH + "status";
|
||||
m_urlFolders = m_fixedUrl + OWNCLOUD_API_PATH + "folders";
|
||||
m_urlFeeds = m_fixedUrl + OWNCLOUD_API_PATH + "feeds";
|
||||
m_urlMessages = m_fixedUrl + OWNCLOUD_API_PATH + "items?id=%1&batchSize=%2&type=%3";
|
||||
m_urlFeedsUpdate = m_fixedUrl + OWNCLOUD_API_PATH + "feeds/update?userId=%1&feedId=%2";
|
||||
m_urlDeleteFeed = m_fixedUrl + OWNCLOUD_API_PATH + "feeds/%1";
|
||||
m_urlRenameFeed = m_fixedUrl + OWNCLOUD_API_PATH + "feeds/%1/rename";
|
||||
setUserId(QString());
|
||||
}
|
||||
|
||||
@ -312,10 +313,10 @@ void OwnCloudNetworkFactory::markMessagesRead(RootItem::ReadStatus status, const
|
||||
QString final_url;
|
||||
|
||||
if (status == RootItem::Read) {
|
||||
final_url = m_fixedUrl + API_PATH + "items/read/multiple";
|
||||
final_url = m_fixedUrl + OWNCLOUD_API_PATH + "items/read/multiple";
|
||||
}
|
||||
else {
|
||||
final_url = m_fixedUrl + API_PATH + "items/unread/multiple";
|
||||
final_url = m_fixedUrl + OWNCLOUD_API_PATH + "items/unread/multiple";
|
||||
}
|
||||
|
||||
foreach (const QString& id, custom_ids) {
|
||||
@ -324,14 +325,16 @@ void OwnCloudNetworkFactory::markMessagesRead(RootItem::ReadStatus status, const
|
||||
|
||||
json["items"] = ids;
|
||||
|
||||
QList<QPair<QByteArray, QByteArray>> headers;
|
||||
headers << QPair<QByteArray, QByteArray>(HTTP_HEADERS_CONTENT_TYPE, OWNCLOUD_CONTENT_TYPE_JSON);
|
||||
headers << NetworkFactory::generateBasicAuthHeader(m_authUsername, m_authPassword);
|
||||
|
||||
NetworkFactory::performAsyncNetworkOperation(final_url,
|
||||
qApp->settings()->value(GROUP(Feeds),
|
||||
SETTING(Feeds::UpdateTimeout)).toInt(),
|
||||
QJsonDocument(json).toJson(QJsonDocument::Compact),
|
||||
CONTENT_TYPE,
|
||||
QNetworkAccessManager::PutOperation,
|
||||
true, m_authUsername, m_authPassword,
|
||||
true);
|
||||
headers);
|
||||
}
|
||||
|
||||
void OwnCloudNetworkFactory::markMessagesStarred(RootItem::Importance importance,
|
||||
@ -342,10 +345,10 @@ void OwnCloudNetworkFactory::markMessagesStarred(RootItem::Importance importance
|
||||
QString final_url;
|
||||
|
||||
if (importance == RootItem::Important) {
|
||||
final_url = m_fixedUrl + API_PATH + "items/star/multiple";
|
||||
final_url = m_fixedUrl + OWNCLOUD_API_PATH + "items/star/multiple";
|
||||
}
|
||||
else {
|
||||
final_url = m_fixedUrl + API_PATH + "items/unstar/multiple";
|
||||
final_url = m_fixedUrl + OWNCLOUD_API_PATH + "items/unstar/multiple";
|
||||
}
|
||||
|
||||
for (int i = 0; i < feed_ids.size(); i++) {
|
||||
@ -358,14 +361,16 @@ void OwnCloudNetworkFactory::markMessagesStarred(RootItem::Importance importance
|
||||
|
||||
json["items"] = ids;
|
||||
|
||||
QList<QPair<QByteArray, QByteArray>> headers;
|
||||
headers << QPair<QByteArray, QByteArray>(HTTP_HEADERS_CONTENT_TYPE, OWNCLOUD_CONTENT_TYPE_JSON);
|
||||
headers << NetworkFactory::generateBasicAuthHeader(m_authUsername, m_authPassword);
|
||||
|
||||
NetworkFactory::performAsyncNetworkOperation(final_url,
|
||||
qApp->settings()->value(GROUP(Feeds),
|
||||
SETTING(Feeds::UpdateTimeout)).toInt(),
|
||||
QJsonDocument(json).toJson(QJsonDocument::Compact),
|
||||
CONTENT_TYPE,
|
||||
QNetworkAccessManager::PutOperation,
|
||||
true, m_authUsername, m_authPassword,
|
||||
true);
|
||||
headers);
|
||||
}
|
||||
|
||||
int OwnCloudNetworkFactory::batchSize() const {
|
||||
|
@ -52,7 +52,7 @@ QString OwnCloudServiceEntryPoint::code() const {
|
||||
|
||||
QString OwnCloudServiceEntryPoint::description() const {
|
||||
return QObject::tr("The News app is an RSS/Atom feed aggregator. It is part of Nextcloud suite. This plugin implements %1 API.")
|
||||
.arg(API_VERSION);
|
||||
.arg(OWNCLOUD_API_VERSION);
|
||||
}
|
||||
|
||||
QString OwnCloudServiceEntryPoint::author() const {
|
||||
|
@ -182,7 +182,8 @@ QPair<StandardFeed*, QNetworkReply::NetworkError> StandardFeed::guessFeed(const
|
||||
QNetworkAccessManager::GetOperation,
|
||||
!username.isEmpty(),
|
||||
username,
|
||||
password);
|
||||
password,
|
||||
true);
|
||||
|
||||
result.second = network_result.first;
|
||||
|
||||
@ -442,7 +443,8 @@ QList<Message> StandardFeed::obtainNewMessages(bool* error_during_obtaining) {
|
||||
QNetworkAccessManager::GetOperation,
|
||||
!username().isEmpty(),
|
||||
username(),
|
||||
password()).first;
|
||||
password(),
|
||||
true).first;
|
||||
|
||||
if (m_networkError != QNetworkReply::NoError) {
|
||||
qWarning("Error during fetching of new messages for feed '%s' (id %d).", qPrintable(url()), id());
|
||||
|
Loading…
x
Reference in New Issue
Block a user