diff --git a/jrnl/journals/FolderJournal.py b/jrnl/journals/FolderJournal.py index c6faf1e02..018b2cebc 100644 --- a/jrnl/journals/FolderJournal.py +++ b/jrnl/journals/FolderJournal.py @@ -4,6 +4,7 @@ import codecs import os import pathlib +import re from typing import TYPE_CHECKING from jrnl import time @@ -17,7 +18,6 @@ DIGIT_PATTERN = "[0123456789]" YEAR_PATTERN = DIGIT_PATTERN * 4 MONTH_PATTERN = "[01]" + DIGIT_PATTERN -DAY_PATTERN = "[0123]" + DIGIT_PATTERN + ".txt" class Folder(Journal): @@ -34,7 +34,7 @@ def open(self) -> "Folder": self.entries = [] if os.path.exists(self.config["journal"]): - filenames = Folder._get_files(self.config["journal"]) + filenames = Folder._get_files(self, self.config["journal"]) for filename in filenames: with codecs.open(filename, "r", "utf-8") as f: journal = f.read() @@ -45,6 +45,8 @@ def open(self) -> "Folder": def write(self) -> None: """Writes only the entries that have been modified into proper files.""" + if self.config["extension"] is not None: + EXTENSION = self.config["extension"] # Create a list of dates of modified entries. Start with diff_entry_dates modified_dates = self._diff_entry_dates seen_dates = set(self._diff_entry_dates) @@ -63,7 +65,7 @@ def write(self) -> None: self.config["journal"], d.strftime("%Y"), d.strftime("%m"), - d.strftime("%d") + ".txt", + d.strftime("%d") + "." + EXTENSION, ) dirname = os.path.dirname(filename) # create directory if it doesn't exist @@ -81,7 +83,7 @@ def write(self) -> None: journal_file.write(journal) # look for and delete empty files filenames = [] - filenames = Folder._get_files(self.config["journal"]) + filenames = Folder._get_files(self, self.config["journal"]) for filename in filenames: if os.stat(filename).st_size <= 0: os.remove(filename) @@ -121,12 +123,14 @@ def parse_editable_str(self, edited: str) -> None: self.entries = mod_entries @staticmethod - def _get_files(journal_path: str) -> list[str]: + def _get_files(self, journal_path: str) -> list[str]: """Searches through sub directories starting with journal_path and find all text files that look like entries""" + if self.config["extension"] is not None: + EXTENSION = self.config["extension"] for year_folder in Folder._get_year_folders(pathlib.Path(journal_path)): for month_folder in Folder._get_month_folders(year_folder): - yield from Folder._get_day_files(month_folder) + yield from Folder._get_day_files(self, EXTENSION, month_folder) @staticmethod def _get_year_folders(path: pathlib.Path) -> list[pathlib.Path]: @@ -143,10 +147,14 @@ def _get_month_folders(path: pathlib.Path) -> list[pathlib.Path]: return @staticmethod - def _get_day_files(path: pathlib.Path) -> list[str]: - for child in path.glob(DAY_PATTERN): + def _get_day_files(self, extension, path: pathlib.Path) -> list[str]: + EXTENSION = extension + DAY_PATTERN = "[0-3][0-9]." + EXTENSION + for child in path.iterdir(): + match = re.fullmatch(DAY_PATTERN, str(child.name)) if ( - int(child.stem) > 0 + match is not None + and int(child.stem) > 0 and int(child.stem) <= 31 and time.is_valid_date( year=int(path.parent.name),