annotate demos/browser/downloadmanager.d @ 46:fd6eb3a1759d

license
author eldar
date Sun, 17 May 2009 21:50:06 +0000
parents 71b382c10ef6
children 7bfd46c330dc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
1 /****************************************************************************
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
2 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
4 ** Contact: Qt Software Information (qt-info@nokia.com)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
5 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
6 ** This file is part of the demonstration applications of the Qt Toolkit.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
7 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
8 ** $QT_BEGIN_LICENSE:LGPL$
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
9 ** Commercial Usage
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
10 ** Licensees holding valid Qt Commercial licenses may use this file in
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
11 ** accordance with the Qt Commercial License Agreement provided with the
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
12 ** Software or, alternatively, in accordance with the terms contained in
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
13 ** a written agreement between you and Nokia.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
14 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
15 ** GNU Lesser General Public License Usage
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
16 ** Alternatively, this file may be used under the terms of the GNU Lesser
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
17 ** General Public License version 2.1 as published by the Free Software
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
18 ** Foundation and appearing in the file LICENSE.LGPL included in the
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
19 ** packaging of this file. Please review the following information to
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
20 ** ensure the GNU Lesser General Public License version 2.1 requirements
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
21 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
22 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
23 ** In addition, as a special exception, Nokia gives you certain
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
24 ** additional rights. These rights are described in the Nokia Qt LGPL
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
25 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
26 ** package.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
27 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
28 ** GNU General Public License Usage
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
29 ** Alternatively, this file may be used under the terms of the GNU
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
30 ** General Public License version 3.0 as published by the Free Software
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
31 ** Foundation and appearing in the file LICENSE.GPL included in the
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
32 ** packaging of this file. Please review the following information to
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
33 ** ensure the GNU General Public License version 3.0 requirements will be
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
34 ** met: http://www.gnu.org/copyleft/gpl.html.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
35 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
36 ** If you are unsure which license is appropriate for your use, please
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
37 ** contact the sales department at qt-sales@nokia.com.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
38 ** $QT_END_LICENSE$
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
39 **
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
40 ****************************************************************************/
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
41 module downloadmanager;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
42
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
43 import ui_downloads;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
44 import ui_downloaditem;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
46 import QtNetwork.QNetworkReply;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
47
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
48 import QtCore.QFile;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
49 import QtCore.QTime;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
50
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
51
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
52 import autosaver;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
53 import browserapplication;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
54 import networkaccessmanager;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
55
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
56 import math;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
57
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
58 import QtCore.QMetaEnum;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
59 import QtCore.QSettings;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
60
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
61 import QtGui.QDesktopServices;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
62 import QtGui.QFileDialog;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
63 import QtGui.QHeaderView;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
64 import QtGui.QFileIconProvider;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
65
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
66 import QtCore.QDebug;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
67
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
68 import QtWebKit.QWebSettings;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
69
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
70
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
71
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
72 class DownloadItem : public QWidget, public Ui_DownloadItem
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
73 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
74
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
75 mixin Signal!("statusChanged");
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
76
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
77 public:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
78
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
79 /*!
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
80 DownloadItem is a widget that is displayed in the download manager list.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
81 It moves the data from the QNetworkReply into the QFile as well
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
82 as update the information/progressbar and report errors.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
83 */
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
84 this(QNetworkReply reply = null, bool requestFileName = false, QWidget parent = null)
fd6eb3a1759d license
eldar
parents: 45
diff changeset
85 {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
86 super(parent);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
87 m_reply = reply;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
88 m_requestFileName = requestFileName;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
89 m_bytesReceived = 0;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
90
fd6eb3a1759d license
eldar
parents: 45
diff changeset
91 setupUi(this);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
92 QPalette p = downloadInfoLabel.palette();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
93 p.setColor(QPalette.Text, Qt.darkGray);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
94 downloadInfoLabel.setPalette(p);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
95 progressBar.setMaximum(0);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
96 tryAgainButton.hide();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
97 stopButton.clicked.connect(&this.stop);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
98 openButton.clicked.connect(&this.open);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
99 tryAgainButton.clicked.connect(&this.tryAgain);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
100
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
101 init();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
102 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
103
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
104
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
105 bool downloading()
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
106 {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
107 return (progressBar.isVisible());
fd6eb3a1759d license
eldar
parents: 45
diff changeset
108 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
109
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
110
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
111 bool downloadedSuccessfully()
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
112 {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
113 return (stopButton.isHidden() && tryAgainButton.isHidden());
fd6eb3a1759d license
eldar
parents: 45
diff changeset
114 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
115
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
116
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
117 QUrl m_url;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
118
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
119 QFile m_output;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
120 QNetworkReply *m_reply;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
121
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
122 private: // slots:
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
123 void stop()
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
124 {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
125 setUpdatesEnabled(false);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
126 stopButton.setEnabled(false);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
127 stopButton.hide();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
128 tryAgainButton.setEnabled(true);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
129 tryAgainButton.show();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
130 setUpdatesEnabled(true);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
131 m_reply.abort();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
132 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
133
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
134 void tryAgain()
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
135 {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
136 if (!tryAgainButton.isEnabled())
fd6eb3a1759d license
eldar
parents: 45
diff changeset
137 return;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
138
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
139 tryAgainButton.setEnabled(false);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
140 tryAgainButton.setVisible(false);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
141 stopButton.setEnabled(true);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
142 stopButton.setVisible(true);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
143 progressBar.setVisible(true);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
144
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
145 QNetworkReply *r = BrowserApplication.networkAccessManager().get(QNetworkRequest(m_url));
fd6eb3a1759d license
eldar
parents: 45
diff changeset
146 if (m_reply)
fd6eb3a1759d license
eldar
parents: 45
diff changeset
147 m_reply.deleteLater();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
148 if (m_output.exists())
fd6eb3a1759d license
eldar
parents: 45
diff changeset
149 m_output.remove();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
150 m_reply = r;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
151 init();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
152 emit statusChanged();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
153 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
154
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
155 void open()
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
156 {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
157 QFileInfo info(m_output);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
158 QUrl url = QUrl.fromLocalFile(info.absolutePath());
fd6eb3a1759d license
eldar
parents: 45
diff changeset
159 QDesktopServices.openUrl(url);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
160 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
161
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
162 void downloadReadyRead()
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
163 {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
164 if (m_requestFileName && m_output.fileName().isEmpty())
fd6eb3a1759d license
eldar
parents: 45
diff changeset
165 return;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
166 if (!m_output.isOpen()) {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
167 // in case someone else has already put a file there
fd6eb3a1759d license
eldar
parents: 45
diff changeset
168 if (!m_requestFileName)
fd6eb3a1759d license
eldar
parents: 45
diff changeset
169 getFileName();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
170 if (!m_output.open(QIODevice.WriteOnly)) {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
171 downloadInfoLabel.setText(tr("Error opening save file: %1")
fd6eb3a1759d license
eldar
parents: 45
diff changeset
172 .arg(m_output.errorString()));
fd6eb3a1759d license
eldar
parents: 45
diff changeset
173 stopButton.click();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
174 emit statusChanged();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
175 return;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
176 }
fd6eb3a1759d license
eldar
parents: 45
diff changeset
177 emit statusChanged();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
178 }
fd6eb3a1759d license
eldar
parents: 45
diff changeset
179 if (-1 == m_output.write(m_reply.readAll())) {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
180 downloadInfoLabel.setText(tr("Error saving: %1")
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
181 .arg(m_output.errorString()));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
182 stopButton.click();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
183 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
184 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
185
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
186 void error(QNetworkReply.NetworkError code)
fd6eb3a1759d license
eldar
parents: 45
diff changeset
187 {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
188 qDebug() << "DownloadItem::error" << m_reply.errorString() << m_url;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
189 downloadInfoLabel.setText(tr("Network Error: %1").arg(m_reply.errorString()));
fd6eb3a1759d license
eldar
parents: 45
diff changeset
190 tryAgainButton.setEnabled(true);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
191 tryAgainButton.setVisible(true);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
192 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
193
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
194
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
195 void downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
196 {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
197 m_bytesReceived = bytesReceived;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
198 if (bytesTotal == -1) {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
199 progressBar.setValue(0);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
200 progressBar.setMaximum(0);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
201 } else {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
202 progressBar.setValue(bytesReceived);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
203 progressBar.setMaximum(bytesTotal);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
204 }
fd6eb3a1759d license
eldar
parents: 45
diff changeset
205 updateInfoLabel();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
206 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
207
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
208
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
209 void metaDataChanged()
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
210 {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
211 qDebug() << "DownloadItem::metaDataChanged: not handled.";
fd6eb3a1759d license
eldar
parents: 45
diff changeset
212 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
213
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
214 void finished()
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
215 {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
216 progressBar.hide();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
217 stopButton.setEnabled(false);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
218 stopButton.hide();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
219 m_output.close();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
220 updateInfoLabel();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
221 emit statusChanged();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
222 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
223
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
224 private:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
225 void getFileName()
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
226 {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
227 QSettings settings;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
228 settings.beginGroup(QLatin1String("downloadmanager"));
fd6eb3a1759d license
eldar
parents: 45
diff changeset
229 QString defaultLocation = QDesktopServices.storageLocation(QDesktopServices.DesktopLocation);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
230 QString downloadDirectory = settings.value(QLatin1String("downloadDirectory"), defaultLocation).toString();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
231 if (!downloadDirectory.isEmpty())
fd6eb3a1759d license
eldar
parents: 45
diff changeset
232 downloadDirectory += QLatin1Char('/');
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
233
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
234 QString defaultFileName = saveFileName(downloadDirectory);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
235 QString fileName = defaultFileName;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
236 if (m_requestFileName) {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
237 fileName = QFileDialog.getSaveFileName(this, tr("Save File"), defaultFileName);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
238 if (fileName.isEmpty()) {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
239 m_reply.close();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
240 fileNameLabel.setText(tr("Download canceled: %1").arg(QFileInfo(defaultFileName).fileName()));
fd6eb3a1759d license
eldar
parents: 45
diff changeset
241 return;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
242 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
243 }
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
244 m_output.setFileName(fileName);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
245 fileNameLabel.setText(QFileInfo(m_output.fileName()).fileName());
fd6eb3a1759d license
eldar
parents: 45
diff changeset
246 if (m_requestFileName)
fd6eb3a1759d license
eldar
parents: 45
diff changeset
247 downloadReadyRead();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
248 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
249
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
250 void init()
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
251 {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
252 if (!m_reply)
fd6eb3a1759d license
eldar
parents: 45
diff changeset
253 return;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
254
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
255 // attach to the m_reply
fd6eb3a1759d license
eldar
parents: 45
diff changeset
256 m_url = m_reply.url();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
257 m_reply.setParent(this);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
258 connect(m_reply, SIGNAL(readyRead()), this, SLOT(downloadReadyRead()));
fd6eb3a1759d license
eldar
parents: 45
diff changeset
259 connect(m_reply, SIGNAL(error(QNetworkReply.NetworkError)),
fd6eb3a1759d license
eldar
parents: 45
diff changeset
260 this, SLOT(error(QNetworkReply.NetworkError)));
fd6eb3a1759d license
eldar
parents: 45
diff changeset
261 connect(m_reply, SIGNAL(downloadProgress(qint64, qint64)),
fd6eb3a1759d license
eldar
parents: 45
diff changeset
262 this, SLOT(downloadProgress(qint64, qint64)));
fd6eb3a1759d license
eldar
parents: 45
diff changeset
263 connect(m_reply, SIGNAL(metaDataChanged()),
fd6eb3a1759d license
eldar
parents: 45
diff changeset
264 this, SLOT(metaDataChanged()));
fd6eb3a1759d license
eldar
parents: 45
diff changeset
265 connect(m_reply, SIGNAL(finished()),
fd6eb3a1759d license
eldar
parents: 45
diff changeset
266 this, SLOT(finished()));
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
267
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
268 // reset info
fd6eb3a1759d license
eldar
parents: 45
diff changeset
269 downloadInfoLabel.clear();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
270 progressBar.setValue(0);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
271 getFileName();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
272
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
273 // start timer for the download estimation
fd6eb3a1759d license
eldar
parents: 45
diff changeset
274 m_downloadTime.start();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
275
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
276 if (m_reply.error() != QNetworkReply.NoError) {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
277 error(m_reply.error());
fd6eb3a1759d license
eldar
parents: 45
diff changeset
278 finished();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
279 }
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
280 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
281
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
282 void updateInfoLabel()
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
283 {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
284 if (m_reply.error() == QNetworkReply.NoError)
fd6eb3a1759d license
eldar
parents: 45
diff changeset
285 return;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
286
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
287 qint64 bytesTotal = progressBar.maximum();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
288 bool running = !downloadedSuccessfully();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
289
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
290 // update info label
fd6eb3a1759d license
eldar
parents: 45
diff changeset
291 double speed = m_bytesReceived * 1000.0 / m_downloadTime.elapsed();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
292 double timeRemaining = ((double)(bytesTotal - m_bytesReceived)) / speed;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
293 QString timeRemainingString = tr("seconds");
fd6eb3a1759d license
eldar
parents: 45
diff changeset
294 if (timeRemaining > 60) {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
295 timeRemaining = timeRemaining / 60;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
296 timeRemainingString = tr("minutes");
fd6eb3a1759d license
eldar
parents: 45
diff changeset
297 }
fd6eb3a1759d license
eldar
parents: 45
diff changeset
298 timeRemaining = floor(timeRemaining);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
299
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
300 // When downloading the eta should never be 0
fd6eb3a1759d license
eldar
parents: 45
diff changeset
301 if (timeRemaining == 0)
fd6eb3a1759d license
eldar
parents: 45
diff changeset
302 timeRemaining = 1;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
303
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
304 QString info;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
305 if (running) {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
306 QString remaining;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
307 if (bytesTotal != 0)
fd6eb3a1759d license
eldar
parents: 45
diff changeset
308 remaining = tr("- %4 %5 remaining")
fd6eb3a1759d license
eldar
parents: 45
diff changeset
309 .arg(timeRemaining)
fd6eb3a1759d license
eldar
parents: 45
diff changeset
310 .arg(timeRemainingString);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
311 info = QString(tr("%1 of %2 (%3/sec) %4"))
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
312 .arg(dataString(m_bytesReceived))
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
313 .arg(bytesTotal == 0 ? tr("?") : dataString(bytesTotal))
fd6eb3a1759d license
eldar
parents: 45
diff changeset
314 .arg(dataString((int)speed))
fd6eb3a1759d license
eldar
parents: 45
diff changeset
315 .arg(remaining);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
316 } else {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
317 if (m_bytesReceived == bytesTotal)
fd6eb3a1759d license
eldar
parents: 45
diff changeset
318 info = dataString(m_output.size());
fd6eb3a1759d license
eldar
parents: 45
diff changeset
319 else
fd6eb3a1759d license
eldar
parents: 45
diff changeset
320 info = tr("%1 of %2 - Stopped")
fd6eb3a1759d license
eldar
parents: 45
diff changeset
321 .arg(dataString(m_bytesReceived))
fd6eb3a1759d license
eldar
parents: 45
diff changeset
322 .arg(dataString(bytesTotal));
fd6eb3a1759d license
eldar
parents: 45
diff changeset
323 }
fd6eb3a1759d license
eldar
parents: 45
diff changeset
324 downloadInfoLabel.setText(info);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
325 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
326
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
327 QString dataString(int size)
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
328 {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
329 QString unit;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
330 if (size < 1024) {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
331 unit = tr("bytes");
fd6eb3a1759d license
eldar
parents: 45
diff changeset
332 } else if (size < 1024*1024) {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
333 size /= 1024;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
334 unit = tr("kB");
fd6eb3a1759d license
eldar
parents: 45
diff changeset
335 } else {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
336 size /= 1024*1024;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
337 unit = tr("MB");
fd6eb3a1759d license
eldar
parents: 45
diff changeset
338 }
fd6eb3a1759d license
eldar
parents: 45
diff changeset
339 return QString(QLatin1String("%1 %2")).arg(size).arg(unit);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
340 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
341
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
342 QString saveFileName(const QString &directory);
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
343 {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
344 // Move this function into QNetworkReply to also get file name sent from the server
fd6eb3a1759d license
eldar
parents: 45
diff changeset
345 QString path = m_url.path();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
346 QFileInfo info(path);
fd6eb3a1759d license
eldar
parents: 45
diff changeset
347 QString baseName = info.completeBaseName();
fd6eb3a1759d license
eldar
parents: 45
diff changeset
348 QString endName = info.suffix();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
349
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
350 if (baseName.isEmpty()) {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
351 baseName = QLatin1String("unnamed_download");
fd6eb3a1759d license
eldar
parents: 45
diff changeset
352 qDebug() << "DownloadManager:: downloading unknown file:" << m_url;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
353 }
fd6eb3a1759d license
eldar
parents: 45
diff changeset
354 QString name = directory + baseName + QLatin1Char('.') + endName;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
355 if (QFile.exists(name)) {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
356 // already exists, don't overwrite
fd6eb3a1759d license
eldar
parents: 45
diff changeset
357 int i = 1;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
358 do {
fd6eb3a1759d license
eldar
parents: 45
diff changeset
359 name = directory + baseName + QLatin1Char('-') + QString.number(i++) + QLatin1Char('.') + endName;
fd6eb3a1759d license
eldar
parents: 45
diff changeset
360 } while (QFile.exists(name));
fd6eb3a1759d license
eldar
parents: 45
diff changeset
361 }
fd6eb3a1759d license
eldar
parents: 45
diff changeset
362 return name;
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
363 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
364
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
365 bool m_requestFileName;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
366 qint64 m_bytesReceived;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
367 QTime m_downloadTime;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
368 };
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
369
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
370 class AutoSaver;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
371 class DownloadModel;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
372 QT_BEGIN_NAMESPACE
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
373 class QFileIconProvider;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
374 QT_END_NAMESPACE
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
375
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
376 class DownloadManager : public QDialog, public Ui_DownloadDialog
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
377 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
378 Q_OBJECT
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
379 Q_PROPERTY(RemovePolicy removePolicy READ removePolicy WRITE setRemovePolicy)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
380 Q_ENUMS(RemovePolicy)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
381
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
382 public:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
383 enum RemovePolicy {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
384 Never,
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
385 Exit,
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
386 SuccessFullDownload
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
387 };
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
388
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
389 /*!
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
390 DownloadManager is a Dialog that contains a list of DownloadItems
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
391
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
392 It is a basic download manager. It only downloads the file, doesn't do BitTorrent,
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
393 extract zipped files or anything fancy.
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
394 */
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
395 this(QWidget *parent = null)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
396 : QDialog(parent)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
397 , m_autoSaver(new AutoSaver(this))
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
398 , m_manager(BrowserApplication.networkAccessManager())
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
399 , m_iconProvider(0)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
400 , m_removePolicy(Never)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
401 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
402 setupUi(this);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
403 downloadsView.setShowGrid(false);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
404 downloadsView.verticalHeader().hide();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
405 downloadsView.horizontalHeader().hide();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
406 downloadsView.setAlternatingRowColors(true);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
407 downloadsView.horizontalHeader().setStretchLastSection(true);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
408 m_model = new DownloadModel(this);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
409 downloadsView.setModel(m_model);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
410 connect(cleanupButton, SIGNAL(clicked()), this, SLOT(cleanup()));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
411 load();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
412 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
413
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
414 ~this()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
415 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
416 m_autoSaver.changeOccurred();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
417 m_autoSaver.saveIfNeccessary();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
418 if (m_iconProvider)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
419 delete m_iconProvider;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
420 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
421
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
422 int activeDownloads()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
423 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
424 int count = 0;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
425 for (int i = 0; i < m_downloads.count(); ++i) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
426 if (m_downloads.at(i).stopButton.isEnabled())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
427 ++count;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
428 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
429 return count;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
430 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
431
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
432 RemovePolicy removePolicy()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
433 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
434 return m_removePolicy;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
435 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
436
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
437 void setRemovePolicy(RemovePolicy policy)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
438 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
439 if (policy == m_removePolicy)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
440 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
441 m_removePolicy = policy;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
442 m_autoSaver.changeOccurred();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
443 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
444
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
445
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
446 public slots:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
447 void download(const QNetworkRequest &request, bool requestFileName = false);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
448 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
449 if (request.url().isEmpty())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
450 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
451 handleUnsupportedContent(m_manager.get(request), requestFileName);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
452 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
453
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
454
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
455 inline void download(const QUrl &url, bool requestFileName = false)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
456 { download(QNetworkRequest(url), requestFileName); }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
457 void handleUnsupportedContent(QNetworkReply *reply, bool requestFileName = false);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
458 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
459 if (!reply || reply.url().isEmpty())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
460 return;
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
461 QVariant header = reply.header(QNetworkRequest.ContentLengthHeader);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
462 bool ok;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
463 int size = header.toInt(&ok);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
464 if (ok && size == 0)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
465 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
466
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
467 qDebug() << "DownloadManager::handleUnsupportedContent" << reply.url() << "requestFileName" << requestFileName;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
468 DownloadItem *item = new DownloadItem(reply, requestFileName, this);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
469 addItem(item);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
470 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
471
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
472 void cleanup()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
473 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
474 if (m_downloads.isEmpty())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
475 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
476 m_model.removeRows(0, m_downloads.count());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
477 updateItemCount();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
478 if (m_downloads.isEmpty() && m_iconProvider) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
479 delete m_iconProvider;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
480 m_iconProvider = 0;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
481 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
482 m_autoSaver.changeOccurred();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
483 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
484
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
485 private slots:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
486 void save()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
487 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
488 QSettings settings;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
489 settings.beginGroup(QLatin1String("downloadmanager"));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
490 QMetaEnum removePolicyEnum = staticMetaObject.enumerator(staticMetaObject.indexOfEnumerator("RemovePolicy"));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
491 settings.setValue(QLatin1String("removeDownloadsPolicy"), QLatin1String(removePolicyEnum.valueToKey(m_removePolicy)));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
492 settings.setValue(QLatin1String("size"), size());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
493 if (m_removePolicy == Exit)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
494 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
495
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
496 for (int i = 0; i < m_downloads.count(); ++i) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
497 QString key = QString(QLatin1String("download_%1_")).arg(i);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
498 settings.setValue(key + QLatin1String("url"), m_downloads[i].m_url);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
499 settings.setValue(key + QLatin1String("location"), QFileInfo(m_downloads[i].m_output).filePath());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
500 settings.setValue(key + QLatin1String("done"), m_downloads[i].downloadedSuccessfully());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
501 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
502 int i = m_downloads.count();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
503 QString key = QString(QLatin1String("download_%1_")).arg(i);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
504 while (settings.contains(key + QLatin1String("url"))) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
505 settings.remove(key + QLatin1String("url"));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
506 settings.remove(key + QLatin1String("location"));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
507 settings.remove(key + QLatin1String("done"));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
508 key = QString(QLatin1String("download_%1_")).arg(++i);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
509 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
510 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
511
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
512 void updateRow()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
513 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
514 DownloadItem *item = qobject_cast<DownloadItem*>(sender());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
515 int row = m_downloads.indexOf(item);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
516 if (-1 == row)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
517 return;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
518 if (!m_iconProvider)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
519 m_iconProvider = new QFileIconProvider();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
520 QIcon icon = m_iconProvider.icon(item.m_output.fileName());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
521 if (icon.isNull())
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
522 icon = style().standardIcon(QStyle.SP_FileIcon);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
523 item.fileIcon.setPixmap(icon.pixmap(48, 48));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
524 downloadsView.setRowHeight(row, item.minimumSizeHint().height());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
525
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
526 bool remove = false;
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
527 QWebSettings *globalSettings = QWebSettings.globalSettings();
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
528 if (!item.downloading()
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
529 && globalSettings.testAttribute(QWebSettings.PrivateBrowsingEnabled))
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
530 remove = true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
531
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
532 if (item.downloadedSuccessfully()
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
533 && removePolicy() == DownloadManager.SuccessFullDownload) {
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
534 remove = true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
535 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
536 if (remove)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
537 m_model.removeRow(row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
538
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
539 cleanupButton.setEnabled(m_downloads.count() - activeDownloads() > 0);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
540 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
541
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
542 private:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
543 void addItem(DownloadItem *item)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
544 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
545 connect(item, SIGNAL(statusChanged()), this, SLOT(updateRow()));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
546 int row = m_downloads.count();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
547 m_model.beginInsertRows(QModelIndex(), row, row);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
548 m_downloads.append(item);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
549 m_model.endInsertRows();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
550 updateItemCount();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
551 if (row == 0)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
552 show();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
553 downloadsView.setIndexWidget(m_model.index(row, 0), item);
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
554 QIcon icon = style().standardIcon(QStyle.SP_FileIcon);
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
555 item.fileIcon.setPixmap(icon.pixmap(48, 48));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
556 downloadsView.setRowHeight(row, item.sizeHint().height());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
557 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
558
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
559
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
560 void updateItemCount()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
561 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
562 int count = m_downloads.count();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
563 itemCount.setText(count == 1 ? tr("1 Download") : tr("%1 Downloads").arg(count));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
564 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
565
46
fd6eb3a1759d license
eldar
parents: 45
diff changeset
566 DownloadModel.DownloadModel(DownloadManager *downloadManager, QObject *parent)
45
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
567 : QAbstractListModel(parent)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
568 , m_downloadManager(downloadManager)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
569 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
570 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
571
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
572 void load()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
573 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
574 QSettings settings;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
575 settings.beginGroup(QLatin1String("downloadmanager"));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
576 QSize size = settings.value(QLatin1String("size")).toSize();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
577 if (size.isValid())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
578 resize(size);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
579 QByteArray value = settings.value(QLatin1String("removeDownloadsPolicy"), QLatin1String("Never")).toByteArray();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
580 QMetaEnum removePolicyEnum = staticMetaObject.enumerator(staticMetaObject.indexOfEnumerator("RemovePolicy"));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
581 m_removePolicy = removePolicyEnum.keyToValue(value) == -1 ?
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
582 Never :
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
583 static_cast<RemovePolicy>(removePolicyEnum.keyToValue(value));
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
584
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
585 int i = 0;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
586 QString key = QString(QLatin1String("download_%1_")).arg(i);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
587 while (settings.contains(key + QLatin1String("url"))) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
588 QUrl url = settings.value(key + QLatin1String("url")).toUrl();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
589 QString fileName = settings.value(key + QLatin1String("location")).toString();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
590 bool done = settings.value(key + QLatin1String("done"), true).toBool();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
591 if (!url.isEmpty() && !fileName.isEmpty()) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
592 DownloadItem *item = new DownloadItem(0, this);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
593 item.m_output.setFileName(fileName);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
594 item.fileNameLabel.setText(QFileInfo(item.m_output.fileName()).fileName());
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
595 item.m_url = url;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
596 item.stopButton.setVisible(false);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
597 item.stopButton.setEnabled(false);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
598 item.tryAgainButton.setVisible(!done);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
599 item.tryAgainButton.setEnabled(!done);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
600 item.progressBar.setVisible(!done);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
601 addItem(item);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
602 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
603 key = QString(QLatin1String("download_%1_")).arg(++i);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
604 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
605 cleanupButton.setEnabled(m_downloads.count() - activeDownloads() > 0);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
606 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
607
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
608 AutoSaver *m_autoSaver;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
609 DownloadModel *m_model;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
610 QNetworkAccessManager *m_manager;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
611 QFileIconProvider *m_iconProvider;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
612 QList<DownloadItem*> m_downloads;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
613 RemovePolicy m_removePolicy;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
614 friend class DownloadModel;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
615 };
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
616
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
617 class DownloadModel : public QAbstractListModel
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
618 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
619 friend class DownloadManager;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
620 Q_OBJECT
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
621
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
622 public:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
623 DownloadModel(DownloadManager *downloadManager, QObject *parent = 0);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
624 QVariant data(const QModelIndex &index, int role = Qt.DisplayRole)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
625 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
626 if (index.row() < 0 || index.row() >= rowCount(index.parent()))
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
627 return QVariant();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
628 if (role == Qt.ToolTipRole)
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
629 if (!m_downloadManager.m_downloads.at(index.row()).downloadedSuccessfully())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
630 return m_downloadManager.m_downloads.at(index.row()).downloadInfoLabel.text();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
631 return QVariant();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
632 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
633
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
634 int rowCount(const QModelIndex &parent = QModelIndex())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
635 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
636 return (parent.isValid()) ? 0 : m_downloadManager.m_downloads.count();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
637 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
638
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
639
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
640 bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
641 {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
642 if (parent.isValid())
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
643 return false;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
644
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
645 int lastRow = row + count - 1;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
646 for (int i = lastRow; i >= row; --i) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
647 if (m_downloadManager.m_downloads.at(i).downloadedSuccessfully()
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
648 || m_downloadManager.m_downloads.at(i).tryAgainButton.isEnabled()) {
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
649 beginRemoveRows(parent, i, i);
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
650 m_downloadManager.m_downloads.takeAt(i).deleteLater();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
651 endRemoveRows();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
652 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
653 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
654 m_downloadManager.m_autoSaver.changeOccurred();
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
655 return true;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
656 }
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
657
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
658 private:
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
659 DownloadManager *m_downloadManager;
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
660
71b382c10ef6 add coarse and incomplete QT browser port
mandel
parents:
diff changeset
661 }