fix: update eml support

This commit is contained in:
2026-02-12 10:15:48 +01:00
parent 8ec92a685c
commit 7b43826ef5
3 changed files with 53 additions and 33 deletions

View File

@@ -175,6 +175,18 @@ class BookData:
return int(match.group(1))
return 0
def to_book(self) -> Book:
return Book(
author=self.author,
year=self.year,
edition=self.edition,
title=self.title,
location=self.place,
publisher=self.publisher,
signature=self.signature,
internal_notes=None,
)
@dataclass
class MailData:
@@ -290,15 +302,18 @@ class ApparatData:
@dataclass
class XMLMailSubmission:
name: str | None
lastname: str | None
title: str | None
telno: int | None
email: str | None
app_name: str | None
subject: str | None
semester: Semester | None
books: list[BookData] | None
name: str | None = None
lastname: str | None = None
title: str | None = None
telno: int | None = None
email: str | None = None
app_name: str | None = None
subject: str | None = None
semester: Semester | None = None
books: list[BookData] | None = None
dauerapparat: bool = False
# def __post_init__(self) -> None:
# convert semester to string
@dataclass
@@ -374,6 +389,7 @@ class SemapDocument:
self.phoneNumber = int(
regex.sub(r"[^\d]", "", str(self.phoneNumber)),
)
self.title_length = len(self.title) + 3 + len(self.personName.split(",")[0])
@property
def nameSetter(self):

View File

@@ -99,6 +99,9 @@ class Semester:
self.value = f"WiSe {year}/{next_year}"
else: # SoSe
# year may only be the last two digits, so we don't want to pad it with a leading zero
if len(str(year)) > 2:
year = int(str(year)[-2:])
self.value = f"SoSe {year}"
# ------------------------------------------------------------------

View File

@@ -1243,28 +1243,25 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
self.active_apparat,
filetype=file_type,
)
if file_type == "pdf":
# TODO: implement parser here
data = pdf_to_semap(file)
signatures = data.signatures
# self.confirm_popup("PDF Dateien werden nicht unterstützt!", title="Fehler")
return signatures
if file_type == "csv":
return csv_to_list(file)
if file_type in ("docx", "doc"):
data = word_to_semap(file)
log.info("Converted data from semap file")
log.debug("Got the data: {}", data)
return data
if file_type == "eml":
data = eml_to_semap(file)
log.info("Converted data from eml file")
log.debug("Got the data: {}", data)
return data
error = "Dateityp wird nicht unterstützt"
raise ValueError(error)
match file_type:
case "pdf":
# TODO: implement parser here
data = pdf_to_semap(file)
signatures = data.signatures
# self.confirm_popup("PDF Dateien werden nicht unterstützt!", title="Fehler")
return signatures
case "csv":
return csv_to_list(file)
case _ if file_type in ("docx", "doc"):
return word_to_semap(file)
case "eml":
data = eml_to_semap(file)
log.info("Converted data from eml file")
log.debug("Got the data: {}", data)
return data
case _:
error = "Dateityp wird nicht unterstützt"
raise ValueError(error)
def import_data_from_document(self):
global valid_input
@@ -1314,6 +1311,7 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
self.app_fach.setCurrentText(data.subject if data.subject in subjects else "")
self.prof_title.setText(data.personTitle)
self.drpdwn_prof_name.setCurrentText(data.personName)
self.sem_year.setText("20" + str(data.semester.year))
if data.semester.semester == "SoSe":
self.sem_sommer.setChecked(True)
@@ -1325,9 +1323,13 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
self.check_eternal_app.setChecked(True)
self.validate_semester()
if data.books != []:
log.info("Importing books from document")
log.info(data)
self.btn_check_file_threaded(data)
def btn_check_file_threaded(self, c_document: Optional[SemapDocument] = None):
log.info("Starting threaded file check")
log.info(c_document)
for runner in self.bookGrabber:
if not runner.isRunning():
runner.deleteLater()
@@ -1373,8 +1375,7 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
prof_id = self.db.getProfId(self.profdata)
# log.debug("Prof ID is None", prof_id)
document = None
document = c_document
if c_document is None:
document = self.extract_document_data()
if document is None: