Showing the changes to libraries/script-engine/src/BatchLoader.cpp (1 of 2 files). Show all
Unified · Split
| @@ -0,0 +1,82 @@ | |||
| 1 | // | ||
| 2 | // BatchLoader.cpp | ||
| 3 | // libraries/script-engine/src | ||
| 4 | // | ||
| 5 | // Created by Ryan Huffman on 01/22/15 | ||
| 6 | // Copyright 2015 High Fidelity, Inc. | ||
| 7 | // | ||
| 8 | // Distributed under the Apache License, Version 2.0. | ||
| 9 | // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html | ||
| 10 | // | ||
| 11 | |||
| 12 | #include <QNetworkAccessManager> | ||
| 13 | #include <QNetworkReply> | ||
| 14 | |||
| 15 | #include <QFile> | ||
| 16 | #include "BatchLoader.h" | ||
| 17 | #include <NetworkAccessManager.h> | ||
| 18 | |||
| 19 | BatchLoader::BatchLoader(const QList<QUrl>& urls) | ||
| 20 | : QObject(), | ||
| 21 | _finished(false), | ||
| 22 | _urls(urls.toSet()), | ||
| 23 | _started(false), | ||
| 24 | _data() { | ||
| 25 | } | ||
| 26 | |||
| 27 | void BatchLoader::start() { | ||
| 28 | if (_started) { | ||
| 29 | return; | ||
| 30 | } | ||
| 31 | |||
| 32 | _started = true; | ||
| 33 | QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance(); | ||
| 34 | for (QUrl url : _urls) { | ||
| 35 | if (url.scheme() == "http" || url.scheme() == "https" || url.scheme() == "ftp") { | ||
| 36 | QNetworkReply* reply = networkAccessManager.get(QNetworkRequest(url)); | ||
| 37 | |||
| 38 | qDebug() << "Downloading file at" << url; | ||
| 39 | |||
| 40 | connect(reply, &QNetworkReply::finished, [=]() { | ||
| 41 | if (reply->error()) { | ||
| 42 | emit errorLoadingFile(url); | ||
| 43 | _data.insert(url, QString()); | ||
| 44 | } else { | ||
| 45 | _data.insert(url, reply->readAll()); | ||
| 46 | } | ||
| 47 | reply->deleteLater(); | ||
| 48 | checkFinished(); | ||
| 49 | }); | ||
| 50 | |||
| 51 | // If we end up being destroyed before the reply finishes, clean it up | ||
| 52 | connect(this, &QObject::destroyed, reply, &QObject::deleteLater); | ||
| 53 | |||
| 54 | } else { | ||
| 55 | #ifdef _WIN32 | ||
| 56 | QString fileName = url.toString(); | ||
| 57 | #else | ||
| 58 | QString fileName = url.toLocalFile(); | ||
| 59 | #endif | ||
| 60 | |||
| 61 | qDebug() << "Reading file at " << fileName; | ||
| 62 | |||
| 63 | QFile scriptFile(fileName); | ||
| 64 | if (scriptFile.open(QFile::ReadOnly | QFile::Text)) { | ||
| 65 | QTextStream in(&scriptFile); | ||
| 66 | _data.insert(url, in.readAll()); | ||
| 67 | // includeContents = in.readAll(); | ||
| 68 | } else { | ||
| 69 | emit errorLoadingFile(url); | ||
| 70 | _data.insert(url, QString()); | ||
| 71 | } | ||
| 72 | } | ||
| 73 | } | ||
| 74 | checkFinished(); | ||
| 75 | } | ||
| 76 | |||
| 77 | void BatchLoader::checkFinished() { | ||
| 78 | if (!_finished && _urls.size() == _data.size()) { | ||
| 79 | _finished = true; | ||
| 80 | emit finished(_data); | ||
| 81 | } | ||
| 82 | } | ||