def __init__(self, table, parent=None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_AddGameDialog() self.ui.setupUi(self) self.table = table self.importing = None self.pending_selected = None self.setupSignals()
class AddGameController(QtGui.QDialog): # UI and signal setup def __init__(self, table, parent=None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_AddGameDialog() self.ui.setupUi(self) self.table = table self.importing = None self.pending_selected = None self.setupSignals() def setupSignals(self): self.ui.pushButtonOk.clicked.connect(self.okClicked) self.ui.pushButtonCancel.clicked.connect(self.cancelClicked) self.ui.lineEditSearch.textChanged.connect(self.textChanged) # Signal slots def okClicked(self): self.addGame() self.close() def cancelClicked(self): self.close() def textChanged(self): if len(str(self.ui.lineEditSearch.text()))>0: self.ui.pushButtonOk.setEnabled(True) else: self.ui.pushButtonOk.setEnabled(False) # Controller def addGame(self): if self.ui.radioButtonUrl.isChecked(): self.add_by_url = True # Search by URL self.url = str(self.ui.lineEditSearch.text()).strip() if not re.match(r'^[a-zA-Z]+://', self.url): self.url = 'http://' + self.url if not self.url.startswith(GAMEFAQS_URL): print self.url print(GAMEFAQS_URL) util.showErrorMessage(self.parent(), 'The URL is not a valid GameFAQs one') else: # Download the content of the page self.launchAddGameWorker() else: self.add_by_url = False # Search by name self.url = SEARCH_URL + str(self.ui.lineEditSearch.text()).replace(' ','+') # Download the content of the page self.launchAddGameWorker() def launchAddGameWorker(self): self.progress = QtGui.QProgressDialog("Adding game", "", 0, 0, self) self.progress.setCancelButton(None) self.progress.setWindowModality(QtCore.Qt.WindowModal) self.progress.show() self.thread = self.AddGameWorker(self.url, self.table) self.connect(self.thread, QtCore.SIGNAL("htmlRead(QString)"), self.updateAddGame) self.thread.start() def updateAddGame(self, html): self.progress.close() if self.add_by_url: self.table.addGame(self.url, str(html)) self.table.scrollToBottom() if self.pending_selected != None: self.url = self.pending_selected[0] del(self.pending_selected[0]) if len(self.pending_selected) == 0: self.pending_selected = None self.launchAddGameWorker() elif self.importing != None: self.importGames() else: src = SearchResultsController(html) src.exec_() selected = src.get_search_results() if len(selected) > 0: self.add_by_url = True self.pending_selected = selected self.url = self.pending_selected[0] del(self.pending_selected[0]) if len(self.pending_selected) == 0: self.pending_selected = None self.launchAddGameWorker() elif self.importing != None: self.importGames() class AddGameWorker(QtCore.QThread): def __init__(self, url, parent=None): QtCore.QThread.__init__(self, parent) self.exiting = False self.url = url def run(self): try: req = urllib2.Request(self.url, headers={'User-Agent' : "Magic Browser"}) response = urllib2.urlopen(req) self.html = response.read().decode('ascii','ignore') self.emit(QtCore.SIGNAL("htmlRead(QString)"), self.html) except urllib2.URLError as e: print e.reason util.showErrorMessage(self.parent(), 'Incorrect URL or not Internet connection') except urllib2.HTTPError as e: print e.code print e.read() util.showErrorMessage(self.parent(), 'Connection error: ' + e.code + ' ' + e.read()) def __del__(self): self.exiting = True self.wait()