UI: refactor mail template dialog for plaintext handling, improve logging, and update UI elements
This commit is contained in:
@@ -1,10 +1,28 @@
|
||||
from PySide6 import QtCore, QtWidgets
|
||||
import sys
|
||||
from datetime import datetime
|
||||
|
||||
import loguru
|
||||
from PySide6 import QtCore, QtWidgets
|
||||
from PySide6.QtMultimedia import QAudioOutput, QMediaPlayer
|
||||
|
||||
from src import LOG_DIR
|
||||
from src.backend.catalogue import Catalogue
|
||||
from src.backend.database import Database
|
||||
from src.logic.swb import SWB
|
||||
|
||||
from .widget_sources.admin_update_signatures_ui import Ui_Dialog
|
||||
|
||||
log = loguru.logger
|
||||
log.remove()
|
||||
log.add(sys.stdout, level="INFO")
|
||||
log.add(f"{LOG_DIR}/application.log", rotation="1 MB", retention="10 days")
|
||||
|
||||
log.add(
|
||||
f"{LOG_DIR}/{datetime.now().strftime('%Y-%m-%d')}.log",
|
||||
rotation="1 day",
|
||||
retention="1 month",
|
||||
)
|
||||
|
||||
|
||||
class UpdaterThread(QtCore.QThread):
|
||||
progress = QtCore.Signal(int)
|
||||
@@ -19,17 +37,66 @@ class UpdaterThread(QtCore.QThread):
|
||||
def run(self):
|
||||
total_books = len(self.books)
|
||||
for index, book in enumerate(self.books):
|
||||
id = book["id"]
|
||||
bookdata = book["bookdata"]
|
||||
ppn = bookdata.link.split("kid=")[-1]
|
||||
result = self.catalogue.get_book(ppn)
|
||||
if result:
|
||||
bookdata.signature = result.signature
|
||||
print(bookdata)
|
||||
self.db.updateBookdata(id, bookdata)
|
||||
else:
|
||||
print(f"No result for {ppn}")
|
||||
self.db.deleteBook(id)
|
||||
try:
|
||||
id = book["id"]
|
||||
bookdata = book["bookdata"]
|
||||
ppn = bookdata.ppn
|
||||
result = self.catalogue.get_book(ppn)
|
||||
if result:
|
||||
log.debug(f"Updating book {id} with ppn {ppn}")
|
||||
bookdata.signature = result.signature
|
||||
# #print(bookdata)
|
||||
self.db.updateBookdata(id, bookdata)
|
||||
else:
|
||||
log.debug(f"No result for {ppn}")
|
||||
# #print(f"No result for {ppn}")
|
||||
# self.db.deleteBook(id)
|
||||
except Exception as e:
|
||||
log.error(f"Error updating book {book}: {e}")
|
||||
self.progress.emit(index + 1)
|
||||
self.currtot.emit(index + 1, total_books)
|
||||
|
||||
|
||||
class CompleterThread(QtCore.QThread):
|
||||
progress = QtCore.Signal(int)
|
||||
currtot = QtCore.Signal(int, int)
|
||||
|
||||
def __init__(self, books=None):
|
||||
super().__init__()
|
||||
self.books = books
|
||||
self.db = Database()
|
||||
self.catalogue = Catalogue()
|
||||
self.swb = SWB()
|
||||
|
||||
def run(self):
|
||||
total_books = len(self.books)
|
||||
for index, book in enumerate(self.books):
|
||||
try:
|
||||
id = book["id"]
|
||||
bookdata = book["bookdata"]
|
||||
|
||||
ppn = bookdata.ppn
|
||||
cat_book = self.catalogue.get_book(f"kid:{ppn}")
|
||||
|
||||
swb_version = self.swb.getBooks(["pica.bib=20735", f"pica.ppn={ppn}"])[
|
||||
0
|
||||
]
|
||||
if cat_book:
|
||||
merged = cat_book.merge(swb_version)
|
||||
else:
|
||||
merged = swb_version
|
||||
|
||||
# compare original_book with merged, if different, update db
|
||||
if bookdata != merged:
|
||||
# #print(f"Updating book {id} with ppn {ppn}")
|
||||
# #print("Original book:", bookdata)
|
||||
# #print("Merged book:", merged)
|
||||
self.db.updateBookdata(id, merged)
|
||||
except Exception as e:
|
||||
log.error(f"Error updating book {book}: {e}")
|
||||
# else:
|
||||
# #print(f"No result for {ppn}")
|
||||
# self.db.deleteBook(id)
|
||||
self.progress.emit(index + 1)
|
||||
self.currtot.emit(index + 1, total_books)
|
||||
|
||||
@@ -40,20 +107,49 @@ class UpdateSignatures(QtWidgets.QDialog, Ui_Dialog):
|
||||
self.setupUi(self)
|
||||
self.setWindowTitle("Updating signatures...")
|
||||
self.progressBar.setValue(0)
|
||||
self.pushButton.clicked.connect(self.start)
|
||||
self.btn_update_signatures.clicked.connect(self.update_signatures)
|
||||
self.btn_add_missing_data.clicked.connect(self.add_missing)
|
||||
self.db = Database()
|
||||
self.catalogue = Catalogue()
|
||||
self.player = QMediaPlayer()
|
||||
self.audio_output = QAudioOutput()
|
||||
|
||||
def start(self):
|
||||
def play_sound(self, sound_file: str):
|
||||
self.player.setAudioOutput(self.audio_output)
|
||||
self.audio_output.setVolume(50)
|
||||
self.player.setSource(QtCore.QUrl.fromLocalFile(f"src/sounds/{sound_file}"))
|
||||
self.player.play()
|
||||
|
||||
def update_signatures(self):
|
||||
books = self.db.getAllBooks()
|
||||
total_books = len(books)
|
||||
self.progressBar.setMaximum(total_books)
|
||||
self.updater = UpdaterThread(books)
|
||||
self.updater.progress.connect(self.update_progress)
|
||||
self.updater.finished.connect(self.updater.deleteLater)
|
||||
self.updater.start()
|
||||
|
||||
def add_missing(self):
|
||||
books = self.db.getAllBooks()
|
||||
total_books = len(books)
|
||||
self.progressBar.setMaximum(total_books)
|
||||
incomplete_books = [
|
||||
book
|
||||
for book in books
|
||||
if any(
|
||||
value in (None, "", "None")
|
||||
for value in book["bookdata"].__dict__.values()
|
||||
)
|
||||
]
|
||||
self.completionist = CompleterThread(incomplete_books)
|
||||
self.completionist.progress.connect(self.update_progress)
|
||||
self.completionist.finished.connect(self.completionist.deleteLater)
|
||||
self.completionist.start()
|
||||
|
||||
def update_progress(self, value):
|
||||
self.progressBar.setValue(value)
|
||||
if value >= self.progressBar.maximum():
|
||||
self.pushButton.setText("Done")
|
||||
self.pushButton.setEnabled(False)
|
||||
if value <= self.progressBar.maximum():
|
||||
self.btn_update_signatures.setEnabled(False)
|
||||
if value == self.progressBar.maximum():
|
||||
self.btn_update_signatures.setEnabled(True)
|
||||
self.play_sound("ding.mp3")
|
||||
|
||||
Reference in New Issue
Block a user