Allow refreshing a novel model node

This commit is contained in:
Veronica Berglyd Olsen
2025-03-22 22:37:03 +01:00
parent ef652355bf
commit 848027856d
2 changed files with 84 additions and 25 deletions
+18 -13
View File
@@ -178,9 +178,9 @@ class Index:
return self._rootChange.get(rootHandle, self._indexChange) > float(checkTime)
return False
def refreshNovelModel(self, tHandle: str) -> None:
def refreshNovelModel(self, tHandle: str | None) -> None:
"""Refresh a novel model."""
if model := self.getNovelModel(tHandle):
if tHandle and (model := self.getNovelModel(tHandle)):
logger.info("Refreshing novel model '%s'", tHandle)
model.beginResetModel()
model.clear()
@@ -188,6 +188,19 @@ class Index:
model.endResetModel()
return
def updateNovelModelData(self, nwItem: NWItem) -> bool:
"""Refresh a novel model."""
if (
(rHandle := nwItem.itemRoot)
and (model := self._novelModels.get(rHandle))
and (node := self._itemIndex[nwItem.itemHandle])
and node.item.isDocumentLayout()
and node.item.isActive
):
logger.info("Updating novel model data '%s'", nwItem.itemHandle)
return model.refresh(node)
return False
##
# Load and Save Index to/from File
##
@@ -285,7 +298,6 @@ class Index:
# Keep a record of existing tags, and create a new item entry
itemTags = dict.fromkeys(self._itemIndex.allItemTags(tHandle), False)
itemHeadings = self._itemIndex.headingCount(tHandle)
self._itemIndex.add(tHandle, tItem)
# Run word counter for the whole text
@@ -309,10 +321,9 @@ class Index:
else:
self._scanActive(tHandle, tItem, text, itemTags)
if itemHeadings == self._itemIndex.headingCount(tHandle):
pass
else:
tItem.notifyNovelStructureChange()
if tItem.itemClass == nwItemClass.NOVEL and not blockSignal:
if not self.updateNovelModelData(tItem):
self.refreshNovelModel(tItem.itemRoot)
# Update timestamps for index changes
nowTime = time()
@@ -915,12 +926,6 @@ class ItemIndex:
self._items[tHandle] = IndexNode(tHandle, nwItem)
return
def headingCount(self, tHandle: str) -> int:
"""Return the number of headings in this item."""
if tHandle in self._items:
return len(self._items[tHandle])
return 0
def allItemTags(self, tHandle: str) -> list[str]:
"""Get all tags set for headings of an item."""
if tHandle in self._items: