diff --git a/__main__.py b/__main__.py index 2f7a5d4..5431b9f 100755 --- a/__main__.py +++ b/__main__.py @@ -56,12 +56,12 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow): self.statusBar.addWidget(self.sorterProgress) self.sorterProgress.setVisible(False) - # Init the Library - self.lib_ref = Library(self) - # Application wide temporary directory self.temp_dir = QtCore.QTemporaryDir() + # Init the Library + self.lib_ref = Library(self) + # Library toolbar self.libraryToolBar = LibraryToolBar(self) self.libraryToolBar.addButton.triggered.connect(self.add_books) diff --git a/library.py b/library.py index 6376d52..ce1042a 100644 --- a/library.py +++ b/library.py @@ -129,11 +129,12 @@ class Library: # all_metadata is just being sent. It is not being displayed # It will be correlated to the current row as its first userrole self.table_rows.append( - (title, author, year, tags, all_metadata)) + (title, author, None, year, tags, all_metadata)) def create_table_model(self): - table_header = ['Title', 'Author', 'Year', 'Tags'] - self.table_model = LibraryTableModel(table_header, self.table_rows) + table_header = ['Title', 'Author', 'Status', 'Year', 'Tags'] + self.table_model = LibraryTableModel( + table_header, self.table_rows, self.parent_window.temp_dir.path()) self.create_table_proxy_model() def create_table_proxy_model(self): @@ -148,7 +149,7 @@ class Library: def update_table_proxy_model(self): self.table_proxy_model.invalidateFilter() self.table_proxy_model.setFilterParams( - self.parent_window.libraryToolBar.searchBar.text(), [0, 1, 3]) + self.parent_window.libraryToolBar.searchBar.text(), [0, 1, 4]) # This isn't needed, but it forces a model update every time the # text in the line edit changes. So I guess it is needed. self.table_proxy_model.setFilterFixedString( diff --git a/models.py b/models.py index 75ae5e6..86943f4 100644 --- a/models.py +++ b/models.py @@ -1,6 +1,9 @@ #!/usr/bin/env python3 +import os + from PyQt5 import QtCore, QtGui +from resources import pie_chart class LibraryItemModel(QtGui.QStandardItemModel, QtCore.QAbstractItemModel): @@ -13,10 +16,12 @@ class LibraryTableModel(QtCore.QAbstractTableModel): # Sorting is taken care of by the QSortFilterProxy model # which has an inbuilt sort method - def __init__(self, header_data, display_data, parent=None): + def __init__(self, header_data, display_data, temp_dir=None, parent=None): super(LibraryTableModel, self).__init__(parent) self.header_data = header_data self.display_data = display_data + self.temp_dir = temp_dir # Is only needed for the main table + # This model is otherwise reusable if this remains None def rowCount(self, parent): return len(self.display_data) @@ -28,13 +33,38 @@ class LibraryTableModel(QtCore.QAbstractTableModel): if not index.isValid(): return None + if role == QtCore.Qt.DecorationRole and index.column() == 2 and self.temp_dir: + return_pixmap = None + file_exists = self.display_data[index.row()][5]['file_exists'] + position = self.display_data[index.row()][5]['position'] + + if not file_exists: + return_pixmap = QtGui.QIcon(':/images/error.svg').pixmap( + QtCore.Qt.SizeHintRole + 10) + + if position: + current_chapter = position['current_chapter'] + total_chapters = position['total_chapters'] + progress_percent = int(current_chapter * 100 / total_chapters) + + if current_chapter == total_chapters: + return_pixmap = QtGui.QIcon(':/images/checkmark.svg').pixmap( + QtCore.Qt.SizeHintRole + 10) + else: + pie_chart.GeneratePie(progress_percent, self.temp_dir).generate() + svg_path = os.path.join(self.temp_dir, 'lector_progress.svg') + return_pixmap = QtGui.QIcon(svg_path).pixmap( + QtCore.Qt.SizeHintRole + 10) + + return return_pixmap + if role == QtCore.Qt.DisplayRole: value = self.display_data[index.row()][index.column()] - file_exists = self.display_data[index.row()][4]['file_exists'] return value + elif role == QtCore.Qt.UserRole: # The rest of the roles can be accomodated here. - value = self.display_data[index.row()][4] + value = self.display_data[index.row()][5] return value else: return QtCore.QVariant() diff --git a/widgets.py b/widgets.py index fb4f611..9733ddc 100644 --- a/widgets.py +++ b/widgets.py @@ -339,7 +339,6 @@ class FixedPushButton(QtWidgets.QPushButton): class Tab(QtWidgets.QWidget): def __init__(self, metadata, parent=None): # TODO - # A horizontal slider to control flow # Take hint from a position function argument to open the book # at a specific page