@@ -40,10 +40,13 @@ def __init__(self, ledger: FavaLedger) -> None:
4040 self .sidebar_links : SidebarLinks = []
4141 #: Upcoming events in the next few days.
4242 self .upcoming_events : Sequence [Event ] = []
43+ #: User-defined filter presets.
44+ self .filter_presets : Sequence [tuple [str , str , str ]] = []
4345
4446 def load_file (self ) -> None : # noqa: D102
4547 custom_entries = self .ledger .all_entries_by_type .Custom
4648 self .sidebar_links = sidebar_links (custom_entries )
49+ self .filter_presets = filter_presets (custom_entries )
4750
4851 self .upcoming_events = upcoming_events (
4952 self .ledger .all_entries_by_type .Event ,
@@ -76,6 +79,25 @@ def sidebar_links(custom_entries: Sequence[Custom]) -> SidebarLinks:
7679 ]
7780
7881
82+ def filter_presets (
83+ custom_entries : Sequence [Custom ],
84+ ) -> Sequence [tuple [str , str , str ]]:
85+ """Parse custom entries for filter presets.
86+
87+ They have the following format:
88+
89+ 2016-04-01 custom "fava-filter-preset" "time" "month" "Current Month"
90+ 2016-04-01 custom "fava-filter-preset" "advanced" "-#tag" "Exclude #tag"
91+ """
92+ filter_preset_entries = [
93+ entry for entry in custom_entries if entry .type == "fava-filter-preset"
94+ ]
95+ return [
96+ (entry .values [0 ].value , entry .values [1 ].value , entry .values [2 ].value )
97+ for entry in filter_preset_entries
98+ ]
99+
100+
79101def upcoming_events (
80102 events : Sequence [Event ], max_delta : int
81103) -> Sequence [Event ]:
0 commit comments