spaceout/app/spaceout.py

279 lines
12 KiB
Python
Executable File

# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file '.\login.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QDialog, QPushButton, QVBoxLayout, QApplication, QSplashScreen
from multiprocessing import Process, Queue
import re
import sys
import webbrowser
import requests
import keyring
import datetime
import text_to_speech
from requests.auth import HTTPBasicAuth
API_ENDPOINT = 'http://donot.space/api/'
def on_exit(username, password, request):
with open('current_transcript', 'r') as f:
first_line = f.readline()
print('FIRST LINE: ' + first_line)
print("SAM")
transcript = open(f'{first_line}.txt', w)
transcript.write(open('current_transcript', 'r').read())
transcript.close()
def main():
app = QtWidgets.QApplication(sys.argv)
try:
f = open('.userinfo')
username = f.read()
f.close()
isLoggedIn = True
except:
isLoggedIn = False
if not isLoggedIn:
Form = QtWidgets.QWidget()
ui = LoginForm()
ui.setupUI(Form)
Form.show()
sys.exit(app.exec_())
else:
password = keyring.get_password('spaceout', username)
r = requests.get(f'{API_ENDPOINT}profile', auth=HTTPBasicAuth(username, password))
if not r.ok:
raise Exception
request = r.json()
import atexit
atexit.register(on_exit, username, password, request)
ListenerWidget = QtWidgets.QWidget()
ui = Listener()
ui.setupUI(ListenerWidget, request['classes'], request['user']['first_name'])
ListenerWidget.show()
sys.exit(app.exec_())
class Listener(object):
def setupUI(self, Form, classes, name):
Form.setObjectName("Form")
Form.resize(340, 202)
self.name = name
self.horizontalLayoutWidget = QtWidgets.QWidget(Form)
self.horizontalLayoutWidget.setGeometry(QtCore.QRect(30, 10, 271, 121))
self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setObjectName("horizontalLayout")
self.comboBox = QtWidgets.QComboBox(self.horizontalLayoutWidget)
self.comboBox.setObjectName("comboBox")
self.horizontalLayout.addWidget(self.comboBox)
self.play_pause = QtWidgets.QPushButton(Form)
self.play_pause.setGeometry(QtCore.QRect(50, 150, 241, 31))
self.play_pause.setObjectName("play_pause")
self.play_pause.clicked.connect(self.start_listener)
rooms = [f'Period {room["period"]} - {room["name"]} with {room["teacher"]} ID:({room["id"]})' for room in classes]
self.comboBox.addItems(rooms)
self.retranslateUI(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUI(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("SpaceOut", "SpaceOut"))
self.play_pause.setText(_translate("Form", "Start Listening"))
def start_listener(self):
choice = self.comboBox.currentText()
print(choice)
result = re.search('ID:(.*)', choice)
class_id = result.group(1)[1]
transcript = open('current_transcript', 'w')
transcript.write(f'{choice}-{str(datetime.datetime.now())}\n')
transcript.close()
text_to_speech.text_to_speech(self.name)
class LoginForm(object):
def setupUI(self, Form):
Form.setObjectName("SpaceOut Login")
Form.resize(500, 756)
self.verticalLayout = QtWidgets.QVBoxLayout(Form)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setObjectName("verticalLayout")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
self.horizontalLayout_3.setSpacing(0)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.widget = QtWidgets.QWidget(Form)
self.widget.setMaximumSize(QtCore.QSize(16777215, 16777215))
self.widget.setStyleSheet(".QWidget{background-color: rgb(0,0,0);}")
self.widget.setObjectName("widget")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.widget)
self.verticalLayout_2.setContentsMargins(9, 0, 0, 0)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.verticalLayout_3 = QtWidgets.QVBoxLayout()
self.verticalLayout_3.setContentsMargins(-1, 15, -1, -1)
self.verticalLayout_3.setObjectName("verticalLayout_3")
spacerItem = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_3.addItem(spacerItem)
self.label = QtWidgets.QLabel(self.widget)
self.label.setObjectName("label")
self.verticalLayout_3.addWidget(self.label, 0, QtCore.Qt.AlignHCenter)
self.formLayout_2 = QtWidgets.QFormLayout()
self.formLayout_2.setContentsMargins(50, 35, 59, -1)
self.formLayout_2.setObjectName("formLayout_2")
self.label_2 = QtWidgets.QLabel(self.widget)
self.label_2.setStyleSheet("color: rgb(231, 231, 231);\n"
"font: 15pt \"Verdana\";")
self.label_2.setObjectName("label_2")
self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2)
self.username = QtWidgets.QLineEdit(self.widget)
self.username.setMinimumSize(QtCore.QSize(0, 40))
self.username.setStyleSheet("QLineEdit {\n"
" color: rgb(231, 231, 231);\n"
" font: 15pt \"Verdana\";\n"
" border: None;\n"
" border-bottom-color: white;\n"
" border-radius: 10px;\n"
" padding: 0 8px;\n"
" background: rgb(25, 25, 40);\n"
" selection-background-color: darkgray;\n"
"}")
self.username.setObjectName("lineEdit")
self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.username)
self.line = QtWidgets.QFrame(self.widget)
self.line.setStyleSheet("border: 2px solid white;")
self.line.setFrameShape(QtWidgets.QFrame.HLine)
self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line.setObjectName("line")
self.formLayout_2.setWidget(3, QtWidgets.QFormLayout.SpanningRole, self.line)
self.label_3 = QtWidgets.QLabel(self.widget)
self.label_3.setStyleSheet("color: rgb(231, 231, 231);\n"
"font: 15pt \"Verdana\";")
self.label_3.setObjectName("label_3")
self.formLayout_2.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.label_3)
self.password = QtWidgets.QLineEdit(self.widget)
self.password.setMinimumSize(QtCore.QSize(0, 40))
self.password.setStyleSheet("QLineEdit {\n"
" color: orange;\n"
" font: 15pt \"Verdana\";\n"
" border: None;\n"
" border-bottom-color: white;\n"
" border-radius: 10px;\n"
" padding: 0 8px;\n"
" background: rgb(25, 25, 40);\n"
" selection-background-color: darkgray;\n"
"}")
self.password.setObjectName("password")
self.password.setEchoMode(QtWidgets.QLineEdit.Password)
self.formLayout_2.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.password)
self.line_2 = QtWidgets.QFrame(self.widget)
self.line_2.setStyleSheet("border: 2px solid #03EEF3;")
self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line_2.setObjectName("line_2")
self.formLayout_2.setWidget(6, QtWidgets.QFormLayout.SpanningRole, self.line_2)
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.formLayout_2.setItem(7, QtWidgets.QFormLayout.SpanningRole, spacerItem1)
self.login = QtWidgets.QPushButton(self.widget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.login.sizePolicy().hasHeightForWidth())
self.login.setSizePolicy(sizePolicy)
self.login.setMinimumSize(QtCore.QSize(0, 60))
self.login.setAutoFillBackground(False)
self.login.setStyleSheet("color: rgb(231, 231, 231);\n"
"font: 17pt \"Verdana\";\n"
"border: 2px solid #03EEF3;\n"
"padding: 5px;\n"
"border-radius: 3px;\n"
"opacity: 200;\n"
"")
self.login.setAutoDefault(False)
self.login.setDefault(False)
self.login.setFlat(False)
self.login.setObjectName("login")
self.formLayout_2.setWidget(8, QtWidgets.QFormLayout.SpanningRole, self.login)
self.register = QtWidgets.QPushButton(self.widget)
self.register.setMinimumSize(QtCore.QSize(0, 60))
self.register.setStyleSheet("color: rgb(231, 231, 231);\n"
"font: 17pt \"Verdana\";\n"
"border: 2px solid #03EEF3;\n"
"padding: 5px;\n"
"border-radius: 3px;\n"
"opacity: 200;\n"
"")
self.register.setDefault(False)
self.register.setFlat(False)
self.register.setObjectName("register")
self.register.clicked.connect(self.open_register_link)
self.login.clicked.connect(self.check_password)
self.formLayout_2.setWidget(9, QtWidgets.QFormLayout.SpanningRole, self.register)
self.verticalLayout_3.addLayout(self.formLayout_2)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_3.addItem(spacerItem2)
self.verticalLayout_2.addLayout(self.verticalLayout_3)
self.horizontalLayout_3.addWidget(self.widget)
self.verticalLayout.addLayout(self.horizontalLayout_3)
self.retranslateUI(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def open_register_link(self):
webbrowser.open('https://donot.space/out')
def check_password (self):
QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
r = requests.get(f'{API_ENDPOINT}profile', auth=HTTPBasicAuth(str(self.username.text()), str(self.password.text())))
QApplication.restoreOverrideCursor()
if r.ok:
keyring.set_password("spaceout", str(self.username.text()), str(self.password.text()))
f = open('.userinfo', 'w')
f.write(self.username.text())
f.close()
main()
else:
msg = QtWidgets.QMessageBox()
msg.setText('Incorrect Login')
msg.exec_()
def retranslateUI(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("SpaceOut", "SpaceOut"))
self.label.setText(_translate("Form", "<html><head/><body><p><img src=\":/src/spaceout.png\"/></p></body></html>"))
self.label_2.setText(_translate("Form", "<html><head/><body><p><img src=\":/src/user.png\"/></p></body></html>"))
self.label_3.setText(_translate("Form", "<html><head/><body><p><img src=\":/src/password.png\"/></p></body></html>"))
self.login.setText(_translate("Form", "Sign In"))
self.register.setText(_translate("Form", "Register"))
import spaceout_rc
if __name__ == "__main__":
main()