You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

174 lines
4.1 KiB

  1. import sys
  2. from PyQt5.uic import loadUi
  3. from PyQt5 import QtWidgets
  4. from PyQt5.QtWidgets import QDialog, QApplication, QWidget, QLabel, QScrollArea, QVBoxLayout, QFrame, QComboBox
  5. from PyQt5.QtGui import QPixmap
  6. import firebase_admin
  7. from firebase_admin import credentials, auth, db, initialize_app
  8. import os
  9. current_directory = os.path.dirname(os.path.realpath(__file__))
  10. json_path = os.path.join(current_directory, 'chatbot.json')
  11. #cred = credentials.Certificate('/home/knight/ChatBot_UI/chatbot.json')
  12. cred = credentials.Certificate(json_path)
  13. firebase_admin.initialize_app(cred, {'databaseURL': 'https://chatbot-402717-default-rtdb.firebaseio.com/'})
  14. class RoundedVBoxLayout(QVBoxLayout):
  15. def __init__(self):
  16. super().__init__()
  17. self.rounded_frame = QFrame()
  18. self.rounded_frame.setStyleSheet("QFrame {border-radius: 50px; background-color: lightgray;}")
  19. self.rounded_frame.setLayout(self)
  20. def addWidget(self, widget):
  21. # Add widgets to the rounded frame
  22. super().addWidget(widget)
  23. class LoginScreen(QDialog):
  24. def __init__(self):
  25. super(LoginScreen, self).__init__()
  26. loadUi("login.ui",self)
  27. self.passwordfield.setEchoMode(QtWidgets.QLineEdit.Password)
  28. self.loginButton.clicked.connect(self.loginfunction)
  29. #self.loginButton.clicked.connect(self.gotoDashboard)
  30. def loginfunction(self):
  31. username = self.emailfield.text()
  32. password = self.passwordfield.text()
  33. if len(username)==0 or len(password)==0:
  34. self.labelError.setText("Please input all fields.")
  35. else:
  36. try:
  37. user = auth.get_user_by_email(username)
  38. if user:
  39. self.gotoDashboard()
  40. except:
  41. print("Login Failed !")
  42. self.labelError.setText("Login Failed Invalid Username or Password")
  43. def gotoDashboard(self):
  44. dashBoard = DashBoard()
  45. widget.addWidget(dashBoard)
  46. widget.setCurrentIndex(widget.currentIndex()+1)
  47. class DashBoard(QDialog):
  48. def __init__(self):
  49. super(DashBoard, self).__init__()
  50. loadUi('dashboard.ui', self)
  51. self.ref = db.reference('/intents_and_questions')
  52. self.layout = self.questionLayout
  53. self.show_intents_questions()
  54. self.get_intents()
  55. def update_intent(self):
  56. pass
  57. def update_question(self):
  58. pass
  59. def get_intents(self):
  60. self.intentCombo.setContentsMargins(40, 140, 0, 0)
  61. data = self.ref.get()
  62. if data:
  63. self.intentCombo.addItems(list(data.keys()))
  64. else:
  65. self.intentCombo.addItems([])
  66. def show_intents_questions(self):
  67. data = self.ref.get()
  68. if data:
  69. # Assuming data is a dictionary
  70. for intent, questions in data.items():
  71. questions_text = '\n'.join(questions)
  72. #label_text = f"Intent: {intent}\nQuestions:{questions_text}\n{'-'*50}"
  73. label_text = f"INTENT : {intent}\n\nQUESTIONS : \n{questions_text}\n{'-'*50}"
  74. label = QLabel(label_text)
  75. label.setContentsMargins(20,20,20,20)
  76. self.layout.addWidget(label)
  77. scroll_area = QScrollArea()
  78. scroll_area.setWidgetResizable(True)
  79. scroll_widget = QWidget()
  80. scroll_widget.setLayout(self.layout)
  81. scroll_area.setWidget(scroll_widget)
  82. #main_layout = QVBoxLayout()
  83. main_layout = RoundedVBoxLayout()
  84. main_layout.addWidget(scroll_area)
  85. main_layout.setContentsMargins(20, 120, 800, 30)
  86. self.setLayout(main_layout)
  87. self.setGeometry(300, 300, 400, 200)
  88. self.setWindowTitle('Dashboard')
  89. self.show()
  90. app = QApplication(sys.argv)
  91. welcome = LoginScreen()
  92. widget = QtWidgets.QStackedWidget()
  93. widget.addWidget(welcome)
  94. widget.setFixedHeight(800)
  95. widget.setFixedWidth(1200)
  96. widget.show()
  97. try:
  98. sys.exit(app.exec_())
  99. except:
  100. print("Exiting")