mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-05-10 16:48:31 +02:00
Track added/deleted counts in a register in the Journal class instead of attempting to infer it via controller counting
This commit is contained in:
parent
9f44ab22ce
commit
7eec231095
4 changed files with 39 additions and 33 deletions
|
@ -79,10 +79,6 @@ def run(args: "Namespace"):
|
||||||
append_mode(**kwargs)
|
append_mode(**kwargs)
|
||||||
return
|
return
|
||||||
|
|
||||||
# Get stats now for summary later
|
|
||||||
old_stats = _get_predit_stats(journal)
|
|
||||||
logging.debug(f"old_stats: {old_stats}")
|
|
||||||
|
|
||||||
# If not append mode, then we're in search mode (only 2 modes exist)
|
# If not append mode, then we're in search mode (only 2 modes exist)
|
||||||
search_mode(**kwargs)
|
search_mode(**kwargs)
|
||||||
entries_found_count = len(journal)
|
entries_found_count = len(journal)
|
||||||
|
@ -92,7 +88,7 @@ def run(args: "Namespace"):
|
||||||
_perform_actions_on_search_results(**kwargs)
|
_perform_actions_on_search_results(**kwargs)
|
||||||
|
|
||||||
if entries_found_count != 0 and _has_action_args(args):
|
if entries_found_count != 0 and _has_action_args(args):
|
||||||
_print_edited_summary(journal, old_stats)
|
_print_changed_counts(journal)
|
||||||
else:
|
else:
|
||||||
# display only occurs if no other action occurs
|
# display only occurs if no other action occurs
|
||||||
_display_search_results(**kwargs)
|
_display_search_results(**kwargs)
|
||||||
|
@ -188,11 +184,7 @@ def search_mode(args: "Namespace", journal: "Journal", **kwargs) -> None:
|
||||||
logging.debug("Search mode: starting")
|
logging.debug("Search mode: starting")
|
||||||
|
|
||||||
# If no search args, then return all results (don't filter anything)
|
# If no search args, then return all results (don't filter anything)
|
||||||
if (
|
if not _has_search_args(args) and not _has_display_args(args) and not args.text:
|
||||||
not _has_search_args(args)
|
|
||||||
and not _has_display_args(args)
|
|
||||||
and not args.text
|
|
||||||
):
|
|
||||||
logging.debug("Search mode: has no search args")
|
logging.debug("Search mode: has no search args")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -281,9 +273,7 @@ def _print_entries_found_count(count: int, args: "Namespace") -> None:
|
||||||
|
|
||||||
logging.debug("Printing general summary")
|
logging.debug("Printing general summary")
|
||||||
my_msg = (
|
my_msg = (
|
||||||
MsgText.EntryFoundCountSingular
|
MsgText.EntryFoundCountSingular if count == 1 else MsgText.EntryFoundCountPlural
|
||||||
if count == 1
|
|
||||||
else MsgText.EntryFoundCountPlural
|
|
||||||
)
|
)
|
||||||
print_msg(Message(my_msg, MsgStyle.NORMAL, {"num": count}))
|
print_msg(Message(my_msg, MsgStyle.NORMAL, {"num": count}))
|
||||||
|
|
||||||
|
@ -318,7 +308,9 @@ def _edit_search_results(
|
||||||
edited = get_text_from_editor(config, journal.editable_str())
|
edited = get_text_from_editor(config, journal.editable_str())
|
||||||
except JrnlException as e:
|
except JrnlException as e:
|
||||||
if e.has_message_text(MsgText.NoTextReceived):
|
if e.has_message_text(MsgText.NoTextReceived):
|
||||||
raise JrnlException(Message(MsgText.NoEditsReceivedJournalNotDeleted, MsgStyle.WARNING))
|
raise JrnlException(
|
||||||
|
Message(MsgText.NoEditsReceivedJournalNotDeleted, MsgStyle.WARNING)
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
|
@ -330,14 +322,8 @@ def _edit_search_results(
|
||||||
journal.write()
|
journal.write()
|
||||||
|
|
||||||
|
|
||||||
def _print_edited_summary(
|
def _print_changed_counts(journal: "Journal", **kwargs) -> None:
|
||||||
journal: "Journal", old_stats: dict[str, int], **kwargs
|
stats = journal.get_change_counts()
|
||||||
) -> None:
|
|
||||||
stats = {
|
|
||||||
"added": len(journal) - old_stats["count"],
|
|
||||||
"deleted": old_stats["count"] - len(journal),
|
|
||||||
"modified": len([e for e in journal.entries if e.modified]),
|
|
||||||
}
|
|
||||||
msgs = []
|
msgs = []
|
||||||
|
|
||||||
if stats["added"] > 0:
|
if stats["added"] > 0:
|
||||||
|
@ -380,7 +366,7 @@ def _delete_search_results(
|
||||||
entries_to_delete = journal.prompt_action_entries(MsgText.DeleteEntryQuestion)
|
entries_to_delete = journal.prompt_action_entries(MsgText.DeleteEntryQuestion)
|
||||||
|
|
||||||
journal.entries = old_entries
|
journal.entries = old_entries
|
||||||
|
|
||||||
if entries_to_delete:
|
if entries_to_delete:
|
||||||
journal.delete_entries(entries_to_delete)
|
journal.delete_entries(entries_to_delete)
|
||||||
|
|
||||||
|
|
|
@ -91,6 +91,7 @@ class Folder(Journal):
|
||||||
for entry in entries_to_delete:
|
for entry in entries_to_delete:
|
||||||
self.entries.remove(entry)
|
self.entries.remove(entry)
|
||||||
self._diff_entry_dates.append(entry.date)
|
self._diff_entry_dates.append(entry.date)
|
||||||
|
self.deleted_entry_count += 1
|
||||||
|
|
||||||
def change_date_entries(self, date: str, entries_to_change: list["Entry"]) -> None:
|
def change_date_entries(self, date: str, entries_to_change: list["Entry"]) -> None:
|
||||||
"""Changes entry dates to given date."""
|
"""Changes entry dates to given date."""
|
||||||
|
@ -115,4 +116,6 @@ class Folder(Journal):
|
||||||
# modified and how many got deleted later.
|
# modified and how many got deleted later.
|
||||||
for entry in mod_entries:
|
for entry in mod_entries:
|
||||||
entry.modified = not any(entry == old_entry for old_entry in self.entries)
|
entry.modified = not any(entry == old_entry for old_entry in self.entries)
|
||||||
|
|
||||||
|
self.increment_change_counts_by_edit(mod_entries)
|
||||||
self.entries = mod_entries
|
self.entries = mod_entries
|
||||||
|
|
|
@ -51,6 +51,10 @@ class Journal:
|
||||||
self.entries = []
|
self.entries = []
|
||||||
self.encryption_method = None
|
self.encryption_method = None
|
||||||
|
|
||||||
|
# Track changes to journal in session. Modified is tracked in Entry
|
||||||
|
self.added_entry_count = 0
|
||||||
|
self.deleted_entry_count = 0
|
||||||
|
|
||||||
def __len__(self):
|
def __len__(self):
|
||||||
"""Returns the number of entries"""
|
"""Returns the number of entries"""
|
||||||
return len(self.entries)
|
return len(self.entries)
|
||||||
|
@ -298,6 +302,7 @@ class Journal:
|
||||||
"""Deletes specific entries from a journal."""
|
"""Deletes specific entries from a journal."""
|
||||||
for entry in entries_to_delete:
|
for entry in entries_to_delete:
|
||||||
self.entries.remove(entry)
|
self.entries.remove(entry)
|
||||||
|
self.deleted_entry_count += 1
|
||||||
|
|
||||||
def change_date_entries(
|
def change_date_entries(
|
||||||
self, date: datetime.datetime, entries_to_change: list[Entry]
|
self, date: datetime.datetime, entries_to_change: list[Entry]
|
||||||
|
@ -378,8 +383,24 @@ class Journal:
|
||||||
# modified and how many got deleted later.
|
# modified and how many got deleted later.
|
||||||
for entry in mod_entries:
|
for entry in mod_entries:
|
||||||
entry.modified = not any(entry == old_entry for old_entry in self.entries)
|
entry.modified = not any(entry == old_entry for old_entry in self.entries)
|
||||||
|
|
||||||
|
self.increment_change_counts_by_edit(mod_entries)
|
||||||
|
|
||||||
self.entries = mod_entries
|
self.entries = mod_entries
|
||||||
|
|
||||||
|
def increment_change_counts_by_edit(self, mod_entries: Entry) -> None:
|
||||||
|
if len(mod_entries) > len(self.entries):
|
||||||
|
self.added_entry_count += len(mod_entries) - len(self.entries)
|
||||||
|
else:
|
||||||
|
self.deleted_entry_count += len(self.entries) - len(mod_entries)
|
||||||
|
|
||||||
|
def get_change_counts(self) -> dict:
|
||||||
|
return {
|
||||||
|
"added": self.added_entry_count,
|
||||||
|
"deleted": self.deleted_entry_count,
|
||||||
|
"modified": len([e for e in self.entries if e.modified]),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class LegacyJournal(Journal):
|
class LegacyJournal(Journal):
|
||||||
"""Legacy class to support opening journals formatted with the jrnl 1.x
|
"""Legacy class to support opening journals formatted with the jrnl 1.x
|
||||||
|
|
|
@ -36,10 +36,8 @@ Feature: Test combinations of edit, change-time, and delete
|
||||||
Y
|
Y
|
||||||
Then the editor should have been called
|
Then the editor should have been called
|
||||||
And the error output should contain "3 entries found"
|
And the error output should contain "3 entries found"
|
||||||
# 2 deleted minus 1 for the 1 added
|
And the error output should contain "2 entries deleted"
|
||||||
And the error output should contain "1 entry deleted"
|
And the error output should contain "1 entry added"
|
||||||
# Added entry counts as modified because it replaced a deleted entry
|
|
||||||
And the error output should contain "1 entry modified"
|
|
||||||
When we run "jrnl -99 --short"
|
When we run "jrnl -99 --short"
|
||||||
Then the error output should contain "2 entries found"
|
Then the error output should contain "2 entries found"
|
||||||
And the output should be
|
And the output should be
|
||||||
|
@ -65,7 +63,7 @@ Feature: Test combinations of edit, change-time, and delete
|
||||||
N
|
N
|
||||||
Then the error output should contain "3 entries found"
|
Then the error output should contain "3 entries found"
|
||||||
And the error output should contain "1 entry deleted"
|
And the error output should contain "1 entry deleted"
|
||||||
And the error output should contain "2 entries modified"
|
And the error output should contain "1 entry modified"
|
||||||
When we run "jrnl -99 --short"
|
When we run "jrnl -99 --short"
|
||||||
Then the output should be
|
Then the output should be
|
||||||
2020-08-31 14:32 A second entry in what I hope to be a long series.
|
2020-08-31 14:32 A second entry in what I hope to be a long series.
|
||||||
|
@ -91,11 +89,9 @@ Feature: Test combinations of edit, change-time, and delete
|
||||||
Y
|
Y
|
||||||
N
|
N
|
||||||
Then the error output should contain "3 entries found"
|
Then the error output should contain "3 entries found"
|
||||||
# deleted = 2 deleted minus 1 added by edit = 1
|
And the error output should contain "2 entries deleted"
|
||||||
# modified = 2 modified by change-time minus 1 of those deleted plus 1 of the deleted replaced by edit = 2
|
And the error output should contain "1 entry modified" # only 1, because the other was deleted
|
||||||
# added = 1 added minus 2 deleted = none
|
And the error output should contain "1 entry added" # by edit
|
||||||
And the error output should contain "1 entry deleted"
|
|
||||||
And the error output should contain "2 entries modified"
|
|
||||||
When we run "jrnl -99 --short"
|
When we run "jrnl -99 --short"
|
||||||
Then the output should be
|
Then the output should be
|
||||||
2022-04-23 10:30 The third entry finally after weeks without writing.
|
2022-04-23 10:30 The third entry finally after weeks without writing.
|
||||||
|
|
Loading…
Add table
Reference in a new issue