diff --git a/saoriaccount.cpp b/saoriaccount.cpp index c03437e..8eb1c72 100644 --- a/saoriaccount.cpp +++ b/saoriaccount.cpp @@ -25,6 +25,7 @@ ***/ #include "saoriaccount.h" +#include "saoriapplication.h" #include "saoriview.h" #include "saoridef.h" @@ -65,11 +66,10 @@ void SaoriAccount::getAccountInfomation() { - auto manager = new QNetworkAccessManager(); QNetworkRequest request = createHearder(); request.setUrl(QUrl(m_instance->instance().url() + SAORI_MASTODON_APIPATH_ACCOUNTS + "/verify_credentials")); - auto *reply = manager->get(request); - connect(manager,&QNetworkAccessManager::finished,[=](){ + auto *reply = SaoriApplication::saori()->manager->get(request); + connect(reply,&QNetworkReply::finished,[=](){ if (reply->NoError == QNetworkReply::NoError) { QJsonObject json = QJsonDocument::fromJson(reply->readAll()).object(); QMap info; @@ -79,7 +79,7 @@ m_accountInfo = info; emit accountInfomationChanged(); } - manager->deleteLater(); + reply->deleteLater(); }); return; } @@ -110,18 +110,18 @@ void SaoriAccount::getTimelineData(const QString timeline) { + // TODO max_id、since_id、limitの処理を追加すべし。 QUrl url = instance()->timelineUrl(timeline); if (url.isEmpty()) return; - auto manager = new QNetworkAccessManager(); QNetworkRequest request = createHearder(); request.setUrl(url); - auto *reply = manager->get(request); - connect(manager,&QNetworkAccessManager::finished,[=](){ + auto *reply = SaoriApplication::saori()->manager->get(request); + connect(reply,&QNetworkReply::finished,[=](){ if (reply->NoError == QNetworkReply::NoError) { QByteArray data = reply->readAll(); emit apiData(timeline,data); } - manager->deleteLater(); + reply->deleteLater(); }); return; } diff --git a/saoriaccount.h b/saoriaccount.h index 76ff714..5e518f7 100644 --- a/saoriaccount.h +++ b/saoriaccount.h @@ -32,7 +32,6 @@ #include #include #include -#include #include class SaoriAccount : public QObject @@ -57,7 +56,6 @@ protected: void getAccountInfomation(); QNetworkRequest createHearder(); - void requestGET(QUrl url,QNetworkAccessManager *manager); protected: QString m_name; diff --git a/saoriaddaccountdialog.cpp b/saoriaddaccountdialog.cpp index 0ef89fd..61ea2af 100644 --- a/saoriaddaccountdialog.cpp +++ b/saoriaddaccountdialog.cpp @@ -29,8 +29,8 @@ #include "saoridef.h" #include "ui_saoriaddaccountdialog.h" #include -#include -#include +#include +#include #include #include #include @@ -85,24 +85,23 @@ if (token.isEmpty()) return; m_account = new SaoriAccount("check",m_instance,token); - auto manager = new QNetworkAccessManager(); QEventLoop event; - connect(manager,&QNetworkAccessManager::finished,&event,&QEventLoop::quit); QUrlQuery params; QNetworkRequest request; QString instance = m_instance->instanceInfo("uri"); request.setRawHeader("Authorization","Bearer " + token.toLatin1()); request.setUrl(QUrl(m_instance->instance().url() + SAORI_MASTODON_APIPATH_ACCOUNTS + "/verify_credentials")); - auto reply = manager->get(request); + auto reply = SaoriApplication::saori()->manager->get(request); + connect(reply,&QNetworkReply::finished,&event,&QEventLoop::quit); event.exec(); if (reply->error() != QNetworkReply::NoError) { - manager->deleteLater(); + reply->deleteLater(); return; } QJsonObject json = QJsonDocument::fromJson(reply->readAll()).object(); QString account = json["acct"].toString(); - manager->deleteLater(); + reply->deleteLater(); m_account->setName(account + "@" + instance); ui->account_lineEdit->setText(m_account->name()); diff --git a/saoriapplication.cpp b/saoriapplication.cpp index b101ac7..dc3aee5 100644 --- a/saoriapplication.cpp +++ b/saoriapplication.cpp @@ -41,6 +41,8 @@ setOrganizationDomain(SAORI_QSETTINGS_DOMAIN); setApplicationName(SAORI_QSETTINGS_APPLICATION); + manager = new QNetworkAccessManager; + m_config = new QSettings(SAORI_QSETTINGS_DOMAIN,SAORI_QSETTINGS_APPLICATION,this); loadSettings(); diff --git a/saoriapplication.h b/saoriapplication.h index 3178849..9c0014e 100644 --- a/saoriapplication.h +++ b/saoriapplication.h @@ -35,6 +35,7 @@ #include #include #include +#include class SaoriApplication : public QApplication { @@ -52,6 +53,9 @@ QSqlDatabase * database(); SaoriCache * cache(); +public: + QNetworkAccessManager * manager; + protected: QSettings *m_config; QList m_instanceList; diff --git a/saoricache.cpp b/saoricache.cpp index 03cdc40..5cd4cc2 100644 --- a/saoricache.cpp +++ b/saoricache.cpp @@ -44,8 +44,6 @@ * size(integer) * timestamp(integer) * - * table status_cache - * */ QList SaoriCache::m_nowloading; @@ -93,9 +91,8 @@ m_nowloading.append(url); QNetworkRequest request; request.setUrl(url); - auto manager = new QNetworkAccessManager; - auto *reply = manager->get(request); - connect(manager,&QNetworkAccessManager::finished,this,[=](){ + auto *reply = SaoriApplication::saori()->manager->get(request); + connect(reply,&QNetworkReply::finished,this,[=](){ if (reply->error() != QNetworkReply::NoError) { QFile localfile(urlToFilename(url)); if (localfile.exists()) localfile.remove(); @@ -123,7 +120,7 @@ emit downloaded(url); } m_nowloading.removeAll(url); - manager->deleteLater(); + reply->deleteLater(); }); } diff --git a/saoridon.cpp b/saoridon.cpp index b353873..8218520 100644 --- a/saoridon.cpp +++ b/saoridon.cpp @@ -25,9 +25,10 @@ ***/ #include "saoridon.h" +#include "saoriapplication.h" #include "saoridef.h" -#include -#include +#include +#include #include #include #include @@ -74,9 +75,7 @@ bool Saoridon::clientRedistration() { - auto manager = new QNetworkAccessManager(); QEventLoop event; - connect(manager,SIGNAL(finished(QNetworkReply*)),&event,SLOT(quit())); QUrlQuery params; params.addQueryItem("client_name",SAORI_CLIENT_NAME); params.addQueryItem("redirect_uris",SAORI_CLIENT_REDIRECT_URI); @@ -85,10 +84,11 @@ QNetworkRequest request; request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/x-www-form-urlencoded")); request.setUrl(QUrl(instance().url() + SAORI_MASTODON_APIPATH_APPS)); - auto *reply = manager->post(request,params.toString().toLatin1()); + auto *reply = SaoriApplication::saori()->manager->post(request,params.toString().toLatin1()); + connect(reply,&QNetworkReply::finished,&event,&QEventLoop::quit); event.exec(); if (reply->error() != QNetworkReply::NoError) { - manager->deleteLater(); + reply->deleteLater(); return false; } QJsonObject json = QJsonDocument::fromJson(reply->readAll()).object(); @@ -97,7 +97,7 @@ if (id.isEmpty() || secret.isEmpty()) return false; setClientId(id); setClientSecret(secret); - manager->deleteLater(); + reply->deleteLater(); return true; } @@ -119,9 +119,7 @@ const QString Saoridon::getAccessToken(const QString code) { - auto manager = new QNetworkAccessManager(); QEventLoop event; - connect(manager,&QNetworkAccessManager::finished,&event,&QEventLoop::quit); QUrlQuery params; params.addQueryItem("grant_type","authorization_code"); params.addQueryItem("redirect_uri","urn:ietf:wg:oauth:2.0:oob"); @@ -131,25 +129,25 @@ QNetworkRequest request; request.setHeader(QNetworkRequest::ContentTypeHeader,QVariant("application/x-www-form-urlencoded")); request.setUrl(QUrl(instance().url() + SAORI_MASTODON_APIPATH_TOKEN)); - auto *reply = manager->post(request,params.toString().toLatin1()); + auto *reply = SaoriApplication::saori()->manager->post(request,params.toString().toLatin1()); + connect(reply,&QNetworkReply::finished,&event,&QEventLoop::quit); event.exec(); if (reply->error() != QNetworkReply::NoError) { - manager->deleteLater(); + reply->deleteLater(); return QString(); } QJsonObject json = QJsonDocument::fromJson(reply->readAll()).object(); QString token = json["access_token"].toString(); - manager->deleteLater(); + reply->deleteLater(); return token; } void Saoridon::getInstanceInfomation() { - auto manager = new QNetworkAccessManager(); QNetworkRequest request; request.setUrl(QUrl(instance().url() + SAORI_MASTODON_APIPATH_INSTANCE)); - auto *reply = manager->get(request); - connect(manager,&QNetworkAccessManager::finished,[=](){ + auto *reply = SaoriApplication::saori()->manager->get(request); + connect(reply,&QNetworkReply::finished,[=](){ if (reply->NoError == QNetworkReply::NoError) { QJsonObject json = QJsonDocument::fromJson(reply->readAll()).object(); QMap info; @@ -159,7 +157,7 @@ m_instanceInfo = info; emit instanceInfomationChanged(); } - manager->deleteLater(); + reply->deleteLater(); }); m_timelineMap.clear(); diff --git a/saoriview.cpp b/saoriview.cpp index d3d97e9..a730d49 100644 --- a/saoriview.cpp +++ b/saoriview.cpp @@ -45,6 +45,7 @@ auto saoriaccount = SaoriApplication::saori()->findAccount(m_account); if (saoriaccount) { connect(saoriaccount,&SaoriAccount::apiData,this,&SaoriView::recived); + saoriaccount->getTimelineData(view); } } diff --git a/saoriview.h b/saoriview.h index e91bd58..d15652d 100644 --- a/saoriview.h +++ b/saoriview.h @@ -46,6 +46,7 @@ protected: QString m_viewname; QString m_account; + static QList m_viewList; public slots: