diff --git a/lektor_groupby/groupby.py b/lektor_groupby/groupby.py index 372ccd8..6dfd888 100644 --- a/lektor_groupby/groupby.py +++ b/lektor_groupby/groupby.py @@ -22,6 +22,11 @@ class GroupBy: self._watcher = [] # type: List[Watcher] self._results = [] # type: List[GroupBySource] self.resolver = resolver + self.didBuild = False + + @property + def isNew(self) -> bool: + return not self.didBuild def add_watcher(self, key: str, config: 'AnyConfig') -> Watcher: ''' Init Config and add to watch list. ''' @@ -60,6 +65,7 @@ class GroupBy: def make_once(self, builder: 'Builder') -> None: ''' Perform groupby, iter over sources with watcher callback. ''' + self.didBuild = True if self._watcher: self.resolver.reset() for w in self._watcher: diff --git a/lektor_groupby/plugin.py b/lektor_groupby/plugin.py index 659e6ce..9fd8c95 100644 --- a/lektor_groupby/plugin.py +++ b/lektor_groupby/plugin.py @@ -1,4 +1,4 @@ -from lektor.db import Page # isinstance +from lektor.assets import File, Directory # isinstance from lektor.pluginsystem import Plugin # subclass from typing import TYPE_CHECKING, Iterator, Any from .backref import GroupByRef, VGroups @@ -27,8 +27,11 @@ class GroupByPlugin(Plugin): ) -> None: # before-build may be called before before-build-all (issue #1017) # make sure it is always evaluated first - if isinstance(source, Page): - self._init_once(builder) + if isinstance(source, (File, Directory)): + return + groupby = self._init_once(builder) + if groupby.isNew and isinstance(source, GroupBySource): + self.has_changes = True def on_after_build(self, build_state: 'BuildState', **extra: Any) -> None: if build_state.updated_artifacts: