diff --git a/manuskript/data/labels.py b/manuskript/data/labels.py index 1267365..80d3995 100644 --- a/manuskript/data/labels.py +++ b/manuskript/data/labels.py @@ -10,8 +10,9 @@ from manuskript.io.mmdFile import MmdFile class Label: - def __init__(self, host, name: str, color: Color): + def __init__(self, host, index: int, name: str, color: Color): self.host = host + self.ID = index self.name = name self.color = color @@ -36,7 +37,7 @@ class LabelHost: if name is None: name = "New Label" - label = Label(self, name, color) + label = Label(self, 1+len(self.labels), name, color) self.labels[name] = label return label @@ -67,11 +68,14 @@ class LabelHost: def getLabel(self, name: str) -> Label: return self.labels.get(name) - def getLabelByID(self, id: int) -> Label | None: - index = 0 + def getLabelByID(self, ID: int | None) -> Label | None: + if ID is None: + return None + index = 1 for label in self.labels.values(): - if index == id: + if index == ID: + assert label.ID == ID return label index += 1 diff --git a/manuskript/data/outline.py b/manuskript/data/outline.py index 3c3a976..6de7c55 100644 --- a/manuskript/data/outline.py +++ b/manuskript/data/outline.py @@ -6,12 +6,12 @@ import os from collections import OrderedDict from enum import Enum, unique from manuskript.data.goal import Goal -from manuskript.data.labels import LabelHost +from manuskript.data.labels import LabelHost, Label from manuskript.data.plots import Plots -from manuskript.data.status import StatusHost +from manuskript.data.status import StatusHost, Status from manuskript.data.unique_id import UniqueIDHost from manuskript.io.mmdFile import MmdFile -from manuskript.util import CounterKind, countText, validString +from manuskript.util import CounterKind, countText, safeInt @unique @@ -50,14 +50,20 @@ class OutlineItem: if (item.UID is None) or (item.UID.value != int(ID)): item.UID = item.outline.host.loadID(int(ID)) + def loadLabelByID(outline, labelID: str) -> Label: + return outline.labels.getLabelByID(safeInt(labelID, 0)) + + def loadStatusByID(outline, statusID: str) -> Label: + return outline.statuses.getStatusByID(safeInt(statusID, 0)) + item.title = metadata.get("title", None) item.type = metadata.get("type", "md") item.summarySentence = metadata.get("summarySentence", None) item.summaryFull = metadata.get("summaryFull", None) item.POV = metadata.get("POV", None) item.notes = metadata.get("notes", None) - item.label = metadata.get("label", None) - item.status = metadata.get("status", None) + item.label = loadLabelByID(item.outline, metadata.get("label", None)) + item.status = loadStatusByID(item.outline, metadata.get("status", None)) item.compile = metadata.get("compile") item.goal = Goal.parse(metadata.get("setGoal", None)) @@ -75,8 +81,8 @@ class OutlineItem: metadata["summaryFull"] = item.summaryFull metadata["POV"] = item.POV metadata["notes"] = item.notes - metadata["label"] = item.label - metadata["status"] = item.status + metadata["label"] = None if item is None else item.label.ID + metadata["status"] = None if item is None else item.status.ID metadata["compile"] = item.compile metadata["setGoal"] = item.goal diff --git a/manuskript/data/status.py b/manuskript/data/status.py index ccf8d8b..941f6af 100644 --- a/manuskript/data/status.py +++ b/manuskript/data/status.py @@ -9,8 +9,9 @@ from manuskript.io.textFile import TextFile class Status: - def __init__(self, host, name: str): + def __init__(self, host, index: int, name: str): self.host = host + self.ID = index self.name = name @@ -34,7 +35,7 @@ class StatusHost: if name is None: name = "New Status" - status = Status(self, name) + status = Status(self, 1+len(self.statuses), name) self.statuses[name] = status return status @@ -65,11 +66,14 @@ class StatusHost: def getStatus(self, name: str) -> Status: return self.statuses.get(name) - def getStatusByID(self, id: int) -> Status | None: - index = 0 + def getStatusByID(self, ID: int | None) -> Status | None: + if ID is None: + return None + index = 1 for status in self.statuses.values(): - if index == id: + if index == ID: + assert status.ID == ID return status index += 1