# -*- coding: utf-8 -* """novelWriter Project Wrapper novelWriter – Project Wrapper =============================== Class holding a project File History: Created: 2018-09-29 [0.1.0] """ import logging import nw from os import path, mkdir from lxml import etree from datetime import datetime logger = logging.getLogger(__name__) class NWProject(): def __init__(self): self.mainConf = nw.CONFIG self.projTree = [] # Project Settings self.projPath = None self.projFile = "nwProject.nwx" self.bookTitle = "" self.bookAuthors = [] return def buildProjectTree(self): return True def openProject(self, fileName): if not path.isfile(fileName): logger.error("File not found: %s" % fileName) return False self.projPath = path.dirname(fileName) nwXML = etree.parse(fileName) xRoot = nwXML.getroot() nwxRoot = xRoot.tag appVersion = xRoot.attrib["appVersion"] fileVersion = xRoot.attrib["fileVersion"] logger.verbose("XML root is %s" % nwxRoot) logger.verbose("File version is %s" % fileVersion) if not nwxRoot == "novelWriterXML" or not fileVersion == "1.0": logger.error("Project file does not appear to be a novelWriterXML file version 1.0") return False # for xChild in xRoot: # if xChild.tag == "book": # logger.debug("BookOpen: Found book data") # for xItem in xChild: # if xItem.text is None: continue # if xItem.tag == "title": # logger.verbose("BookOpen: Title is '%s'" % xItem.text) # self.bookTitle = xItem.text # elif xItem.tag == "author": # logger.verbose("BookOpen: Author: '%s'" % xItem.text) # self.bookAuthors.append(xItem.text) self.mainConf.setRecent(self.projPath) return True def saveProject(self): if self.projPath is None: logger.error("Project path not set, cannot save.") return False if not path.isdir(self.projPath): logger.info("Created folder %s" % self.projPath) mkdir(self.projPath) # Root element and book details nwXML = etree.Element("novelWriterXML",attrib={ "fileVersion" : "1.0", "appVersion" : str(nw.__version__), "timeStamp" : datetime.now().strftime("%Y-%m-%d %H:%M:%S"), }) xBook = etree.SubElement(nwXML,"book") xBookTitle = etree.SubElement(xBook,"title") xBookTitle.text = self.bookTitle for bookAuthor in self.bookAuthors: if bookAuthor == "": continue xBookAuthor = etree.SubElement(xBook,"author") xBookAuthor.text = bookAuthor # Write the xml tree to file with open(path.join(self.projPath,self.projFile),"wb") as outFile: outFile.write(etree.tostring( nwXML, pretty_print = True, encoding = "utf-8", xml_declaration = True )) self.mainConf.setRecent(self.projPath) return True # # Set Functions # def setProjectPath(self, projPath): self.projPath = projPath return True def setProjectName(self, projName): self.projName = projName.strip() return True def setBookTitle(self, bookTitle): self.bookTitle = bookTitle.strip() return True def setBookAuthors(self, bookAuthors): self.bookAuthors = [] for bookAuthor in bookAuthors.split(","): self.bookAuthors.append(bookAuthor.strip()) return True # END Class NWProject