Files
Artemis/artemis/ui/documentsmanager.py
Marco Dalla Tiezza 528c816508 Artemis 4 RC1
2024-05-28 22:40:45 +02:00

129 lines
3.8 KiB
Python

from PySide6.QtQml import QQmlApplicationEngine
from PySide6.QtCore import QObject, Signal, Slot
from artemis.utils.path_utils import *
from artemis.utils.generic_utils import *
from artemis.utils.sys_utils import *
class UIdocumentsmanager(QObject):
# Python > QML Signals
show_ui = Signal()
close_ui = Signal()
populate_documents_list = Signal(list)
def __init__(self, parent):
super().__init__()
self._parent = parent
self._engine = QQmlApplicationEngine()
self._engine.load('qrc:/ui/DocumentsManager.qml')
self._window = self._engine.rootObjects()[0]
self._connect()
def _connect(self):
# QML > Python connections
self._window.saveNewDoc.connect(self.save_new_doc)
self._window.deleteDoc.connect(self.delete_doc)
self._window.updateDoc.connect(self.update_doc)
self._window.openDoc.connect(self.open_doc)
# Python > QML connections
self.show_ui.connect(self._window.show)
self.close_ui.connect(self._window.close)
self.populate_documents_list.connect(self._window.loadList)
def load_documentsmanager_ui(self):
self.load_documents_list()
self.show_ui.emit()
def load_documents_list(self):
""" Load the documents of the selected signal and populate the documents list
"""
self._parent.loaded_sig.select_documents()
all_documents = self._parent.loaded_sig.documents
keys = (
'doc_id',
'extension',
'name',
'description',
'type',
'preview'
)
doc_lst = [dict(zip(keys, values)) for values in all_documents]
self.populate_documents_list.emit(doc_lst)
@Slot(list)
def save_new_doc(self, doc_lst):
""" Save the new document (identified by the DOC_ID = -1) and reload the document list.
doc_param contains all the details of the new documents.
"""
doc_param = doc_lst.toVariant()
file_extension = os.path.splitext(doc_param[0])[1][1:]
doc_id = self._parent.loaded_sig.insert_document([
-1,
file_extension,
doc_param[1],
doc_param[2],
doc_param[3],
0
])
local_file_name = '{}.{}'.format(str(doc_id), file_extension)
origin_path = normalize_dialog_path(doc_param[0])
copy_file(origin_path, self._parent.loaded_db.media_dir / local_file_name)
self.load_documents_list()
@Slot(list)
def update_doc(self, doc_lst):
""" Update the details of the existent document
"""
doc_list = doc_lst.toVariant()
for doc in doc_list:
self._parent.loaded_sig.update_documents(doc[0], doc[1], doc[2], doc[3], doc[4])
self.load_documents_list()
@Slot(str, str)
def open_doc(self, doc_id, extension):
""" Open the selected document with the proper system application (if any)
"""
try:
open_file(self._parent.loaded_db.media_dir / '{}.{}'.format(doc_id, extension))
except Exception as e:
self.close_ui.emit()
self._parent.dialog_popup(
Messages.DIALOG_TYPE_ERROR,
Messages.GENERIC_ERROR,
str(e)
)
@Slot(str, str, str, bool)
def delete_doc(self, doc_id, doc_extension, doc_type, doc_preview):
""" Delete the selected document
"""
doc_file_name = '{}.{}'.format(doc_id, doc_extension)
doc_file_path = self._parent.loaded_db.media_dir / doc_file_name
self._parent.loaded_sig.delete_document(doc_id)
if doc_preview:
if doc_type == 'Audio':
self._parent.lock_audio_player.emit()
delete_file(doc_file_path)
self.load_documents_list()