Store multiple -contains arguments (OR default).

Allow multiple occurrences of the -contains argument
to be stored in a list. Previously, only the last occurrence was
considered. Additionally, the behavior has been modified to default to
OR logic, meaning that if multiple -contains arguments are provided,
entries matching any of them will be included in the results.
This commit is contained in:
Ricardo Ruiz 2024-05-09 23:43:29 +02:00
parent 0aefdb3f21
commit edff5f861c
2 changed files with 8 additions and 4 deletions

View file

@ -265,6 +265,7 @@ def parse_args(args: list[str] = []) -> argparse.Namespace:
reading.add_argument(
"-contains",
dest="contains",
action="append",
metavar="TEXT",
help="Show entries containing specific text (put quotes around text with "
"spaces)",

View file

@ -246,7 +246,7 @@ class Journal:
exclude_starred=False,
exclude_tagged=False,
strict=False,
contains=None,
contains=[],
exclude=[],
):
"""Removes all entries from the journal that don't match the filter.
@ -276,7 +276,7 @@ class Journal:
return 0 < len([tag for tag in tags if tag in excluded_tags])
if contains:
contains_lower = contains.casefold()
contains_lower = [substring.casefold() for substring in contains]
# Create datetime object for comparison below
# this approach allows various formats
@ -298,8 +298,11 @@ class Journal:
and (
not contains
or (
contains_lower in entry.title.casefold()
or contains_lower in entry.body.casefold()
any(
substring in entry.title.casefold()
or substring in entry.body.casefold()
for substring in contains_lower
)
)
)
]