Handle novel model refresh scenarios

This commit is contained in:
Veronica Berglyd Olsen
2025-03-22 20:25:34 +01:00
parent edf765f91f
commit 9990ebf193
8 changed files with 62 additions and 8 deletions
+3
View File
@@ -123,6 +123,7 @@ class Index:
def refreshNovelModel(self, tHandle: str) -> None:
"""Refresh a novel model."""
if model := self.getNovelModel(tHandle):
logger.debug("Refreshing novel model '%s'", tHandle)
model.beginResetModel()
model.clear()
self._appendSubTreeToModel(tHandle, model)
@@ -170,6 +171,8 @@ class Index:
self.scanText(nwItem.itemHandle, text, blockSignal=True)
self._indexBroken = False
SHARED.emitIndexAvailable(self._project)
for tHandle in self._novelModels:
self.refreshNovelModel(tHandle)
return
def deleteHandle(self, tHandle: str) -> None:
+6
View File
@@ -293,6 +293,12 @@ class NWItem:
self._project.tree.refreshItems([self._handle])
return
def notifyNovelStructureChange(self) -> None:
"""Notify that the structure of a novel has changed."""
if self._root and self._class == nwItemClass.NOVEL:
self._project.tree.novelStructureChanged(self._root)
return
##
# Lookup Methods
##
+4 -1
View File
@@ -193,7 +193,7 @@ class ProjectNode:
return self._parent
def child(self, row: int) -> ProjectNode | None:
"""Return a child ofg the node."""
"""Return a child of the node."""
if 0 <= row < len(self._children):
return self._children[row]
return None
@@ -218,6 +218,7 @@ class ProjectNode:
child._row = len(self._children)
self._children.append(child)
self._refreshChildrenPos()
self._item.notifyNovelStructureChange()
return
def takeChild(self, pos: int) -> ProjectNode | None:
@@ -226,6 +227,7 @@ class ProjectNode:
node = self._children.pop(pos)
self._refreshChildrenPos()
self.updateCount()
self._item.notifyNovelStructureChange()
return node
return None
@@ -236,6 +238,7 @@ class ProjectNode:
node = self._children.pop(source)
self._children.insert(target, node)
self._refreshChildrenPos()
self._item.notifyNovelStructureChange()
return
def setExpanded(self, state: bool) -> None:
+9 -1
View File
@@ -60,7 +60,7 @@ class NWTree:
also used for file names.
"""
__slots__ = ("_project", "_model", "_items", "_nodes", "_trash")
__slots__ = ("_project", "_model", "_items", "_nodes", "_trash", "_ready")
def __init__(self, project: NWProject) -> None:
self._project = project
@@ -68,6 +68,7 @@ class NWTree:
self._items: dict[str, NWItem] = {}
self._nodes: dict[str, ProjectNode] = {}
self._trash = None
self._ready = False
logger.debug("Ready: NWTree")
return
@@ -249,6 +250,7 @@ class NWTree:
logger.error("Not all items could be added to project tree")
self._trash = self._getTrashNode()
self._ready = True
self._model.endInsertRows()
self._model.layoutChanged.emit()
@@ -278,6 +280,12 @@ class NWTree:
self._model.layoutChanged.emit()
return
def novelStructureChanged(self, tHandle: str) -> None:
"""Emit a novel structure change signal."""
if self._ready:
SHARED.novelStructureChanged.emit(tHandle)
return
def checkConsistency(self, prefix: str) -> tuple[int, int]:
"""Check the project tree consistency. Also check the content
folder and add back files that were discovered but were not