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
19BatchLoader::BatchLoader(const QList<QUrl>& urls)
20 : QObject(),
21 _finished(false),
22 _urls(urls.toSet()),
23 _started(false),
24 _data() {
25}
26
27void 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
77void BatchLoader::checkFinished() {
78 if (!_finished && _urls.size() == _data.size()) {
79 _finished = true;
80 emit finished(_data);
81 }
82}