package signal import ( "fmt" "net/http" ) type Handlers struct { client *Client linkDevice *LinkDevice } func NewHandlers(client *Client, linkDevice *LinkDevice) *Handlers { return &Handlers{ client: client, linkDevice: linkDevice, } } func (h *Handlers) HandleFragment(w http.ResponseWriter, r *http.Request) { if h.client == nil { return // Signal not enabled } w.Header().Set("Content-Type", "text/html") account, _ := h.client.GetLinkedAccount() var content string var statusBadge string var openAttr string var pollAttrs string if account != nil { statusBadge = fmt.Sprintf(`Linked%s`, FormatPhoneNumber(account.Number)) content = fmt.Sprintf(`

Unlink Instructions:

`, h.linkDevice.deviceName) openAttr = "" pollAttrs = "" } else { statusBadge = `Unlinked` qrCode, err := h.linkDevice.GenerateQR() if err != nil { content = fmt.Sprintf(`

Error generating QR code: %s

`, err) } else { content = fmt.Sprintf(`

Link your Signal (or Molly) account:

Signal QR Code
`, qrCode) } openAttr = " open" pollAttrs = ` hx-get="/fragment/signal" hx-trigger="every 3s" hx-swap="outerHTML"` } html := fmt.Sprintf(`
Signal %s
%s
`, openAttr, pollAttrs, statusBadge, content) _, _ = fmt.Fprint(w, html) } func (h *Handlers) IsEnabled() bool { return h.client != nil } func (h *Handlers) GetClient() *Client { return h.client }