Skip to content

Commit 84eb6f8

Browse files
committed
pyplugin_installer moved to QNetworkAccessManager from QHttp
1 parent 1bfa970 commit 84eb6f8

File tree

2 files changed

+50
-48
lines changed

2 files changed

+50
-48
lines changed

python/pyplugin_installer/installer_data.py

+29-31
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,10 @@
4040
mRepositories = dict of dicts: {repoName : {"url" unicode,
4141
"enabled" bool,
4242
"valid" bool,
43-
"QPHttp" QPHttp,
43+
"QPNAME" QPNetworkAccessManager,
4444
"Relay" Relay, # Relay object for transmitting signals from QPHttp with adding the repoName information
45-
"xmlData" QBuffer,
45+
"Request" QNetworkRequest,
46+
"xmlData" QNetworkReply,
4647
"state" int, (0 - disabled, 1-loading, 2-loaded ok, 3-error (to be retried), 4-rejected)
4748
"error" unicode}}
4849
@@ -169,17 +170,17 @@ def removeDir(path):
169170

170171

171172

172-
# --- class QPHttp ----------------------------------------------------------------------- #
173+
# --- class QPNetworkAccessManager ----------------------------------------------------------------------- #
173174
# --- It's a temporary workaround for broken proxy handling in Qt ------------------------- #
174-
class QPHttp(QHttp):
175+
class QPNetworkAccessManager(QNetworkAccessManager):
175176
def __init__(self,*args):
176-
QHttp.__init__(self,*args)
177+
QNetworkAccessManager.__init__(self,)
177178
settings = QSettings()
178179
settings.beginGroup("proxy")
179180
if settings.value("/proxyEnabled", False, type=bool):
180181
self.proxy=QNetworkProxy()
181182
proxyType = settings.value( "/proxyType", "0", type=unicode)
182-
if len(args) > 0 and args[0] in settings.value("/proxyExcludedUrls","", type=unicode):
183+
if len(args)>0 and settings.value("/proxyExcludedUrls","", type=unicode).contains(args[0]):
183184
proxyType = "NoProxy"
184185
if proxyType in ["1","Socks5Proxy"]: self.proxy.setType(QNetworkProxy.Socks5Proxy)
185186
elif proxyType in ["2","NoProxy"]: self.proxy.setType(QNetworkProxy.NoProxy)
@@ -194,7 +195,7 @@ def __init__(self,*args):
194195
self.setProxy(self.proxy)
195196
settings.endGroup()
196197
return None
197-
# --- /class QPHttp ---------------------------------------------------------------------- #
198+
# --- /class QPNetworkAccessManager ---------------------------------------------------------------------- #
198199

199200

200201

@@ -216,7 +217,7 @@ def stateChanged(self, state):
216217
# ----------------------------------------- #
217218
def dataReadProgress(self, done, total):
218219
state = 4
219-
if total:
220+
if total > 0:
220221
progress = int(float(done)/float(total)*100)
221222
else:
222223
progress = 0
@@ -379,7 +380,8 @@ def load(self):
379380
self.mRepositories[key]["url"] = settings.value(key+"/url", "", type=unicode)
380381
self.mRepositories[key]["enabled"] = settings.value(key+"/enabled", True, type=bool)
381382
self.mRepositories[key]["valid"] = settings.value(key+"/valid", True, type=bool)
382-
self.mRepositories[key]["QPHttp"] = QPHttp()
383+
self.mRepositories[key]["QPNAM"] = QPNetworkAccessManager()
384+
383385
self.mRepositories[key]["Relay"] = Relay(key)
384386
self.mRepositories[key]["xmlData"] = QBuffer()
385387
self.mRepositories[key]["state"] = 0
@@ -392,21 +394,18 @@ def requestFetching(self,key):
392394
""" start fetching the repository given by key """
393395
self.mRepositories[key]["state"] = 1
394396
url = QUrl(self.mRepositories[key]["url"])
395-
path = url.toPercentEncoding(url.path(), "!$&'()*+,;=:@/")
396-
path = unicode(path)
397397
v=str(QGis.QGIS_VERSION_INT)
398-
path += "?qgis=%d.%d" % ( int(v[0]), int(v[1:3]) )
399-
port = url.port()
400-
if port < 0:
401-
port = 80
402-
self.mRepositories[key]["QPHttp"] = QPHttp(url.host(), port)
403-
self.mRepositories[key]["QPHttp"].requestFinished.connect(self.xmlDownloaded)
404-
self.mRepositories[key]["QPHttp"].stateChanged.connect(self.mRepositories[key]["Relay"].stateChanged)
405-
self.mRepositories[key]["QPHttp"].dataReadProgress.connect(self.mRepositories[key]["Relay"].dataReadProgress)
406-
self.connect(self.mRepositories[key]["Relay"], SIGNAL("anythingChanged(unicode, int, int)"), self, SIGNAL("anythingChanged (unicode, int, int)"))
407-
i = self.mRepositories[key]["QPHttp"].get(path, self.mRepositories[key]["xmlData"])
408-
self.httpId[i] = key
409398

