Skip to content
Snippets Groups Projects
Commit 9287c51d authored by akiraohgaki's avatar akiraohgaki
Browse files

Code cleanup

parent 66355e38
No related branches found
No related tags found
No related merge requests found
...@@ -10,15 +10,15 @@ class Config : public QObject ...@@ -10,15 +10,15 @@ class Config : public QObject
{ {
Q_OBJECT Q_OBJECT
private:
QString configsDir_;
QJsonObject cacheData_;
public: public:
explicit Config(const QString &configsDir, QObject *parent = 0); explicit Config(const QString &configsDir, QObject *parent = 0);
QJsonObject get(const QString &name); QJsonObject get(const QString &name);
bool set(const QString &name, const QJsonObject &jsonObj); bool set(const QString &name, const QJsonObject &jsonObj);
private:
QString configsDir_;
QJsonObject cacheData_;
}; };
} // namespace core } // namespace core
......
...@@ -13,11 +13,6 @@ class Network : public QObject ...@@ -13,11 +13,6 @@ class Network : public QObject
{ {
Q_OBJECT Q_OBJECT
private:
bool async_;
QNetworkAccessManager *manager_;
QEventLoop *eventLoop_;
public: public:
explicit Network(const bool &async = true, QObject *parent = 0); explicit Network(const bool &async = true, QObject *parent = 0);
~Network(); ~Network();
...@@ -28,6 +23,11 @@ public: ...@@ -28,6 +23,11 @@ public:
signals: signals:
void finished(QNetworkReply *reply); void finished(QNetworkReply *reply);
void downloadProgress(const qint64 &received, const qint64 &total); void downloadProgress(const qint64 &received, const qint64 &total);
private:
bool async_;
QNetworkAccessManager *manager_;
QEventLoop *eventLoop_;
}; };
} // namespace core } // namespace core
......
...@@ -23,6 +23,97 @@ XdgUrl::XdgUrl(const QString &xdgUrl, core::Config *config, core::Network *netwo ...@@ -23,6 +23,97 @@ XdgUrl::XdgUrl(const QString &xdgUrl, core::Config *config, core::Network *netwo
connect(network_, &core::Network::downloadProgress, this, &XdgUrl::downloadProgress); connect(network_, &core::Network::downloadProgress, this, &XdgUrl::downloadProgress);
} }
void XdgUrl::process()
{
/**
* xdgs scheme is a reserved name, so the process of xdgs
* is the same process of the xdg scheme currently.
*/
if (!isValid()) {
QJsonObject result;
result["status"] = QString("error_validation");
result["message"] = QString("Invalid XDG-URL " + xdgUrl_);
emit error(result);
return;
}
network_->get(QUrl(metadata_["url"].toString()));
emit started();
}
void XdgUrl::openDestination()
{
if (!destination_.isEmpty()) {
QDesktopServices::openUrl(QUrl("file://" + destination_));
}
}
bool XdgUrl::isValid()
{
QString scheme = metadata_["scheme"].toString();
QString command = metadata_["command"].toString();
QString url = metadata_["url"].toString();
QString type = metadata_["type"].toString();
QString filename = metadata_["filename"].toString();
if ((scheme == "xdg" || scheme == "xdgs")
&& (command == "download" || command == "install")
&& QUrl(url).isValid()
&& destinations_.contains(type)
&& !filename.isEmpty()) {
return true;
}
return false;
}
QString XdgUrl::getXdgUrl()
{
return xdgUrl_;
}
QJsonObject XdgUrl::getMetadata()
{
return metadata_;
}
void XdgUrl::downloaded_(QNetworkReply *reply)
{
if (reply->error() != QNetworkReply::NoError) {
QJsonObject result;
result["status"] = QString("error_network");
result["message"] = reply->errorString();
emit error(result);
return;
}
if (reply->hasRawHeader("Location")) {
QString redirectUrl = QString(reply->rawHeader("Location"));
if (redirectUrl.startsWith("/")) {
redirectUrl = reply->url().authority() + redirectUrl;
}
network_->get(QUrl(redirectUrl));
return;
}
if (reply->hasRawHeader("Refresh")) {
QString refreshUrl = QString(reply->rawHeader("Refresh")).split("url=").last();
if (refreshUrl.startsWith("/")) {
refreshUrl = reply->url().authority() + refreshUrl;
}
network_->get(QUrl(refreshUrl));
return;
}
if (metadata_["command"].toString() == "download") {
saveDownloadedFile_(reply);
}
else if (metadata_["command"].toString() == "install") {
installDownloadedFile_(reply);
}
}
void XdgUrl::parse_() void XdgUrl::parse_()
{ {
QUrl url(xdgUrl_); QUrl url(xdgUrl_);
...@@ -194,99 +285,4 @@ void XdgUrl::installDownloadedFile_(QNetworkReply *reply) ...@@ -194,99 +285,4 @@ void XdgUrl::installDownloadedFile_(QNetworkReply *reply)
emit finished(result); emit finished(result);
} }
/**
* Slots
*/
void XdgUrl::process()
{
/**
* xdgs scheme is a reserved name, so the process of xdgs
* is the same process of the xdg scheme currently.
*/
if (!isValid()) {
QJsonObject result;
result["status"] = QString("error_validation");
result["message"] = QString("Invalid XDG-URL " + xdgUrl_);
emit error(result);
return;
}
network_->get(QUrl(metadata_["url"].toString()));
emit started();
}
void XdgUrl::openDestination()
{
if (!destination_.isEmpty()) {
QDesktopServices::openUrl(QUrl("file://" + destination_));
}
}
bool XdgUrl::isValid()
{
QString scheme = metadata_["scheme"].toString();
QString command = metadata_["command"].toString();
QString url = metadata_["url"].toString();
QString type = metadata_["type"].toString();
QString filename = metadata_["filename"].toString();
if ((scheme == "xdg" || scheme == "xdgs")
&& (command == "download" || command == "install")
&& QUrl(url).isValid()
&& destinations_.contains(type)
&& !filename.isEmpty()) {
return true;
}
return false;
}
QString XdgUrl::getXdgUrl()
{
return xdgUrl_;
}
QJsonObject XdgUrl::getMetadata()
{
return metadata_;
}
void XdgUrl::downloaded_(QNetworkReply *reply)
{
if (reply->error() != QNetworkReply::NoError) {
QJsonObject result;
result["status"] = QString("error_network");
result["message"] = reply->errorString();
emit error(result);
return;
}
if (reply->hasRawHeader("Location")) {
QString redirectUrl = QString(reply->rawHeader("Location"));
if (redirectUrl.startsWith("/")) {
redirectUrl = reply->url().authority() + redirectUrl;
}
network_->get(QUrl(redirectUrl));
return;
}
if (reply->hasRawHeader("Refresh")) {
QString refreshUrl = QString(reply->rawHeader("Refresh")).split("url=").last();
if (refreshUrl.startsWith("/")) {
refreshUrl = reply->url().authority() + refreshUrl;
}
network_->get(QUrl(refreshUrl));
return;
}
if (metadata_["command"].toString() == "download") {
saveDownloadedFile_(reply);
}
else if (metadata_["command"].toString() == "install") {
installDownloadedFile_(reply);
}
}
} // namespace handlers } // namespace handlers
...@@ -17,24 +17,14 @@ class XdgUrl : public QObject ...@@ -17,24 +17,14 @@ class XdgUrl : public QObject
{ {
Q_OBJECT Q_OBJECT
private:
QString xdgUrl_;
core::Config *config_;
core::Network *network_;
QJsonObject metadata_;
QJsonObject destinations_;
QString destination_;
public: public:
explicit XdgUrl(const QString &xdgUrl, core::Config *config, core::Network *network, QObject *parent = 0); explicit XdgUrl(const QString &xdgUrl, core::Config *config, core::Network *network, QObject *parent = 0);
private: signals:
void parse_(); void started();
void loadDestinations_(); void finished(const QJsonObject &result);
QString convertPathString_(const QString &path); void error(const QJsonObject &result);
void saveDownloadedFile_(QNetworkReply *reply); void downloadProgress(const qint64 &received, const qint64 &total);
void installDownloadedFile_(QNetworkReply *reply);
public slots: public slots:
void process(); void process();
...@@ -46,11 +36,20 @@ public slots: ...@@ -46,11 +36,20 @@ public slots:
private slots: private slots:
void downloaded_(QNetworkReply *reply); void downloaded_(QNetworkReply *reply);
signals: private:
void started(); void parse_();
void finished(const QJsonObject &result); void loadDestinations_();
void error(const QJsonObject &result); QString convertPathString_(const QString &path);
void downloadProgress(const qint64 &received, const qint64 &total); void saveDownloadedFile_(QNetworkReply *reply);
void installDownloadedFile_(QNetworkReply *reply);
QString xdgUrl_;
core::Config *config_;
core::Network *network_;
QJsonObject metadata_;
QJsonObject destinations_;
QString destination_;
}; };
} // namespace handlers } // namespace handlers
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment