update searchpage, add updater thread and emit signal for progress bar
add context menu and related actions
This commit is contained in:
@@ -7,9 +7,10 @@ from PySide6.QtCore import Signal
|
||||
|
||||
from src import LOG_DIR
|
||||
from src.backend import Database, Semester
|
||||
from src.logic import Prof, custom_sort, sort_semesters_list
|
||||
from src.logic import BookData, Prof, custom_sort, sort_semesters_list
|
||||
from src.ui.dialogs import ApparatExtendDialog, Mail_Dialog, ReminderDialog
|
||||
from src.ui.widgets import DataQtGraph, StatusWidget
|
||||
from src.ui.widgets.signature_update import UpdaterThread
|
||||
|
||||
from .widget_sources.search_statistic_page_ui import Ui_Dialog
|
||||
|
||||
@@ -19,7 +20,6 @@ log.add(sys.stdout, level="INFO")
|
||||
log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days")
|
||||
|
||||
|
||||
|
||||
class MyComboBox(QtWidgets.QComboBox):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
@@ -30,6 +30,7 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog):
|
||||
reloadSignal = Signal()
|
||||
refreshSignal = Signal()
|
||||
updateCalendar = Signal(int, list)
|
||||
status_update = Signal(int, int)
|
||||
|
||||
def __init__(self):
|
||||
log.info("SearchStatisticPage started")
|
||||
@@ -72,8 +73,54 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog):
|
||||
self.semester = Semester().value
|
||||
self.search_by_signature.returnPressed.connect(self.search_book)
|
||||
self.search_by_title.returnPressed.connect(self.search_book)
|
||||
# add context menu to the book_search_result
|
||||
self.book_search_result.setContextMenuPolicy(
|
||||
QtCore.Qt.ContextMenuPolicy.CustomContextMenu
|
||||
)
|
||||
self.book_search_result.customContextMenuRequested.connect(
|
||||
self.book_search_result_context_menu
|
||||
)
|
||||
self.populate_tab()
|
||||
|
||||
def book_search_result_context_menu(self, position):
|
||||
menu = QtWidgets.QMenu()
|
||||
open_apparat_action = menu.addAction("Semesterapparat öffnen")
|
||||
open_apparat_action.triggered.connect(self.open_selected_apparat)
|
||||
update_books_action = menu.addAction("Bücher aktualisieren")
|
||||
update_books_action.triggered.connect(self.update_books)
|
||||
menu.exec(self.book_search_result.mapToGlobal(position))
|
||||
|
||||
def open_selected_apparat(self):
|
||||
selected_rows = self.book_search_result.selectionModel().selectedRows()
|
||||
if len(selected_rows) == 0:
|
||||
return
|
||||
row = selected_rows[0].row()
|
||||
apparat_text = self.book_search_result.item(row, 2).text()
|
||||
apparat_number = apparat_text.split(" (")[0]
|
||||
self.apparat_open.emit(apparat_number)
|
||||
|
||||
def update_books(self):
|
||||
# update all books in the book_search_result
|
||||
self.updater = UpdaterThread()
|
||||
books = []
|
||||
for row in range(self.book_search_result.rowCount()):
|
||||
signature = self.book_search_result.item(row, 1).text()
|
||||
booksdata = self.db.query_db(
|
||||
"SELECT id, bookdata from media WHERE bookdata LIKE ?",
|
||||
(f'%"{signature}"%',),
|
||||
one=True,
|
||||
)
|
||||
books.append(
|
||||
{"id": booksdata[0], "bookdata": BookData().from_string(booksdata[1])}
|
||||
)
|
||||
self.updater.books = books # type: ignore
|
||||
self.updater.currtot.connect(self.status_update_emit)
|
||||
self.updater.finished.connect(self.updater.deleteLater)
|
||||
self.updater.start()
|
||||
|
||||
def status_update_emit(self, current: int, total: int):
|
||||
self.status_update.emit(current, total)
|
||||
|
||||
def mass_extend_apparats(self):
|
||||
extend = ApparatExtendDialog()
|
||||
extend.exec()
|
||||
@@ -84,13 +131,13 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog):
|
||||
if self.tableWidget.cellWidget(i, 0).isChecked():
|
||||
app_name = self.tableWidget.item(i, 1).text()
|
||||
app_id = self.db.getApparatId(app_name)
|
||||
self.db.setNewSemesterDate(app_id, data["semester"], data["dauerapp"])
|
||||
self.db.setNewSemesterDate(
|
||||
app_id, data["semester"], data["dauerapp"]
|
||||
)
|
||||
# remove the row
|
||||
self.tableWidget.removeRow(i)
|
||||
self.refreshSignal.emit()
|
||||
|
||||
|
||||
|
||||
def restore_apparat(self):
|
||||
selected_rows = self.tableWidget.selectionModel().selectedRows()
|
||||
apparats = []
|
||||
@@ -193,7 +240,7 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog):
|
||||
2,
|
||||
QtWidgets.QTableWidgetItem(
|
||||
self.db.fetch_one(
|
||||
"SELECT semesterapparat.appnr || ' (' || semesterapparat.name || ')' AS formatted_result from semesterapparat WHERE semesterapparat.appnr = ?",
|
||||
"SELECT semesterapparat.appnr || ' (' || semesterapparat.name || ')' AS formatted_result from semesterapparat WHERE semesterapparat.id = ?",
|
||||
(book[1],),
|
||||
)[0],
|
||||
),
|
||||
@@ -510,7 +557,7 @@ class SearchStatisticPage(QtWidgets.QDialog, Ui_Dialog):
|
||||
QtWidgets.QMessageBox.information(
|
||||
self,
|
||||
"Information",
|
||||
f"Der Semesterapparat wurde bereits gelöscht und kann nicht angezeigt werden.",
|
||||
"Der Semesterapparat wurde bereits gelöscht und kann nicht angezeigt werden.",
|
||||
)
|
||||
if parent_depth == 1:
|
||||
# person selected case - open all apparats from this person in the tableWidget
|
||||
|
||||
Reference in New Issue
Block a user