|
30 | 30 | #include "scriptable/scriptabletemporaryfile.h"
|
31 | 31 | #include "scriptable/scriptoverrides.h"
|
32 | 32 | #include "scriptable/scriptvaluefactory.h"
|
| 33 | +#include "scriptable/scriptablenetworkrequest.h" |
| 34 | +#include "scriptable/scriptablenetworkreply.h" |
33 | 35 |
|
34 | 36 | #include <QApplication>
|
35 | 37 | #include <QCryptographicHash>
|
@@ -428,6 +430,10 @@ Scriptable::Scriptable(
|
428 | 430 | &ScriptableItemSelection::staticMetaObject, QStringLiteral("ItemSelection"), m_engine);
|
429 | 431 | m_settingsPrototype = addScriptableClass(
|
430 | 432 | &ScriptableSettings::staticMetaObject, QStringLiteral("Settings"), m_engine);
|
| 433 | + m_networkRequestPrototype = addScriptableClass( |
| 434 | + &ScriptableNetworkRequest::staticMetaObject, QStringLiteral("NetworkRequest"), m_engine); |
| 435 | + m_networkReplyPrototype = addScriptableClass( |
| 436 | + &ScriptableNetworkReply::staticMetaObject, QStringLiteral("NetworkReply"), m_engine); |
431 | 437 | }
|
432 | 438 |
|
433 | 439 | QJSValue Scriptable::argumentsArray() const
|
@@ -713,6 +719,16 @@ QJSValue Scriptable::Settings() const
|
713 | 719 | return newQObject(new ScriptableSettings(toString(arg)), m_settingsPrototype);
|
714 | 720 | }
|
715 | 721 |
|
| 722 | +QJSValue Scriptable::NetworkReply() const |
| 723 | +{ |
| 724 | + return newQObject(new ScriptableNetworkReply(), m_networkReplyPrototype); |
| 725 | +} |
| 726 | + |
| 727 | +QJSValue Scriptable::NetworkRequest() const |
| 728 | +{ |
| 729 | + return newQObject(new ScriptableNetworkRequest(), m_networkRequestPrototype); |
| 730 | +} |
| 731 | + |
716 | 732 | QJSValue Scriptable::version()
|
717 | 733 | {
|
718 | 734 | m_skipArguments = 0;
|
@@ -2158,28 +2174,32 @@ QJSValue Scriptable::exportCommands()
|
2158 | 2174 |
|
2159 | 2175 | QJSValue Scriptable::networkGet()
|
2160 | 2176 | {
|
2161 |
| - NetworkReply *reply = networkGetHelper(); |
2162 |
| - reply->data(); |
2163 |
| - return reply->toScriptValue(); |
| 2177 | + QJSValue reply = networkGetAsync(); |
| 2178 | + reply.property("data"); |
| 2179 | + return reply; |
2164 | 2180 | }
|
2165 | 2181 |
|
2166 | 2182 | QJSValue Scriptable::networkPost()
|
2167 | 2183 | {
|
2168 |
| - NetworkReply *reply = networkPostHelper(); |
2169 |
| - reply->data(); |
2170 |
| - return reply->toScriptValue(); |
| 2184 | + QJSValue reply = networkPostAsync(); |
| 2185 | + reply.property("data"); |
| 2186 | + return reply; |
2171 | 2187 | }
|
2172 | 2188 |
|
2173 | 2189 | QJSValue Scriptable::networkGetAsync()
|
2174 | 2190 | {
|
2175 |
| - NetworkReply *reply = networkGetHelper(); |
2176 |
| - return reply->toScriptValue(); |
| 2191 | + m_skipArguments = 1; |
| 2192 | + auto requestJs = this->NetworkRequest(); |
| 2193 | + auto request = qobject_cast<ScriptableNetworkRequest *>(requestJs.toQObject()); |
| 2194 | + return request->request(newByteArray("GET"), argument(0), {}); |
2177 | 2195 | }
|
2178 | 2196 |
|
2179 | 2197 | QJSValue Scriptable::networkPostAsync()
|
2180 | 2198 | {
|
2181 |
| - NetworkReply *reply = networkPostHelper(); |
2182 |
| - return reply->toScriptValue(); |
| 2199 | + m_skipArguments = 2; |
| 2200 | + auto requestJs = this->NetworkRequest(); |
| 2201 | + auto request = qobject_cast<ScriptableNetworkRequest *>(requestJs.toQObject()); |
| 2202 | + return request->request(newByteArray("POST"), argument(0), argument(1)); |
2183 | 2203 | }
|
2184 | 2204 |
|
2185 | 2205 | QJSValue Scriptable::env()
|
@@ -3651,21 +3671,6 @@ void Scriptable::interruptibleSleep(int msec)
|
3651 | 3671 | loop.exec();
|
3652 | 3672 | }
|
3653 | 3673 |
|
3654 |
| -NetworkReply *Scriptable::networkGetHelper() |
3655 |
| -{ |
3656 |
| - m_skipArguments = 1; |
3657 |
| - const QString url = arg(0); |
3658 |
| - return NetworkReply::get(url, this); |
3659 |
| -} |
3660 |
| - |
3661 |
| -NetworkReply *Scriptable::networkPostHelper() |
3662 |
| -{ |
3663 |
| - m_skipArguments = 2; |
3664 |
| - const QString url = arg(0); |
3665 |
| - const QByteArray postData = makeByteArray(argument(1)); |
3666 |
| - return NetworkReply::post(url, postData, this); |
3667 |
| -} |
3668 |
| - |
3669 | 3674 | QJSValue Scriptable::newQObject(QObject *obj, const QJSValue &prototype) const
|
3670 | 3675 | {
|
3671 | 3676 | auto value = m_engine->newQObject(obj);
|
@@ -3715,120 +3720,6 @@ void Scriptable::installObject(QObject *fromObj, const QMetaObject *metaObject,
|
3715 | 3720 | }
|
3716 | 3721 | }
|
3717 | 3722 |
|
3718 |
| -NetworkReply *NetworkReply::get(const QString &url, Scriptable *scriptable) |
3719 |
| -{ |
3720 |
| - return new NetworkReply(url, QByteArray(), scriptable); |
3721 |
| -} |
3722 |
| - |
3723 |
| -NetworkReply *NetworkReply::post(const QString &url, const QByteArray &postData, Scriptable *scriptable) |
3724 |
| -{ |
3725 |
| - return new NetworkReply(url, postData, scriptable); |
3726 |
| -} |
3727 |
| - |
3728 |
| -NetworkReply::~NetworkReply() |
3729 |
| -{ |
3730 |
| - if (m_reply) |
3731 |
| - m_reply->deleteLater(); |
3732 |
| -} |
3733 |
| - |
3734 |
| -QJSValue NetworkReply::data() |
3735 |
| -{ |
3736 |
| - if ( !m_data.isUndefined() ) |
3737 |
| - return m_data; |
3738 |
| - |
3739 |
| - if ( !m_reply->isFinished() && m_scriptable->canContinue() ) { |
3740 |
| - QEventLoop loop; |
3741 |
| - connect(m_scriptable, &Scriptable::finished, &loop, &QEventLoop::quit); |
3742 |
| - connect(m_reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); |
3743 |
| - loop.exec(); |
3744 |
| - } |
3745 |
| - |
3746 |
| - if ( !m_reply->isFinished() ) |
3747 |
| - return QJSValue(); |
3748 |
| - |
3749 |
| - m_data = m_scriptable->newByteArray(m_rawData); |
3750 |
| - |
3751 |
| - return m_data; |
3752 |
| -} |
3753 |
| - |
3754 |
| -QJSValue NetworkReply::error() |
3755 |
| -{ |
3756 |
| - data(); |
3757 |
| - |
3758 |
| - if (m_reply->error() != QNetworkReply::NoError) |
3759 |
| - return m_reply->errorString(); |
3760 |
| - |
3761 |
| - return QJSValue(); |
3762 |
| -} |
3763 |
| - |
3764 |
| -QJSValue NetworkReply::status() |
3765 |
| -{ |
3766 |
| - data(); |
3767 |
| - |
3768 |
| - const QVariant v = m_reply->attribute(QNetworkRequest::HttpStatusCodeAttribute); |
3769 |
| - if (v.isValid()) |
3770 |
| - return v.toInt(); |
3771 |
| - return QJSValue(); |
3772 |
| -} |
3773 |
| - |
3774 |
| -QJSValue NetworkReply::redirect() |
3775 |
| -{ |
3776 |
| - data(); |
3777 |
| - |
3778 |
| - const QVariant v = m_reply->attribute(QNetworkRequest::RedirectionTargetAttribute); |
3779 |
| - if (v.isValid()) |
3780 |
| - return v.toUrl().resolved(m_reply->url()).toString(); |
3781 |
| - return QJSValue(); |
3782 |
| -} |
3783 |
| - |
3784 |
| -QJSValue NetworkReply::headers() |
3785 |
| -{ |
3786 |
| - data(); |
3787 |
| - |
3788 |
| - QJSValue headers = m_scriptable->engine()->newArray(); |
3789 |
| - int i = 0; |
3790 |
| - for ( const auto &header : m_reply->rawHeaderList() ) { |
3791 |
| - QJSValue pair = m_scriptable->engine()->newArray(); |
3792 |
| - pair.setProperty( 0, m_scriptable->newByteArray(header) ); |
3793 |
| - pair.setProperty( 1, m_scriptable->newByteArray(m_reply->rawHeader(header)) ); |
3794 |
| - headers.setProperty( static_cast<quint32>(i), pair ); |
3795 |
| - ++i; |
3796 |
| - } |
3797 |
| - |
3798 |
| - return headers; |
3799 |
| -} |
3800 |
| - |
3801 |
| -QJSValue NetworkReply::finished() |
3802 |
| -{ |
3803 |
| - return m_reply->isFinished(); |
3804 |
| -} |
3805 |
| - |
3806 |
| -NetworkReply::NetworkReply(const QString &url, const QByteArray &postData, Scriptable *scriptable) |
3807 |
| - : QObject(scriptable) |
3808 |
| - , m_scriptable(scriptable) |
3809 |
| - , m_manager(new QNetworkAccessManager(this)) |
3810 |
| - , m_reply(nullptr) |
3811 |
| -{ |
3812 |
| - if (postData.isEmpty()) |
3813 |
| - m_reply = m_manager->get(QNetworkRequest(url)); |
3814 |
| - else |
3815 |
| - m_reply = m_manager->post(QNetworkRequest(url), postData); |
3816 |
| - |
3817 |
| - connect(m_reply, &QNetworkReply::readyRead, this, [this](){ |
3818 |
| - const qint64 available = m_reply->bytesAvailable(); |
3819 |
| - m_rawData.append( m_reply->read(available) ); |
3820 |
| - }); |
3821 |
| - const qint64 available = m_reply->bytesAvailable(); |
3822 |
| - m_rawData.append( m_reply->read(available) ); |
3823 |
| -} |
3824 |
| - |
3825 |
| -QJSValue NetworkReply::toScriptValue() |
3826 |
| -{ |
3827 |
| - if ( m_self.isUndefined() ) |
3828 |
| - m_self = m_scriptable->engine()->newQObject(this); |
3829 |
| - return m_self; |
3830 |
| -} |
3831 |
| - |
3832 | 3723 | ScriptablePlugins::ScriptablePlugins(Scriptable *scriptable, ItemFactory *factory)
|
3833 | 3724 | : QObject(scriptable)
|
3834 | 3725 | , m_scriptable(scriptable)
|
|
0 commit comments