23 #include <QNetworkReply> |
23 #include <QNetworkReply> |
24 #include <QFileInfo> |
24 #include <QFileInfo> |
25 #include <QFileDialog> |
25 #include <QFileDialog> |
26 #include <QDebug> |
26 #include <QDebug> |
27 #include <QProgressBar> |
27 #include <QProgressBar> |
|
28 #include <QBuffer> |
28 |
29 |
29 #include "pagedata.h" |
30 #include "pagedata.h" |
30 #include "databrowser.h" |
31 #include "databrowser.h" |
31 |
32 |
32 #include "quazip.h" |
33 #include "quazip.h" |
|
34 #include "quazipfile.h" |
33 |
35 |
34 PageDataDownload::PageDataDownload(QWidget* parent) : AbstractPage(parent) |
36 PageDataDownload::PageDataDownload(QWidget* parent) : AbstractPage(parent) |
35 { |
37 { |
36 QGridLayout * pageLayout = new QGridLayout(this); |
38 QGridLayout * pageLayout = new QGridLayout(this); |
37 pageLayout->setColumnStretch(0, 1); |
39 pageLayout->setColumnStretch(0, 1); |
54 void PageDataDownload::install(const QUrl &url) |
56 void PageDataDownload::install(const QUrl &url) |
55 { |
57 { |
56 qWarning() << "Download Request" << url.toString(); |
58 qWarning() << "Download Request" << url.toString(); |
57 QString fileName = QFileInfo(url.toString()).fileName(); |
59 QString fileName = QFileInfo(url.toString()).fileName(); |
58 |
60 |
59 QNetworkRequest newRequest(url); |
61 QNetworkRequest newRequest(QUrl("http://www.hedgewars.org" + url.toString())); |
60 newRequest.setAttribute(QNetworkRequest::User, fileName); |
62 newRequest.setAttribute(QNetworkRequest::User, fileName); |
61 |
63 |
62 QNetworkAccessManager *manager = new QNetworkAccessManager(this); |
64 QNetworkAccessManager *manager = new QNetworkAccessManager(this); |
63 QNetworkReply *reply = manager->get(newRequest); |
65 QNetworkReply *reply = manager->get(newRequest); |
64 connect(reply, SIGNAL(finished()), this, SLOT(fileDownloaded())); |
66 connect(reply, SIGNAL(finished()), this, SLOT(fileDownloaded())); |
119 |
123 |
120 QNetworkAccessManager *manager = new QNetworkAccessManager(this); |
124 QNetworkAccessManager *manager = new QNetworkAccessManager(this); |
121 QNetworkReply *reply = manager->get(newRequest); |
125 QNetworkReply *reply = manager->get(newRequest); |
122 connect(reply, SIGNAL(finished()), this, SLOT(pageDownloaded())); |
126 connect(reply, SIGNAL(finished()), this, SLOT(pageDownloaded())); |
123 } |
127 } |
|
128 |
|
129 bool PageDataDownload::extractDataPack(QByteArray * buf) |
|
130 { |
|
131 QBuffer buffer; |
|
132 buffer.setBuffer(buf); |
|
133 |
|
134 QuaZip zip; |
|
135 zip.setIoDevice(&buffer); |
|
136 if(!zip.open(QuaZip::mdUnzip)) |
|
137 { |
|
138 qWarning("testRead(): zip.open(): %d", zip.getZipError()); |
|
139 return false; |
|
140 } |
|
141 |
|
142 QuaZipFile file(&zip); |
|
143 |
|
144 for(bool more = zip.goToFirstFile(); more; more = zip.goToNextFile()) |
|
145 { |
|
146 if(!file.open(QIODevice::ReadOnly)) |
|
147 { |
|
148 qWarning("file.open(): %d", file.getZipError()); |
|
149 return false; |
|
150 } |
|
151 |
|
152 |
|
153 QString fileName = file.getActualFileName(); |
|
154 QString filePath = QDir::tempPath() + "/" + fileName; |
|
155 if (fileName.endsWith("/")) |
|
156 { |
|
157 QFileInfo fi(filePath); |
|
158 QDir().mkpath(fi.filePath()); |
|
159 } else |
|
160 { |
|
161 qDebug() << filePath; |
|
162 QFile out(filePath); |
|
163 if(!out.open(QFile::WriteOnly)) |
|
164 { |
|
165 qWarning() << "out.open():" << out.errorString(); |
|
166 return false; |
|
167 } |
|
168 |
|
169 out.write(file.readAll()); |
|
170 |
|
171 out.close(); |
|
172 |
|
173 if(file.getZipError() != UNZ_OK) { |
|
174 qWarning("file.getFileName(): %d", file.getZipError()); |
|
175 return false; |
|
176 } |
|
177 |
|
178 if(!file.atEnd()) { |
|
179 qWarning("read all but not EOF"); |
|
180 return false; |
|
181 } |
|
182 } |
|
183 |
|
184 file.close(); |
|
185 |
|
186 if(file.getZipError()!=UNZ_OK) { |
|
187 qWarning("file.close(): %d", file.getZipError()); |
|
188 return false; |
|
189 } |
|
190 } |
|
191 |
|
192 zip.close(); |
|
193 |
|
194 return true; |
|
195 } |