From 674cebdea2559e3b22cf999c3a2f02a84eadad8f Mon Sep 17 00:00:00 2001 From: TheJackiMonster Date: Sun, 9 May 2021 02:14:36 +0200 Subject: [PATCH] Fixed differences between new data models and sample data Signed-off-by: TheJackiMonster --- bin/test_io.py | 2 ++ manuskript/data/characters.py | 21 +++++++++++++-------- manuskript/data/goal.py | 7 +++++-- manuskript/data/labels.py | 4 ++-- manuskript/data/outline.py | 10 ++++++---- manuskript/io/mmdFile.py | 9 ++++++--- 6 files changed, 34 insertions(+), 19 deletions(-) diff --git a/bin/test_io.py b/bin/test_io.py index cf203a1e..94ce9981 100644 --- a/bin/test_io.py +++ b/bin/test_io.py @@ -14,3 +14,5 @@ path = os.path.join(sys.path[1], "sample-projects/book-of-acts") project = data.Project(path + ".msk") project.load() + +project.save() diff --git a/manuskript/data/characters.py b/manuskript/data/characters.py index e7d1f634..a78ac18b 100644 --- a/manuskript/data/characters.py +++ b/manuskript/data/characters.py @@ -3,6 +3,7 @@ import os +from collections import OrderedDict from manuskript.data.color import Color from manuskript.data.unique_id import UniqueIDHost from manuskript.io.mmdFile import MmdFile @@ -17,7 +18,7 @@ class Character: self.UID = None self.name = None self.importance = None - self.pov = True + self.POV = None self.motivation = None self.goal = None self.conflict = None @@ -29,6 +30,9 @@ class Character: self.color = None self.details = dict() + def allowPOV(self) -> bool: + return True if self.POV is None else self.POV + @classmethod def loadAttribute(cls, metadata: dict, name: str, defaultValue=None): if name in metadata: @@ -47,7 +51,7 @@ class Character: self.UID = self.characters.host.loadID(int(ID)) self.name = Character.loadAttribute(metadata, "Name", None) self.importance = Character.loadAttribute(metadata, "Importance", None) - self.pov = Character.loadAttribute(metadata, "POV", True) + self.POV = Character.loadAttribute(metadata, "POV", None) self.motivation = Character.loadAttribute(metadata, "Motivation", None) self.goal = Character.loadAttribute(metadata, "Goal", None) self.conflict = Character.loadAttribute(metadata, "Conflict", None) @@ -64,15 +68,12 @@ class Character: self.details[key] = value def save(self): - metadata = dict() + metadata = OrderedDict() - for (key, value) in self.details.items(): - metadata[key] = value - - metadata["ID"] = str(self.UID.value) metadata["Name"] = self.name + metadata["ID"] = str(self.UID.value) metadata["Importance"] = self.importance - metadata["POV"] = self.pov + metadata["POV"] = self.POV metadata["Motivation"] = self.motivation metadata["Goal"] = self.goal metadata["Conflict"] = self.conflict @@ -83,6 +84,10 @@ class Character: metadata["Notes"] = self.notes metadata["Color"] = self.color + for (key, value) in self.details.items(): + if not (key in metadata): + metadata[key] = value + self.file.save((metadata, None)) diff --git a/manuskript/data/goal.py b/manuskript/data/goal.py index 4a406f6f..8a128136 100644 --- a/manuskript/data/goal.py +++ b/manuskript/data/goal.py @@ -13,11 +13,14 @@ class GoalKind(Enum): class Goal: def __init__(self, value: int = 0, kind: GoalKind = GoalKind.WORDS): - self.value = 0 + self.value = value self.kind = kind def __str__(self): - return str(self.value) + " " + self.kind.name.lower() + if self.kind != GoalKind.WORDS: + return str(self.value) + " " + self.kind.name.lower() + else: + return str(self.value) @classmethod def parse(cls, string: str): diff --git a/manuskript/data/labels.py b/manuskript/data/labels.py index dea3ff71..556f6041 100644 --- a/manuskript/data/labels.py +++ b/manuskript/data/labels.py @@ -66,7 +66,7 @@ class LabelHost: def save(self): metadata = dict() - for label in self.labels: - metadata[label.name] = label.color + for (name, label) in self.labels.items(): + metadata[name] = label.color self.file.save((metadata, None)) diff --git a/manuskript/data/outline.py b/manuskript/data/outline.py index a58f2572..e3df7c57 100644 --- a/manuskript/data/outline.py +++ b/manuskript/data/outline.py @@ -3,6 +3,7 @@ import os +from collections import OrderedDict from enum import Enum, unique from manuskript.data.goal import Goal from manuskript.data.unique_id import UniqueIDHost @@ -56,13 +57,13 @@ class OutlineItem: @classmethod def saveMetadata(cls, item): - metadata = dict() + metadata = OrderedDict() if item.UID is None: return metadata - metadata["ID"] = str(item.UID.value) metadata["title"] = item.title + metadata["ID"] = str(item.UID.value) metadata["type"] = item.type metadata["summarySentence"] = item.summarySentence metadata["summaryFull"] = item.summaryFull @@ -71,7 +72,7 @@ class OutlineItem: metadata["label"] = item.label metadata["status"] = item.status metadata["compile"] = item.compile - metadata["setGoal"] = str(item.goal) + metadata["setGoal"] = item.goal return metadata @@ -101,6 +102,7 @@ class OutlineText(OutlineItem): def save(self): if self.state == OutlineState.OPTIMIZED: + self.outline.host.removeID(self.UID) self.load(False) metadata = OutlineItem.saveMetadata(self) @@ -163,7 +165,7 @@ class OutlineFolder(OutlineItem): def save(self): self.type = "folder" metadata = OutlineItem.saveMetadata(self) - self.file.save((metadata, "")) + self.file.save((metadata, "\n")) class Outline: diff --git a/manuskript/io/mmdFile.py b/manuskript/io/mmdFile.py index 1ca4356d..076c7e1c 100644 --- a/manuskript/io/mmdFile.py +++ b/manuskript/io/mmdFile.py @@ -8,7 +8,7 @@ from manuskript.io.abstractFile import AbstractFile class MmdFile(AbstractFile): - def __init__(self, path, metaSpacing = 16): + def __init__(self, path, metaSpacing=16): AbstractFile.__init__(self, path) self.metaSpacing = metaSpacing @@ -56,7 +56,10 @@ class MmdFile(AbstractFile): metadata, body = content metaSpacing = self.metaSpacing - for key in metadata.keys(): + for (key, value) in metadata.items(): + if value is None: + continue + metaSpacing = max(metaSpacing, len(key) + 2) with open(self.path, 'wt', encoding='utf-8') as file: @@ -65,7 +68,7 @@ class MmdFile(AbstractFile): continue spacing = metaSpacing - (len(key) + 2) - lines = value.split("\n") + lines = str(value).split("\n") file.write(key + ": " + spacing * " " + lines[0] + "\n")