mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Coloring/icon rules: Allow creating a rule for date columns that matches *today*
Fixes #1956006 [[Enhancement] Harmonise Date Conditions](https://bugs.launchpad.net/calibre/+bug/1956006)
This commit is contained in:
parent
2b41671370
commit
3488e9107e
@ -75,8 +75,9 @@ class ConditionEditor(QWidget): # {{{
|
|||||||
),
|
),
|
||||||
'datetime' : (
|
'datetime' : (
|
||||||
(_('is equal to'), 'eq'),
|
(_('is equal to'), 'eq'),
|
||||||
(_('is less than'), 'lt'),
|
(_('is earlier than'), 'lt'),
|
||||||
(_('is greater than'), 'gt'),
|
(_('is later than'), 'gt'),
|
||||||
|
(_('is today'), 'is today'),
|
||||||
(_('is set'), 'is set'),
|
(_('is set'), 'is set'),
|
||||||
(_('is not set'), 'is not set'),
|
(_('is not set'), 'is not set'),
|
||||||
(_('is more days ago than'), 'older count days'),
|
(_('is more days ago than'), 'older count days'),
|
||||||
@ -199,6 +200,8 @@ class ConditionEditor(QWidget): # {{{
|
|||||||
@property
|
@property
|
||||||
def current_val(self):
|
def current_val(self):
|
||||||
ans = str(self.value_box.text()).strip()
|
ans = str(self.value_box.text()).strip()
|
||||||
|
if not self.value_box.isEnabled():
|
||||||
|
ans = ''
|
||||||
if self.current_col == 'languages':
|
if self.current_col == 'languages':
|
||||||
rmap = {lower(v):k for k, v in iteritems(lang_map())}
|
rmap = {lower(v):k for k, v in iteritems(lang_map())}
|
||||||
ans = rmap.get(lower(ans), ans)
|
ans = rmap.get(lower(ans), ans)
|
||||||
@ -310,8 +313,7 @@ class ConditionEditor(QWidget): # {{{
|
|||||||
tt += '\n' + _('You can match multiple values by separating'
|
tt += '\n' + _('You can match multiple values by separating'
|
||||||
' them with %s')%m['is_multiple']['ui_to_list']
|
' them with %s')%m['is_multiple']['ui_to_list']
|
||||||
self.value_box.setToolTip(tt)
|
self.value_box.setToolTip(tt)
|
||||||
if action in ('is set', 'is not set', 'is true', 'is false',
|
if action in ('is set', 'is not set', 'is true', 'is false', 'is undefined', 'is today'):
|
||||||
'is undefined'):
|
|
||||||
self.value_box.setEnabled(False)
|
self.value_box.setEnabled(False)
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ import json
|
|||||||
import re
|
import re
|
||||||
from textwrap import dedent
|
from textwrap import dedent
|
||||||
|
|
||||||
|
from calibre.utils.date import format_date, now
|
||||||
from polyglot.binary import as_hex_unicode, from_hex_bytes
|
from polyglot.binary import as_hex_unicode, from_hex_bytes
|
||||||
|
|
||||||
color_row_key = '*row'
|
color_row_key = '*row'
|
||||||
@ -178,6 +179,9 @@ class Rule: # {{{
|
|||||||
return ("test(field('%s'), '1', '')"%(col))
|
return ("test(field('%s'), '1', '')"%(col))
|
||||||
if action == 'is not set':
|
if action == 'is not set':
|
||||||
return ("test(field('%s'), '', '1')"%(col))
|
return ("test(field('%s'), '', '1')"%(col))
|
||||||
|
if action == 'is today':
|
||||||
|
today = format_date(now(), 'yyyy-MM-dd')
|
||||||
|
return f"strcmp(format_date(raw_field('{col}'), 'yyyy-MM-dd'), '{today}', '', '1', '')"
|
||||||
lt, eq, gt = {
|
lt, eq, gt = {
|
||||||
'eq': ('', '1', ''),
|
'eq': ('', '1', ''),
|
||||||
'lt': ('1', '', ''),
|
'lt': ('1', '', ''),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user