예제 #1
0
 def showErrorPopup(self, message):
     if self.fehler_popup:
         self.fehler_popup.close()
         self.fehler_popup = None
     self.fehler_popup = QtGui.QDialog(None)
     self.fehler_ui = Ui_Fehler()
     self.fehler_ui.setupUi(self.fehler_popup)
     self.fehler_ui.label.setText("Sorry, es ist ein Fehler aufgetreten:\n"+message)
     self.fehler_popup.show()
예제 #2
0
class Notenrechner(QtGui.QMainWindow, Ui_SourceChooser):

    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        Ui_SourceChooser.__init__(self)
        self.ergebnis_popups = []
        self.fehler_popup = None
        self.initUI()

    def initUI(self):
        self.setupUi(self)
        self.center()
        self.connectStuff()
        self.show()

    def center(self):
        qr = self.frameGeometry()
        cp = QtGui.QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

    def connectStuff(self):
        self.connect(self.lineEdit, SIGNAL("returnPressed()"), self.lineEdit_2.setFocus)
        self.connect(self.lineEdit_2, SIGNAL("returnPressed()"), self.pushButton.click)
        self.connect(self.pushButton, SIGNAL("clicked()"), self.onDownloadButtonClick)
        self.connect(self.pushButton_2 ,SIGNAL("clicked()"), self.openFileDialog)

    def onDownloadButtonClick(self):
        old_text = self.pushButton.text()
        self.pushButton.setText("Einen Moment...")
        self.setDisabled(True)
        self.update()
        QtCore.QCoreApplication.processEvents()
        self.update()
        QtCore.QCoreApplication.processEvents()
        self.downloadPSSOPage()
        self.pushButton.setText(old_text)
        self.setEnabled(True)

    def downloadPSSOPage(self):
        username = self.lineEdit.text()
        password = self.lineEdit_2.text()
        login_url = 'https://psso.fh-koeln.de/qisserver/rds?state=user&type=1&category=auth.login&startpage=portal.vm&breadCrumbSource=portal'
        params = urllib.urlencode({'asdf': username, 'fdsa': password, 'submit':'Login'}) # lol
        html_1 = urllib.urlopen(login_url, params).read()

        if not noten.checkLogin(html_1):
            self.showErrorPopup(u"Sind die Login Daten möglicherweise falsch?")
            return
        try:
            # Von hier an simulieren wir einen Crawler
            html_2 = urllib.urlopen(noten.getLinkByName(html_1, "Prüfungsverwaltung")).read()
            html_3 = urllib.urlopen(noten.getLinkByName(html_2, "Notenspiegel")).read()
            html_4 = urllib.urlopen(noten.getLinkByName(html_3, re.compile("Abschluss"))).read()
            html_5 = urllib.urlopen(noten.getLinkByGraphic(html_4, "/QIS/images//his_info3.gif")).read()
        except TypeError as e:
           self.showErrorPopup(u"Scheinbar haben sich die PSSO Seiten verändert… Sag' bitte Hugo bescheid, damit er das Programm reparieren kann!")
           return
        try:
            anz_noten, anz_credits, schnitt = noten.getInfos(html_5)
            name = noten.getStudentName(html_5)
            self.presentResults(anz_noten, anz_credits, schnitt, name)
        except noten.ParsingError as e:
            self.showErrorPopup(str(e))

    def openFileDialog(self):
        html_file = QtGui.QFileDialog.getOpenFileName(None, u"HTML Datei auswählen", filter="HTML-Datei (*.html *.htm)")
        html_file = unicode(html_file)
        if html_file:
            try:
                f = codecs.open(html_file, encoding='utf-8')
                anz_noten, anz_credits, schnitt = noten.getInfos(f.read())
                name = noten.getStudentName(open(html_file).read())
                self.presentResults(anz_noten, anz_credits, schnitt, name)
            except noten.ParsingError as e:
                self.shoeErrorPopup(str(e))

    def presentResults(self, anz_noten, anz_credits, schnitt, name=None):
        ergebnis_popup = QtGui.QDialog(None)
        ergebnis_ui = Ui_Ergebnis()
        ergebnis_ui.setupUi(ergebnis_popup)
        if name:
            ergebnis_popup.setWindowTitle("Ergebnisse von "+name)
        ergebnis_ui.lineEdit.setText(str(anz_noten))
        ergebnis_ui.lineEdit_2.setText(str(anz_credits))
        ergebnis_ui.lineEdit_3.setText(str(schnitt))
        ergebnis_popup.show()
        self.ergebnis_popups.append(ergebnis_popup)

    def showErrorPopup(self, message):
        if self.fehler_popup:
            self.fehler_popup.close()
            self.fehler_popup = None
        self.fehler_popup = QtGui.QDialog(None)
        self.fehler_ui = Ui_Fehler()
        self.fehler_ui.setupUi(self.fehler_popup)
        self.fehler_ui.label.setText("Sorry, es ist ein Fehler aufgetreten:\n"+message)
        self.fehler_popup.show()

    def closeEvent(self, event):
        for popup in self.ergebnis_popups:
            popup.close()