Added io handling for project info, color and labels

Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
This commit is contained in:
TheJackiMonster 2021-05-09 01:15:14 +02:00
parent caf428592a
commit f9ad8d214c
No known key found for this signature in database
GPG key ID: D850A5F772E880F9
7 changed files with 164 additions and 23 deletions

View file

@ -15,23 +15,3 @@ path = os.path.join(sys.path[1], "sample-projects/book-of-acts")
project = data.Project(path + ".msk")
project.load()
for item in project.outline.all():
print(str(item.title) + " " + str(item.goal))
settings = project.settings
print(settings.properties)
plots = project.plots
revs = project.revisions
for status in project.statuses:
print("--" + str(status))
#settings.set("saveToZip", True)
#project.save()
#settings.set("saveToZip", False)
#project.save()

View file

@ -6,6 +6,8 @@ from manuskript.data.project import Project
from manuskript.data.goal import GoalKind, Goal
from manuskript.data.outline import Outline, OutlineFolder, OutlineText
from manuskript.data.revisions import Revisions
from manuskript.data.settings import Settings
from manuskript.data.color import Color
from manuskript.data.labels import LabelHost, Label
from manuskript.data.status import StatusHost, Status
from manuskript.data.settings import Settings
from manuskript.data.unique_id import UniqueIDHost, UniqueID

26
manuskript/data/color.py Normal file
View file

@ -0,0 +1,26 @@
#!/usr/bin/env python
# --!-- coding: utf8 --!--
import re
class Color:
def __init__(self, red: int, green: int, blue: int):
self.red = red
self.green = green
self.blue = blue
def __str__(self):
return "#%02x%02x%02x" % (self.red, self.green, self.blue)
@classmethod
def parse(cls, string: str):
colorPattern = re.compile(r"\#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})")
m = colorPattern.match(string)
if m is None:
return None
return Color(int(m.group(1), 16), int(m.group(2), 16), int(m.group(3), 16))

50
manuskript/data/info.py Normal file
View file

@ -0,0 +1,50 @@
#!/usr/bin/env python
# --!-- coding: utf8 --!--
import os
from manuskript.io.mmdFile import MmdFile
class Info:
def __init__(self, path):
self.file = MmdFile(os.path.join(path, "infos.txt"), 16)
self.title = None
self.subtitle = None
self.serie = None
self.volume = None
self.genre = None
self.license = None
self.author = None
self.email = None
def load(self):
try:
metadata, _ = self.file.loadMMD(True)
except FileNotFoundError:
metadata = dict()
self.title = metadata.get("Title", None)
self.subtitle = metadata.get("Subtitle", None)
self.serie = metadata.get("Serie", None)
self.volume = metadata.get("Volume", None)
self.genre = metadata.get("Genre", None)
self.license = metadata.get("License", None)
self.author = metadata.get("Author", None)
self.email = metadata.get("Email", None)
def save(self):
metadata = dict()
metadata["Title"] = self.title
metadata["Subtitle"] = self.subtitle
metadata["Serie"] = self.serie
metadata["Volume"] = self.volume
metadata["Genre"] = self.genre
metadata["License"] = self.license
metadata["Author"] = self.author
metadata["Email"] = self.email
self.file.save((metadata, None))

72
manuskript/data/labels.py Normal file
View file

@ -0,0 +1,72 @@
#!/usr/bin/env python
# --!-- coding: utf8 --!--
import os
from manuskript.data.color import Color
from manuskript.io.mmdFile import MmdFile
class Label:
def __init__(self, host, name: str, color: Color):
self.host = host
self.name = name
self.color = color
def __str__(self):
return self.name
def load(self):
self.host.load()
def save(self):
self.host.save()
class LabelHost:
def __init__(self, path):
self.file = MmdFile(os.path.join(path, "labels.txt"), 21)
self.labels = dict()
def addLabel(self, name: str, color: Color):
self.labels[name] = Label(self, name, color)
def removeLabel(self, name: str):
self.labels.pop(name)
def renameLabel(self, oldName: str, newName: str):
label = self.labels.get(oldName)
label.name = newName
self.labels[newName] = label
self.labels.pop(oldName)
def getLabel(self, name: str):
return self.labels.get(name)
def __iter__(self):
return self.labels.values().__iter__()
def load(self):
try:
metadata, _ = self.file.loadMMD(True)
self.labels.clear()
except FileNotFoundError:
self.labels.clear()
return
for (name, value) in metadata.items():
if value is None:
continue
self.addLabel(name, Color.parse(value))
def save(self):
metadata = dict()
for label in self.labels:
metadata[label.name] = str(label.color)
self.file.save((metadata, None))

View file

@ -2,7 +2,9 @@
# --!-- coding: utf8 --!--
from zipfile import BadZipFile
from manuskript.data.info import Info
from manuskript.data.summary import Summary
from manuskript.data.labels import LabelHost
from manuskript.data.status import StatusHost
from manuskript.data.settings import Settings
from manuskript.data.plots import Plots
@ -16,7 +18,9 @@ class Project:
def __init__(self, path):
self.file = MskFile(path)
self.info = Info(self.file.dir_path)
self.summary = Summary(self.file.dir_path)
self.labels = LabelHost(self.file.dir_path)
self.statuses = StatusHost(self.file.dir_path)
self.settings = Settings(self.file.dir_path)
self.plots = Plots(self.file.dir_path)
@ -34,7 +38,9 @@ class Project:
except FileNotFoundError:
return
self.info.load()
self.summary.load()
self.labels.load()
self.statuses.load()
self.settings.load()
self.plots.load()
@ -47,7 +53,9 @@ class Project:
saveToZip = self.settings.isEnabled("saveToZip")
self.file.setZipFile(saveToZip)
self.summary.load()
self.info.save()
self.summary.save()
self.labels.save()
self.statuses.save()
self.settings.save()
self.plots.save()

View file

@ -17,7 +17,10 @@ class Summary:
self.full = None
def load(self):
metadata, _ = self.file.loadMMD(True)
try:
metadata, _ = self.file.loadMMD(True)
except FileNotFoundError:
metadata = dict()
self.sentence = metadata.get("Sentence", None)
self.paragraph = metadata.get("Paragraph", None)