Table editing, Traverse and associate with tags all paths entered

This commit is contained in:
BasioMeusPuga
2017-11-30 01:20:30 +05:30
parent 5064398481
commit 69392c5d4f
9 changed files with 138 additions and 78 deletions

View File

@@ -12,28 +12,33 @@ from threaded import BackGroundBookSearch, BackGroundBookAddition
class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog):
# TODO
# Deletion from table
# Cancel behavior
# Update database on table model update
def __init__(self, parent_window):
super(SettingsUI, self).__init__()
self.setupUi(self)
# These are just for declarative purposes
self.window_size = None
self.window_position = None
self.table_headers = []
self.last_open_directory = None
self.parent_window = parent_window
self.database_path = self.parent_window.database_path
self.resize(self.parent_window.settings_dialog_settings['size'])
self.move(self.parent_window.settings_dialog_settings['position'])
self.table_model = None
self.old_table_model = None
self.table_proxy_model = None
self.paths = None
self.thread = None
self.tableFilterEdit.textChanged.connect(self.update_table_proxy_model)
self.addButton.clicked.connect(self.add_directories)
self.cancelButton.clicked.connect(self.cancel_pressed)
self.okButton.clicked.connect(self.ok_pressed)
self.generate_table()
header_sizes = self.parent_window.settings_dialog_settings['headers']
@@ -45,27 +50,26 @@ class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog):
QtWidgets.QHeaderView.Interactive)
self.tableView.horizontalHeader().setHighlightSections(False)
self.tableView.horizontalHeader().setStretchLastSection(True)
# self.tableView.horizontalHeader().setSectionResizeMode(3, QtWidgets.QHeaderView.Stretch)
# self.database_data = collections.OrderedDict()
# self.database_modification = False
def generate_table(self):
# Fetch all directories in the database
paths = database.DatabaseFunctions(
self.paths = database.DatabaseFunctions(
self.database_path).fetch_data(
('Path', 'Name', 'Tags'),
'directories',
{'Path': ''},
'LIKE')
if not paths:
if not self.paths:
print('Database returned no paths for settings...')
else:
# Convert to a list because tuples, well, they're tuples
self.paths = [list(i) for i in self.paths]
table_header = ['Path', 'Name', 'Tags']
self.table_model = MostExcellentTableModel(
table_header, paths, None)
table_header, self.paths, None)
self.create_table_proxy_model()
@@ -86,52 +90,67 @@ class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog):
self.tableFilterEdit.text())
def add_directories(self):
add_directory = QtWidgets.QFileDialog.getExistingDirectory(
self, 'Select Directory', self.last_open_directory,
QtWidgets.QFileDialog.ShowDirsOnly)
data_pair = [[add_directory, None, None]]
database.DatabaseFunctions(self.database_path).set_library_paths(data_pair)
self.generate_table()
# Directories will be added recursively
# Sub directory addition is allowed in that files will not
# Sub directory addition is not allowed
# In case it is to be allowed eventually, files will not
# be duplicated. However, any additional tags will get
# added to file tags
# Database tags for files should not be updated each time
# a new folder gets added or deleted from the directory
# This will be done @ runtime
# Individually set file tags will be preserved
# Duplicate file tags will be removed
add_directory = QtWidgets.QFileDialog.getExistingDirectory(
self, 'Select Directory', self.last_open_directory,
QtWidgets.QFileDialog.ShowDirsOnly)
add_directory = os.path.realpath(add_directory)
# Whatever code you write to recurse through directories will
# have to go into the threaded module
# TODO
# Account for a parent folder getting added after a subfolder
# Currently this does the inverse only
for i in self.paths:
already_present = os.path.realpath(i[0])
if already_present == add_directory or already_present in add_directory:
QtWidgets.QMessageBox.critical(
self,
'Error',
'Duplicate or sub folder: ' + already_present + ' ',
QtWidgets.QMessageBox.Ok)
return
# Set default name for the directory
directory_name = os.path.basename(add_directory).title()
data_pair = [[add_directory, directory_name, None]]
database.DatabaseFunctions(self.database_path).set_library_paths(data_pair)
self.generate_table()
def ok_pressed(self):
# Traverse directories looking for files
def parse_all(self, directories):
add_directory = None
self.thread = BackGroundBookSearch(self, add_directory)
self.thread = BackGroundBookSearch(self, self.table_model.display_data)
self.thread.finished.connect(self.do_something)
self.thread.start()
def do_something(self):
print('Book search completed')
def closeEvent(self, event):
self.no_more_settings()
event.accept()
def cancel_pressed(self):
self.hide()
# TODO
# Implement cancel by restoring the table model to an older version
# def showEvent(self, event):
# event.accept()
def hideEvent(self, event):
self.no_more_settings()
event.accept()
def no_more_settings(self):
self.table_model = self.old_table_model
self.parent_window.libraryToolBar.settingsButton.setChecked(False)
self.window_size = self.size()
self.window_position = self.pos()
self.table_headers = []
self.resizeEvent()
def resizeEvent(self, event=None):
self.parent_window.settings_dialog_settings['size'] = self.size()
self.parent_window.settings_dialog_settings['position'] = self.pos()
table_headers = []
for i in range(2):
self.table_headers.append(self.tableView.horizontalHeader().sectionSize(i))
table_headers.append(self.tableView.horizontalHeader().sectionSize(i))
self.parent_window.settings_dialog_settings['headers'] = table_headers