From 7bb44f413948cc4d45c5c3fedd590c317a01772d Mon Sep 17 00:00:00 2001 From: Elisa Lupin-Jimenez Date: Mon, 4 Dec 2017 16:46:58 -0800 Subject: [PATCH 01/20] Created poly scripting interface template --- interface/src/Application.cpp | 3 ++ .../GooglePolyScriptingInterface.cpp | 21 ++++++++++++++ .../scripting/GooglePolyScriptingInterface.h | 28 +++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 interface/src/scripting/GooglePolyScriptingInterface.cpp create mode 100644 interface/src/scripting/GooglePolyScriptingInterface.h diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index d7fcbf6467..38ec8ea05b 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -191,6 +191,7 @@ #include #include #include +#include #include #include @@ -698,6 +699,7 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) { DependencyManager::set(); DependencyManager::set(); DependencyManager::set(); + DependencyManager::set(); DependencyManager::set(nullptr, qApp->getOcteeSceneStats()); DependencyManager::set(); DependencyManager::set(); @@ -5900,6 +5902,7 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEnginePointe scriptEngine->registerGlobalObject("Users", DependencyManager::get().data()); scriptEngine->registerGlobalObject("LimitlessSpeechRecognition", DependencyManager::get().data()); + scriptEngine->registerGlobalObject("GooglePoly", DependencyManager::get().data()); if (auto steamClient = PluginManager::getInstance()->getSteamClientPlugin()) { scriptEngine->registerGlobalObject("Steam", new SteamScriptingInterface(scriptEngine.data(), steamClient.get())); diff --git a/interface/src/scripting/GooglePolyScriptingInterface.cpp b/interface/src/scripting/GooglePolyScriptingInterface.cpp new file mode 100644 index 0000000000..bad9b39972 --- /dev/null +++ b/interface/src/scripting/GooglePolyScriptingInterface.cpp @@ -0,0 +1,21 @@ +// +// GooglePolyScriptingInterface.cpp +// interface/src/scripting +// +// Created by Elisa Lupin-Jimenez on 12/3/2017. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "GooglePolyScriptingInterface.h" +#include "ScriptEngineLogging.h" + +GooglePolyScriptingInterface::GooglePolyScriptingInterface() { + +} + +void GooglePolyScriptingInterface::testPrint() { + qCDebug(scriptengine) << "Google Poly interface exists"; +} \ No newline at end of file diff --git a/interface/src/scripting/GooglePolyScriptingInterface.h b/interface/src/scripting/GooglePolyScriptingInterface.h new file mode 100644 index 0000000000..04afef8a58 --- /dev/null +++ b/interface/src/scripting/GooglePolyScriptingInterface.h @@ -0,0 +1,28 @@ +// +// GooglePolyScriptingInterface.h +// interface/src/scripting +// +// Created by Elisa Lupin-Jimenez on 12/3/2017. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_GooglePolyScriptingInterface_h +#define hifi_GooglePolyScriptingInterface_h + +#include +#include + +class GooglePolyScriptingInterface : public QObject, public Dependency { + Q_OBJECT +public: + GooglePolyScriptingInterface(); + +public slots: + void testPrint(); + +}; + +#endif // hifi_GooglePolyScriptingInterface_h \ No newline at end of file From d6e1a9defe9e411acb7780c07b7d85ceb8c81ae8 Mon Sep 17 00:00:00 2001 From: Elisa Lupin-Jimenez Date: Mon, 4 Dec 2017 16:46:58 -0800 Subject: [PATCH 02/20] Created poly scripting interface template --- interface/src/Application.cpp | 3 ++ .../GooglePolyScriptingInterface.cpp | 21 ++++++++++++++ .../scripting/GooglePolyScriptingInterface.h | 28 +++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 interface/src/scripting/GooglePolyScriptingInterface.cpp create mode 100644 interface/src/scripting/GooglePolyScriptingInterface.h diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index d7fcbf6467..38ec8ea05b 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -191,6 +191,7 @@ #include #include #include +#include #include #include @@ -698,6 +699,7 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) { DependencyManager::set(); DependencyManager::set(); DependencyManager::set(); + DependencyManager::set(); DependencyManager::set(nullptr, qApp->getOcteeSceneStats()); DependencyManager::set(); DependencyManager::set(); @@ -5900,6 +5902,7 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEnginePointe scriptEngine->registerGlobalObject("Users", DependencyManager::get().data()); scriptEngine->registerGlobalObject("LimitlessSpeechRecognition", DependencyManager::get().data()); + scriptEngine->registerGlobalObject("GooglePoly", DependencyManager::get().data()); if (auto steamClient = PluginManager::getInstance()->getSteamClientPlugin()) { scriptEngine->registerGlobalObject("Steam", new SteamScriptingInterface(scriptEngine.data(), steamClient.get())); diff --git a/interface/src/scripting/GooglePolyScriptingInterface.cpp b/interface/src/scripting/GooglePolyScriptingInterface.cpp new file mode 100644 index 0000000000..bad9b39972 --- /dev/null +++ b/interface/src/scripting/GooglePolyScriptingInterface.cpp @@ -0,0 +1,21 @@ +// +// GooglePolyScriptingInterface.cpp +// interface/src/scripting +// +// Created by Elisa Lupin-Jimenez on 12/3/2017. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "GooglePolyScriptingInterface.h" +#include "ScriptEngineLogging.h" + +GooglePolyScriptingInterface::GooglePolyScriptingInterface() { + +} + +void GooglePolyScriptingInterface::testPrint() { + qCDebug(scriptengine) << "Google Poly interface exists"; +} \ No newline at end of file diff --git a/interface/src/scripting/GooglePolyScriptingInterface.h b/interface/src/scripting/GooglePolyScriptingInterface.h new file mode 100644 index 0000000000..04afef8a58 --- /dev/null +++ b/interface/src/scripting/GooglePolyScriptingInterface.h @@ -0,0 +1,28 @@ +// +// GooglePolyScriptingInterface.h +// interface/src/scripting +// +// Created by Elisa Lupin-Jimenez on 12/3/2017. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_GooglePolyScriptingInterface_h +#define hifi_GooglePolyScriptingInterface_h + +#include +#include + +class GooglePolyScriptingInterface : public QObject, public Dependency { + Q_OBJECT +public: + GooglePolyScriptingInterface(); + +public slots: + void testPrint(); + +}; + +#endif // hifi_GooglePolyScriptingInterface_h \ No newline at end of file From 4ed689672ea2a9b0783b0eb516ac8facb9d2d73b Mon Sep 17 00:00:00 2001 From: Elisa Lupin-Jimenez Date: Wed, 6 Dec 2017 16:07:29 -0800 Subject: [PATCH 03/20] can fetch poly asset list synchronously --- .../GooglePolyScriptingInterface.cpp | 179 +++++++++++++++++- .../scripting/GooglePolyScriptingInterface.h | 12 ++ 2 files changed, 189 insertions(+), 2 deletions(-) diff --git a/interface/src/scripting/GooglePolyScriptingInterface.cpp b/interface/src/scripting/GooglePolyScriptingInterface.cpp index bad9b39972..99e2d699d0 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.cpp +++ b/interface/src/scripting/GooglePolyScriptingInterface.cpp @@ -9,13 +9,188 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include +#include +#include +#include +#include +#include +#include +//#include +#include +#include + #include "GooglePolyScriptingInterface.h" #include "ScriptEngineLogging.h" -GooglePolyScriptingInterface::GooglePolyScriptingInterface() { +QString listPolyUrl = "https://poly.googleapis.com/v1/assets?"; +QString getPolyUrl = "https://poly.googleapis.com/v1/assets/model?"; +GooglePolyScriptingInterface::GooglePolyScriptingInterface() { + // nothing to be implemented } void GooglePolyScriptingInterface::testPrint() { qCDebug(scriptengine) << "Google Poly interface exists"; -} \ No newline at end of file +} + +void GooglePolyScriptingInterface::setAPIKey(QString key) { + authCode = key; +} + +void GooglePolyScriptingInterface::getAssetList() { + authCode = "AIzaSyDamk7Vth52j7aU9JVKn3ungFS0kGJYc8A"; + //authCode = "broke"; + QUrl url(listPolyUrl + "key=" + authCode); + QByteArray jsonString = getHTTPRequest(url); + qCDebug(scriptengine) << "the list: " << jsonString; + QJsonObject json = makeJSONObject(&jsonString, true); + +} + +// FIXME: synchronous = not good code +QByteArray GooglePolyScriptingInterface::getHTTPRequest(QUrl url) { + QNetworkAccessManager manager; + QNetworkReply *response = manager.get(QNetworkRequest(url)); + QEventLoop event; + connect(response, SIGNAL(finished()), &event, SLOT(quit())); + event.exec(); + + return response->readAll(); + +} + +QJsonObject GooglePolyScriptingInterface::makeJSONObject(QByteArray* response, bool isList) { + //QString firstItem = QString::fromUtf8(response->readAll()); + QJsonDocument doc = QJsonDocument::fromJson(*response); + qCDebug(scriptengine) << "json doc is empty: " << doc.isEmpty(); + QJsonObject obj = doc.object(); + qCDebug(scriptengine) << "json obj: " << obj; + qCDebug(scriptengine) << "json list: " << obj.keys(); + if (obj.keys().first() == "error") { + qCDebug(scriptengine) << "Invalid API key"; + return obj; + } + qCDebug(scriptengine) << "total size: " << obj.value("totalSize").toString(); + qCDebug(scriptengine) << "in assets: " << obj.value("assets"); + return obj; +} + +/*void GooglePolyScriptingInterface::getAssetList() { + authCode = "AIzaSyDamk7Vth52j7aU9JVKn3ungFS0kGJYc8A"; + QUrl url(listPolyUrl + "key=" + authCode); + QByteArray reply = getHTTPRequest(url); + qCDebug(scriptengine) << "the list: " << test; +} + +// FIXME: synchronous = not good code +QByteArray GooglePolyScriptingInterface::getHTTPRequest(QUrl url) { + QNetworkAccessManager manager; + QNetworkReply *response = manager.get(QNetworkRequest(url)); + QEventLoop event; + connect(response, SIGNAL(finished()), &event, SLOT(quit())); + event.exec(); + return response->readAll(); +} + +*/ + +/* useful for constructing the url? + + QUrl url("http://gdata.youtube.com/feeds/api/standardfeeds/"); + QString method = "most_popular"; + url.setPath(QString("%1%2").arg(url.path()).arg(method)); + + QMap params; + params["alt"] = "json"; + params["v"] = "2"; + + foreach(QString param, params.keys()) { + url.addQueryItem(param, params[param].toString()); + } + +*/ + +/* NONE OF THESE HTTP GET METHODS WORK D: +https://stackoverflow.com/questions/28267477/getting-a-page-content-with-qt kinda used rn + +this correctly returns the asset list but is apparently synchronous and not a good way to do it +https://stackoverflow.com/questions/24965972/qt-getting-source-html-code-of-a-web-page-hosted-on-the-internet +void GooglePolyScriptingInterface::getAssetList() { + authCode = "AIzaSyDamk7Vth52j7aU9JVKn3ungFS0kGJYc8A"; + QUrl url(listPolyUrl + "key=" + authCode); + QNetworkAccessManager manager; + QNetworkReply *response = manager.get(QNetworkRequest(url)); + QEventLoop event; + connect(response, SIGNAL(finished()), &event, SLOT(quit())); + event.exec(); + QString firstItem = response->readAll(); + //QJsonArray arr; + //QJsonObject jsonObject = QJsonDocument::fromJson(response->readAll()).object(); + //QString firstItem = jsonObject["assets"].toString(); + qCDebug(scriptengine) << "first item: " << firstItem; + //qCDebug(scriptengine) << "api key: " << authCode; + //return arr; +} + +this didn't work either https://stackoverflow.com/a/24966317 + QScopedPointer manager(new QNetworkAccessManager); + QNetworkReply* response = manager->get(QNetworkRequest(url)); + QObject::connect(manager, &QNetworkAccessManager::finished, [manager, response] { + response->deleteLater(); + manager->deleteLater(); + if (response->error() != QNetworkReply::NoError) return; + QString contentType = + response->header(QNetworkRequest::ContentTypeHeader).toString(); + if (!contentType.contains("charset=utf-8")) { + qWarning() << "Content charsets other than utf-8 are not implemented yet."; + return; + } + QString html = QString::fromUtf8(response->readAll()); + // do something with the data + }) && manager.take(); + + +or this :( https://stackoverflow.com/questions/39518749/make-get-request-to-web-service-get-json-response-and-update-gui-in-qt + qCDebug(scriptengine) << "gonna get assets with " << url; + QNetworkAccessManager manager; + QNetworkReply* reply = manager.get(QNetworkRequest(url)); + QObject::connect(&manager, &QNetworkAccessManager::finished, + [reply]{ + qCDebug(scriptengine) << "boo radley"; + if (reply->error() != QNetworkReply::NoError) { + qCDebug(scriptengine) << "Poly API failed to respond"; + //manager.clearAccessCache(); + } else { + QJsonObject jsonObject = QJsonDocument::fromJson(reply->readAll()).object(); + QString firstItem = jsonObject["assets"].toString(); + qCDebug(scriptengine) << "first item: " << firstItem; + } + reply->deleteLater(); + }); + +or this :(( http://blog.mathieu-leplatre.info/access-a-json-webservice-with-qt-c.html + //QJsonArray arr; + //QJsonObject jsonObject = QJsonDocument::fromJson(response->readAll()).object(); + //QString firstItem = jsonObject["assets"].toString(); + qCDebug(scriptengine) << "first item: " << firstItem; + //qCDebug(scriptengine) << "api key: " << authCode; + //return arr; + QNetworkAccessManager manager; + QNetworkReply* response = manager.get(QNetworkRequest(url)); + QObject::connect(&manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onResult(QNetworkReply*))); + + return ""; + } + + void GooglePolyScriptingInterface::onResult(QNetworkReply* reply) { + if (reply->error() != QNetworkReply::NoError) { + qCDebug(scriptengine) << "Poly API failed to respond"; + return; + } + QString firstItem = reply->readAll(); + + qCDebug(scriptengine) << "first item: " << firstItem; + } + +*/ \ No newline at end of file diff --git a/interface/src/scripting/GooglePolyScriptingInterface.h b/interface/src/scripting/GooglePolyScriptingInterface.h index 04afef8a58..37b7395914 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.h +++ b/interface/src/scripting/GooglePolyScriptingInterface.h @@ -22,6 +22,18 @@ public: public slots: void testPrint(); + void setAPIKey(QString key); + + //QJsonArray GooglePolyScriptingInterface::getAssetList(); + void getAssetList(); + +private: + QByteArray getHTTPRequest(QUrl url); + QJsonObject makeJSONObject(QByteArray* response, bool isList); + //void onResult(QNetworkReply* reply); + + QString authCode; + }; From 1d5875c45b92f6683d25b902f55dab93ef5ceff1 Mon Sep 17 00:00:00 2001 From: Elisa Lupin-Jimenez Date: Wed, 6 Dec 2017 17:40:39 -0800 Subject: [PATCH 04/20] removed key --- .../scripting/GooglePolyScriptingInterface.cpp | 15 ++++++++++----- .../src/scripting/GooglePolyScriptingInterface.h | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/interface/src/scripting/GooglePolyScriptingInterface.cpp b/interface/src/scripting/GooglePolyScriptingInterface.cpp index 20e83fd14e..78cf6e1fc7 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.cpp +++ b/interface/src/scripting/GooglePolyScriptingInterface.cpp @@ -39,12 +39,11 @@ void GooglePolyScriptingInterface::setAPIKey(QString key) { } void GooglePolyScriptingInterface::getAssetList() { - authCode = "AIzaSyDamk7Vth52j7aU9JVKn3ungFS0kGJYc8A"; //authCode = "broke"; QUrl url(listPolyUrl + "key=" + authCode); QByteArray jsonString = getHTTPRequest(url); qCDebug(scriptengine) << "the list: " << jsonString; - QJsonObject json = makeJSONObject(&jsonString, true); + QJsonObject json = makeJSON(&jsonString, true).toJsonObject; } @@ -60,7 +59,8 @@ QByteArray GooglePolyScriptingInterface::getHTTPRequest(QUrl url) { } -QJsonObject GooglePolyScriptingInterface::makeJSONObject(QByteArray* response, bool isList) { +// since the list is a QJsonArray and a single model is a QJsonObject +QVariant GooglePolyScriptingInterface::makeJSON(QByteArray* response, bool isList) { //QString firstItem = QString::fromUtf8(response->readAll()); QJsonDocument doc = QJsonDocument::fromJson(*response); qCDebug(scriptengine) << "json doc is empty: " << doc.isEmpty(); @@ -71,8 +71,13 @@ QJsonObject GooglePolyScriptingInterface::makeJSONObject(QByteArray* response, b qCDebug(scriptengine) << "Invalid API key"; return obj; } - qCDebug(scriptengine) << "total size: " << obj.value("totalSize").toString(); - qCDebug(scriptengine) << "in assets: " << obj.value("assets"); + qCDebug(scriptengine) << "total size: " << obj.value("totalSize"); + qCDebug(scriptengine) << "the assets: " << obj.value("assets"); + QJsonArray arr = obj.value("assets").toArray(); + qCDebug(scriptengine) << "in array: " << arr; + QJsonObject first = arr.takeAt(0).toObject(); + qCDebug(scriptengine) << "first asset: " << first; + qCDebug(scriptengine) << "first asset description: " << first.value("description"); return obj; } diff --git a/interface/src/scripting/GooglePolyScriptingInterface.h b/interface/src/scripting/GooglePolyScriptingInterface.h index 37b7395914..707eabc0af 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.h +++ b/interface/src/scripting/GooglePolyScriptingInterface.h @@ -29,7 +29,7 @@ public slots: private: QByteArray getHTTPRequest(QUrl url); - QJsonObject makeJSONObject(QByteArray* response, bool isList); + QVariant makeJSON(QByteArray* response, bool isList); //void onResult(QNetworkReply* reply); QString authCode; From dc999401d598a4e04ca826f9ccf257be88463701 Mon Sep 17 00:00:00 2001 From: Elisa Lupin-Jimenez Date: Mon, 4 Dec 2017 16:46:58 -0800 Subject: [PATCH 05/20] Created poly scripting interface template --- interface/src/Application.cpp | 3 ++ .../GooglePolyScriptingInterface.cpp | 21 ++++++++++++++ .../scripting/GooglePolyScriptingInterface.h | 28 +++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 interface/src/scripting/GooglePolyScriptingInterface.cpp create mode 100644 interface/src/scripting/GooglePolyScriptingInterface.h diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 0176acf108..a5ba4f86bd 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -191,6 +191,7 @@ #include #include #include +#include #include #include @@ -698,6 +699,7 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) { DependencyManager::set(); DependencyManager::set(); DependencyManager::set(); + DependencyManager::set(); DependencyManager::set(nullptr, qApp->getOcteeSceneStats()); DependencyManager::set(); DependencyManager::set(); @@ -5900,6 +5902,7 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEnginePointe scriptEngine->registerGlobalObject("Users", DependencyManager::get().data()); scriptEngine->registerGlobalObject("LimitlessSpeechRecognition", DependencyManager::get().data()); + scriptEngine->registerGlobalObject("GooglePoly", DependencyManager::get().data()); if (auto steamClient = PluginManager::getInstance()->getSteamClientPlugin()) { scriptEngine->registerGlobalObject("Steam", new SteamScriptingInterface(scriptEngine.data(), steamClient.get())); diff --git a/interface/src/scripting/GooglePolyScriptingInterface.cpp b/interface/src/scripting/GooglePolyScriptingInterface.cpp new file mode 100644 index 0000000000..bad9b39972 --- /dev/null +++ b/interface/src/scripting/GooglePolyScriptingInterface.cpp @@ -0,0 +1,21 @@ +// +// GooglePolyScriptingInterface.cpp +// interface/src/scripting +// +// Created by Elisa Lupin-Jimenez on 12/3/2017. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "GooglePolyScriptingInterface.h" +#include "ScriptEngineLogging.h" + +GooglePolyScriptingInterface::GooglePolyScriptingInterface() { + +} + +void GooglePolyScriptingInterface::testPrint() { + qCDebug(scriptengine) << "Google Poly interface exists"; +} \ No newline at end of file diff --git a/interface/src/scripting/GooglePolyScriptingInterface.h b/interface/src/scripting/GooglePolyScriptingInterface.h new file mode 100644 index 0000000000..04afef8a58 --- /dev/null +++ b/interface/src/scripting/GooglePolyScriptingInterface.h @@ -0,0 +1,28 @@ +// +// GooglePolyScriptingInterface.h +// interface/src/scripting +// +// Created by Elisa Lupin-Jimenez on 12/3/2017. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_GooglePolyScriptingInterface_h +#define hifi_GooglePolyScriptingInterface_h + +#include +#include + +class GooglePolyScriptingInterface : public QObject, public Dependency { + Q_OBJECT +public: + GooglePolyScriptingInterface(); + +public slots: + void testPrint(); + +}; + +#endif // hifi_GooglePolyScriptingInterface_h \ No newline at end of file From 392f290dd62e1ba986af78bb6020dc83710184a0 Mon Sep 17 00:00:00 2001 From: Elisa Lupin-Jimenez Date: Wed, 6 Dec 2017 16:07:29 -0800 Subject: [PATCH 06/20] can fetch poly asset list synchronously --- .../GooglePolyScriptingInterface.cpp | 179 +++++++++++++++++- .../scripting/GooglePolyScriptingInterface.h | 12 ++ 2 files changed, 189 insertions(+), 2 deletions(-) diff --git a/interface/src/scripting/GooglePolyScriptingInterface.cpp b/interface/src/scripting/GooglePolyScriptingInterface.cpp index bad9b39972..99e2d699d0 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.cpp +++ b/interface/src/scripting/GooglePolyScriptingInterface.cpp @@ -9,13 +9,188 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include +#include +#include +#include +#include +#include +#include +//#include +#include +#include + #include "GooglePolyScriptingInterface.h" #include "ScriptEngineLogging.h" -GooglePolyScriptingInterface::GooglePolyScriptingInterface() { +QString listPolyUrl = "https://poly.googleapis.com/v1/assets?"; +QString getPolyUrl = "https://poly.googleapis.com/v1/assets/model?"; +GooglePolyScriptingInterface::GooglePolyScriptingInterface() { + // nothing to be implemented } void GooglePolyScriptingInterface::testPrint() { qCDebug(scriptengine) << "Google Poly interface exists"; -} \ No newline at end of file +} + +void GooglePolyScriptingInterface::setAPIKey(QString key) { + authCode = key; +} + +void GooglePolyScriptingInterface::getAssetList() { + authCode = "AIzaSyDamk7Vth52j7aU9JVKn3ungFS0kGJYc8A"; + //authCode = "broke"; + QUrl url(listPolyUrl + "key=" + authCode); + QByteArray jsonString = getHTTPRequest(url); + qCDebug(scriptengine) << "the list: " << jsonString; + QJsonObject json = makeJSONObject(&jsonString, true); + +} + +// FIXME: synchronous = not good code +QByteArray GooglePolyScriptingInterface::getHTTPRequest(QUrl url) { + QNetworkAccessManager manager; + QNetworkReply *response = manager.get(QNetworkRequest(url)); + QEventLoop event; + connect(response, SIGNAL(finished()), &event, SLOT(quit())); + event.exec(); + + return response->readAll(); + +} + +QJsonObject GooglePolyScriptingInterface::makeJSONObject(QByteArray* response, bool isList) { + //QString firstItem = QString::fromUtf8(response->readAll()); + QJsonDocument doc = QJsonDocument::fromJson(*response); + qCDebug(scriptengine) << "json doc is empty: " << doc.isEmpty(); + QJsonObject obj = doc.object(); + qCDebug(scriptengine) << "json obj: " << obj; + qCDebug(scriptengine) << "json list: " << obj.keys(); + if (obj.keys().first() == "error") { + qCDebug(scriptengine) << "Invalid API key"; + return obj; + } + qCDebug(scriptengine) << "total size: " << obj.value("totalSize").toString(); + qCDebug(scriptengine) << "in assets: " << obj.value("assets"); + return obj; +} + +/*void GooglePolyScriptingInterface::getAssetList() { + authCode = "AIzaSyDamk7Vth52j7aU9JVKn3ungFS0kGJYc8A"; + QUrl url(listPolyUrl + "key=" + authCode); + QByteArray reply = getHTTPRequest(url); + qCDebug(scriptengine) << "the list: " << test; +} + +// FIXME: synchronous = not good code +QByteArray GooglePolyScriptingInterface::getHTTPRequest(QUrl url) { + QNetworkAccessManager manager; + QNetworkReply *response = manager.get(QNetworkRequest(url)); + QEventLoop event; + connect(response, SIGNAL(finished()), &event, SLOT(quit())); + event.exec(); + return response->readAll(); +} + +*/ + +/* useful for constructing the url? + + QUrl url("http://gdata.youtube.com/feeds/api/standardfeeds/"); + QString method = "most_popular"; + url.setPath(QString("%1%2").arg(url.path()).arg(method)); + + QMap params; + params["alt"] = "json"; + params["v"] = "2"; + + foreach(QString param, params.keys()) { + url.addQueryItem(param, params[param].toString()); + } + +*/ + +/* NONE OF THESE HTTP GET METHODS WORK D: +https://stackoverflow.com/questions/28267477/getting-a-page-content-with-qt kinda used rn + +this correctly returns the asset list but is apparently synchronous and not a good way to do it +https://stackoverflow.com/questions/24965972/qt-getting-source-html-code-of-a-web-page-hosted-on-the-internet +void GooglePolyScriptingInterface::getAssetList() { + authCode = "AIzaSyDamk7Vth52j7aU9JVKn3ungFS0kGJYc8A"; + QUrl url(listPolyUrl + "key=" + authCode); + QNetworkAccessManager manager; + QNetworkReply *response = manager.get(QNetworkRequest(url)); + QEventLoop event; + connect(response, SIGNAL(finished()), &event, SLOT(quit())); + event.exec(); + QString firstItem = response->readAll(); + //QJsonArray arr; + //QJsonObject jsonObject = QJsonDocument::fromJson(response->readAll()).object(); + //QString firstItem = jsonObject["assets"].toString(); + qCDebug(scriptengine) << "first item: " << firstItem; + //qCDebug(scriptengine) << "api key: " << authCode; + //return arr; +} + +this didn't work either https://stackoverflow.com/a/24966317 + QScopedPointer manager(new QNetworkAccessManager); + QNetworkReply* response = manager->get(QNetworkRequest(url)); + QObject::connect(manager, &QNetworkAccessManager::finished, [manager, response] { + response->deleteLater(); + manager->deleteLater(); + if (response->error() != QNetworkReply::NoError) return; + QString contentType = + response->header(QNetworkRequest::ContentTypeHeader).toString(); + if (!contentType.contains("charset=utf-8")) { + qWarning() << "Content charsets other than utf-8 are not implemented yet."; + return; + } + QString html = QString::fromUtf8(response->readAll()); + // do something with the data + }) && manager.take(); + + +or this :( https://stackoverflow.com/questions/39518749/make-get-request-to-web-service-get-json-response-and-update-gui-in-qt + qCDebug(scriptengine) << "gonna get assets with " << url; + QNetworkAccessManager manager; + QNetworkReply* reply = manager.get(QNetworkRequest(url)); + QObject::connect(&manager, &QNetworkAccessManager::finished, + [reply]{ + qCDebug(scriptengine) << "boo radley"; + if (reply->error() != QNetworkReply::NoError) { + qCDebug(scriptengine) << "Poly API failed to respond"; + //manager.clearAccessCache(); + } else { + QJsonObject jsonObject = QJsonDocument::fromJson(reply->readAll()).object(); + QString firstItem = jsonObject["assets"].toString(); + qCDebug(scriptengine) << "first item: " << firstItem; + } + reply->deleteLater(); + }); + +or this :(( http://blog.mathieu-leplatre.info/access-a-json-webservice-with-qt-c.html + //QJsonArray arr; + //QJsonObject jsonObject = QJsonDocument::fromJson(response->readAll()).object(); + //QString firstItem = jsonObject["assets"].toString(); + qCDebug(scriptengine) << "first item: " << firstItem; + //qCDebug(scriptengine) << "api key: " << authCode; + //return arr; + QNetworkAccessManager manager; + QNetworkReply* response = manager.get(QNetworkRequest(url)); + QObject::connect(&manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onResult(QNetworkReply*))); + + return ""; + } + + void GooglePolyScriptingInterface::onResult(QNetworkReply* reply) { + if (reply->error() != QNetworkReply::NoError) { + qCDebug(scriptengine) << "Poly API failed to respond"; + return; + } + QString firstItem = reply->readAll(); + + qCDebug(scriptengine) << "first item: " << firstItem; + } + +*/ \ No newline at end of file diff --git a/interface/src/scripting/GooglePolyScriptingInterface.h b/interface/src/scripting/GooglePolyScriptingInterface.h index 04afef8a58..37b7395914 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.h +++ b/interface/src/scripting/GooglePolyScriptingInterface.h @@ -22,6 +22,18 @@ public: public slots: void testPrint(); + void setAPIKey(QString key); + + //QJsonArray GooglePolyScriptingInterface::getAssetList(); + void getAssetList(); + +private: + QByteArray getHTTPRequest(QUrl url); + QJsonObject makeJSONObject(QByteArray* response, bool isList); + //void onResult(QNetworkReply* reply); + + QString authCode; + }; From f7be67b5b2277056097fb97e6ae0060306eb1e8e Mon Sep 17 00:00:00 2001 From: Elisa Lupin-Jimenez Date: Wed, 6 Dec 2017 17:40:39 -0800 Subject: [PATCH 07/20] removed key --- .../scripting/GooglePolyScriptingInterface.cpp | 15 ++++++++++----- .../src/scripting/GooglePolyScriptingInterface.h | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/interface/src/scripting/GooglePolyScriptingInterface.cpp b/interface/src/scripting/GooglePolyScriptingInterface.cpp index 99e2d699d0..b353b4b3b4 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.cpp +++ b/interface/src/scripting/GooglePolyScriptingInterface.cpp @@ -39,12 +39,11 @@ void GooglePolyScriptingInterface::setAPIKey(QString key) { } void GooglePolyScriptingInterface::getAssetList() { - authCode = "AIzaSyDamk7Vth52j7aU9JVKn3ungFS0kGJYc8A"; //authCode = "broke"; QUrl url(listPolyUrl + "key=" + authCode); QByteArray jsonString = getHTTPRequest(url); qCDebug(scriptengine) << "the list: " << jsonString; - QJsonObject json = makeJSONObject(&jsonString, true); + QJsonObject json = makeJSON(&jsonString, true).toJsonObject; } @@ -60,7 +59,8 @@ QByteArray GooglePolyScriptingInterface::getHTTPRequest(QUrl url) { } -QJsonObject GooglePolyScriptingInterface::makeJSONObject(QByteArray* response, bool isList) { +// since the list is a QJsonArray and a single model is a QJsonObject +QVariant GooglePolyScriptingInterface::makeJSON(QByteArray* response, bool isList) { //QString firstItem = QString::fromUtf8(response->readAll()); QJsonDocument doc = QJsonDocument::fromJson(*response); qCDebug(scriptengine) << "json doc is empty: " << doc.isEmpty(); @@ -71,8 +71,13 @@ QJsonObject GooglePolyScriptingInterface::makeJSONObject(QByteArray* response, b qCDebug(scriptengine) << "Invalid API key"; return obj; } - qCDebug(scriptengine) << "total size: " << obj.value("totalSize").toString(); - qCDebug(scriptengine) << "in assets: " << obj.value("assets"); + qCDebug(scriptengine) << "total size: " << obj.value("totalSize"); + qCDebug(scriptengine) << "the assets: " << obj.value("assets"); + QJsonArray arr = obj.value("assets").toArray(); + qCDebug(scriptengine) << "in array: " << arr; + QJsonObject first = arr.takeAt(0).toObject(); + qCDebug(scriptengine) << "first asset: " << first; + qCDebug(scriptengine) << "first asset description: " << first.value("description"); return obj; } diff --git a/interface/src/scripting/GooglePolyScriptingInterface.h b/interface/src/scripting/GooglePolyScriptingInterface.h index 37b7395914..707eabc0af 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.h +++ b/interface/src/scripting/GooglePolyScriptingInterface.h @@ -29,7 +29,7 @@ public slots: private: QByteArray getHTTPRequest(QUrl url); - QJsonObject makeJSONObject(QByteArray* response, bool isList); + QVariant makeJSON(QByteArray* response, bool isList); //void onResult(QNetworkReply* reply); QString authCode; From e49181c3a22505900cedc39a1b5da2b22fbd1cc9 Mon Sep 17 00:00:00 2001 From: Elisa Lupin-Jimenez Date: Wed, 13 Dec 2017 17:45:57 -0800 Subject: [PATCH 08/20] added getAssetList() and getFBX() --- .../GooglePolyScriptingInterface.cpp | 113 ++++++++++++++---- .../scripting/GooglePolyScriptingInterface.h | 12 +- 2 files changed, 99 insertions(+), 26 deletions(-) diff --git a/interface/src/scripting/GooglePolyScriptingInterface.cpp b/interface/src/scripting/GooglePolyScriptingInterface.cpp index b353b4b3b4..8b48f1d115 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.cpp +++ b/interface/src/scripting/GooglePolyScriptingInterface.cpp @@ -10,6 +10,7 @@ // #include +#include #include #include #include @@ -18,7 +19,9 @@ #include //#include #include +#include #include +#include #include "GooglePolyScriptingInterface.h" #include "ScriptEngineLogging.h" @@ -26,28 +29,81 @@ QString listPolyUrl = "https://poly.googleapis.com/v1/assets?"; QString getPolyUrl = "https://poly.googleapis.com/v1/assets/model?"; +//authCode = "broke"; + +QStringList validFormats = QStringList() << "BLOCKS" << "FBX" << "GLTF" << "GLTF2" << "OBJ" << "TILT" << ""; +QStringList validCategories = QStringList() << "animals" << "architecture" << "art" << "food" << + "nature" << "objects" << "people" << "scenes" << "technology" << "transport" << ""; + GooglePolyScriptingInterface::GooglePolyScriptingInterface() { // nothing to be implemented } -void GooglePolyScriptingInterface::testPrint() { - qCDebug(scriptengine) << "Google Poly interface exists"; +QJsonArray GooglePolyScriptingInterface::getAssetList(QString keyword, QString category, QString format) { + QUrl url = formatURLQuery(keyword, category, format); + if (!url.isEmpty()) { + QByteArray jsonString = getHTTPRequest(url); + QJsonArray json = parseJSON(&jsonString, 0).toJsonArray(); + qCDebug(scriptengine) << "first asset name: " << json.at(0).toObject().value("displayName"); + return json; + } else { + qCDebug(scriptengine) << "Invalid filters were specified."; + return QJsonArray(); + } +} + +QString GooglePolyScriptingInterface::getFBX(QString keyword, QString category) { + QUrl url = formatURLQuery(keyword, category, "FBX"); + qCDebug(scriptengine) << "google url: " << url; + if (!url.isEmpty()) { + QByteArray jsonString = getHTTPRequest(url); + qCDebug(scriptengine) << "the list: " << jsonString; + QString modelURL = parseJSON(&jsonString, 1).toString(); + + qCDebug(scriptengine) << "the model url: " << modelURL; + return modelURL; + } else { + qCDebug(scriptengine) << "Invalid filters were specified."; + return ""; + } + +} + +void GooglePolyScriptingInterface::testPrint(QString input) { + qCDebug(scriptengine) << "Google message: " << input; } void GooglePolyScriptingInterface::setAPIKey(QString key) { authCode = key; } -void GooglePolyScriptingInterface::getAssetList() { - //authCode = "broke"; - QUrl url(listPolyUrl + "key=" + authCode); - QByteArray jsonString = getHTTPRequest(url); - qCDebug(scriptengine) << "the list: " << jsonString; - QJsonObject json = makeJSON(&jsonString, true).toJsonObject; - +int GooglePolyScriptingInterface::getRandIntInRange(int length) { + QTime time = QTime::currentTime(); + qsrand((uint)time.msec()); + return qrand() % length; } -// FIXME: synchronous = not good code +QUrl GooglePolyScriptingInterface::formatURLQuery(QString keyword, QString category, QString format) { + QString queries; + if (!validFormats.contains(format) || !validCategories.contains(category)) { + return QUrl(""); + } else { + if (!keyword.isEmpty()) { + keyword.replace(" ", "+"); + queries.append("&keywords=" + keyword); + } + if (!category.isEmpty()) { + queries.append("&category=" + category); + } + if (!format.isEmpty()) { + queries.append("&format=" + format); + } + QString urlString = QString(listPolyUrl + "key=" + authCode + queries); + return QUrl(urlString); + } +} + +// FIXME: synchronous QByteArray GooglePolyScriptingInterface::getHTTPRequest(QUrl url) { QNetworkAccessManager manager; QNetworkReply *response = manager.get(QNetworkRequest(url)); @@ -56,31 +112,46 @@ QByteArray GooglePolyScriptingInterface::getHTTPRequest(QUrl url) { event.exec(); return response->readAll(); - + } // since the list is a QJsonArray and a single model is a QJsonObject -QVariant GooglePolyScriptingInterface::makeJSON(QByteArray* response, bool isList) { +QVariant GooglePolyScriptingInterface::parseJSON(QByteArray* response, int fileType) { //QString firstItem = QString::fromUtf8(response->readAll()); QJsonDocument doc = QJsonDocument::fromJson(*response); - qCDebug(scriptengine) << "json doc is empty: " << doc.isEmpty(); QJsonObject obj = doc.object(); qCDebug(scriptengine) << "json obj: " << obj; qCDebug(scriptengine) << "json list: " << obj.keys(); if (obj.keys().first() == "error") { qCDebug(scriptengine) << "Invalid API key"; + return QJsonObject(); + } + qCDebug(scriptengine) << "the assets: " << obj.value("assets"); + if (fileType == 0 || fileType == 1) { + QJsonArray arr = obj.value("assets").toArray(); + qCDebug(scriptengine) << "in array: " << arr; + // return model url + if (fileType == 1) { + int random = getRandIntInRange(arr.size()); + QJsonObject json = arr.at(random).toObject(); + qCDebug(scriptengine) << random << "th object: " << json; + qCDebug(scriptengine) << random << "th asset name: " << json.value("displayName"); + // nested JSONs + return json.value("formats").toArray().at(0).toObject().value("root").toObject().value("url"); + } + // return whole asset list + return arr; + // return specific object + } else { return obj; } - qCDebug(scriptengine) << "total size: " << obj.value("totalSize"); - qCDebug(scriptengine) << "the assets: " << obj.value("assets"); - QJsonArray arr = obj.value("assets").toArray(); - qCDebug(scriptengine) << "in array: " << arr; - QJsonObject first = arr.takeAt(0).toObject(); - qCDebug(scriptengine) << "first asset: " << first; - qCDebug(scriptengine) << "first asset description: " << first.value("description"); - return obj; } + + + + + /*void GooglePolyScriptingInterface::getAssetList() { authCode = "AIzaSyDamk7Vth52j7aU9JVKn3ungFS0kGJYc8A"; QUrl url(listPolyUrl + "key=" + authCode); diff --git a/interface/src/scripting/GooglePolyScriptingInterface.h b/interface/src/scripting/GooglePolyScriptingInterface.h index 707eabc0af..a90557e593 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.h +++ b/interface/src/scripting/GooglePolyScriptingInterface.h @@ -21,18 +21,20 @@ public: GooglePolyScriptingInterface(); public slots: - void testPrint(); + void testPrint(QString input); void setAPIKey(QString key); - //QJsonArray GooglePolyScriptingInterface::getAssetList(); - void getAssetList(); + QJsonArray getAssetList(QString keyword, QString category, QString format); + QString getFBX(QString keyword, QString category); private: + QUrl formatURLQuery(QString keyword, QString category, QString format); QByteArray getHTTPRequest(QUrl url); - QVariant makeJSON(QByteArray* response, bool isList); + QVariant parseJSON(QByteArray* response, int fileType); + int getRandIntInRange(int length); //void onResult(QNetworkReply* reply); - QString authCode; + //QString authCode; }; From e7fad0586713bb13074836532fd8a13562235520 Mon Sep 17 00:00:00 2001 From: Elisa Lupin-Jimenez Date: Mon, 18 Dec 2017 14:20:51 -0800 Subject: [PATCH 09/20] enabled fbx, obj, and blocks model url retrieval --- .../GooglePolyScriptingInterface.cpp | 105 +++++++++--------- .../scripting/GooglePolyScriptingInterface.h | 10 +- 2 files changed, 63 insertions(+), 52 deletions(-) diff --git a/interface/src/scripting/GooglePolyScriptingInterface.cpp b/interface/src/scripting/GooglePolyScriptingInterface.cpp index 7ec6cd343d..8080456e0d 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.cpp +++ b/interface/src/scripting/GooglePolyScriptingInterface.cpp @@ -17,7 +17,6 @@ #include #include #include -//#include #include #include #include @@ -26,10 +25,8 @@ #include "GooglePolyScriptingInterface.h" #include "ScriptEngineLogging.h" -QString listPolyUrl = "https://poly.googleapis.com/v1/assets?"; -QString getPolyUrl = "https://poly.googleapis.com/v1/assets/model?"; - -QString authCode = "broke"; +const QString listPolyUrl = "https://poly.googleapis.com/v1/assets?"; +const QString getPolyUrl = "https://poly.googleapis.com/v1/assets/model?"; QStringList validFormats = QStringList() << "BLOCKS" << "FBX" << "GLTF" << "GLTF2" << "OBJ" << "TILT" << ""; QStringList validCategories = QStringList() << "animals" << "architecture" << "art" << "food" << @@ -42,8 +39,7 @@ GooglePolyScriptingInterface::GooglePolyScriptingInterface() { QJsonArray GooglePolyScriptingInterface::getAssetList(QString keyword, QString category, QString format) { QUrl url = formatURLQuery(keyword, category, format); if (!url.isEmpty()) { - QByteArray jsonString = getHTTPRequest(url); - QJsonArray json = parseJSON(&jsonString, 0).toJsonArray(); + QJsonArray json = parseJSON(url, 0).toJsonArray(); qCDebug(scriptengine) << "first asset name: " << json.at(0).toObject().value("displayName"); return json; } else { @@ -54,19 +50,40 @@ QJsonArray GooglePolyScriptingInterface::getAssetList(QString keyword, QString c QString GooglePolyScriptingInterface::getFBX(QString keyword, QString category) { QUrl url = formatURLQuery(keyword, category, "FBX"); - qCDebug(scriptengine) << "google url: " << url; - if (!url.isEmpty()) { - QByteArray jsonString = getHTTPRequest(url); - qCDebug(scriptengine) << "the list: " << jsonString; - QString modelURL = parseJSON(&jsonString, 1).toString(); - - qCDebug(scriptengine) << "the model url: " << modelURL; - return modelURL; - } else { - qCDebug(scriptengine) << "Invalid filters were specified."; - return ""; - } + return getModelURL(url); +} +QString GooglePolyScriptingInterface::getOBJ(QString keyword, QString category) { + QUrl url = formatURLQuery(keyword, category, "OBJ"); + return getModelURL(url); +} + +QString GooglePolyScriptingInterface::getBlocks(QString keyword, QString category) { + QUrl url = formatURLQuery(keyword, category, "BLOCKS"); + qCDebug(scriptengine) << "Google url request: " << url; + return getModelURL(url); +} + +/* +// This method will not work until we support Tilt models +QString GooglePolyScriptingInterface::getTilt(QString keyword, QString category) { + QUrl url = formatURLQuery(keyword, category, "TILT"); + return getModelURL(url); +} +*/ + +// can provide asset name or full URL to model +QString GooglePolyScriptingInterface::getModelInfo(QString name) { + if (name.contains("poly.googleapis")) { + QStringList list = name.split("/"); + name = list[4]; + } + QString urlString = QString(getPolyUrl); + urlString = urlString.replace("model", name) + "key=" + authCode; + qCDebug(scriptengine) << "google get url: " << urlString; + QUrl url(urlString); + QByteArray json = parseJSON(url, 2).toByteArray(); + return json; } void GooglePolyScriptingInterface::testPrint(QString input) { @@ -103,6 +120,16 @@ QUrl GooglePolyScriptingInterface::formatURLQuery(QString keyword, QString categ } } +QString GooglePolyScriptingInterface::getModelURL(QUrl url) { + qCDebug(scriptengine) << "Google url request: " << url; + if (!url.isEmpty()) { + return parseJSON(url, 1).toString(); + } else { + qCDebug(scriptengine) << "Invalid filters were specified."; + return ""; + } +} + // FIXME: synchronous QByteArray GooglePolyScriptingInterface::getHTTPRequest(QUrl url) { QNetworkAccessManager manager; @@ -115,26 +142,23 @@ QByteArray GooglePolyScriptingInterface::getHTTPRequest(QUrl url) { } // since the list is a QJsonArray and a single model is a QJsonObject -QVariant GooglePolyScriptingInterface::parseJSON(QByteArray* response, int fileType) { +QVariant GooglePolyScriptingInterface::parseJSON(QUrl url, int fileType) { //QString firstItem = QString::fromUtf8(response->readAll()); - QJsonDocument doc = QJsonDocument::fromJson(*response); + QByteArray jsonString = getHTTPRequest(url); + QJsonDocument doc = QJsonDocument::fromJson(jsonString); QJsonObject obj = doc.object(); - qCDebug(scriptengine) << "json obj: " << obj; - qCDebug(scriptengine) << "json list: " << obj.keys(); if (obj.keys().first() == "error") { - qCDebug(scriptengine) << "Invalid API key"; + QString error = obj.value("error").toObject().value("message").toString(); + qCDebug(scriptengine) << error; return QJsonObject(); } qCDebug(scriptengine) << "the assets: " << obj.value("assets"); if (fileType == 0 || fileType == 1) { QJsonArray arr = obj.value("assets").toArray(); - qCDebug(scriptengine) << "in array: " << arr; // return model url if (fileType == 1) { int random = getRandIntInRange(arr.size()); QJsonObject json = arr.at(random).toObject(); - qCDebug(scriptengine) << random << "th object: " << json; - qCDebug(scriptengine) << random << "th asset name: " << json.value("displayName"); // nested JSONs return json.value("formats").toArray().at(0).toObject().value("root").toObject().value("url"); } @@ -142,17 +166,14 @@ QVariant GooglePolyScriptingInterface::parseJSON(QByteArray* response, int fileT return arr; // return specific object } else { - return obj; + //return obj; + //return doc.toJson(); + return jsonString; } } -/*void GooglePolyScriptingInterface::getAssetList() { - authCode = "AIzaSyDamk7Vth52j7aU9JVKn3ungFS0kGJYc8A"; - QUrl url(listPolyUrl + "key=" + authCode); - QByteArray reply = getHTTPRequest(url); - qCDebug(scriptengine) << "the list: " << test; -} +/* // FIXME: synchronous = not good code QByteArray GooglePolyScriptingInterface::getHTTPRequest(QUrl url) { @@ -164,23 +185,7 @@ QByteArray GooglePolyScriptingInterface::getHTTPRequest(QUrl url) { return response->readAll(); } -*/ -/* useful for constructing the url? - - QUrl url("http://gdata.youtube.com/feeds/api/standardfeeds/"); - QString method = "most_popular"; - url.setPath(QString("%1%2").arg(url.path()).arg(method)); - - QMap params; - params["alt"] = "json"; - params["v"] = "2"; - - foreach(QString param, params.keys()) { - url.addQueryItem(param, params[param].toString()); - } - -*/ /* NONE OF THESE HTTP GET METHODS WORK D: https://stackoverflow.com/questions/28267477/getting-a-page-content-with-qt kinda used rn diff --git a/interface/src/scripting/GooglePolyScriptingInterface.h b/interface/src/scripting/GooglePolyScriptingInterface.h index 1ae7554a9d..acbc27b90c 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.h +++ b/interface/src/scripting/GooglePolyScriptingInterface.h @@ -17,6 +17,7 @@ class GooglePolyScriptingInterface : public QObject, public Dependency { Q_OBJECT + public: GooglePolyScriptingInterface(); @@ -26,15 +27,20 @@ public slots: QJsonArray getAssetList(QString keyword, QString category, QString format); QString getFBX(QString keyword, QString category); + QString getOBJ(QString keyword, QString category); + QString getBlocks(QString keyword, QString category); + //QString getTilt(QString keyword, QString category); + QString getModelInfo(QString name); private: QUrl formatURLQuery(QString keyword, QString category, QString format); + QString getModelURL(QUrl url); QByteArray getHTTPRequest(QUrl url); - QVariant parseJSON(QByteArray* response, int fileType); + QVariant parseJSON(QUrl url, int fileType); int getRandIntInRange(int length); //void onResult(QNetworkReply* reply); - //QString authCode; + QString authCode; }; From 1ee8445f433c77d7310bc7cad0e873c79e804318 Mon Sep 17 00:00:00 2001 From: Elisa Lupin-Jimenez Date: Mon, 18 Dec 2017 17:47:21 -0800 Subject: [PATCH 10/20] added gltf import feature, getAssetList() not working --- .../GooglePolyScriptingInterface.cpp | 60 +++++++++++++------ .../scripting/GooglePolyScriptingInterface.h | 5 +- 2 files changed, 46 insertions(+), 19 deletions(-) diff --git a/interface/src/scripting/GooglePolyScriptingInterface.cpp b/interface/src/scripting/GooglePolyScriptingInterface.cpp index 8080456e0d..42c3b825ba 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.cpp +++ b/interface/src/scripting/GooglePolyScriptingInterface.cpp @@ -36,17 +36,39 @@ GooglePolyScriptingInterface::GooglePolyScriptingInterface() { // nothing to be implemented } -QJsonArray GooglePolyScriptingInterface::getAssetList(QString keyword, QString category, QString format) { +void GooglePolyScriptingInterface::setAPIKey(QString key) { + authCode = key; +} + +QByteArray GooglePolyScriptingInterface::getAssetList(QString keyword, QString category, QString format) { QUrl url = formatURLQuery(keyword, category, format); if (!url.isEmpty()) { + //QJsonArray json = parseJSON(url, 0).toJsonArray(); + //qCDebug(scriptengine) << "first asset name: " << json.at(0).toObject().value("displayName"); + QByteArray json = parseJSON(url, 0).toJsonDocument().toJson(); + qCDebug(scriptengine) << "asset list as string is: " << json; + return json; + } else { + qCDebug(scriptengine) << "Invalid filters were specified."; + //return QJsonArray(); + return ""; + } +} + +/*QJsonArray GooglePolyScriptingInterface::getAssetList(QString keyword, QString category, QString format) { + QUrl url = formatURLQuery(keyword, category, format); + if (!url.isEmpty()) { + //QJsonArray json = parseJSON(url, 0).toJsonArray(); + //qCDebug(scriptengine) << "first asset name: " << json.at(0).toObject().value("displayName"); QJsonArray json = parseJSON(url, 0).toJsonArray(); - qCDebug(scriptengine) << "first asset name: " << json.at(0).toObject().value("displayName"); + qCDebug(scriptengine) << "asset list as array is: " << json; return json; } else { qCDebug(scriptengine) << "Invalid filters were specified."; return QJsonArray(); + //return ""; } -} +}*/ QString GooglePolyScriptingInterface::getFBX(QString keyword, QString category) { QUrl url = formatURLQuery(keyword, category, "FBX"); @@ -60,7 +82,16 @@ QString GooglePolyScriptingInterface::getOBJ(QString keyword, QString category) QString GooglePolyScriptingInterface::getBlocks(QString keyword, QString category) { QUrl url = formatURLQuery(keyword, category, "BLOCKS"); - qCDebug(scriptengine) << "Google url request: " << url; + return getModelURL(url); +} + +QString GooglePolyScriptingInterface::getGLTF(QString keyword, QString category) { + QUrl url = formatURLQuery(keyword, category, "GLTF"); + return getModelURL(url); +} + +QString GooglePolyScriptingInterface::getGLTF2(QString keyword, QString category) { + QUrl url = formatURLQuery(keyword, category, "GLTF2"); return getModelURL(url); } @@ -74,15 +105,15 @@ QString GooglePolyScriptingInterface::getTilt(QString keyword, QString category) // can provide asset name or full URL to model QString GooglePolyScriptingInterface::getModelInfo(QString name) { - if (name.contains("poly.googleapis")) { + if (name.contains("poly.googleapis") || name.contains("poly.google.com")) { QStringList list = name.split("/"); name = list[4]; } QString urlString = QString(getPolyUrl); urlString = urlString.replace("model", name) + "key=" + authCode; - qCDebug(scriptengine) << "google get url: " << urlString; + qCDebug(scriptengine) << "Google URL request: " << urlString; QUrl url(urlString); - QByteArray json = parseJSON(url, 2).toByteArray(); + QString json = parseJSON(url, 2).toString(); return json; } @@ -90,10 +121,6 @@ void GooglePolyScriptingInterface::testPrint(QString input) { qCDebug(scriptengine) << "Google message: " << input; } -void GooglePolyScriptingInterface::setAPIKey(QString key) { - authCode = key; -} - int GooglePolyScriptingInterface::getRandIntInRange(int length) { QTime time = QTime::currentTime(); qsrand((uint)time.msec()); @@ -121,7 +148,7 @@ QUrl GooglePolyScriptingInterface::formatURLQuery(QString keyword, QString categ } QString GooglePolyScriptingInterface::getModelURL(QUrl url) { - qCDebug(scriptengine) << "Google url request: " << url; + qCDebug(scriptengine) << "Google URL request: " << url; if (!url.isEmpty()) { return parseJSON(url, 1).toString(); } else { @@ -150,9 +177,8 @@ QVariant GooglePolyScriptingInterface::parseJSON(QUrl url, int fileType) { if (obj.keys().first() == "error") { QString error = obj.value("error").toObject().value("message").toString(); qCDebug(scriptengine) << error; - return QJsonObject(); + return ""; } - qCDebug(scriptengine) << "the assets: " << obj.value("assets"); if (fileType == 0 || fileType == 1) { QJsonArray arr = obj.value("assets").toArray(); // return model url @@ -163,11 +189,10 @@ QVariant GooglePolyScriptingInterface::parseJSON(QUrl url, int fileType) { return json.value("formats").toArray().at(0).toObject().value("root").toObject().value("url"); } // return whole asset list - return arr; + //return arr; + return QJsonDocument(arr); // return specific object } else { - //return obj; - //return doc.toJson(); return jsonString; } } @@ -269,5 +294,4 @@ or this :(( http://blog.mathieu-leplatre.info/access-a-json-webservice-with-qt-c qCDebug(scriptengine) << "first item: " << firstItem; } -<<<<<<< HEAD */ diff --git a/interface/src/scripting/GooglePolyScriptingInterface.h b/interface/src/scripting/GooglePolyScriptingInterface.h index acbc27b90c..f8b00462f3 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.h +++ b/interface/src/scripting/GooglePolyScriptingInterface.h @@ -25,10 +25,13 @@ public slots: void testPrint(QString input); void setAPIKey(QString key); - QJsonArray getAssetList(QString keyword, QString category, QString format); + //QJsonArray getAssetList(QString keyword, QString category, QString format); + QByteArray getAssetList(QString keyword, QString category, QString format); QString getFBX(QString keyword, QString category); QString getOBJ(QString keyword, QString category); QString getBlocks(QString keyword, QString category); + QString getGLTF(QString keyword, QString category); + QString getGLTF2(QString keyword, QString category); //QString getTilt(QString keyword, QString category); QString getModelInfo(QString name); From 34d8fe307df1c736f0d5ea77649b6b63990458a5 Mon Sep 17 00:00:00 2001 From: Elisa Lupin-Jimenez Date: Tue, 19 Dec 2017 11:25:15 -0800 Subject: [PATCH 11/20] fixed getAssetList() --- .../GooglePolyScriptingInterface.cpp | 20 ++----------------- .../scripting/GooglePolyScriptingInterface.h | 3 +-- 2 files changed, 3 insertions(+), 20 deletions(-) diff --git a/interface/src/scripting/GooglePolyScriptingInterface.cpp b/interface/src/scripting/GooglePolyScriptingInterface.cpp index 42c3b825ba..6387295315 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.cpp +++ b/interface/src/scripting/GooglePolyScriptingInterface.cpp @@ -40,14 +40,13 @@ void GooglePolyScriptingInterface::setAPIKey(QString key) { authCode = key; } -QByteArray GooglePolyScriptingInterface::getAssetList(QString keyword, QString category, QString format) { +QString GooglePolyScriptingInterface::getAssetList(QString keyword, QString category, QString format) { QUrl url = formatURLQuery(keyword, category, format); if (!url.isEmpty()) { //QJsonArray json = parseJSON(url, 0).toJsonArray(); //qCDebug(scriptengine) << "first asset name: " << json.at(0).toObject().value("displayName"); QByteArray json = parseJSON(url, 0).toJsonDocument().toJson(); - qCDebug(scriptengine) << "asset list as string is: " << json; - return json; + return (QString) json; } else { qCDebug(scriptengine) << "Invalid filters were specified."; //return QJsonArray(); @@ -55,21 +54,6 @@ QByteArray GooglePolyScriptingInterface::getAssetList(QString keyword, QString c } } -/*QJsonArray GooglePolyScriptingInterface::getAssetList(QString keyword, QString category, QString format) { - QUrl url = formatURLQuery(keyword, category, format); - if (!url.isEmpty()) { - //QJsonArray json = parseJSON(url, 0).toJsonArray(); - //qCDebug(scriptengine) << "first asset name: " << json.at(0).toObject().value("displayName"); - QJsonArray json = parseJSON(url, 0).toJsonArray(); - qCDebug(scriptengine) << "asset list as array is: " << json; - return json; - } else { - qCDebug(scriptengine) << "Invalid filters were specified."; - return QJsonArray(); - //return ""; - } -}*/ - QString GooglePolyScriptingInterface::getFBX(QString keyword, QString category) { QUrl url = formatURLQuery(keyword, category, "FBX"); return getModelURL(url); diff --git a/interface/src/scripting/GooglePolyScriptingInterface.h b/interface/src/scripting/GooglePolyScriptingInterface.h index f8b00462f3..7c6d810d13 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.h +++ b/interface/src/scripting/GooglePolyScriptingInterface.h @@ -25,8 +25,7 @@ public slots: void testPrint(QString input); void setAPIKey(QString key); - //QJsonArray getAssetList(QString keyword, QString category, QString format); - QByteArray getAssetList(QString keyword, QString category, QString format); + QString getAssetList(QString keyword, QString category, QString format); QString getFBX(QString keyword, QString category); QString getOBJ(QString keyword, QString category); QString getBlocks(QString keyword, QString category); From 1b6c85edb01812db3d349e6911bd167b00a362a7 Mon Sep 17 00:00:00 2001 From: Elisa Lupin-Jimenez Date: Tue, 19 Dec 2017 13:22:31 -0800 Subject: [PATCH 12/20] cleaned up code --- .../GooglePolyScriptingInterface.cpp | 111 +----------------- .../scripting/GooglePolyScriptingInterface.h | 2 - 2 files changed, 2 insertions(+), 111 deletions(-) diff --git a/interface/src/scripting/GooglePolyScriptingInterface.cpp b/interface/src/scripting/GooglePolyScriptingInterface.cpp index 6387295315..6f4735f4b1 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.cpp +++ b/interface/src/scripting/GooglePolyScriptingInterface.cpp @@ -43,13 +43,10 @@ void GooglePolyScriptingInterface::setAPIKey(QString key) { QString GooglePolyScriptingInterface::getAssetList(QString keyword, QString category, QString format) { QUrl url = formatURLQuery(keyword, category, format); if (!url.isEmpty()) { - //QJsonArray json = parseJSON(url, 0).toJsonArray(); - //qCDebug(scriptengine) << "first asset name: " << json.at(0).toObject().value("displayName"); QByteArray json = parseJSON(url, 0).toJsonDocument().toJson(); return (QString) json; } else { qCDebug(scriptengine) << "Invalid filters were specified."; - //return QJsonArray(); return ""; } } @@ -87,7 +84,7 @@ QString GooglePolyScriptingInterface::getTilt(QString keyword, QString category) } */ -// can provide asset name or full URL to model +// Can provide asset name or full URL to model QString GooglePolyScriptingInterface::getModelInfo(QString name) { if (name.contains("poly.googleapis") || name.contains("poly.google.com")) { QStringList list = name.split("/"); @@ -101,10 +98,6 @@ QString GooglePolyScriptingInterface::getModelInfo(QString name) { return json; } -void GooglePolyScriptingInterface::testPrint(QString input) { - qCDebug(scriptengine) << "Google message: " << input; -} - int GooglePolyScriptingInterface::getRandIntInRange(int length) { QTime time = QTime::currentTime(); qsrand((uint)time.msec()); @@ -152,7 +145,7 @@ QByteArray GooglePolyScriptingInterface::getHTTPRequest(QUrl url) { return response->readAll(); } -// since the list is a QJsonArray and a single model is a QJsonObject +// 0 = asset list, 1 = model from asset list, 2 = specific model QVariant GooglePolyScriptingInterface::parseJSON(QUrl url, int fileType) { //QString firstItem = QString::fromUtf8(response->readAll()); QByteArray jsonString = getHTTPRequest(url); @@ -173,109 +166,9 @@ QVariant GooglePolyScriptingInterface::parseJSON(QUrl url, int fileType) { return json.value("formats").toArray().at(0).toObject().value("root").toObject().value("url"); } // return whole asset list - //return arr; return QJsonDocument(arr); // return specific object } else { return jsonString; } } - - -/* - -// FIXME: synchronous = not good code -QByteArray GooglePolyScriptingInterface::getHTTPRequest(QUrl url) { - QNetworkAccessManager manager; - QNetworkReply *response = manager.get(QNetworkRequest(url)); - QEventLoop event; - connect(response, SIGNAL(finished()), &event, SLOT(quit())); - event.exec(); - return response->readAll(); -} - - - -/* NONE OF THESE HTTP GET METHODS WORK D: -https://stackoverflow.com/questions/28267477/getting-a-page-content-with-qt kinda used rn - -this correctly returns the asset list but is apparently synchronous and not a good way to do it -https://stackoverflow.com/questions/24965972/qt-getting-source-html-code-of-a-web-page-hosted-on-the-internet -void GooglePolyScriptingInterface::getAssetList() { - authCode = "AIzaSyDamk7Vth52j7aU9JVKn3ungFS0kGJYc8A"; - QUrl url(listPolyUrl + "key=" + authCode); - QNetworkAccessManager manager; - QNetworkReply *response = manager.get(QNetworkRequest(url)); - QEventLoop event; - connect(response, SIGNAL(finished()), &event, SLOT(quit())); - event.exec(); - QString firstItem = response->readAll(); - //QJsonArray arr; - //QJsonObject jsonObject = QJsonDocument::fromJson(response->readAll()).object(); - //QString firstItem = jsonObject["assets"].toString(); - qCDebug(scriptengine) << "first item: " << firstItem; - //qCDebug(scriptengine) << "api key: " << authCode; - //return arr; -} - -this didn't work either https://stackoverflow.com/a/24966317 - QScopedPointer manager(new QNetworkAccessManager); - QNetworkReply* response = manager->get(QNetworkRequest(url)); - QObject::connect(manager, &QNetworkAccessManager::finished, [manager, response] { - response->deleteLater(); - manager->deleteLater(); - if (response->error() != QNetworkReply::NoError) return; - QString contentType = - response->header(QNetworkRequest::ContentTypeHeader).toString(); - if (!contentType.contains("charset=utf-8")) { - qWarning() << "Content charsets other than utf-8 are not implemented yet."; - return; - } - QString html = QString::fromUtf8(response->readAll()); - // do something with the data - }) && manager.take(); - - -or this :( https://stackoverflow.com/questions/39518749/make-get-request-to-web-service-get-json-response-and-update-gui-in-qt - qCDebug(scriptengine) << "gonna get assets with " << url; - QNetworkAccessManager manager; - QNetworkReply* reply = manager.get(QNetworkRequest(url)); - QObject::connect(&manager, &QNetworkAccessManager::finished, - [reply]{ - qCDebug(scriptengine) << "boo radley"; - if (reply->error() != QNetworkReply::NoError) { - qCDebug(scriptengine) << "Poly API failed to respond"; - //manager.clearAccessCache(); - } else { - QJsonObject jsonObject = QJsonDocument::fromJson(reply->readAll()).object(); - QString firstItem = jsonObject["assets"].toString(); - qCDebug(scriptengine) << "first item: " << firstItem; - } - reply->deleteLater(); - }); - -or this :(( http://blog.mathieu-leplatre.info/access-a-json-webservice-with-qt-c.html - //QJsonArray arr; - //QJsonObject jsonObject = QJsonDocument::fromJson(response->readAll()).object(); - //QString firstItem = jsonObject["assets"].toString(); - qCDebug(scriptengine) << "first item: " << firstItem; - //qCDebug(scriptengine) << "api key: " << authCode; - //return arr; - QNetworkAccessManager manager; - QNetworkReply* response = manager.get(QNetworkRequest(url)); - QObject::connect(&manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onResult(QNetworkReply*))); - - return ""; - } - - void GooglePolyScriptingInterface::onResult(QNetworkReply* reply) { - if (reply->error() != QNetworkReply::NoError) { - qCDebug(scriptengine) << "Poly API failed to respond"; - return; - } - QString firstItem = reply->readAll(); - - qCDebug(scriptengine) << "first item: " << firstItem; - } - -*/ diff --git a/interface/src/scripting/GooglePolyScriptingInterface.h b/interface/src/scripting/GooglePolyScriptingInterface.h index 7c6d810d13..cdfeddd5fe 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.h +++ b/interface/src/scripting/GooglePolyScriptingInterface.h @@ -22,7 +22,6 @@ public: GooglePolyScriptingInterface(); public slots: - void testPrint(QString input); void setAPIKey(QString key); QString getAssetList(QString keyword, QString category, QString format); @@ -40,7 +39,6 @@ private: QByteArray getHTTPRequest(QUrl url); QVariant parseJSON(QUrl url, int fileType); int getRandIntInRange(int length); - //void onResult(QNetworkReply* reply); QString authCode; From 14935e5924c38f71a3185be79bd2ddb9ff793980 Mon Sep 17 00:00:00 2001 From: Elisa Lupin-Jimenez Date: Tue, 19 Dec 2017 15:11:24 -0800 Subject: [PATCH 13/20] added const to valid inputs --- interface/src/scripting/GooglePolyScriptingInterface.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/src/scripting/GooglePolyScriptingInterface.cpp b/interface/src/scripting/GooglePolyScriptingInterface.cpp index 6f4735f4b1..c9699a2a68 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.cpp +++ b/interface/src/scripting/GooglePolyScriptingInterface.cpp @@ -28,8 +28,8 @@ const QString listPolyUrl = "https://poly.googleapis.com/v1/assets?"; const QString getPolyUrl = "https://poly.googleapis.com/v1/assets/model?"; -QStringList validFormats = QStringList() << "BLOCKS" << "FBX" << "GLTF" << "GLTF2" << "OBJ" << "TILT" << ""; -QStringList validCategories = QStringList() << "animals" << "architecture" << "art" << "food" << +const QStringList validFormats = QStringList() << "BLOCKS" << "FBX" << "GLTF" << "GLTF2" << "OBJ" << "TILT" << ""; +const QStringList validCategories = QStringList() << "animals" << "architecture" << "art" << "food" << "nature" << "objects" << "people" << "scenes" << "technology" << "transport" << ""; GooglePolyScriptingInterface::GooglePolyScriptingInterface() { From ca062f923278dbccff1e7cd68e153bdf8cc1d8fe Mon Sep 17 00:00:00 2001 From: Elisa Lupin-Jimenez Date: Tue, 19 Dec 2017 15:41:42 -0800 Subject: [PATCH 14/20] changed qtglobal include --- interface/src/scripting/GooglePolyScriptingInterface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/scripting/GooglePolyScriptingInterface.cpp b/interface/src/scripting/GooglePolyScriptingInterface.cpp index c9699a2a68..d3b24f79f0 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.cpp +++ b/interface/src/scripting/GooglePolyScriptingInterface.cpp @@ -10,7 +10,7 @@ // #include -#include +#include #include #include #include From 7de2918b9b9da99fbf03c793ca4e22c32146b400 Mon Sep 17 00:00:00 2001 From: Elisa Lupin-Jimenez Date: Wed, 20 Dec 2017 12:44:47 -0800 Subject: [PATCH 15/20] added newline to header --- interface/src/scripting/GooglePolyScriptingInterface.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/scripting/GooglePolyScriptingInterface.h b/interface/src/scripting/GooglePolyScriptingInterface.h index cdfeddd5fe..758926aed5 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.h +++ b/interface/src/scripting/GooglePolyScriptingInterface.h @@ -44,4 +44,4 @@ private: }; -#endif // hifi_GooglePolyScriptingInterface_h \ No newline at end of file +#endif // hifi_GooglePolyScriptingInterface_h From e1b344e36de8aefa0433c5491dfcabb2bb373554 Mon Sep 17 00:00:00 2001 From: Elisa Lupin-Jimenez Date: Tue, 26 Dec 2017 10:50:10 -0800 Subject: [PATCH 16/20] handles empty json object return --- interface/src/scripting/GooglePolyScriptingInterface.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/interface/src/scripting/GooglePolyScriptingInterface.cpp b/interface/src/scripting/GooglePolyScriptingInterface.cpp index d3b24f79f0..9629ae9b2e 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.cpp +++ b/interface/src/scripting/GooglePolyScriptingInterface.cpp @@ -151,6 +151,10 @@ QVariant GooglePolyScriptingInterface::parseJSON(QUrl url, int fileType) { QByteArray jsonString = getHTTPRequest(url); QJsonDocument doc = QJsonDocument::fromJson(jsonString); QJsonObject obj = doc.object(); + if (obj.isEmpty()) { + qCDebug(scriptengine) << "Assets with specified filters not found"; + return ""; + } if (obj.keys().first() == "error") { QString error = obj.value("error").toObject().value("message").toString(); qCDebug(scriptengine) << error; From 03f06aadf4a4282bf87372d698c8e30e1fd729d9 Mon Sep 17 00:00:00 2001 From: Elisa Lupin-Jimenez Date: Tue, 26 Dec 2017 11:08:10 -0800 Subject: [PATCH 17/20] keyword filters case insensitive now --- interface/src/scripting/GooglePolyScriptingInterface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/scripting/GooglePolyScriptingInterface.cpp b/interface/src/scripting/GooglePolyScriptingInterface.cpp index 9629ae9b2e..f164d6e825 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.cpp +++ b/interface/src/scripting/GooglePolyScriptingInterface.cpp @@ -106,7 +106,7 @@ int GooglePolyScriptingInterface::getRandIntInRange(int length) { QUrl GooglePolyScriptingInterface::formatURLQuery(QString keyword, QString category, QString format) { QString queries; - if (!validFormats.contains(format) || !validCategories.contains(category)) { + if (!validFormats.contains(format, Qt::CaseInsensitive) || !validCategories.contains(category, Qt::CaseInsensitive)) { return QUrl(""); } else { if (!keyword.isEmpty()) { From 01c1032540b9ff26b575e1b96ca983f0bcb200a5 Mon Sep 17 00:00:00 2001 From: Elisa Lupin-Jimenez Date: Wed, 27 Dec 2017 10:51:58 -0800 Subject: [PATCH 18/20] fixed constant names, added another URL check --- interface/resources/qml/js/Utils.jsc | Bin 6596 -> 0 bytes .../GooglePolyScriptingInterface.cpp | 27 +++++++++--------- .../scripting/GooglePolyScriptingInterface.h | 6 ++-- 3 files changed, 17 insertions(+), 16 deletions(-) delete mode 100644 interface/resources/qml/js/Utils.jsc diff --git a/interface/resources/qml/js/Utils.jsc b/interface/resources/qml/js/Utils.jsc deleted file mode 100644 index ab20e996b9469915ac6a89901da175143e6b5024..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6596 zcmcIoZD?EP6@Kh1ckah_<+cmm)~+s7*+{cEDOm|)Y*uPBiCux$Iwl#JYtNP&7t3}W zIXI&o4oU8EkM2n zXjl7O2dDtRuNCd{@)jY-)d!#zenqKY4sn&W{weu)twmlb!$4JTzv65rm+K1vDC#!F zU$|ZVIZ9zlW+S<`HL;hgR&M8~1sQiLyXg~6*Kx4qHtya=?){4Iz`gR%B^6)FqD(EX zPx0NgjXdr9YAbNP75KOnxYqy<89DFo`<=jA05hh+!CUJc)7q5K-I-U<4BwMhw#!Kold03qHB1qPh=(m57jV zQZO*TlsKpO<^4D&)ji|-UBpF<$-`KmCFTK~acFxKqv8qb`vJ}(jwnv6ynF{ogq(=F zep_Ap)wNGud)4)O>UtbUguEF{VOB&&#)x21=BI^yoeI;=cpet< z8yEavN0<0LF8)1^DU2eDE}X7EzTC=9#(VVvU%?VLXPX@E8u^tC$cdhzrY~ z5|TzSE|9{#2}}z<=It55SzSj%iNA*yHv6nZbjwP_N>*aF82-K7|F|4Z{3((gYY*l1 z1HmPNES&HK!VAmo!G#Z7%nSc2m&=jFSbJz;vopy0hR~Acw-O%(%P$^o0YVGQoxRBc zfA58N%nJ{-l0bHGCbwg^#q(qrrDi+!w<_$cdfT#JQtVa6B|0HZKTvD>SPT8{3FK*i zWU(iZU!oSteUbW{j!MrrowDh%hwMA*Wz%5~+1G_Km+UHco!!3?d2`uawWQAO`Fhz^ zFY9DKQ7^k1!8+Li%B~H>BZmbX7dAVWSkh#gI3&0r zaF0rAW;@0YRTR^~w|fH1=rq7T1!gIn>dAFt!Sy*C45#|hZ zyKMQfPE=zR8BZ12Iu&e;jZ`qZ;(XBNe0X7VdI#CX&hyK$=>L{qIw{h|R_2l4RI7AY z^-G-Fg*Pl@c)U6&I`)6~vWKqD3?b!JxCu1uN`cA?Q-i-75ra?*w4> z7DLeZEXfck*xy13exhOT)~XM$^JKYWuGBjYFUK{J-kQV9*AmCcI=9Ipz3t&zt&~o& zbp5o=j@d0M5iMDXSkX$%t~YJ^dxYvnP2X7@RT0fd+JSJgHI(cgqRD9&=_E-h7ipTL zi!Ra}N%Kz9JRJ@v&Ijf=afs?ImCUopaAUf5Bc(P@)^4QL#!&4B4=hC;lN+q^_W+Q1 zP^n|i{5|@(6kNweRp@!g!IB0$&XzP(9WOq8UKl6|MM0Czbbp-MJtdAmS4|C?43SDf)z9}dNlLtGo5xl*UM-i)V9TyEvOFWw5I(m_-&8|fx011{`>NNH;(6Df(rr#QsN>-}$CJna|wOpzoRcq-Fq`bAH8fghvwNyJ`N_RlpJYiGQZuHu}HZ5Pa zdE8c|q5`8P==g;$uId?L_>-ZdTT7Ja(9^jWIyw}4%`oqUj`vkn%QKo+>hkt%Am^R8 zT%)}GyrqJUtqMAFDsNlV@ Date: Wed, 27 Dec 2017 12:49:16 -0800 Subject: [PATCH 20/20] changed api key variable name --- interface/src/scripting/GooglePolyScriptingInterface.cpp | 6 +++--- interface/src/scripting/GooglePolyScriptingInterface.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/interface/src/scripting/GooglePolyScriptingInterface.cpp b/interface/src/scripting/GooglePolyScriptingInterface.cpp index f164724d37..8ed5d59d07 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.cpp +++ b/interface/src/scripting/GooglePolyScriptingInterface.cpp @@ -37,7 +37,7 @@ GooglePolyScriptingInterface::GooglePolyScriptingInterface() { } void GooglePolyScriptingInterface::setAPIKey(const QString& key) { - authCode = key; + _authCode = key; } QString GooglePolyScriptingInterface::getAssetList(const QString& keyword, const QString& category, const QString& format) { @@ -94,7 +94,7 @@ QString GooglePolyScriptingInterface::getModelInfo(const QString& input) { } } QString urlString(GET_POLY_URL); - urlString = urlString.replace("model", name) + "key=" + authCode; + urlString = urlString.replace("model", name) + "key=" + _authCode; qCDebug(scriptengine) << "Google URL request: " << urlString; QUrl url(urlString); QString json = parseJSON(url, 2).toString(); @@ -123,7 +123,7 @@ QUrl GooglePolyScriptingInterface::formatURLQuery(const QString& keyword, const if (!format.isEmpty()) { queries.append("&format=" + format); } - QString urlString(LIST_POLY_URL + "key=" + authCode + queries); + QString urlString(LIST_POLY_URL + "key=" + _authCode + queries); return QUrl(urlString); } } diff --git a/interface/src/scripting/GooglePolyScriptingInterface.h b/interface/src/scripting/GooglePolyScriptingInterface.h index 04a60f0614..fdd3597bec 100644 --- a/interface/src/scripting/GooglePolyScriptingInterface.h +++ b/interface/src/scripting/GooglePolyScriptingInterface.h @@ -34,7 +34,7 @@ public slots: QString getModelInfo(const QString& input); private: - QString authCode; + QString _authCode; QUrl formatURLQuery(const QString& keyword, const QString& category, const QString& format); QString getModelURL(const QUrl& url);