Skip to content

Commit 4ecf3eb

Browse files
committed
use QgsNetworkManager in plugin installer (fixes #8137)
1 parent 444dc23 commit 4ecf3eb

File tree

2 files changed

+17
-53
lines changed

2 files changed

+17
-53
lines changed

python/pyplugin_installer/installer_data.py

+8-45
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
mRepositories = dict of dicts: {repoName : {"url" unicode,
4141
"enabled" bool,
4242
"valid" bool,
43-
"QPNAME" QPNetworkAccessManager,
4443
"Relay" Relay, # Relay object for transmitting signals from QPHttp with adding the repoName information
4544
"Request" QNetworkRequest,
4645
"xmlData" QNetworkReply,
@@ -170,43 +169,6 @@ def removeDir(path):
170169

171170

172171

173-
# --- class QPNetworkAccessManager ----------------------------------------------------------------------- #
174-
# --- It's a temporary workaround for broken proxy handling in Qt ------------------------- #
175-
class QPNetworkAccessManager(QNetworkAccessManager):
176-
def __init__(self, repoUrl):
177-
QNetworkAccessManager.__init__(self,)
178-
settings = QSettings()
179-
settings.beginGroup("proxy")
180-
if settings.value("/proxyEnabled", False, type=bool):
181-
self.proxy=QNetworkProxy()
182-
proxyType = settings.value( "/proxyType", "0", type=unicode)
183-
if repoUrl:
184-
for excludedUrl in settings.value("/proxyExcludedUrls","", type=unicode).split("|"):
185-
if repoUrl.find( excludedUrl ) > -1:
186-
proxyType = "NoProxy"
187-
if proxyType in ["1","Socks5Proxy"]: self.proxy.setType(QNetworkProxy.Socks5Proxy)
188-
elif proxyType in ["2","NoProxy"]: self.proxy.setType(QNetworkProxy.NoProxy)
189-
elif proxyType in ["3","HttpProxy"]: self.proxy.setType(QNetworkProxy.HttpProxy)
190-
elif proxyType in ["4","HttpCachingProxy"] and QT_VERSION >= 0X040400: self.proxy.setType(QNetworkProxy.HttpCachingProxy)
191-
elif proxyType in ["5","FtpCachingProxy"] and QT_VERSION >= 0X040400: self.proxy.setType(QNetworkProxy.FtpCachingProxy)
192-
else: self.proxy.setType(QNetworkProxy.DefaultProxy)
193-
self.proxy.setHostName(settings.value("/proxyHost","", type=unicode))
194-
try:
195-
# QSettings may contain non-int value...
196-
self.proxy.setPort(settings.value("/proxyPort", 0, type=int))
197-
except:
198-
pass
199-
self.proxy.setUser(settings.value("/proxyUser", "", type=unicode))
200-
self.proxy.setPassword(settings.value("/proxyPassword", "", type=unicode))
201-
self.setProxy(self.proxy)
202-
settings.endGroup()
203-
return None
204-
# --- /class QPNetworkAccessManager ---------------------------------------------------------------------- #
205-
206-
207-
208-
209-
210172
# --- class Relay ----------------------------------------------------------------------- #
211173
class Relay(QObject):
212174
""" Relay object for transmitting signals from QPHttp with adding the repoName information """
@@ -395,7 +357,6 @@ def load(self):
395357
self.mRepositories[key]["url"] = settings.value(key+"/url", "", type=unicode)
396358
self.mRepositories[key]["enabled"] = settings.value(key+"/enabled", True, type=bool)
397359
self.mRepositories[key]["valid"] = settings.value(key+"/valid", True, type=bool)
398-
self.mRepositories[key]["QPNAM"] = QPNetworkAccessManager( self.mRepositories[key]["url"] )
399360
self.mRepositories[key]["Relay"] = Relay(key)
400361
self.mRepositories[key]["xmlData"] = None
401362
self.mRepositories[key]["state"] = 0
@@ -413,10 +374,10 @@ def requestFetching(self,key):
413374

414375
self.mRepositories[key]["QRequest"] = QNetworkRequest(url)
415376
self.mRepositories[key]["QRequest"].setAttribute( QNetworkRequest.User, key)
416-
self.mRepositories[key]["xmlData"] = self.mRepositories[key]["QPNAM"].get( self.mRepositories[key]["QRequest"] )
377+
self.mRepositories[key]["xmlData"] = QgsNetworkAccessManager.instance().get( self.mRepositories[key]["QRequest"] )
417378
self.mRepositories[key]["xmlData"].setProperty( 'reposName', key)
418379
self.mRepositories[key]["xmlData"].downloadProgress.connect( self.mRepositories[key]["Relay"].dataReadProgress )
419-
self.mRepositories[key]["QPNAM"].finished.connect( self.xmlDownloaded )
380+
self.mRepositories[key]["xmlData"].finished.connect( self.xmlDownloaded )
420381

421382

422383
# ----------------------------------------- #
@@ -432,21 +393,21 @@ def fetchingInProgress(self):
432393
def killConnection(self, key):
433394
""" kill the fetching on demand """
434395
if self.mRepositories[key]["xmlData"] and self.mRepositories[key]["xmlData"].isRunning():
435-
self.mRepositories[key]["QPNAM"].finished.disconnect()
396+
self.mRepositories[key]["xmlData"].finished.disconnect()
436397
self.mRepositories[key]["xmlData"].abort()
437398

438399

439400
# ----------------------------------------- #
440-
def xmlDownloaded(self, reply):
401+
def xmlDownloaded(self):
441402
""" populate the plugins object with the fetched data """
403+
reply = self.sender()
442404
reposName = reply.property( 'reposName' )
443405
if reply.error() != QNetworkReply.NoError: # fetching failed
444406
self.mRepositories[reposName]["state"] = 3
445407
self.mRepositories[reposName]["error"] = str(reply.error())
446408
else:
447-
repoData = self.mRepositories[reposName]["xmlData"]
448409
reposXML = QDomDocument()
449-
reposXML.setContent(repoData.readAll())
410+
reposXML.setContent(reply.readAll())
450411
pluginNodes = reposXML.elementsByTagName("pyqgis_plugin")
451412
if pluginNodes.size():
452413
for i in range(pluginNodes.size()):
@@ -509,6 +470,8 @@ def xmlDownloaded(self, reply):
509470
if not self.fetchingInProgress():
510471
self.checkingDone.emit()
511472

473+
del reply
474+
512475

513476
# ----------------------------------------- #
514477
def inspectionFilter(self):

python/pyplugin_installer/qgsplugininstallerinstallingdialog.py

+9-8
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
from PyQt4.QtCore import *
2828
from PyQt4.QtGui import *
2929

30-
from qgis.core import QgsApplication
30+
from qgis.core import QgsApplication, QgsNetworkAccessManager
3131

3232
from ui_qgsplugininstallerinstallingbase import Ui_QgsPluginInstallerInstallingDialogBase
3333
from installer_data import *
@@ -55,13 +55,10 @@ def __init__(self, parent, plugin):
5555
tmpPath = QDir.cleanPath(tmpDir+"/"+fileName)
5656
self.file = QFile(tmpPath)
5757

58-
self.nam = QPNetworkAccessManager(url.host(), )
59-
#self.http = QPHttp(url.host(), port)
6058
self.request = QNetworkRequest(url)
61-
self.reply = self.nam.get( self.request )
62-
59+
self.reply = QgsNetworkAccessManager.instance().get( self.request )
6360
self.reply.downloadProgress.connect( self.readProgress )
64-
self.nam.finished.connect(self.requestFinished)
61+
self.reply.finished.connect(self.requestFinished)
6562

6663
self.stateChanged(4)
6764

@@ -83,16 +80,19 @@ def readProgress(self, done, total):
8380
self.progressBar.setValue(done)
8481

8582
# ----------------------------------------- #
86-
def requestFinished(self, reply):
83+
def requestFinished(self):
84+
reply = self.sender()
8785
self.buttonBox.setEnabled(False)
8886
if reply.error() != QNetworkReply.NoError:
8987
self.mResult = self.http.errorString()
9088
self.reject()
89+
del reply
9190
return
9291
self.file.open(QFile.WriteOnly)
9392
self.file.write( reply.readAll() )
9493
self.file.close()
9594
self.stateChanged(0)
95+
del reply
9696
pluginDir = QFileInfo(QgsApplication.qgisUserDbFilePath()).path() + "/python/plugins"
9797
tmpPath = self.file.fileName()
9898
# make sure that the parent directory exists
@@ -120,7 +120,8 @@ def requestFinished(self, reply):
120120
# ----------------------------------------- #
121121
def abort(self):
122122
if self.reply.isRunning():
123-
self.nam.finished.disconnect()
123+
self.reply.finished.disconnect()
124124
self.reply.abort()
125+
del self.reply
125126
self.mResult = self.tr("Aborted by user")
126127
self.reject()

0 commit comments

Comments
 (0)