Fine tune progress display
Option: Set consider read at percentage Small fixes
This commit is contained in:
1
TODO
1
TODO
@@ -79,7 +79,6 @@ TODO
|
||||
✓ Define every widget in code
|
||||
Bugs:
|
||||
Deselecting all directories in the settings dialog also filters out manually added books
|
||||
PDF year
|
||||
|
||||
Secondary:
|
||||
Graphical themes
|
||||
|
@@ -262,8 +262,8 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow):
|
||||
if self.settings['main_window_headers']:
|
||||
for count, i in enumerate(self.settings['main_window_headers']):
|
||||
self.tableView.horizontalHeader().resizeSection(count, int(i))
|
||||
self.tableView.horizontalHeader().resizeSection(5, 1)
|
||||
self.tableView.horizontalHeader().setStretchLastSection(True)
|
||||
self.tableView.horizontalHeader().resizeSection(5, 30)
|
||||
self.tableView.horizontalHeader().setStretchLastSection(False)
|
||||
self.tableView.horizontalHeader().sectionClicked.connect(
|
||||
self.lib_ref.table_proxy_model.sort_table_columns)
|
||||
self.tableView.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
|
||||
@@ -822,7 +822,7 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow):
|
||||
last_accessed_time = None
|
||||
if action == readAction:
|
||||
last_accessed_time = QtCore.QDateTime().currentDateTime()
|
||||
position_perc = 100
|
||||
position_perc = 1
|
||||
|
||||
self.lib_ref.view_model.setData(i, metadata, QtCore.Qt.UserRole + 3)
|
||||
self.lib_ref.view_model.setData(i, position_perc, QtCore.Qt.UserRole + 7)
|
||||
@@ -916,8 +916,11 @@ class MainUI(QtWidgets.QMainWindow, mainwindow.Ui_MainWindow):
|
||||
self.settingsDialog.hide()
|
||||
self.definitionDialog.hide()
|
||||
self.temp_dir.remove()
|
||||
for i in self.active_bookmark_docks:
|
||||
i.setVisible(False)
|
||||
for this_dock in self.active_bookmark_docks:
|
||||
try:
|
||||
this_dock.setVisible(False)
|
||||
except RuntimeError:
|
||||
pass
|
||||
|
||||
self.settings['last_open_books'] = []
|
||||
if self.tabWidget.count() > 1:
|
||||
|
@@ -33,13 +33,8 @@ class LibraryDelegate(QtWidgets.QStyledItemDelegate):
|
||||
# painter.fillRect(option.rect, QtGui.QColor().fromRgb(255, 0, 0, 20))
|
||||
|
||||
option = option.__class__(option)
|
||||
title = index.data(QtCore.Qt.UserRole)
|
||||
file_exists = index.data(QtCore.Qt.UserRole + 5)
|
||||
metadata = index.data(QtCore.Qt.UserRole + 3)
|
||||
|
||||
position = metadata['position']
|
||||
if position:
|
||||
is_read = position['is_read']
|
||||
position_percent = index.data(QtCore.Qt.UserRole + 7)
|
||||
|
||||
# The shadow pixmap currently is set to 420 x 600
|
||||
# Only draw the cover shadow in case the setting is enabled
|
||||
@@ -64,26 +59,10 @@ class LibraryDelegate(QtWidgets.QStyledItemDelegate):
|
||||
return
|
||||
|
||||
QtWidgets.QStyledItemDelegate.paint(self, painter, option, index)
|
||||
if position:
|
||||
if is_read:
|
||||
progress = total = -1
|
||||
else:
|
||||
try:
|
||||
progress = position['current_block']
|
||||
total = position['total_blocks']
|
||||
if progress == total == 0:
|
||||
raise KeyError
|
||||
except KeyError:
|
||||
# For comics and older database entries
|
||||
# It looks ugly but leave it like this
|
||||
try:
|
||||
progress = position['current_chapter']
|
||||
total = position['total_chapters']
|
||||
except KeyError:
|
||||
return
|
||||
|
||||
if position_percent:
|
||||
read_icon = pie_chart.pixmapper(
|
||||
progress, total, self.temp_dir, 36)
|
||||
position_percent, self.temp_dir, self.parent.settings['consider_read_at'], 36)
|
||||
|
||||
x_draw = option.rect.bottomRight().x() - 30
|
||||
y_draw = option.rect.bottomRight().y() - 35
|
||||
|
@@ -101,18 +101,22 @@ class Library:
|
||||
if position:
|
||||
position = pickle.loads(position)
|
||||
if position['is_read']:
|
||||
position_perc = 100
|
||||
position_perc = 1
|
||||
else:
|
||||
try:
|
||||
position_perc = (
|
||||
position['current_chapter'] * 100 / position['total_chapters'])
|
||||
except KeyError:
|
||||
position_perc = None
|
||||
position['current_block'] / position['total_blocks'])
|
||||
except (KeyError, ZeroDivisionError):
|
||||
try:
|
||||
position_perc = (
|
||||
position['current_chapter'] / position['total_chapters'])
|
||||
except KeyError:
|
||||
position_perc = None
|
||||
|
||||
try:
|
||||
file_exists = os.path.exists(path)
|
||||
except UnicodeEncodeError:
|
||||
print('Error with unicode encoding in the library module')
|
||||
print('Library: Unicode encoding error')
|
||||
|
||||
all_metadata = {
|
||||
'title': title,
|
||||
@@ -176,7 +180,9 @@ class Library:
|
||||
self.parent.listView.setModel(self.item_proxy_model)
|
||||
|
||||
self.table_proxy_model = TableProxyModel(
|
||||
self.parent.temp_dir.path(), self.parent.tableView.horizontalHeader())
|
||||
self.parent.temp_dir.path(),
|
||||
self.parent.tableView.horizontalHeader(),
|
||||
self.parent.settings['consider_read_at'])
|
||||
self.table_proxy_model.setSourceModel(self.view_model)
|
||||
self.table_proxy_model.setSortCaseSensitivity(False)
|
||||
self.parent.tableView.setModel(self.table_proxy_model)
|
||||
@@ -223,7 +229,8 @@ class Library:
|
||||
1: 1,
|
||||
2: 2,
|
||||
3: 9,
|
||||
4: 12}
|
||||
4: 12,
|
||||
5: 7}
|
||||
|
||||
# Sorting according to roles and the drop down in the library toolbar
|
||||
self.item_proxy_model.setSortRole(
|
||||
@@ -231,7 +238,7 @@ class Library:
|
||||
|
||||
# This can be expanded to other fields by appending to the list
|
||||
sort_order = QtCore.Qt.AscendingOrder
|
||||
if self.parent.libraryToolBar.sortingBox.currentIndex() in [3, 4]:
|
||||
if self.parent.libraryToolBar.sortingBox.currentIndex() in [3, 4, 5]:
|
||||
sort_order = QtCore.Qt.DescendingOrder
|
||||
|
||||
self.item_proxy_model.sort(0, sort_order)
|
||||
|
@@ -65,9 +65,10 @@ class ItemProxyModel(QtCore.QSortFilterProxyModel):
|
||||
|
||||
|
||||
class TableProxyModel(QtCore.QSortFilterProxyModel):
|
||||
def __init__(self, temp_dir, tableViewHeader, parent=None):
|
||||
def __init__(self, temp_dir, tableViewHeader, consider_read_at, parent=None):
|
||||
super(TableProxyModel, self).__init__(parent)
|
||||
self.tableViewHeader = tableViewHeader
|
||||
self.consider_read_at = consider_read_at
|
||||
self._translate = QtCore.QCoreApplication.translate
|
||||
|
||||
title_string = self._translate('TableProxyModel', 'Title')
|
||||
@@ -101,6 +102,7 @@ class TableProxyModel(QtCore.QSortFilterProxyModel):
|
||||
return self.header_data[column]
|
||||
except IndexError:
|
||||
print('Table proxy model: Can\'t find header for column', column)
|
||||
# The column will be called IndexError. Not a typo.
|
||||
return 'IndexError'
|
||||
|
||||
def flags(self, index):
|
||||
@@ -121,36 +123,16 @@ class TableProxyModel(QtCore.QSortFilterProxyModel):
|
||||
return_pixmap = None
|
||||
|
||||
file_exists = item.data(QtCore.Qt.UserRole + 5)
|
||||
metadata = item.data(QtCore.Qt.UserRole + 3)
|
||||
progress_perc = item.data(QtCore.Qt.UserRole + 7)
|
||||
|
||||
position = metadata['position']
|
||||
if position:
|
||||
is_read = position['is_read']
|
||||
position_percent = item.data(QtCore.Qt.UserRole + 7)
|
||||
|
||||
if not file_exists:
|
||||
return pie_chart.pixmapper(
|
||||
-1, None, None, QtCore.Qt.SizeHintRole + 10)
|
||||
|
||||
if position:
|
||||
if is_read:
|
||||
progress = total = -2
|
||||
else:
|
||||
try:
|
||||
progress = position['current_block']
|
||||
total = position['total_blocks']
|
||||
|
||||
if progress == total == 0:
|
||||
raise KeyError
|
||||
except KeyError:
|
||||
try:
|
||||
progress = position['current_chapter']
|
||||
total = position['total_chapters']
|
||||
except KeyError:
|
||||
return
|
||||
|
||||
if position_percent:
|
||||
return_pixmap = pie_chart.pixmapper(
|
||||
progress, total, self.temp_dir,
|
||||
position_percent, self.temp_dir,
|
||||
self.consider_read_at,
|
||||
QtCore.Qt.SizeHintRole + 10)
|
||||
|
||||
return return_pixmap
|
||||
@@ -218,6 +200,7 @@ class ProxyModelsCommonFunctions:
|
||||
title = model.data(this_index, QtCore.Qt.UserRole)
|
||||
author = model.data(this_index, QtCore.Qt.UserRole + 1)
|
||||
tags = model.data(this_index, QtCore.Qt.UserRole + 4)
|
||||
progress = model.data(this_index, QtCore.Qt.UserRole + 7)
|
||||
directory_name = model.data(this_index, QtCore.Qt.UserRole + 10)
|
||||
directory_tags = model.data(this_index, QtCore.Qt.UserRole + 11)
|
||||
last_accessed = model.data(this_index, QtCore.Qt.UserRole + 12)
|
||||
@@ -226,6 +209,10 @@ class ProxyModelsCommonFunctions:
|
||||
if self.parent_model.sorting_box_position == 4 and not last_accessed:
|
||||
return False
|
||||
|
||||
# Hide untouched files when sorting by progress
|
||||
if self.parent_model.sorting_box_position == 5 and not progress:
|
||||
return False
|
||||
|
||||
if self.parent_model.active_library_filters:
|
||||
if directory_name not in self.parent_model.active_library_filters:
|
||||
return False
|
||||
|
@@ -94,16 +94,18 @@ def generate_pie(progress_percent, temp_dir=None):
|
||||
return lSvg
|
||||
|
||||
|
||||
def pixmapper(progress, total, temp_dir, size):
|
||||
def pixmapper(position_percent, temp_dir, consider_read_at, size):
|
||||
# A current_chapter of -1 implies the files does not exist
|
||||
# A chapter number == Total chapters implies the file is unread
|
||||
return_pixmap = None
|
||||
# position_percent and consider_read_at are expected as a <1 decimal value
|
||||
|
||||
if progress == -1:
|
||||
return_pixmap = None
|
||||
consider_read_at = consider_read_at / 100
|
||||
|
||||
if position_percent == -1:
|
||||
return_pixmap = QtGui.QIcon(':/images/error.svg').pixmap(size)
|
||||
return return_pixmap
|
||||
|
||||
if progress >= .95 * total: # Consider book read @ 95% progress
|
||||
if position_percent >= consider_read_at: # Consider book read @ 95% progress
|
||||
return_pixmap = QtGui.QIcon(':/images/checkmark.svg').pixmap(size)
|
||||
else:
|
||||
|
||||
@@ -111,8 +113,7 @@ def pixmapper(progress, total, temp_dir, size):
|
||||
# See if saving the svg to disk can be avoided
|
||||
# Maybe make the alignment a little more uniform across emblems
|
||||
|
||||
progress_percent = int(progress * 100 / total)
|
||||
generate_pie(progress_percent, temp_dir)
|
||||
generate_pie(int(position_percent * 100), temp_dir)
|
||||
svg_path = os.path.join(temp_dir, 'lector_progress.svg')
|
||||
return_pixmap = QtGui.QIcon(svg_path).pixmap(size - 4) ## The -4 looks more proportional
|
||||
|
||||
|
@@ -6,7 +6,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1088</width>
|
||||
<width>1119</width>
|
||||
<height>612</height>
|
||||
</rect>
|
||||
</property>
|
||||
@@ -47,6 +47,74 @@
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="0" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_13">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_14">
|
||||
<item>
|
||||
<widget class="QLabel" name="readAtLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Consider book read at percent</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="readAtPercent">
|
||||
<property name="minimum">
|
||||
<number>90</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>95</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="toolTip">
|
||||
<string>Restart application to see changes</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Icon theme: </string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="darkIconsRadio">
|
||||
<property name="toolTip">
|
||||
<string>Restart application to see changes</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Dark</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="lightIconsRadio">
|
||||
<property name="toolTip">
|
||||
<string>Restart application to see changes</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>L&ight</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
@@ -88,40 +156,6 @@
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_9">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="toolTip">
|
||||
<string>Restart application to see changes</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Icon theme: </string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="darkIconsRadio">
|
||||
<property name="toolTip">
|
||||
<string>Restart application to see changes</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Dark</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="lightIconsRadio">
|
||||
<property name="toolTip">
|
||||
<string>Restart application to see changes</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>L&ight</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="autoTags">
|
||||
<property name="text">
|
||||
|
@@ -11,7 +11,7 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
class Ui_Dialog(object):
|
||||
def setupUi(self, Dialog):
|
||||
Dialog.setObjectName("Dialog")
|
||||
Dialog.resize(1088, 612)
|
||||
Dialog.resize(1119, 612)
|
||||
self.gridLayout = QtWidgets.QGridLayout(Dialog)
|
||||
self.gridLayout.setObjectName("gridLayout")
|
||||
self.listView = QtWidgets.QListView(Dialog)
|
||||
@@ -46,6 +46,38 @@ class Ui_Dialog(object):
|
||||
self.gridLayout_4.setObjectName("gridLayout_4")
|
||||
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
|
||||
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
||||
self.horizontalLayout_13 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_13.setObjectName("horizontalLayout_13")
|
||||
self.horizontalLayout_14 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_14.setObjectName("horizontalLayout_14")
|
||||
self.readAtLabel = QtWidgets.QLabel(self.groupBox)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.readAtLabel.sizePolicy().hasHeightForWidth())
|
||||
self.readAtLabel.setSizePolicy(sizePolicy)
|
||||
self.readAtLabel.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
|
||||
self.readAtLabel.setObjectName("readAtLabel")
|
||||
self.horizontalLayout_14.addWidget(self.readAtLabel)
|
||||
self.readAtPercent = QtWidgets.QSpinBox(self.groupBox)
|
||||
self.readAtPercent.setMinimum(90)
|
||||
self.readAtPercent.setProperty("value", 95)
|
||||
self.readAtPercent.setObjectName("readAtPercent")
|
||||
self.horizontalLayout_14.addWidget(self.readAtPercent)
|
||||
self.horizontalLayout_13.addLayout(self.horizontalLayout_14)
|
||||
self.horizontalLayout_7 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_7.setObjectName("horizontalLayout_7")
|
||||
self.label = QtWidgets.QLabel(self.groupBox)
|
||||
self.label.setObjectName("label")
|
||||
self.horizontalLayout_7.addWidget(self.label)
|
||||
self.darkIconsRadio = QtWidgets.QRadioButton(self.groupBox)
|
||||
self.darkIconsRadio.setObjectName("darkIconsRadio")
|
||||
self.horizontalLayout_7.addWidget(self.darkIconsRadio)
|
||||
self.lightIconsRadio = QtWidgets.QRadioButton(self.groupBox)
|
||||
self.lightIconsRadio.setObjectName("lightIconsRadio")
|
||||
self.horizontalLayout_7.addWidget(self.lightIconsRadio)
|
||||
self.horizontalLayout_13.addLayout(self.horizontalLayout_7)
|
||||
self.verticalLayout_2.addLayout(self.horizontalLayout_13)
|
||||
self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
|
||||
self.refreshLibrary = QtWidgets.QCheckBox(self.groupBox)
|
||||
@@ -66,18 +98,6 @@ class Ui_Dialog(object):
|
||||
self.verticalLayout_2.addLayout(self.horizontalLayout_3)
|
||||
self.horizontalLayout_9 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_9.setObjectName("horizontalLayout_9")
|
||||
self.horizontalLayout_7 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_7.setObjectName("horizontalLayout_7")
|
||||
self.label = QtWidgets.QLabel(self.groupBox)
|
||||
self.label.setObjectName("label")
|
||||
self.horizontalLayout_7.addWidget(self.label)
|
||||
self.darkIconsRadio = QtWidgets.QRadioButton(self.groupBox)
|
||||
self.darkIconsRadio.setObjectName("darkIconsRadio")
|
||||
self.horizontalLayout_7.addWidget(self.darkIconsRadio)
|
||||
self.lightIconsRadio = QtWidgets.QRadioButton(self.groupBox)
|
||||
self.lightIconsRadio.setObjectName("lightIconsRadio")
|
||||
self.horizontalLayout_7.addWidget(self.lightIconsRadio)
|
||||
self.horizontalLayout_9.addLayout(self.horizontalLayout_7)
|
||||
self.autoTags = QtWidgets.QCheckBox(self.groupBox)
|
||||
self.autoTags.setObjectName("autoTags")
|
||||
self.horizontalLayout_9.addWidget(self.autoTags)
|
||||
@@ -283,17 +303,18 @@ class Ui_Dialog(object):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
Dialog.setWindowTitle(_translate("Dialog", "Settings"))
|
||||
self.groupBox.setTitle(_translate("Dialog", "Library"))
|
||||
self.refreshLibrary.setText(_translate("Dialog", "Startup: Refresh library"))
|
||||
self.fileRemember.setText(_translate("Dialog", "Remember open files"))
|
||||
self.coverShadows.setText(_translate("Dialog", "Cover shadows"))
|
||||
self.performCulling.setToolTip(_translate("Dialog", "Enabling reduces startup time and memory usage"))
|
||||
self.performCulling.setText(_translate("Dialog", "Load covers only when needed"))
|
||||
self.readAtLabel.setText(_translate("Dialog", "Consider book read at percent"))
|
||||
self.label.setToolTip(_translate("Dialog", "Restart application to see changes"))
|
||||
self.label.setText(_translate("Dialog", "Icon theme: "))
|
||||
self.darkIconsRadio.setToolTip(_translate("Dialog", "Restart application to see changes"))
|
||||
self.darkIconsRadio.setText(_translate("Dialog", "&Dark"))
|
||||
self.lightIconsRadio.setToolTip(_translate("Dialog", "Restart application to see changes"))
|
||||
self.lightIconsRadio.setText(_translate("Dialog", "L&ight"))
|
||||
self.refreshLibrary.setText(_translate("Dialog", "Startup: Refresh library"))
|
||||
self.fileRemember.setText(_translate("Dialog", "Remember open files"))
|
||||
self.coverShadows.setText(_translate("Dialog", "Cover shadows"))
|
||||
self.performCulling.setToolTip(_translate("Dialog", "Enabling reduces startup time and memory usage"))
|
||||
self.performCulling.setText(_translate("Dialog", "Load covers only when needed"))
|
||||
self.autoTags.setText(_translate("Dialog", "Generate tags from files"))
|
||||
self.groupBox_2.setTitle(_translate("Dialog", "Reading"))
|
||||
self.hideScrollBars.setToolTip(_translate("Dialog", "Horizontal scrolling with Alt + Scroll\n"
|
||||
|
@@ -105,6 +105,7 @@ class Settings:
|
||||
self.parent.settings['hide_scrollbars'] = literal_eval(self.settings.value(
|
||||
'hideScrollBars', 'False').capitalize())
|
||||
self.parent.settings['scroll_speed'] = int(self.settings.value('scrollSpeed', 7))
|
||||
self.parent.settings['consider_read_at'] = int(self.settings.value('considerReadAt', 95))
|
||||
self.settings.endGroup()
|
||||
|
||||
self.settings.beginGroup('dialogSettings')
|
||||
@@ -176,6 +177,7 @@ class Settings:
|
||||
self.settings.setValue('cachingEnabled', current_settings['caching_enabled'])
|
||||
self.settings.setValue('hideScrollBars', current_settings['hide_scrollbars'])
|
||||
self.settings.setValue('scrollSpeed', current_settings['scroll_speed'])
|
||||
self.settings.setValue('considerReadAt', current_settings['consider_read_at'])
|
||||
self.settings.endGroup()
|
||||
|
||||
self.settings.beginGroup('dialogSettings')
|
||||
|
@@ -92,6 +92,7 @@ class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog):
|
||||
self.cachingEnabled.setChecked(self.parent.settings['caching_enabled'])
|
||||
self.hideScrollBars.setChecked(self.parent.settings['hide_scrollbars'])
|
||||
self.scrollSpeedSlider.setValue(self.parent.settings['scroll_speed'])
|
||||
self.readAtPercent.setValue(self.parent.settings['consider_read_at'])
|
||||
|
||||
self.autoTags.clicked.connect(self.manage_checkboxes)
|
||||
self.coverShadows.clicked.connect(self.manage_checkboxes)
|
||||
@@ -101,6 +102,7 @@ class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog):
|
||||
self.cachingEnabled.clicked.connect(self.manage_checkboxes)
|
||||
self.hideScrollBars.clicked.connect(self.manage_checkboxes)
|
||||
self.scrollSpeedSlider.valueChanged.connect(self.change_scroll_speed)
|
||||
self.readAtPercent.valueChanged.connect(self.change_read_at)
|
||||
|
||||
# Generate the QStandardItemModel for the listView
|
||||
self.listModel = QtGui.QStandardItemModel()
|
||||
@@ -318,9 +320,12 @@ class SettingsUI(QtWidgets.QDialog, settingswindow.Ui_Dialog):
|
||||
2: 'hi'}
|
||||
self.parent.settings['dictionary_language'] = language_dict[self.languageBox.currentIndex()]
|
||||
|
||||
def change_scroll_speed(self, event):
|
||||
def change_scroll_speed(self, event=None):
|
||||
self.parent.settings['scroll_speed'] = self.scrollSpeedSlider.value()
|
||||
|
||||
def change_read_at(self, event=None):
|
||||
self.parent.settings['consider_read_at'] = self.readAtPercent.value()
|
||||
|
||||
def manage_checkboxes(self, event=None):
|
||||
sender = self.sender().objectName()
|
||||
|
||||
|
@@ -130,6 +130,10 @@ class BackGroundCacheRefill(QtCore.QThread):
|
||||
def __init__(self, image_cache, remove_value, filetype, book, all_pages, parent=None):
|
||||
super(BackGroundCacheRefill, self).__init__(parent)
|
||||
|
||||
# TODO
|
||||
# Return with only the first image in case of a cache miss
|
||||
# Rebuilding the entire n image cache takes considerably longer
|
||||
|
||||
self.image_cache = image_cache
|
||||
self.remove_value = remove_value
|
||||
self.filetype = filetype
|
||||
|
@@ -426,13 +426,15 @@ class LibraryToolBar(QtWidgets.QToolBar):
|
||||
self.searchBar.setObjectName('searchBar')
|
||||
|
||||
# Sorter
|
||||
title_string = self._translate('TableProxyModel', 'Title')
|
||||
author_string = self._translate('TableProxyModel', 'Author')
|
||||
year_string = self._translate('TableProxyModel', 'Year')
|
||||
newest_string = self._translate('TableProxyModel', 'Newest')
|
||||
lastread_string = self._translate('TableProxyModel', 'Last Read')
|
||||
title_string = self._translate('LibraryToolBar', 'Title')
|
||||
author_string = self._translate('LibraryToolBar', 'Author')
|
||||
year_string = self._translate('LibraryToolBar', 'Year')
|
||||
newest_string = self._translate('LibraryToolBar', 'Newest')
|
||||
lastread_string = self._translate('LibraryToolBar', 'Last Read')
|
||||
progress_string = self._translate('LibraryToolBar', 'Progress')
|
||||
sorting_choices = [
|
||||
title_string, author_string, year_string, newest_string, lastread_string]
|
||||
title_string, author_string, year_string,
|
||||
newest_string, lastread_string, progress_string]
|
||||
|
||||
self.sortingBox = FixedComboBox(self)
|
||||
self.sortingBox.addItems(sorting_choices)
|
||||
|
@@ -1022,11 +1022,8 @@ class PliantWidgetsCommonFunctions:
|
||||
position_percentage = (self.pw.parent.metadata['position']['current_block'] /
|
||||
self.pw.parent.metadata['position']['total_blocks'])
|
||||
|
||||
# Update book metadata and position percentage
|
||||
# Update position percentage
|
||||
if model_index:
|
||||
self.main_window.lib_ref.view_model.setData(
|
||||
model_index[0], self.pw.parent.metadata, QtCore.Qt.UserRole + 3)
|
||||
|
||||
self.main_window.lib_ref.view_model.setData(
|
||||
model_index[0], position_percentage, QtCore.Qt.UserRole + 7)
|
||||
|
||||
|
Reference in New Issue
Block a user