diff --git a/Gemfile.lock b/Gemfile.lock
index 3d5400b..8450371 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -11,14 +11,42 @@ GEM
specs:
addressable (2.7.0)
public_suffix (>= 2.0.2, < 5.0)
+ celluloid (0.18.0)
+ timers (~> 4)
+ celluloid-io (0.17.3)
+ celluloid (>= 0.17.2)
+ nio4r (>= 1.1)
+ timers (>= 4.1.1)
chunky_png (1.3.11)
color (1.8)
css_parser (1.7.1)
addressable
+ daemons (1.4.1)
+ domain_name (0.5.20190701)
+ unf (>= 0.0.5, < 1.0.0)
+ eventmachine (1.2.7)
excon (0.73.0)
+ ffi (1.15.5)
+ ffi-compiler (1.0.1)
+ ffi (>= 1.0.0)
+ rake
+ http (5.0.1)
+ addressable (~> 2.3)
+ http-cookie (~> 1.0)
+ http-form_data (~> 2.2)
+ llhttp-ffi (~> 0.3.0)
+ http-cookie (1.0.4)
+ domain_name (~> 0.5)
+ http-form_data (2.3.0)
+ http_parser.rb (0.8.0)
json (2.3.0)
+ llhttp-ffi (0.3.1)
+ ffi-compiler (~> 1.0)
+ rake (~> 13.0)
+ matrix (0.4.2)
mustermann (1.1.1)
ruby2_keywords (~> 0.0.1)
+ nio4r (2.5.8)
pdf-core (0.7.0)
prawn (2.2.2)
pdf-core (~> 0.7.0)
@@ -27,9 +55,18 @@ GEM
css_parser (~> 1.6)
prawn (>= 0.11.1, < 3)
public_suffix (4.0.5)
+ puma (5.6.4)
+ nio4r (~> 2.0)
rack (2.2.2)
rack-protection (2.0.8.1)
rack
+ rake (13.0.6)
+ reel (0.6.1)
+ celluloid (>= 0.15.1)
+ celluloid-io (>= 0.15.0)
+ http (>= 0.6.0.pre)
+ http_parser.rb (>= 0.6.0)
+ websocket-driver (>= 0.5.1)
rmagick (4.1.2)
rqrcode (1.1.2)
chunky_png (~> 1.0)
@@ -41,8 +78,20 @@ GEM
rack (~> 2.0)
rack-protection (= 2.0.8.1)
tilt (~> 2.0)
+ thin (1.8.1)
+ daemons (~> 1.0, >= 1.0.9)
+ eventmachine (~> 1.0, >= 1.0.4)
+ rack (>= 1, < 3)
tilt (2.0.10)
+ timers (4.3.3)
ttfunk (1.6.2.1)
+ unf (0.1.4)
+ unf_ext
+ unf_ext (0.0.8.1)
+ webrick (1.7.0)
+ websocket-driver (0.7.5)
+ websocket-extensions (>= 0.1.0)
+ websocket-extensions (0.1.5)
PLATFORMS
ruby
@@ -50,12 +99,18 @@ PLATFORMS
DEPENDENCIES
color
excon
+ http
json
+ matrix
prawn
prawn-qrcode!
prawn-svg
+ puma
+ reel
rmagick
sinatra
+ thin
+ webrick
BUNDLED WITH
1.17.2
diff --git a/assets/dead.svg b/assets/dead.svg
new file mode 100644
index 0000000..d5b858e
--- /dev/null
+++ b/assets/dead.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/glider.svg b/assets/glider.svg
new file mode 100644
index 0000000..4e6c879
--- /dev/null
+++ b/assets/glider.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/hswro.svg b/assets/hswro.svg
new file mode 100755
index 0000000..4738929
--- /dev/null
+++ b/assets/hswro.svg
@@ -0,0 +1,51 @@
+
+
diff --git a/assets/money.svg b/assets/money.svg
new file mode 100644
index 0000000..6dcd317
--- /dev/null
+++ b/assets/money.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/person.svg b/assets/person.svg
new file mode 100644
index 0000000..4096627
--- /dev/null
+++ b/assets/person.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/warning.svg b/assets/warning.svg
new file mode 100644
index 0000000..ffc5471
--- /dev/null
+++ b/assets/warning.svg
@@ -0,0 +1,32 @@
+
+
+
+
diff --git a/main.rb b/main.rb
index 84cf200..6acb81f 100644
--- a/main.rb
+++ b/main.rb
@@ -37,7 +37,7 @@ module Excon
end
end
-BACKEND_URL = 'http://spejstore:8000/api/1/'
+BACKEND_URL = 'http://192.168.75.155:8000/api/1/'
CODE_PREFIX = "HTTP://I/"
def api(uri)
@@ -70,8 +70,12 @@ end
DYMO_LABEL_SIZE = [89, 36]
ZEBRA_LABEL_SIZE = [50, 30]
-def render_label(item_or_label_id, size: ZEBRA_LABEL_SIZE)
- item = api("items/#{item_or_label_id}")
+def render_label(dict_or_api, is_qr, item_or_label_id, size: ZEBRA_LABEL_SIZE)
+ if dict_or_api
+ item = item_or_label_id
+ else
+ item = api("items/#{item_or_label_id}")
+ end
pdf = Prawn::Document.new(page_size: size.map { |x| mm2pt(x) },
margin: [2, 2, 2, 6].map { |x| mm2pt(x) }) do
@@ -89,9 +93,12 @@ def render_label(item_or_label_id, size: ZEBRA_LABEL_SIZE)
# Right side
bounding_box([bounds.right - qr_size, bounds.top], width: qr_size) do
- print_qr_code CODE_PREFIX + item['short_id'], stroke: false,
- foreground_color: '000000',
- extent: bounds.width, margin: 0, pos: bounds.top_left
+
+ if is_qr
+ print_qr_code CODE_PREFIX + item['short_id'], stroke: false,
+ foreground_color: '000000',
+ extent: bounds.width, margin: 0, pos: bounds.top_left
+ end
owner_text = item["owner"] ? "owner: #{item['owner']}\n\n" : ""
metadata_text = owner_text # todo: creation date?
@@ -111,17 +118,43 @@ def render_label(item_or_label_id, size: ZEBRA_LABEL_SIZE)
pdf.render
end
+def render_hack(data, size: ZEBRA_LABEL_SIZE)
+ pdf = Prawn::Document.new(page_size: size.map { |x| mm2pt(x) },
+ margin: [2, 2, 2, 6].map { |x| mm2pt(x) }) do
+ font_families.update("DejaVuSans" => {
+ normal: "fonts/DejaVuSans.ttf",
+ italic: "fonts/DejaVuSans-Oblique.ttf",
+ bold: "fonts/DejaVuSans-Bold.ttf",
+ bold_italic: "fonts/DejaVuSans-BoldOblique.ttf"
+ })
+ font 'DejaVuSans'
+
+ image_size = [bounds.height / 2, 27].max
+ svg IO.read(data['image']), width: image_size, position: :right
+ bounding_box(bounds.top_left, width: bounds.width - image_size) do
+ text_box data['text'],
+ size: 40, align: :center, valign: :center, width: bounds.width-10,
+ inline_format: true, overflow: :shrink_to_fit, disable_wrap_by_char: true
+ end
+
+
+
+ end
+
+ pdf.render
+end
+
set :bind, '0.0.0.0'
get '/api/1/preview/:id.pdf' do
headers["Content-Type"] = "application/pdf; charset=utf8"
- render_label params["id"]
+ render_label(false,true,params["id"])
end
get '/api/1/preview/:id.png' do
headers["Content-Type"] = "image/png"
img = Magick::ImageList.new()
- img = img.from_blob(render_label(params["id"])){ self.density = 200 }.first
+ img = img.from_blob(render_label(false,true,params["id"])){ self.density = 200 }.first
img.format = 'png'
img.background_color = 'white'
img.to_blob
@@ -129,7 +162,73 @@ end
post '/api/1/print/:id' do
temp = Tempfile.new('labelmaker')
- temp.write(render_label(params["id"]))
+ temp.write(render_label(false,true, params["id"]))
temp.close
- system("lpr -P DYMO_LabelWriter_450 #{temp.path}")
+ system("lpr -P Zebra #{temp.path}")
+end
+
+get '/api/1/testprint' do
+ test = {"owner" => "grzegorz_brzęczyszczykiewicz", "short_id" => "wszczebrzeszyniechrzaszczbrzmiwtrzcinie", "name" => "pchnąć w tę łódź jeża lub ośm skrzyń fig"}
+ temp = Tempfile.new('labelmaker')
+ temp.write(render_label(true,true,test))
+ temp.close
+ system("lpr -P Zebra #{temp.path}")
+end
+
+get '/api/1/testshow' do
+ test = {"owner" => "grzegorz_brzęczyszczykiewicz", "short_id" => "wszczebrzeszyniechrzaszczbrzmiwtrzcinie", "name" => "pchnąć w tę łódź jeża lub ośm skrzyń fig"}
+ headers["Content-Type"] = "application/pdf; charset=utf8"
+ render_label(true, true, test)
+end
+
+templates = {
+ "prywatne" => { "text" => "Ten przedmiot jest własnością prywatną", "image" => "assets/person.svg"},
+ "hsowe" => { "text" => "Ten przedmiot należy do HSWro", "image" => "assets/hswro.svg"},
+ "hackuj" => { "text" => "Hackuj ile dusza zapragnie", "image" => "assets/glider.svg"},
+ "zepsute" => { "text" => "Ten przedmiot jest zepsuty", "image" => "assets/dead.svg"},
+ "eksploatuje" => { "text" => "Ten przedmiot eksploatuje materiały", "image" => "assets/money.svg"},
+ "niehackuj" => { "text" => "Nie hackuj tego przedmiotu", "image" => "assets/glider.svg"},
+
+# meme
+ "bhp" => { "text" => "Gdy ci smutno, gdy ci źle, użyj pasty BHP", "image" => "assets/hswro.svg"},
+
+}
+
+get '/api/1/templates/preview/:id' do
+ headers["Content-Type"] = "application/pdf; charset=utf8"
+ render_hack(templates[params["id"]])
+end
+
+get '/api/1/templates/print/:id' do
+ temp = Tempfile.new('labelmaker')
+ temp.write(render_hack(templates[params["id"]]))
+ temp.close
+ system("lpr -P Zebra #{temp.path}")
+end
+
+get '/api/1/nametag/preview/:id' do
+ headers["Content-Type"] = "application/pdf; charset=utf8"
+ render_hack({"text" => params['id'], "image" => "assets/hswro.svg"})
+end
+
+get '/api/1/nametag/print/:id' do
+ temp = Tempfile.new('labelmaker')
+ temp.write(render_hack({"text" => params['id'], "image" => "assets/hswro.svg"}))
+ temp.close
+ system("lpr -P Zebra #{temp.path}")
+end
+
+get '/api/1/customitem/preview/:owner/:name' do
+ test = {"owner" => params["owner"], "short_id" => "test", "name" => params["name"]}
+ headers["Content-Type"] = "application/pdf; charset=utf8"
+ render_label(true,false,test)
+end
+
+
+get '/api/1/customitem/print/:owner/:name' do
+ test = {"owner" => params["owner"], "short_id" => "test", "name" => params["name"]}
+ temp = Tempfile.new('labelmaker')
+ temp.write(render_label(true,false,test))
+ temp.close
+ system("lpr -P Zebra #{temp.path}")
end