* Extract the Wi-Fi QR share card into its own omarchy.wifiqr panel plugin omarchy-network-qr now leads with an iface/security/ssid meta line, so a bare summon self-detects the connection and the plugin owns the whole share flow. The network panel loses its overlay lifecycle: with no centered card left inside it, the shadowed open/close collapses back to the stock panel behavior, and the QR button just summons the plugin -- which a clone or third-party plugin can replace, like the speed test. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * Keep canceled QR and password runs from leaking into their replacements Copilot review: the cancellation guards dropped in onExited while the canceled run's collectors were still allowed to fire, so a stale stderr could shadow a successful regeneration and a stale password could be revealed under a new network's card. The guards now stay up until the next run launches, good output settles any earlier error, and a bare re-summon no longer inherits the previous card's SSID. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
38 lines
1.2 KiB
JavaScript
38 lines
1.2 KiB
JavaScript
// Parses omarchy-network-qr output: a "meta\t<iface>\t<security>\t<ssid>"
|
|
// header, then a square 0/1 module matrix. The SSID sits last so it may
|
|
// contain tabs. A malformed matrix returns empty rather than rendering a
|
|
// code that cannot scan.
|
|
function parseQrOutput(raw) {
|
|
var lines = String(raw || "").trim().split(/\r?\n/).filter(function(line) { return line !== "" })
|
|
var meta = { iface: "", security: "", ssid: "" }
|
|
|
|
if (lines.length > 0 && lines[0].indexOf("meta\t") === 0) {
|
|
var fields = lines.shift().split("\t")
|
|
meta.iface = fields[1] || ""
|
|
meta.security = fields[2] || ""
|
|
meta.ssid = fields.slice(3).join("\t")
|
|
}
|
|
|
|
return { meta: meta, matrix: parseQrMatrix(lines) }
|
|
}
|
|
|
|
function parseQrMatrix(lines) {
|
|
if (lines.length === 0) return { rows: [], size: 0 }
|
|
|
|
var size = lines[0].length
|
|
if (size !== lines.length) return { rows: [], size: 0 }
|
|
|
|
for (var i = 0; i < lines.length; i++) {
|
|
if (lines[i].length !== size || !/^[01]+$/.test(lines[i])) return { rows: [], size: 0 }
|
|
}
|
|
|
|
return { rows: lines, size: size }
|
|
}
|
|
|
|
if (typeof module !== "undefined") {
|
|
module.exports = {
|
|
parseQrOutput: parseQrOutput,
|
|
parseQrMatrix: parseQrMatrix
|
|
}
|
|
}
|