diff --git a/src/calibre/gui2/library/delegates.py b/src/calibre/gui2/library/delegates.py index ae40352aee..c1b4248c26 100644 --- a/src/calibre/gui2/library/delegates.py +++ b/src/calibre/gui2/library/delegates.py @@ -15,7 +15,7 @@ from calibre.gui2 import UNDEFINED_QDATETIME, error_dialog, rating_font from calibre.constants import iswindows from calibre.gui2.widgets import EnLineEdit from calibre.gui2.complete2 import EditWithComplete -from calibre.utils.date import now, format_date, qt_to_dt +from calibre.utils.date import now, format_date, qt_to_dt, is_date_undefined from calibre.utils.config import tweaks from calibre.utils.formatter import validation_formatter from calibre.utils.icu import sort_key @@ -91,10 +91,10 @@ class DateDelegate(QStyledItemDelegate): # {{{ self.format = default_format def displayText(self, val, locale): - d = val.toDateTime() - if d <= UNDEFINED_QDATETIME: + d = qt_to_dt(val.toDateTime()) + if is_date_undefined(d): return '' - return format_date(qt_to_dt(d, as_utc=False), self.format) + return format_date(d, self.format) def createEditor(self, parent, option, index): return DateTimeEdit(parent, self.format) @@ -110,17 +110,17 @@ class PubDateDelegate(QStyledItemDelegate): # {{{ self.format = 'MMM yyyy' def displayText(self, val, locale): - d = val.toDateTime() - if d <= UNDEFINED_QDATETIME: + d = qt_to_dt(val.toDateTime()) + if is_date_undefined(d): return '' - return format_date(qt_to_dt(d, as_utc=False), self.format) + return format_date(d, self.format) def createEditor(self, parent, option, index): return DateTimeEdit(parent, self.format) def setEditorData(self, editor, index): val = index.data(Qt.EditRole).toDate() - if val == UNDEFINED_QDATETIME.date(): + if is_date_undefined(val): val = QDate(2000, 1, 1) editor.setDate(val) @@ -234,10 +234,10 @@ class CcDateDelegate(QStyledItemDelegate): # {{{ self.format = format def displayText(self, val, locale): - d = val.toDateTime() - if d <= UNDEFINED_QDATETIME: + d = qt_to_dt(val.toDateTime()) + if is_date_undefined(d): return '' - return format_date(qt_to_dt(d, as_utc=False), self.format) + return format_date(d, self.format) def createEditor(self, parent, option, index): return DateTimeEdit(parent, self.format) @@ -253,7 +253,7 @@ class CcDateDelegate(QStyledItemDelegate): # {{{ def setModelData(self, editor, model, index): val = editor.dateTime() - if val <= UNDEFINED_QDATETIME: + if is_date_undefined(val): val = None model.setData(index, QVariant(val), Qt.EditRole) diff --git a/src/calibre/utils/date.py b/src/calibre/utils/date.py index 0a8d779af8..dc8adc6b97 100644 --- a/src/calibre/utils/date.py +++ b/src/calibre/utils/date.py @@ -75,7 +75,12 @@ def is_date_undefined(qt_or_dt): if d is None: return True if hasattr(d, 'toString'): - d = datetime(d.year(), d.month(), d.day(), tzinfo=utc_tz) + if hasattr(d, 'date'): + d = d.date() + try: + d = datetime(d.year(), d.month(), d.day(), tzinfo=utc_tz) + except ValueError: + return True # Undefined QDate return d.year < UNDEFINED_DATE.year or ( d.year == UNDEFINED_DATE.year and d.month == UNDEFINED_DATE.month and