Compare commits

..
2 Commits
Author SHA1 Message Date
randy f09c92f201 Restore plain print (no save) as the default for /shipping/zpl and /epson/raw
deploy / deploy (push) Successful in 9s
Requiring a name broke the simple 'just print this' API/CI use case --
now that only applies to explicit save/save_and_print, an omitted commit
param (or any other value) just prints, matching how these endpoints
behaved before the Save/Save & Print buttons were added.
2026-09-13 11:47:07 +02:00
randy 368bf670b9 Revert "Print open home-gitops issues on the Epson receipt printer"
This reverts commit b44985b75f.
2026-09-13 11:46:08 +02:00
3 changed files with 56 additions and 85 deletions

No files matched your search

-1
View File
@@ -1,5 +1,4 @@
.session_secret
.gitea_token
public/files/*
!public/files/.gitkeep
data/labels/*
+56 -74
View File
@@ -3,7 +3,6 @@ require 'sinatra'
require "sinatra/reloader"
require 'tmpdir'
require 'net/http'
require 'json'
require_relative 'lib/receipt_builder'
require_relative 'lib/label_repository'
@@ -155,45 +154,6 @@ helpers do
receipt.print!(PRINTER_DEVICE_EPSON)
end
GITEA_TOKEN_FILE = File.join(File.dirname(__FILE__), '.gitea_token')
def fetch_open_issues(repo)
token = File.read(GITEA_TOKEN_FILE).strip
uri = URI("https://git.priesol.net/api/v1/repos/randy/#{repo}/issues?state=open&type=issues&limit=50")
req = Net::HTTP::Get.new(uri)
req['Authorization'] = "token #{token}"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
raise "Gitea API returned #{res.code}" unless res.is_a?(Net::HTTPSuccess)
JSON.parse(res.body)
end
# Prints a receipt-style summary of a repo's open issues -- number, title,
# labels, one separator per issue, total at the end.
def print_issues(repo)
issues = fetch_open_issues(repo).sort_by { |i| i['number'] }
receipt = ReceiptBuilder.new
receipt.align(:center).bold.text("Open issues: #{repo}\n").bold(false)
receipt.text("#{Time.now.strftime('%Y-%m-%d %H:%M')}\n")
receipt.align(:left).text(('-' * 32) + "\n")
if issues.empty?
receipt.text("(no open issues)\n")
else
issues.each do |issue|
receipt.bold.text("##{issue['number']} #{issue['title']}\n").bold(false)
labels = issue['labels'].map { |l| l['name'] }.join(', ')
receipt.text("#{labels}\n") unless labels.empty?
receipt.text(('-' * 32) + "\n")
end
end
receipt.text("Total: #{issues.size}\n")
receipt.feed(3).cut
receipt.print!(PRINTER_DEVICE_EPSON)
end
# Renders ZPL to a PNG via Labelary's public API for an inline preview.
# Fixed at the Datamax label size (4x6in @ 8dpmm ~= 203dpi) -- good enough
# for a thumbnail, not meant to be exact for other sizes.
@@ -253,16 +213,6 @@ get '/' do
erb :index
end
post '/issues/print' do
begin
print_issues('home-gitops')
flash 'Open issues sent to printer', 'success'
rescue => e
flash "Failed to print issues (#{e.message})", 'danger'
end
redirect '/'
end
get '/upload' do
erb :upload
end
@@ -270,21 +220,37 @@ end
post '/shipping/zpl' do
zpl = params[:zpl].to_s
name = params[:save_as].to_s
if zpl.strip.empty?
flash 'ZPL text is empty', 'warning'
elsif name.empty?
flash 'Name is required to save', 'warning'
else
LABEL_REPO.save(name: name, type: 'zpl', content: zpl)
if params[:commit] == 'save_and_print'
begin
print_to_datamax(zpl)
flash "Saved '#{name}' and sent to printer", 'success'
rescue => e
flash "Saved '#{name}', but print failed (#{e.message})", 'danger'
end
redirect '/upload'
end
case params[:commit]
when 'save', 'save_and_print'
if name.empty?
flash 'Name is required to save', 'warning'
else
flash "Saved '#{name}'", 'success'
LABEL_REPO.save(name: name, type: 'zpl', content: zpl)
if params[:commit] == 'save_and_print'
begin
print_to_datamax(zpl)
flash "Saved '#{name}' and sent to printer", 'success'
rescue => e
flash "Saved '#{name}', but print failed (#{e.message})", 'danger'
end
else
flash "Saved '#{name}'", 'success'
end
end
else
# No explicit save/save_and_print action -- e.g. a plain API/CI call.
# labelprint stays a "dumb" print API here: just print, nothing saved.
begin
print_to_datamax(zpl)
flash 'ZPL sent to printer', 'success'
rescue => e
flash "ZPL print failed (#{e.message})", 'danger'
end
end
redirect '/upload'
@@ -354,21 +320,37 @@ end
post '/epson/raw' do
content = params[:content].to_s
name = params[:save_as].to_s
if content.strip.empty?
flash 'Receipt text is empty', 'warning'
elsif name.empty?
flash 'Name is required to save', 'warning'
else
LABEL_REPO.save(name: name, type: 'escpos', content: content)
if params[:commit] == 'save_and_print'
begin
print_raw_escpos(content)
flash "Saved '#{name}' and sent to printer", 'success'
rescue => e
flash "Saved '#{name}', but print failed (#{e.message})", 'danger'
end
redirect '/epson'
end
case params[:commit]
when 'save', 'save_and_print'
if name.empty?
flash 'Name is required to save', 'warning'
else
flash "Saved '#{name}'", 'success'
LABEL_REPO.save(name: name, type: 'escpos', content: content)
if params[:commit] == 'save_and_print'
begin
print_raw_escpos(content)
flash "Saved '#{name}' and sent to printer", 'success'
rescue => e
flash "Saved '#{name}', but print failed (#{e.message})", 'danger'
end
else
flash "Saved '#{name}'", 'success'
end
end
else
# No explicit save/save_and_print action -- e.g. a plain API/CI call.
# labelprint stays a "dumb" print API here: just print, nothing saved.
begin
print_raw_escpos(content)
flash 'Sent to Epson printer', 'success'
rescue => e
flash "Epson print failed (#{e.message})", 'danger'
end
end
redirect '/epson'
-10
View File
@@ -9,13 +9,3 @@
</ul>
</div>
</div>
<div class="card mt-3">
<div class="card-body">
<h5 class="card-title">home-gitops open issues</h5>
<p class="card-text">Print a receipt-style summary of currently open issues.</p>
<form action="/issues/print" method="POST">
<button class="btn btn-secondary" type="submit">Print open issues</button>
</form>
</div>
</div>