History

Add BatchLoader

Ryan Huffman committed 11 years ago

Commit 958d8531 parent d8d09722 files · +127 −0Browse files

Showing the changes to libraries/script-engine/src/BatchLoader.cpp (1 of 2 files). Show all

Unified · Split

libraries/script-engine/src/BatchLoader.cpp+82−0
@@ -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+}