From 8277d1bc6de9b5e6d0118b76a1d5fa4085f8281f Mon Sep 17 00:00:00 2001 From: Yocraft-2000 <304616174+Yocraft-2000@users.noreply.github.com> Date: Mon, 3 Aug 2026 14:17:21 +0200 Subject: [PATCH] Add QR Code Encoder plugin (#226) * init * feat: notify options; all, minimal and none * update: plugin.toml * update: add README * feat: add button toggle * feat: add configurable glyph * fix: valid image radius * fix: shell escape entry * feat: add settings * update: add thumbnail.webp * feat: add titlebar and titlebar toggle * feat: add custom image widget setting, reorder keys * fix: auto-size image with titlebar * update: README (new settings) * fix: lowercase correction_level label keys * fix: file type and move shellEscape to the cmd --- qrcode/README.md | 40 +++++++ qrcode/panel.luau | 226 ++++++++++++++++++++++++++++++++++++ qrcode/plugin.toml | 93 +++++++++++++++ qrcode/thumbnail.webp | Bin 0 -> 54546 bytes qrcode/translations/en.json | 61 ++++++++++ qrcode/widget.luau | 13 +++ 6 files changed, 433 insertions(+) create mode 100644 qrcode/README.md create mode 100644 qrcode/panel.luau create mode 100644 qrcode/plugin.toml create mode 100644 qrcode/thumbnail.webp create mode 100644 qrcode/translations/en.json create mode 100644 qrcode/widget.luau diff --git a/qrcode/README.md b/qrcode/README.md new file mode 100644 index 0000000..d066eb0 --- /dev/null +++ b/qrcode/README.md @@ -0,0 +1,40 @@ +# QR Code encoder + +Transform any text or URL into a QR code completely offline. Then scan or copy the code. + +## Plugin + +| Field | Value | +| --- | --- | +| ID | `yocraft/qrcode` | +| Entries | Bar widget: `widget`; panel: `panel` | + +## Requirements + +Install `qrencode` on `PATH`. + +## Usage + +Open the panel from the bar widget or with this command: +```sh +noctalia msg panel-toggle yocraft/qrcode:panel +``` + +Enter your text or URL and click on Generate or press enter to generate the QR code, then scan it from the panel or copy it by clicking on it. + +## Settings + +| Setting | Type | Default | Description | +| --- | --- | --- | --- | +| `titlebar` | `bool` | `true` | Show titlebar, panel name and buttons like settings and close. | +| `generate_button` | `bool` | `true` | Show Generate button, disable will submit on enter. | +| `close_on_copy` | `bool` | `false` | Close the panel when copying the QR code. | +| `notify` | `select` | `minimal` | Controls the notifications, minimal only notifies when Close on Copy is used. | +| `size` | `int` | `8` | Specify module size in dots (pixels). | +| `correction_level` | `select` | `M` | Specify error correction level. | +| `glyph` | `glyph` | `qrcode` | Bar widget icon glyph name. | +| `custom_image` | `image` | `""` | Path to a custom image; leave empty to use the icon glyph. | + +## Notes + +The plugin runs entirely locally and does not require network access. diff --git a/qrcode/panel.luau b/qrcode/panel.luau new file mode 100644 index 0000000..0e9e53c --- /dev/null +++ b/qrcode/panel.luau @@ -0,0 +1,226 @@ +local currentText = "" +local genCount = 0 +local errorMessage = nil +local imagePath = nil +local status = "idle" + +local imageSize = 400 + +local notifyConf = noctalia.getConfig("notify") + +local function notify(text, error) + local cmd = error and noctalia.notifyError or noctalia.notify + cmd("QR Code encoder", text) +end + +local function statusText() + if status == "generating" then + return noctalia.tr("panel.status.generating") + elseif status == "error" then + return noctalia.tr("panel.status.error", { message = errorMessage }) + elseif status == "ready" then + return noctalia.tr("panel.status.ready") + elseif status == "copied" then + return noctalia.tr("panel.status.copied") + else + return noctalia.tr("panel.status.idle") + end +end + +local function render() + local rowContent = { + ui.input({ + flexGrow = 1, + focus = true, + placeholder = noctalia.tr("panel.placeholder"), + onChange = "onTextChange", + onSubmit = "onTextSubmit", + }) + } + + if noctalia.getConfig("generate_button") then + table.insert( + rowContent, + ui.button({ + text = "Generate", + variant = "primary", + enabled = status ~= "generating", + onClick = "onGenerateClick", + }) + ) + end + + local content = { + ui.row({ gap = 8 }, rowContent), + ui.label({ + flexGrow = 1, + textAlign = "center", + text = statusText(), + color = status == "error" and "error" or "on_surface/0.75", + }) + } + + if (status == "ready" + or status == "copied" + or (status == "error" and errorMessage == noctalia.tr("panel.error.copy_failed"))) + and imagePath ~= nil then + table.insert( + content, + ui.row({ justify = "center" }, { + ui.image({ + path = imagePath, + width = imageSize, + height = imageSize, + radius = 24, + onClick = "onImageClick", + }) + }) + ) + end + + if noctalia.getConfig("titlebar") then + imageSize = 350 + table.insert( + content, 1, + ui.row({ align = "center", justify = "space_between", gap = 8 }, { + ui.label({ text = "QR Code Encoder", fontSize = 16, fontWeight = "bold", flexGrow = 1 }), + ui.button({ glyph = "settings", onClick = noctalia.openSettings }), + ui.button({ glyph = "close", onClick = "onCloseClicked" }), + }) + ) + end + + panel.render(ui.column({ flexGrow = 1, gap = 16 }, content)) +end + +local function shellEscape(raw) + return "'" .. raw:gsub("'", "'\\''") .. "'" +end + +local function generate(text) + if status == "generating" then + return + end + + text = noctalia.string.trim(text or "") + + if text == "" then + if imagePath ~= nil then + noctalia.removeFile(imagePath) + end + status = "idle" + errorMessage = nil + imagePath = nil + render() + return + end + + if not noctalia.commandExists("qrencode") then + status = "error" + errorMessage = noctalia.tr("panel.error.missing_qrencode") + + if notifyConf == "all" then + notify(statusText(), status == "error") + end + + render() + return + end + + status = "generating" + render() + + local dir = noctalia.pluginDir() + local outputPath = string.format("%s/qr-%s.png", dir, genCount) + local previousPath = imagePath + genCount += 1 + + local size = noctalia.getConfig("size") or 8 + local correctionLevel = noctalia.getConfig("correction_level") or "M" + + local cmd = string.format( + 'qrencode %s -o %s -s %s -l %s', + shellEscape(text), + outputPath, + size, + correctionLevel + ) + + noctalia.runAsync( + cmd, + function(result) + if result.exitCode == 0 and noctalia.fileExists(outputPath) then + imagePath = outputPath + status = "ready" + if previousPath ~= nil then + noctalia.removeFile(previousPath) + end + else + status = "error" + errorMessage = noctalia.tr("panel.error.generate_failed") + end + + if notifyConf == "all" then + notify(statusText(), status == "error") + end + + render() + end + ) +end + +function onOpen(_context) + status = "idle" + render() +end + +function onTextChange(value) + currentText = value +end + +function onTextSubmit(value) + currentText = value + generate(currentText) +end + +function onGenerateClick() + generate(currentText) +end + +function onImageClick() + local bytes, err = noctalia.readFile(imagePath) + errorMessage = noctalia.tr("panel.error.copy_failed") + + if bytes == nil then + status = "error" + else + local ok = noctalia.copyToClipboard(bytes, "image/png") + + status = ok and "copied" or "error" + end + + if notifyConf == "all" then + notify(statusText(), status == "error") + end + + if noctalia.getConfig("close_on_copy") then + if notifyConf == "minimal" then + notify(statusText(), status == "error") + end + + panel.close() + return + end + + render() +end + +function onCloseClicked() + panel.close() +end + +function onClose() + if imagePath ~= nil then + noctalia.removeFile(imagePath) + end +end diff --git a/qrcode/plugin.toml b/qrcode/plugin.toml new file mode 100644 index 0000000..00e7e8e --- /dev/null +++ b/qrcode/plugin.toml @@ -0,0 +1,93 @@ +id = "yocraft/qrcode" +name = "QR Code Encoder" +version = "1.0.0" +plugin_api = 15 +author = "yocraft" +license = "MIT" +deprecated = false +icon = "qrcode" +description = "Transform any text or URL in a QR code" +tags = [ "panel", "fun", "network", "privacy", "productivity", "utility" ] +dependencies = [ "qrencode" ] + +[[widget]] +id = "widget" +entry = "widget.luau" + + [[widget.setting]] + key = "glyph" + type = "glyph" + label_key = "widget.glyph.label" + description_key = "widget.glyph.description" + default = "qrcode" + + [[widget.setting]] + key = "custom_image" + type = "file" + label_key = "widget.custom_image.label" + description_key = "widget.custom_image.description" + default = "" + extensions = [".png", ".jpg", ".jpeg", ".webp", ".svg"] + +[[panel]] +id = "panel" +entry = "panel.luau" +width = 500 +height = 550 +placement = "floating" +position = "center" + +[[setting]] +key = "titlebar" +type = "bool" +label_key = "settings.titlebar.label" +description_key = "settings.titlebar.description" +default = true + +[[setting]] +key = "generate_button" +type = "bool" +label_key = "settings.generate_button.label" +description_key = "settings.generate_button.description" +default = true + +[[setting]] +key = "close_on_copy" +type = "bool" +label_key = "settings.close_on_copy.label" +description_key = "settings.close_on_copy.description" +default = false + +[[setting]] +key = "notify" +type = "select" +label_key = "settings.notify.label" +description_key = "settings.notify.description" +default = "minimal" +options = [ + { value = "all", label_key = "settings.notify.all" }, + { value = "minimal", label_key = "settings.notify.minimal" }, + { value = "none", label_key = "settings.notify.none" }, +] + +[[setting]] +key = "size" +type = "int" +label_key = "settings.size.label" +description_key = "settings.size.description" +default = 8 +advanced = true + +[[setting]] +key = "correction_level" +type = "select" +label_key = "settings.correction_level.label" +description_key = "settings.correction_level.description" +default = "M" +options = [ + { value = "L", label_key = "settings.correction_level.l" }, + { value = "M", label_key = "settings.correction_level.m" }, + { value = "Q", label_key = "settings.correction_level.q" }, + { value = "H", label_key = "settings.correction_level.h" }, +] +advanced = true diff --git a/qrcode/thumbnail.webp b/qrcode/thumbnail.webp new file mode 100644 index 0000000000000000000000000000000000000000..5219b82f92da20601a6eb9fed75074b8eb514dbc GIT binary patch literal 54546 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

;!>Zo$# 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 b8~+!nDNUR%_Dbp2z2hN!#J)5pFfafBPg1B2 literal 0 HcmV?d00001 diff --git a/qrcode/translations/en.json b/qrcode/translations/en.json new file mode 100644 index 0000000..cd54f30 --- /dev/null +++ b/qrcode/translations/en.json @@ -0,0 +1,61 @@ +{ + "settings": { + "titlebar": { + "label": "Show Titlebar", + "description": "Show panel name and buttons like settings and close." + }, + "generate_button": { + "label": "Show Generate Button", + "description": "Disable will submit on enter." + }, + "close_on_copy": { + "label": "Close on Copy", + "description": "Close the panel when copying the QR code." + }, + "notify": { + "label": "Notify", + "description": "Controls the notifications, minimal only notifies when Close on Copy is used.", + "all": "All", + "minimal": "Minimal", + "none": "None" + }, + "size": { + "label": "QR Code Size", + "description": "Specify module size in dots (pixels)." + }, + "correction_level": { + "label": "Correction Level", + "description": "Specify error correction level.", + "l": "Lowest", + "m": "Medium", + "q": "High", + "h": "Highest" + } + }, + "widget": { + "tooltip": "Generate a QR Code", + "glyph": { + "label": "Glyph", + "description": "Icon glyph name" + }, + "custom_image": { + "label": "Custom image", + "description": "Path to a custom image; leave empty to use the icon glyph" + } + }, + "panel": { + "placeholder": "Enter text or url...", + "status": { + "generating": "Generating...", + "error": "Error: {message}", + "ready": "QR code ready. Scan it here or click it to copy.", + "copied": "QR code copied to clipboard.", + "idle": "Enter some text, then press Generate." + }, + "error": { + "generate_failed": "failed to generate the QR code.", + "missing_qrencode": "qrencode not installed.", + "copy_failed": "failed to copy the QR code." + } + } +} diff --git a/qrcode/widget.luau b/qrcode/widget.luau new file mode 100644 index 0000000..b7c9683 --- /dev/null +++ b/qrcode/widget.luau @@ -0,0 +1,13 @@ +local image = noctalia.getConfig("custom_image") + +if image ~= "" and image ~= nil then + barWidget.setImage(image) +else + barWidget.setGlyph(noctalia.getConfig("glyph")) +end + +barWidget.setTooltip(noctalia.tr("widget.tooltip")) + +function onClick() + noctalia.togglePanel("yocraft/qrcode:panel") +end