Files
SemesterapparatsManager/src/logic/threads.py

195 lines
6.4 KiB
Python

import os
# from icecream import ic
from omegaconf import OmegaConf
from PyQt6 import QtWidgets
from PyQt6.QtCore import QThread
from PyQt6.QtCore import pyqtSignal as Signal
from src.backend.database import Database
from src.logic.log import MyLogger
from src.logic.webrequest import BibTextTransformer, WebRequest
# from src.transformers import RDS_AVAIL_DATA
from src.ui.dialogs.Ui_mail_preview import Ui_eMailPreview
config = OmegaConf.load("config.yaml")
class BackgroundChecker(QThread):
"""Check all apparats for available Books"""
pass
class MockAvailCheck:
def __init__(
self, links: list = None, appnumber: int = None, parent=None, books=list[dict]
):
if links is None:
links = []
super().__init__(parent)
self.logger = MyLogger("MockAvailChecker")
self.logger.log_info("Starting worker thread")
self.logger.log_info(
"Checking availability for "
+ str(links)
+ " with appnumber "
+ str(appnumber)
+ "..."
)
self.links = links
self.appnumber = appnumber
self.books = books
def run(self):
self.db = Database()
state = 0
count = 0
result = []
for link in self.links:
self.logger.log_info("Processing entry: " + str(link))
data = WebRequest().get_ppn(link).get_data()
transformer = BibTextTransformer("RDS")
rds = transformer.get_data(data).return_data("rds_availability")
for item in rds.items:
sign = item.superlocation
loc = item.location
# ic(item.location, item.superlocation)
if self.appnumber in sign or self.appnumber in loc:
state = 1
book_id = None
for book in self.books:
if book["bookdata"].signature == link:
book_id = book["id"]
break
self.logger.log_info(f"State of {link}: " + str(state))
print(
"lock acquired, updating availability of "
+ str(book_id)
+ " to "
+ str(state)
)
result.append((item.callnumber, state))
count += 1
return result
self.logger.log_info("Worker thread finished")
# teminate thread
class Mailer(Ui_eMailPreview):
updateSignal = Signal(int)
def __init__(self, data=None, parent=None):
super(QThread).__init__()
super(Ui_eMailPreview).__init__()
self.logger = MyLogger("Mailer")
self.data = data
self.appid = data["app_id"]
self.appname = data["app_name"]
self.subject = data["app_subject"]
self.profname = data["prof_name"]
self.mail_data = ""
self.prof_mail = data["prof_mail"]
self.dialog = QtWidgets.QDialog()
self.comboBox.currentIndexChanged.connect(self.set_mail)
self.prof_name.setText(self.prof_name)
self.mail_name.setText(self.prof_mail)
self.load_mail_templates()
self.gender_female.clicked.connect(self.set_mail)
self.gender_male.clicked.connect(self.set_mail)
self.gender_non.clicked.connect(self.set_mail)
self.buttonBox.accepted.connect(self.createAndSendMail)
def load_mail_templates(self):
# print("loading mail templates")
mail_templates = os.listdir("mail_vorlagen")
for template in mail_templates:
self.comboBox.addItem(template)
def get_greeting(self):
if self.gender_male.isChecked():
return "Sehr geehrter Herr"
elif self.gender_female.isChecked():
return "Sehr geehrte Frau"
elif self.gender_non.isChecked():
return "Guten Tag"
def set_mail(self):
email_template = self.comboBox.currentText()
if email_template == "":
return
with open(f"mail_vorlagen/{email_template}", "r", encoding="utf-8") as f:
mail_template = f.read()
email_header = email_template.split(".eml")[0]
if "{AppNr}" in email_template:
email_header = email_template.split(".eml")[0]
email_header = email_header.format(AppNr=self.appid, AppName=self.appname)
self.mail_header.setText(email_header)
self.mail_data = mail_template.split("<html>")[0]
mail_html = mail_template.split("<html>")[1]
mail_html = "<html>" + mail_html
Appname = self.appname
mail_html = mail_html.format(
Profname=self.prof_name.text().split(" ")[-1],
Appname=Appname,
AppNr=self.appid,
AppSubject=self.subject,
greeting=self.get_greeting(),
)
self.mail_body.setHtml(mail_html)
def createAndSendMail(self):
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
smtp_server = config["mail"]["smtp_server"]
port: int = config["mail"]["port"]
sender_email = config["mail"]["sender"]
password = config["mail"]["password"]
message = MIMEMultipart()
message["From"] = sender_email
message["To"] = self.prof_mail
message["Subject"] = self.mail_header.text()
mail_body = self.mail_body.toHtml()
message.attach(MIMEText(mail_body, "html"))
mail = message.as_string()
server = smtplib.SMTP_SSL(smtp_server, port)
# server.starttls()
# server.auth(mechanism="PLAIN")
if config["mail"]["use_user_name"] == 1:
# print(config["mail"]["user_name"])
server.login(config["mail"]["user_name"], password)
else:
server.login(sender_email, password)
server.sendmail(sender_email, self.prof_mail, mail)
# print("Mail sent")
# end active process
server.quit()
class MailThread(QThread):
updateSignal = Signal(int)
def __init__(self, data=None, parent=None):
super(QThread).__init__()
super(MailThread).__init__()
self.logger = MyLogger("MailThread")
self.data = data
def show_ui(self):
self.mailer = Mailer()
self.mailer.__init__()
self.mailer.dialog.exec_()
self.mailer.dialog.show()
def run(self):
self.show_ui()
self.updateSignal.emit(1)