fix picture merge, add token replacement, fiddle with pagebreaks
This commit is contained in:
parent
6c41c91050
commit
e848834630
|
@ -1,6 +1,7 @@
|
||||||
# Ignore Credentials
|
# Ignore Credentials
|
||||||
client_secret_*.json
|
client_secret_*.json
|
||||||
credentials.json
|
credentials.json
|
||||||
|
.~lock*
|
||||||
|
|
||||||
# Byte-compiled / optimized / DLL files
|
# Byte-compiled / optimized / DLL files
|
||||||
__pycache__/
|
__pycache__/
|
||||||
|
|
Binary file not shown.
10
index.html
10
index.html
|
@ -22,17 +22,11 @@
|
||||||
|
|
||||||
function onEditorCreated(err, e) {
|
function onEditorCreated(err, e) {
|
||||||
editor = e;
|
editor = e;
|
||||||
// editor.openDocumentFromUrl("book-of-status.odt");
|
editor.openDocumentFromUrl("book-of-status.odt");
|
||||||
editor.openDocumentFromUrl("texts/Cover.odt");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
editorOptions = {
|
editorOptions = {
|
||||||
modus: Wodo.MODUS_REVIEW,
|
modus: Wodo.MODUS_REVIEW
|
||||||
// undoRedoEnabled: false,
|
|
||||||
// userData: {
|
|
||||||
// fullName: "Otto \"WebODF\" Annotator",
|
|
||||||
// color: "blue"
|
|
||||||
// }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Wodo.createTextEditor('container', editorOptions, onEditorCreated);
|
Wodo.createTextEditor('container', editorOptions, onEditorCreated);
|
||||||
|
|
56
main.py
56
main.py
|
@ -2,6 +2,7 @@
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
import os, re, shutil, stat, io
|
import os, re, shutil, stat, io
|
||||||
import git
|
import git
|
||||||
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
# OAuth
|
# OAuth
|
||||||
import httplib2
|
import httplib2
|
||||||
|
@ -14,8 +15,10 @@ from apiclient.http import MediaIoBaseDownload
|
||||||
# ODF
|
# ODF
|
||||||
import zipfile, xml.dom.minidom
|
import zipfile, xml.dom.minidom
|
||||||
from odf.opendocument import OpenDocumentText, load
|
from odf.opendocument import OpenDocumentText, load
|
||||||
|
from odf import text, teletype
|
||||||
from odf.element import Text
|
from odf.element import Text
|
||||||
from odf.text import P
|
from odf.text import P
|
||||||
|
from odf.style import Style, TextProperties, ParagraphProperties
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import argparse
|
import argparse
|
||||||
|
@ -60,7 +63,8 @@ def remove_readonly(func, path, _):
|
||||||
func(path)
|
func(path)
|
||||||
|
|
||||||
def merge(inputfile, textdoc):
|
def merge(inputfile, textdoc):
|
||||||
# TODO replace
|
|
||||||
|
|
||||||
inputtextdoc = load(inputfile)
|
inputtextdoc = load(inputfile)
|
||||||
# Need to make a copy of the list because addElement unlinks from the original
|
# Need to make a copy of the list because addElement unlinks from the original
|
||||||
for meta in inputtextdoc.meta.childNodes[:]:
|
for meta in inputtextdoc.meta.childNodes[:]:
|
||||||
|
@ -86,16 +90,30 @@ def merge(inputfile, textdoc):
|
||||||
|
|
||||||
for body in inputtextdoc.body.childNodes[:]:
|
for body in inputtextdoc.body.childNodes[:]:
|
||||||
textdoc.body.addElement(body)
|
textdoc.body.addElement(body)
|
||||||
|
textdoc.Pictures = {**textdoc.Pictures, **inputtextdoc.Pictures}
|
||||||
|
return textdoc
|
||||||
|
|
||||||
textdoc.Pictures = inputtextdoc.Pictures
|
def replace_tokens(textdoc):
|
||||||
|
repo = git.Repo('.')
|
||||||
|
assert not repo.bare
|
||||||
|
LAST_COMMIT = repo.head.object.hexsha
|
||||||
|
GENERATED_TIME = datetime.now(timezone.utc).strftime("%Y.%m.%d %H:%M")
|
||||||
|
|
||||||
|
texts = textdoc.getElementsByType(text.P)
|
||||||
|
s = len(texts)
|
||||||
|
for i in range(s):
|
||||||
|
tmp_text = teletype.extractText(texts[i])
|
||||||
|
if '%DATETIME%' in tmp_text or '%LAST_GIT_COMMIT%' in tmp_text:
|
||||||
|
tmp_text = tmp_text.replace('%DATETIME%',GENERATED_TIME)
|
||||||
|
tmp_text = tmp_text.replace('%LAST_GIT_COMMIT%', LAST_COMMIT)
|
||||||
|
new_S = text.P()
|
||||||
|
new_S.setAttribute("stylename",texts[i].getAttribute("stylename"))
|
||||||
|
new_S.addText(tmp_text)
|
||||||
|
texts[i].parentNode.insertBefore(new_S,texts[i])
|
||||||
|
texts[i].parentNode.removeChild(texts[i])
|
||||||
return textdoc
|
return textdoc
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
repo = git.Repo('.')
|
|
||||||
assert not repo.bare
|
|
||||||
sha = repo.head.object.hexsha
|
|
||||||
exit(sha)
|
|
||||||
|
|
||||||
credentials = get_credentials()
|
credentials = get_credentials()
|
||||||
http = credentials.authorize(httplib2.Http())
|
http = credentials.authorize(httplib2.Http())
|
||||||
service = discovery.build('drive', 'v3', http=http)
|
service = discovery.build('drive', 'v3', http=http)
|
||||||
|
@ -116,16 +134,34 @@ def main():
|
||||||
shutil.rmtree(TEXTS_DIR, onerror=remove_readonly)
|
shutil.rmtree(TEXTS_DIR, onerror=remove_readonly)
|
||||||
os.makedirs(TEXTS_DIR)
|
os.makedirs(TEXTS_DIR)
|
||||||
|
|
||||||
book_of_status = OpenDocumentText()
|
# Hacky but to prevent step iterator issue when mergning documents
|
||||||
for item in items:
|
doc_stream = get_document(service, items[0]['id'])
|
||||||
|
doc_file = os.path.join(TEXTS_DIR, "{0}.odt".format(items[0]['name']))
|
||||||
|
with open(doc_file, 'wb') as out:
|
||||||
|
out.write(doc_stream.getvalue())
|
||||||
|
book_of_status = load(doc_stream)
|
||||||
|
|
||||||
|
# withbreak = Style(name="WithBreak", parentstylename="Standard", family="paragraph")
|
||||||
|
# withbreak.addElement(ParagraphProperties(breakbefore="page"))
|
||||||
|
# book_of_status.automaticstyles.addElement(withbreak)
|
||||||
|
# page_seperator = P(stylename=withbreak,text=u'')
|
||||||
|
|
||||||
|
|
||||||
|
for item in items[1:]:
|
||||||
print('{0} ({1})'.format(item['name'], item['id']))
|
print('{0} ({1})'.format(item['name'], item['id']))
|
||||||
doc_stream = get_document(service, item['id'])
|
doc_stream = get_document(service, item['id'])
|
||||||
doc_file = os.path.join(TEXTS_DIR, "{0}.odt".format(item['name']))
|
doc_file = os.path.join(TEXTS_DIR, "{0}.odt".format(item['name']))
|
||||||
|
|
||||||
with open(doc_file, 'wb') as out:
|
with open(doc_file, 'wb') as out:
|
||||||
out.write(doc_stream.getvalue())
|
out.write(doc_stream.getvalue())
|
||||||
|
|
||||||
|
# TODO unclear if this is the best approach
|
||||||
|
# book_of_status.text.addElement(page_seperator)
|
||||||
|
book_of_status.text.addElement(text.SoftPageBreak())
|
||||||
book_of_status = merge(doc_stream, book_of_status)
|
book_of_status = merge(doc_stream, book_of_status)
|
||||||
|
|
||||||
|
|
||||||
|
# Doesn't work well
|
||||||
|
book_of_status = replace_tokens(book_of_status)
|
||||||
book_of_status.save("book-of-status.odt")
|
book_of_status.save("book-of-status.odt")
|
||||||
|
|
||||||
|
|
||||||
|
|
BIN
texts/Cover.odt
BIN
texts/Cover.odt
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue