UI/UserInterface.py

changeset 270
41505c92ac31
parent 266
2987579ab76e
child 286
652f5159f1c3
child 341
a727e6ca7698
equal deleted inserted replaced
269:56e0107f2b01 270:41505c92ac31
13 import logging 13 import logging
14 14
15 from PyQt4.QtCore import * 15 from PyQt4.QtCore import *
16 from PyQt4.QtGui import * 16 from PyQt4.QtGui import *
17 from PyQt4.Qsci import QSCINTILLA_VERSION_STR 17 from PyQt4.Qsci import QSCINTILLA_VERSION_STR
18 from PyQt4.QtNetwork import QHttp, QNetworkProxy 18 from PyQt4.QtNetwork import QNetworkProxyFactory, QNetworkAccessManager, \
19 QNetworkRequest, QNetworkReply
19 20
20 from E5Gui.E5Application import e5App 21 from E5Gui.E5Application import e5App
21 22
22 from Debugger.DebugUI import DebugUI 23 from Debugger.DebugUI import DebugUI
23 from Debugger.DebugServer import DebugServer 24 from Debugger.DebugServer import DebugServer
94 from E5XML.XMLEntityResolver import XMLEntityResolver 95 from E5XML.XMLEntityResolver import XMLEntityResolver
95 from E5XML.TasksHandler import TasksHandler 96 from E5XML.TasksHandler import TasksHandler
96 from E5XML.TasksWriter import TasksWriter 97 from E5XML.TasksWriter import TasksWriter
97 from E5XML.SessionWriter import SessionWriter 98 from E5XML.SessionWriter import SessionWriter
98 from E5XML.SessionHandler import SessionHandler 99 from E5XML.SessionHandler import SessionHandler
100
101 from E5Network.E5NetworkProxyFactory import E5NetworkProxyFactory
99 102
100 from IconEditor.IconEditorWindow import IconEditorWindow 103 from IconEditor.IconEditorWindow import IconEditorWindow
101 104
102 from eric5config import getConfig 105 from eric5config import getConfig
103 106
205 s = QSize(800, 600) 208 s = QSize(800, 600)
206 self.resize(s) 209 self.resize(s)
207 else: 210 else:
208 self.restoreGeometry(g) 211 self.restoreGeometry(g)
209 self.__startup = True 212 self.__startup = True
213
214 self.__proxyFactory = E5NetworkProxyFactory()
215 QNetworkProxyFactory.setApplicationProxyFactory(self.__proxyFactory)
210 216
211 self.capProject = "" 217 self.capProject = ""
212 self.capEditor = "" 218 self.capEditor = ""
213 self.captionShowsFilename = Preferences.getUI("CaptionShowsFilename") 219 self.captionShowsFilename = Preferences.getUI("CaptionShowsFilename")
214 220
608 self.templateViewer.readTemplates() 614 self.templateViewer.readTemplates()
609 615
610 # now start the debug client 616 # now start the debug client
611 debugServer.startClient(False) 617 debugServer.startClient(False)
612 618
613 # attribute for the http client object 619 # attributes for the network objects
614 self.http = None 620 self.__networkManager = QNetworkAccessManager(self)
621 self.connect(self.__networkManager,
622 SIGNAL('proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)'),
623 self.__proxyAuthenticationRequired)
624 self.connect(self.__networkManager,
625 SIGNAL('sslErrors(QNetworkReply *, const QList<QSslError> &)'),
626 self.__sslErrors)
627 self.__replies = []
615 628
616 # attribute for the help window 629 # attribute for the help window
617 self.helpWindow = None 630 self.helpWindow = None
618 631
619 # list of web addresses serving the versions file 632 # list of web addresses serving the versions file
5335 return 5348 return
5336 5349
5337 self.__inVersionCheck = True 5350 self.__inVersionCheck = True
5338 self.manualUpdatesCheck = manual 5351 self.manualUpdatesCheck = manual
5339 self.showAvailableVersions = showVersions 5352 self.showAvailableVersions = showVersions
5340 if self.http is None:
5341 self.http = QHttp()
5342 self.connect(self.http, SIGNAL("done(bool)"), self.__versionsDownloadDone)
5343 self.connect(self.http,
5344 SIGNAL('proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *)'),
5345 self.__proxyAuthenticationRequired)
5346 self.connect(self.http, SIGNAL("sslErrors(const QList<QSslError>&)"),
5347 self.__sslErrors)
5348
5349 if Preferences.getUI("UseProxy"):
5350 host = Preferences.getUI("ProxyHost")
5351 if not host:
5352 QMessageBox.critical(None,
5353 self.trUtf8("Error during updates check"),
5354 self.trUtf8("""Proxy usage was activated"""
5355 """ but no proxy host configured."""))
5356 return
5357 else:
5358 pProxyType = Preferences.getUI("ProxyType")
5359 if pProxyType == 0:
5360 proxyType = QNetworkProxy.HttpProxy
5361 elif pProxyType == 1:
5362 proxyType = QNetworkProxy.HttpCachingProxy
5363 elif pProxyType == 2:
5364 proxyType = QNetworkProxy.Socks5Proxy
5365 self.__proxy = QNetworkProxy(proxyType, host,
5366 Preferences.getUI("ProxyPort"),
5367 Preferences.getUI("ProxyUser"),
5368 Preferences.getUI("ProxyPassword"))
5369 self.http.setProxy(self.__proxy)
5370
5371 self.httpAlternative = alternative 5353 self.httpAlternative = alternative
5372 url = QUrl(self.__httpAlternatives[alternative]) 5354 url = QUrl(self.__httpAlternatives[alternative])
5373 self.__versionCheckCanceled = False 5355 self.__versionCheckCanceled = False
5374 if manual: 5356 if manual:
5375 if self.__versionCheckProgress is None: 5357 if self.__versionCheckProgress is None:
5380 self.connect(self.__versionCheckProgress, SIGNAL("canceled()"), 5362 self.connect(self.__versionCheckProgress, SIGNAL("canceled()"),
5381 self.__versionsDownloadCanceled) 5363 self.__versionsDownloadCanceled)
5382 self.__versionCheckProgress.setLabelText(self.trUtf8("Trying host {0}")\ 5364 self.__versionCheckProgress.setLabelText(self.trUtf8("Trying host {0}")\
5383 .format(url.host())) 5365 .format(url.host()))
5384 self.__versionCheckProgress.setValue(alternative) 5366 self.__versionCheckProgress.setValue(alternative)
5385 self.http.setHost(url.host(), url.port(80)) 5367 reply = self.__networkManager.get(QNetworkRequest(url))
5386 self.http.get(url.path()) 5368 self.connect(reply, SIGNAL("finished()"), self.__versionsDownloadDone)
5387 5369 self.__replies.append(reply)
5388 def __versionsDownloadDone(self, error): 5370
5371 def __versionsDownloadDone(self):
5389 """ 5372 """
5390 Private method called, after the versions file has been downloaded 5373 Private method called, after the versions file has been downloaded
5391 from the internet. 5374 from the internet.
5392
5393 @param error flag indicating an error condition (boolean)
5394 """ 5375 """
5395 if self.__versionCheckCanceled: 5376 if self.__versionCheckCanceled:
5396 self.__inVersionCheck = False 5377 self.__inVersionCheck = False
5397 if self.__versionCheckProgress is not None: 5378 if self.__versionCheckProgress is not None:
5398 self.__versionCheckProgress.reset() 5379 self.__versionCheckProgress.reset()
5399 self.__versionCheckProgress = None 5380 self.__versionCheckProgress = None
5400 return 5381 return
5401 5382
5402 if error or self.http.lastResponse().statusCode() != 200: 5383 reply = self.sender()
5384 if reply in self.__replies:
5385 self.__replies.remove(reply)
5386 if reply.error() != QNetworkReply.NoError:
5403 self.httpAlternative += 1 5387 self.httpAlternative += 1
5404 if self.httpAlternative >= len(self.__httpAlternatives): 5388 if self.httpAlternative >= len(self.__httpAlternatives):
5405 self.__inVersionCheck = False 5389 self.__inVersionCheck = False
5406 if self.__versionCheckProgress is not None: 5390 if self.__versionCheckProgress is not None:
5407 self.__versionCheckProgress.reset() 5391 self.__versionCheckProgress.reset()
5409 QMessageBox.warning(None, 5393 QMessageBox.warning(None,
5410 self.trUtf8("Error downloading versions file"), 5394 self.trUtf8("Error downloading versions file"),
5411 self.trUtf8("""Could not download the versions file.""")) 5395 self.trUtf8("""Could not download the versions file."""))
5412 return 5396 return
5413 else: 5397 else:
5414 self.http = None
5415 self.performVersionCheck(self.manualUpdatesCheck, self.httpAlternative, 5398 self.performVersionCheck(self.manualUpdatesCheck, self.httpAlternative,
5416 self.showAvailableVersions) 5399 self.showAvailableVersions)
5417 return 5400 return
5418 5401
5419 self.__inVersionCheck = False 5402 self.__inVersionCheck = False
5420 if self.__versionCheckProgress is not None: 5403 if self.__versionCheckProgress is not None:
5421 self.__versionCheckProgress.reset() 5404 self.__versionCheckProgress.reset()
5422 self.__versionCheckProgress = None 5405 self.__versionCheckProgress = None
5423 ioEncoding = Preferences.getSystem("IOEncoding") 5406 ioEncoding = Preferences.getSystem("IOEncoding")
5424 versions = str(self.http.readAll(), ioEncoding, 'replace').splitlines() 5407 versions = str(reply.readAll(), ioEncoding, 'replace').splitlines()
5425 self.__updateVersionsUrls(versions) 5408 self.__updateVersionsUrls(versions)
5426 if self.showAvailableVersions: 5409 if self.showAvailableVersions:
5427 self.__showAvailableVersionInfos(versions) 5410 self.__showAvailableVersionInfos(versions)
5428 else: 5411 else:
5429 Preferences.Prefs.settings.setValue(\ 5412 Preferences.Prefs.settings.setValue(\
5556 auth.setPassword(password) 5539 auth.setPassword(password)
5557 if dlg.shallSave(): 5540 if dlg.shallSave():
5558 Preferences.setUI("ProxyUser", username) 5541 Preferences.setUI("ProxyUser", username)
5559 Preferences.setUI("ProxyPassword", password) 5542 Preferences.setUI("ProxyPassword", password)
5560 5543
5561 def __sslErrors(self, sslErrors): 5544 def __sslErrors(self, reply, errors):
5562 """ 5545 """
5563 Private slot to handle SSL errors. 5546 Private slot to handle SSL errors.
5564 5547
5565 @param sslErrors list of SSL errors (list of QSslError) 5548 @param reply reference to the reply object (QNetworkReply)
5549 @param errors list of SSL errors (list of QSslError)
5566 """ 5550 """
5567 errorStrings = [] 5551 errorStrings = []
5568 for err in sslErrors: 5552 for err in sslErrors:
5569 errorStrings.append(err.errorString()) 5553 errorStrings.append(err.errorString())
5570 errorString = '.<br />'.join(errorStrings) 5554 errorString = '.<br />'.join(errorStrings)
5577 QMessageBox.StandardButtons(\ 5561 QMessageBox.StandardButtons(\
5578 QMessageBox.No | \ 5562 QMessageBox.No | \
5579 QMessageBox.Yes), 5563 QMessageBox.Yes),
5580 QMessageBox.No) 5564 QMessageBox.No)
5581 if ret == QMessageBox.Yes: 5565 if ret == QMessageBox.Yes:
5582 self.__http.ignoreSslErrors() 5566 reply.ignoreSslErrors()
5583 else: 5567 else:
5584 self.__downloadCancelled = True 5568 self.__downloadCancelled = True
5585 self.__http.abort() 5569 reply.abort()
5586 5570
5587 ####################################### 5571 #######################################
5588 ## Below are methods for various checks 5572 ## Below are methods for various checks
5589 ####################################### 5573 #######################################
5590 5574

eric ide

mercurial