summaryrefslogtreecommitdiff
path: root/embroider_print.py
diff options
context:
space:
mode:
Diffstat (limited to 'embroider_print.py')
-rw-r--r--embroider_print.py63
1 files changed, 56 insertions, 7 deletions
diff --git a/embroider_print.py b/embroider_print.py
index c0b49bf2..bc96b2cd 100644
--- a/embroider_print.py
+++ b/embroider_print.py
@@ -9,7 +9,10 @@ import socket
import errno
import time
import logging
+from copy import deepcopy
import wx
+import appdirs
+import json
import inkex
import inkstitch
@@ -23,7 +26,7 @@ from jinja2 import Environment, FileSystemLoader, select_autoescape
from datetime import date
import base64
-from flask import Flask, request, Response, send_from_directory
+from flask import Flask, request, Response, send_from_directory, jsonify
import webbrowser
import requests
@@ -32,6 +35,29 @@ def datetimeformat(value, format='%Y/%m/%d'):
return value.strftime(format)
+def defaults_path():
+ defaults_dir = appdirs.user_config_dir('inkstitch')
+
+ if not os.path.exists(defaults_dir):
+ os.makedirs(defaults_dir)
+
+ return os.path.join(defaults_dir, 'print_settings.json')
+
+
+def load_defaults():
+ try:
+ with open(defaults_path(), 'r') as defaults_file:
+ defaults = json.load(defaults_file)
+ return defaults
+ except:
+ return {}
+
+
+def save_defaults(defaults):
+ with open(defaults_path(), 'w') as defaults_file:
+ json.dump(defaults, defaults_file)
+
+
def open_url(url):
# Avoid spurious output from xdg-open. Any output on stdout will crash
# inkscape.
@@ -71,6 +97,7 @@ def open_url(url):
class PrintPreviewServer(Thread):
def __init__(self, *args, **kwargs):
self.html = kwargs.pop('html')
+ self.metadata = kwargs.pop('metadata')
Thread.__init__(self, *args, **kwargs)
self.daemon = True
self.last_request_time = None
@@ -129,6 +156,27 @@ class PrintPreviewServer(Thread):
# nothing to do here -- request_started() will restart the watcher
return "OK"
+ @self.app.route('/settings/<field_name>', methods=['POST'])
+ def set_field(field_name):
+ self.metadata[field_name] = request.json['value']
+ return "OK"
+
+ @self.app.route('/settings/<field_mame>', methods=['GET'])
+ def get_field(field_name):
+ return jsonify(self.metadata[field_name])
+
+ @self.app.route('/settings', methods=['GET'])
+ def get_settings():
+ settings = {}
+ settings.update(load_defaults())
+ settings.update(self.metadata)
+ return jsonify(settings)
+
+ @self.app.route('/defaults', methods=['POST'])
+ def set_defaults():
+ save_defaults(request.json['value'])
+ return "OK"
+
def stop(self):
# for whatever reason, shutting down only seems possible in
# the context of a flask request, so we'll just make one
@@ -299,7 +347,11 @@ class Print(InkstitchExtension):
color_blocks = stitch_plan.color_blocks,
)
- print_server = PrintPreviewServer(html=html)
+ # We've totally mucked with the SVG. Restore it so that we can save
+ # metadata into it.
+ self.document = deepcopy(self.original_document)
+
+ print_server = PrintPreviewServer(html=html, metadata=self.get_inkstitch_metadata())
print_server.start()
time.sleep(1)
@@ -310,12 +362,9 @@ class Print(InkstitchExtension):
info_frame.Show()
app.MainLoop()
- # don't let inkex print the document out
- sys.exit(0)
-
if __name__ == '__main__':
- save_stderr()
+ #save_stderr()
effect = Print()
effect.affect()
- restore_stderr()
+ #restore_stderr()