mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
...
This commit is contained in:
commit
24a23a8d7e
@ -22,7 +22,7 @@ from calibre.utils.icu import sort_key, strcmp as icu_strcmp
|
|||||||
from calibre.ebooks.metadata.meta import set_metadata as _set_metadata
|
from calibre.ebooks.metadata.meta import set_metadata as _set_metadata
|
||||||
from calibre.utils.search_query_parser import SearchQueryParser
|
from calibre.utils.search_query_parser import SearchQueryParser
|
||||||
from calibre.library.caches import _match, CONTAINS_MATCH, EQUALS_MATCH, \
|
from calibre.library.caches import _match, CONTAINS_MATCH, EQUALS_MATCH, \
|
||||||
REGEXP_MATCH, MetadataBackup
|
REGEXP_MATCH, MetadataBackup, force_to_bool
|
||||||
from calibre import strftime, isbytestring, prepare_string_for_xml
|
from calibre import strftime, isbytestring, prepare_string_for_xml
|
||||||
from calibre.constants import filesystem_encoding, DEBUG
|
from calibre.constants import filesystem_encoding, DEBUG
|
||||||
from calibre.gui2.library import DEFAULT_SORT
|
from calibre.gui2.library import DEFAULT_SORT
|
||||||
@ -624,20 +624,7 @@ class BooksModel(QAbstractTableModel): # {{{
|
|||||||
return None # displayed using a decorator
|
return None # displayed using a decorator
|
||||||
|
|
||||||
def bool_type_decorator(r, idx=-1, bool_cols_are_tristate=True):
|
def bool_type_decorator(r, idx=-1, bool_cols_are_tristate=True):
|
||||||
val = self.db.data[r][idx]
|
val = force_to_bool(self.db.data[r][idx])
|
||||||
if isinstance(val, (str, unicode)):
|
|
||||||
try:
|
|
||||||
val = icu_lower(val)
|
|
||||||
if not val:
|
|
||||||
val = None
|
|
||||||
elif val in [_('yes'), _('checked'), 'true']:
|
|
||||||
val = True
|
|
||||||
elif val in [_('no'), _('unchecked'), 'false']:
|
|
||||||
val = False
|
|
||||||
else:
|
|
||||||
val = bool(int(val))
|
|
||||||
except:
|
|
||||||
val = None
|
|
||||||
if not bool_cols_are_tristate:
|
if not bool_cols_are_tristate:
|
||||||
if val is None or not val:
|
if val is None or not val:
|
||||||
return self.bool_no_icon
|
return self.bool_no_icon
|
||||||
|
@ -144,6 +144,22 @@ def _match(query, value, matchkind):
|
|||||||
pass
|
pass
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def force_to_bool(val):
|
||||||
|
if isinstance(val, (str, unicode)):
|
||||||
|
try:
|
||||||
|
val = icu_lower(val)
|
||||||
|
if not val:
|
||||||
|
val = None
|
||||||
|
elif val in [_('yes'), _('checked'), 'true']:
|
||||||
|
val = True
|
||||||
|
elif val in [_('no'), _('unchecked'), 'false']:
|
||||||
|
val = False
|
||||||
|
else:
|
||||||
|
val = bool(int(val))
|
||||||
|
except:
|
||||||
|
val = None
|
||||||
|
return val
|
||||||
|
|
||||||
class CacheRow(list): # {{{
|
class CacheRow(list): # {{{
|
||||||
|
|
||||||
def __init__(self, db, composites, val):
|
def __init__(self, db, composites, val):
|
||||||
@ -532,37 +548,23 @@ class ResultCache(SearchQueryParser): # {{{
|
|||||||
if item is None:
|
if item is None:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
val = item[loc]
|
val = force_to_bool(item[loc])
|
||||||
if isinstance(val, (str, unicode)):
|
|
||||||
try:
|
|
||||||
val = icu_lower(val)
|
|
||||||
if not val:
|
|
||||||
val = None
|
|
||||||
elif val in [_('yes'), _('checked'), 'true']:
|
|
||||||
val = True
|
|
||||||
elif val in [_('no'), _('unchecked'), 'false']:
|
|
||||||
val = False
|
|
||||||
else:
|
|
||||||
val = bool(int(val))
|
|
||||||
except:
|
|
||||||
val = None
|
|
||||||
|
|
||||||
if not bools_are_tristate:
|
if not bools_are_tristate:
|
||||||
if val is None or not val: # item is None or set to false
|
if val is None or not val: # item is None or set to false
|
||||||
if query in [_('no'), _('unchecked'), 'false']:
|
if query in [_('no'), _('unchecked'), '_no', 'false']:
|
||||||
matches.add(item[0])
|
matches.add(item[0])
|
||||||
else: # item is explicitly set to true
|
else: # item is explicitly set to true
|
||||||
if query in [_('yes'), _('checked'), 'true']:
|
if query in [_('yes'), _('checked'), '_yes', 'true']:
|
||||||
matches.add(item[0])
|
matches.add(item[0])
|
||||||
else:
|
else:
|
||||||
if val is None:
|
if val is None:
|
||||||
if query in [_('empty'), _('blank'), 'false']:
|
if query in [_('empty'), _('blank'), '_empty', 'false']:
|
||||||
matches.add(item[0])
|
matches.add(item[0])
|
||||||
elif not val: # is not None and false
|
elif not val: # is not None and false
|
||||||
if query in [_('no'), _('unchecked'), 'true']:
|
if query in [_('no'), _('unchecked'), '_no', 'true']:
|
||||||
matches.add(item[0])
|
matches.add(item[0])
|
||||||
else: # item is not None and true
|
else: # item is not None and true
|
||||||
if query in [_('yes'), _('checked'), 'true']:
|
if query in [_('yes'), _('checked'), '_yes', 'true']:
|
||||||
matches.add(item[0])
|
matches.add(item[0])
|
||||||
return matches
|
return matches
|
||||||
|
|
||||||
@ -695,13 +697,14 @@ class ResultCache(SearchQueryParser): # {{{
|
|||||||
if item is None: continue
|
if item is None: continue
|
||||||
|
|
||||||
if not item[loc]:
|
if not item[loc]:
|
||||||
if q == 'false':
|
if q == 'false' and matchkind == CONTAINS_MATCH:
|
||||||
matches.add(item[0])
|
matches.add(item[0])
|
||||||
continue # item is empty. No possible matches below
|
continue # item is empty. No possible matches below
|
||||||
if q == 'false': # Field has something in it, so a false query does not match
|
if q == 'false'and matchkind == CONTAINS_MATCH:
|
||||||
|
# Field has something in it, so a false query does not match
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if q == 'true':
|
if q == 'true' and matchkind == CONTAINS_MATCH:
|
||||||
if isinstance(item[loc], basestring):
|
if isinstance(item[loc], basestring):
|
||||||
if item[loc].strip() == '':
|
if item[loc].strip() == '':
|
||||||
continue
|
continue
|
||||||
@ -989,18 +992,7 @@ class SortKeyGenerator(object):
|
|||||||
val = 0.0
|
val = 0.0
|
||||||
dt = 'float'
|
dt = 'float'
|
||||||
elif sb == 'bool':
|
elif sb == 'bool':
|
||||||
try:
|
val = force_to_bool(val)
|
||||||
v = icu_lower(val)
|
|
||||||
if not val:
|
|
||||||
val = None
|
|
||||||
elif v in [_('yes'), _('checked'), 'true']:
|
|
||||||
val = True
|
|
||||||
elif v in [_('no'), _('unchecked'), 'false']:
|
|
||||||
val = False
|
|
||||||
else:
|
|
||||||
val = bool(int(val))
|
|
||||||
except:
|
|
||||||
val = None
|
|
||||||
dt = 'bool'
|
dt = 'bool'
|
||||||
|
|
||||||
if dt == 'datetime':
|
if dt == 'datetime':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user