mirror of
https://github.com/Rushilwiz/spaceout.git
synced 2025-04-09 22:30:17 -04:00
279 lines
12 KiB
Python
Executable File
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()
|