deploy / deploy (push) Successful in 10s
- Home page is now just the print server overview, no more unrelated network links (3D printers, Cockpit) left over from when this was a general landing page. - Navbar shows which section is active; Brother's per-printer buttons now live under a dedicated Brother nav item instead of always-visible. - Shipping labels: paste raw ZPL directly (no need to save to a file first), with a Labelary preview link alongside it. - Receipts: paste already-formatted ESC/POS text directly, printed as-is. - Both can save what they just printed into a shared label repository (lib/label_repository.rb, one JSON file per label under data/labels/) for reprinting later -- saving happens independently of whether the print itself succeeds, so a failed/offline printer doesn't lose the content.
47 lines
1.2 KiB
Ruby
47 lines
1.2 KiB
Ruby
require 'json'
|
|
require 'securerandom'
|
|
require 'fileutils'
|
|
|
|
# Simple file-backed store for reusable ZPL/ESC-POS label templates -- one
|
|
# JSON file per label under DIR, similar in spirit to brother_ql_web's own
|
|
# label repository. No per-printer targeting yet (type just says which print
|
|
# path to use); that can be added once labels can target any of the five
|
|
# printers via the Brother API.
|
|
class LabelRepository
|
|
def initialize(dir)
|
|
@dir = dir
|
|
FileUtils.mkdir_p(@dir)
|
|
end
|
|
|
|
# type: "zpl" or "escpos"
|
|
def all(type: nil)
|
|
Dir.glob(File.join(@dir, '*.json')).map { |f| JSON.parse(File.read(f)) }
|
|
.select { |l| type.nil? || l['type'] == type }
|
|
.sort_by { |l| l['name'].downcase }
|
|
end
|
|
|
|
def find(id)
|
|
path = path_for(id)
|
|
return nil unless File.exist?(path)
|
|
|
|
JSON.parse(File.read(path))
|
|
end
|
|
|
|
def save(name:, type:, content:)
|
|
id = SecureRandom.uuid
|
|
label = { 'id' => id, 'name' => name, 'type' => type, 'content' => content }
|
|
File.write(path_for(id), JSON.generate(label))
|
|
label
|
|
end
|
|
|
|
def delete(id)
|
|
File.delete(path_for(id)) if File.exist?(path_for(id))
|
|
end
|
|
|
|
private
|
|
|
|
def path_for(id)
|
|
File.join(@dir, "#{id}.json")
|
|
end
|
|
end
|