129 lines
3.8 KiB
Python
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()
|