newdb: Fix undefined custom dates not displaying as blank, depending on time zone

This commit is contained in:
Kovid Goyal 2013-07-29 08:46:49 +05:30
parent 0356894fca
commit 6cffe0d105
2 changed files with 18 additions and 13 deletions

View File

@ -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)

View File

@ -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