399+
400+
url.addQueryItem('qgis', '.'.join([str(int(s)) for s in [v[0], v[1:3], v[3:5]]]) )
401+
402+
self.mRepositories[key]["QRequest"] = QNetworkRequest(url)
403+
self.mRepositories[key]["QRequest"].setAttribute( QNetworkRequest.User, key)
404+
self.mRepositories[key]["xmlData"] = self.mRepositories[key]["QPNAM"].get( self.mRepositories[key]["QRequest"] )
405+
self.mRepositories[key]["xmlData"].setProperty( 'reposName', key)
406+
self.mRepositories[key]["xmlData"].downloadProgress.connect( self.mRepositories[key]["Relay"].dataReadProgress )
407+
self.mRepositories[key]["QPNAM"].finished.connect( self.xmlDownloaded )
408+
410409

411410
# ----------------------------------------- #
412411
def fetchingInProgress(self):
@@ -420,23 +419,22 @@ def fetchingInProgress(self):
420419
# ----------------------------------------- #
421420
def killConnection(self, key):
422421
""" kill the fetching on demand """
423-
if self.mRepositories[key]["QPHttp"].state():
424-
self.mRepositories[key]["QPHttp"].abort()
422+
if self.mRepositories[key]["xmlData"].isRunning():
423+
self.mRepositories[key]["QPNAM"].finished.disconnect()
424+
self.mRepositories[key]["xmlData"].abort()
425425

426426

427427
# ----------------------------------------- #
428-
def xmlDownloaded(self,nr,state):
428+
def xmlDownloaded(self, reply):
429429
""" populate the plugins object with the fetched data """
430-
if not self.httpId.has_key(nr):
431-
return
432-
reposName = self.httpId[nr]
433-
if state: # fetching failed
430+
reposName = reply.property( 'reposName' )
431+
if reply.error() != QNetworkReply.NoError: # fetching failed
434432
self.mRepositories[reposName]["state"] = 3
435-
self.mRepositories[reposName]["error"] = self.mRepositories[reposName]["QPHttp"].errorString()
433+
self.mRepositories[reposName]["error"] = str(reply.error())
436434
else:
437435
repoData = self.mRepositories[reposName]["xmlData"]
438436
reposXML = QDomDocument()
439-
reposXML.setContent(repoData.data())
437+
reposXML.setContent(repoData.readAll())
440438
pluginNodes = reposXML.elementsByTagName("pyqgis_plugin")
441439
if pluginNodes.size():
442440
for i in range(pluginNodes.size()):

python/pyplugin_installer/qgsplugininstallerinstallingdialog.py

+21-17
Original file line numberDiff line numberDiff line change
@@ -49,20 +49,21 @@ def __init__(self, parent, plugin):
4949
self.buttonBox.clicked.connect(self.abort)
5050

5151
url = QUrl(plugin["download_url"])
52-
path = unicode(url.toPercentEncoding(url.path(), "!$&'()*+,;=:/@"))
52+
5353
fileName = plugin["filename"]
5454
tmpDir = QDir.tempPath()
5555
tmpPath = QDir.cleanPath(tmpDir+"/"+fileName)
5656
self.file = QFile(tmpPath)
57-
port = url.port()
58-
if port < 0:
59-
port = 80
60-
self.http = QPHttp(url.host(), port)
61-
self.http.stateChanged.connect(self.stateChanged)
62-
self.http.dataReadProgress.connect(self.readProgress)
63-
self.http.requestFinished.connect(self.requestFinished)
64-
self.httpGetId = self.http.get(path, self.file)
57+
58+
self.nam = QPNetworkAccessManager(url.host(), )
59+
#self.http = QPHttp(url.host(), port)
60+
self.request = QNetworkRequest(url)
61+
self.reply = self.nam.get( self.request )
6562

63+
self.reply.downloadProgress.connect( self.readProgress )
64+
self.nam.finished.connect(self.requestFinished)
65+
66+
self.stateChanged(4)
6667

6768
# ----------------------------------------- #
6869
def result(self):
@@ -77,20 +78,21 @@ def stateChanged(self, state):
7778

7879
# ----------------------------------------- #
7980
def readProgress(self, done, total):
80-
self.progressBar.setMaximum(total)
81-
self.progressBar.setValue(done)
82-
81+
if total > 0:
82+
self.progressBar.setMaximum(total)
83+
self.progressBar.setValue(done)
8384

8485
# ----------------------------------------- #
85-
def requestFinished(self, requestId, state):
86-
if requestId != self.httpGetId:
87-
return
86+
def requestFinished(self, reply):
8887
self.buttonBox.setEnabled(False)
89-
if state:
88+
if reply.error() != QNetworkReply.NoError:
9089
self.mResult = self.http.errorString()
9190
self.reject()
9291
return
92+
self.file.open(QFile.WriteOnly)
93+
self.file.write( reply.readAll() )
9394
self.file.close()
95+
self.stateChanged(0)
9496
pluginDir = QFileInfo(QgsApplication.qgisUserDbFilePath()).path() + "/python/plugins"
9597
tmpPath = self.file.fileName()
9698
# make sure that the parent directory exists
@@ -117,6 +119,8 @@ def requestFinished(self, requestId, state):
117119

118120
# ----------------------------------------- #
119121
def abort(self):
120-
self.http.abort()
122+
if self.reply.isRunning():
123+
self.nam.finished.disconnect()
124+
self.reply.abort()
121125
self.mResult = self.tr("Aborted by user")
122126
self.reject()

0 commit comments

Comments
 (0)