refactor: use typed *glib.Error in signal callbacks (puregotk v0.2.2)
Bump puregotk to v0.2.2 and puregotk-webkit to v0.0.16. Signal callbacks now receive *glib.Error instead of raw uintptr, giving us actual error messages in load-failed and download-failed logs.
- commit
- e2241c565e09029d95e511d90963f32898c05e78
- author
- brice · · 2026-03-27 20:48 UTC
- parent
- 26fd7de
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
4 files · +11 -11
M go.mod +2 -2
| @@ -4,8 +4,8 @@ go 1.26.1 | |||
| 4 | 4 | ||
| 5 | 5 | require ( | |
| 6 | 6 | github.com/bnema/purego-sqlite v0.1.1 | |
| 7 | - | github.com/bnema/puregotk v0.2.1 | |
| 8 | - | github.com/bnema/puregotk-webkit v0.0.15 | |
| 7 | + | github.com/bnema/puregotk v0.2.2 | |
| 8 | + | github.com/bnema/puregotk-webkit v0.0.16 | |
| 9 | 9 | github.com/charmbracelet/bubbles v1.0.0 | |
| 10 | 10 | github.com/charmbracelet/bubbletea v1.3.10 | |
| 11 | 11 | github.com/charmbracelet/lipgloss v1.1.0 | |
| @@ -4,8 +4,8 @@ go 1.26.1 | |||||
| 4 | 4 | ||||
| 5 | require ( | 5 | require ( | ||
| 6 | github.com/bnema/purego-sqlite v0.1.1 | 6 | github.com/bnema/purego-sqlite v0.1.1 | ||
| 7 | - | github.com/bnema/puregotk v0.2.1 | 7 | + | github.com/bnema/puregotk v0.2.2 |
| 8 | - | github.com/bnema/puregotk-webkit v0.0.15 | 8 | + | github.com/bnema/puregotk-webkit v0.0.16 |
| 9 | github.com/charmbracelet/bubbles v1.0.0 | 9 | github.com/charmbracelet/bubbles v1.0.0 | ||
| 10 | github.com/charmbracelet/bubbletea v1.3.10 | 10 | github.com/charmbracelet/bubbletea v1.3.10 | ||
| 11 | github.com/charmbracelet/lipgloss v1.1.0 | 11 | github.com/charmbracelet/lipgloss v1.1.0 | ||
M go.sum +4 -4
| @@ -8,10 +8,10 @@ github.com/bnema/purego v0.0.0-20260323095903-91aa177a2704 h1:0GaiO4102gOdp0es0M | |||
| 8 | 8 | github.com/bnema/purego v0.0.0-20260323095903-91aa177a2704/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= | |
| 9 | 9 | github.com/bnema/purego-sqlite v0.1.1 h1:lH/F6/xxaI+LwWNHv3zof83bDJWQnib9OlNnBo/JnII= | |
| 10 | 10 | github.com/bnema/purego-sqlite v0.1.1/go.mod h1:nRVrkBt8dFOlSGGOOFM/ynlk34TOU1RlOvH4T9KM91s= | |
| 11 | - | github.com/bnema/puregotk v0.2.1 h1:Fgx52I4pLf+RnBbazhXU6FmPp+37fYcRq3pdhD8WWns= | |
| 12 | - | github.com/bnema/puregotk v0.2.1/go.mod h1:Sl24sbCl02M/HLCNUgaYVCckkYcGOi8yxMuGuQVWsL8= | |
| 13 | - | github.com/bnema/puregotk-webkit v0.0.15 h1:CUcuoHfx+7AO1Diig7+NrEb7i5m/+MKTiQFUMH3j72k= | |
| 14 | - | github.com/bnema/puregotk-webkit v0.0.15/go.mod h1:jbMK8QD+J34OE24HUc19v7FUcbSYvsTd7Cs8x1Ab/14= | |
| 11 | + | github.com/bnema/puregotk v0.2.2 h1:lt9iOwOCHS0X9R4y+SK+zJsbQPGfsfPTyYTuBPWpBKM= | |
| 12 | + | github.com/bnema/puregotk v0.2.2/go.mod h1:Sl24sbCl02M/HLCNUgaYVCckkYcGOi8yxMuGuQVWsL8= | |
| 13 | + | github.com/bnema/puregotk-webkit v0.0.16 h1:fYYtRLK3N4YgYmPkHpGZT6W+Mxu4EPu5I25H8nUv9oY= | |
| 14 | + | github.com/bnema/puregotk-webkit v0.0.16/go.mod h1:5qlQ44TexU9UUyIR7PlEHmQZl3yARAWhqG+XWO5uv74= | |
| 15 | 15 | github.com/charmbracelet/bubbles v1.0.0 h1:12J8/ak/uCZEMQ6KU7pcfwceyjLlWsDLAxB5fXonfvc= | |
| 16 | 16 | github.com/charmbracelet/bubbles v1.0.0/go.mod h1:9d/Zd5GdnauMI5ivUIVisuEm3ave1XwXtD1ckyV6r3E= | |
| 17 | 17 | github.com/charmbracelet/bubbletea v1.3.10 h1:otUDHWMMzQSB0Pkc87rm691KZ3SWa4KUlvF9nRvCICw= | |
| @@ -8,10 +8,10 @@ github.com/bnema/purego v0.0.0-20260323095903-91aa177a2704 h1:0GaiO4102gOdp0es0M | |||||
| 8 | github.com/bnema/purego v0.0.0-20260323095903-91aa177a2704/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= | 8 | github.com/bnema/purego v0.0.0-20260323095903-91aa177a2704/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= | ||
| 9 | github.com/bnema/purego-sqlite v0.1.1 h1:lH/F6/xxaI+LwWNHv3zof83bDJWQnib9OlNnBo/JnII= | 9 | github.com/bnema/purego-sqlite v0.1.1 h1:lH/F6/xxaI+LwWNHv3zof83bDJWQnib9OlNnBo/JnII= | ||
| 10 | github.com/bnema/purego-sqlite v0.1.1/go.mod h1:nRVrkBt8dFOlSGGOOFM/ynlk34TOU1RlOvH4T9KM91s= | 10 | github.com/bnema/purego-sqlite v0.1.1/go.mod h1:nRVrkBt8dFOlSGGOOFM/ynlk34TOU1RlOvH4T9KM91s= | ||
| 11 | - | github.com/bnema/puregotk v0.2.1 h1:Fgx52I4pLf+RnBbazhXU6FmPp+37fYcRq3pdhD8WWns= | 11 | + | github.com/bnema/puregotk v0.2.2 h1:lt9iOwOCHS0X9R4y+SK+zJsbQPGfsfPTyYTuBPWpBKM= |
| 12 | - | github.com/bnema/puregotk v0.2.1/go.mod h1:Sl24sbCl02M/HLCNUgaYVCckkYcGOi8yxMuGuQVWsL8= | 12 | + | github.com/bnema/puregotk v0.2.2/go.mod h1:Sl24sbCl02M/HLCNUgaYVCckkYcGOi8yxMuGuQVWsL8= |
| 13 | - | github.com/bnema/puregotk-webkit v0.0.15 h1:CUcuoHfx+7AO1Diig7+NrEb7i5m/+MKTiQFUMH3j72k= | 13 | + | github.com/bnema/puregotk-webkit v0.0.16 h1:fYYtRLK3N4YgYmPkHpGZT6W+Mxu4EPu5I25H8nUv9oY= |
| 14 | - | github.com/bnema/puregotk-webkit v0.0.15/go.mod h1:jbMK8QD+J34OE24HUc19v7FUcbSYvsTd7Cs8x1Ab/14= | 14 | + | github.com/bnema/puregotk-webkit v0.0.16/go.mod h1:5qlQ44TexU9UUyIR7PlEHmQZl3yARAWhqG+XWO5uv74= |
| 15 | github.com/charmbracelet/bubbles v1.0.0 h1:12J8/ak/uCZEMQ6KU7pcfwceyjLlWsDLAxB5fXonfvc= | 15 | github.com/charmbracelet/bubbles v1.0.0 h1:12J8/ak/uCZEMQ6KU7pcfwceyjLlWsDLAxB5fXonfvc= | ||
| 16 | github.com/charmbracelet/bubbles v1.0.0/go.mod h1:9d/Zd5GdnauMI5ivUIVisuEm3ave1XwXtD1ckyV6r3E= | 16 | github.com/charmbracelet/bubbles v1.0.0/go.mod h1:9d/Zd5GdnauMI5ivUIVisuEm3ave1XwXtD1ckyV6r3E= | ||
| 17 | github.com/charmbracelet/bubbletea v1.3.10 h1:otUDHWMMzQSB0Pkc87rm691KZ3SWa4KUlvF9nRvCICw= | 17 | github.com/charmbracelet/bubbletea v1.3.10 h1:otUDHWMMzQSB0Pkc87rm691KZ3SWa4KUlvF9nRvCICw= | ||
M internal/infrastructure/webkit/download_handler.go +3 -2
| @@ -10,6 +10,7 @@ import ( | |||
| 10 | 10 | downloadutil "github.com/bnema/dumber/internal/domain/download" | |
| 11 | 11 | "github.com/bnema/dumber/internal/logging" | |
| 12 | 12 | "github.com/bnema/puregotk-webkit/webkit" | |
| 13 | + | "github.com/bnema/puregotk/v4/glib" | |
| 13 | 14 | ) | |
| 14 | 15 | ||
| 15 | 16 | const ( | |
| @@ -114,7 +115,7 @@ func (h *DownloadHandler) HandleDownload(ctx context.Context, download *webkit.D | |||
| 114 | 115 | download.ConnectDecideDestination(&decideDestCb) | |
| 115 | 116 | ||
| 116 | 117 | // Handle failed signal. | |
| 117 | - | failedCb := func(d webkit.Download, _ uintptr) { | |
| 118 | + | failedCb := func(d webkit.Download, gerr *glib.Error) { | |
| 118 | 119 | state.mu.Lock() | |
| 119 | 120 | state.failed = true | |
| 120 | 121 | state.mu.Unlock() | |
| @@ -123,7 +124,7 @@ func (h *DownloadHandler) HandleDownload(ctx context.Context, download *webkit.D | |||
| 123 | 124 | filename := downloadutil.ExtractFilenameFromDestination(dest) | |
| 124 | 125 | ||
| 125 | 126 | // Create error for the failed download. | |
| 126 | - | downloadErr := fmt.Errorf("download failed: %s", filename) | |
| 127 | + | downloadErr := fmt.Errorf("download failed: %s: %s", filename, gerr.MessageGo()) | |
| 127 | 128 | ||
| 128 | 129 | if eventHandler != nil { | |
| 129 | 130 | eventHandler.OnDownloadEvent(ctx, port.DownloadEvent{ | |
| @@ -10,6 +10,7 @@ import ( | |||||
| 10 | downloadutil "github.com/bnema/dumber/internal/domain/download" | 10 | downloadutil "github.com/bnema/dumber/internal/domain/download" | ||
| 11 | "github.com/bnema/dumber/internal/logging" | 11 | "github.com/bnema/dumber/internal/logging" | ||
| 12 | "github.com/bnema/puregotk-webkit/webkit" | 12 | "github.com/bnema/puregotk-webkit/webkit" | ||
| 13 | + | "github.com/bnema/puregotk/v4/glib" | |||
| 13 | ) | 14 | ) | ||
| 14 | 15 | ||||
| 15 | const ( | 16 | const ( | ||
| @@ -114,7 +115,7 @@ func (h *DownloadHandler) HandleDownload(ctx context.Context, download *webkit.D | |||||
| 114 | download.ConnectDecideDestination(&decideDestCb) | 115 | download.ConnectDecideDestination(&decideDestCb) | ||
| 115 | 116 | ||||
| 116 | // Handle failed signal. | 117 | // Handle failed signal. | ||
| 117 | - | failedCb := func(d webkit.Download, _ uintptr) { | 118 | + | failedCb := func(d webkit.Download, gerr *glib.Error) { |
| 118 | state.mu.Lock() | 119 | state.mu.Lock() | ||
| 119 | state.failed = true | 120 | state.failed = true | ||
| 120 | state.mu.Unlock() | 121 | state.mu.Unlock() | ||
| @@ -123,7 +124,7 @@ func (h *DownloadHandler) HandleDownload(ctx context.Context, download *webkit.D | |||||
| 123 | filename := downloadutil.ExtractFilenameFromDestination(dest) | 124 | filename := downloadutil.ExtractFilenameFromDestination(dest) | ||
| 124 | 125 | ||||
| 125 | // Create error for the failed download. | 126 | // Create error for the failed download. | ||
| 126 | - | downloadErr := fmt.Errorf("download failed: %s", filename) | 127 | + | downloadErr := fmt.Errorf("download failed: %s: %s", filename, gerr.MessageGo()) |
| 127 | 128 | ||||
| 128 | if eventHandler != nil { | 129 | if eventHandler != nil { | ||
| 129 | eventHandler.OnDownloadEvent(ctx, port.DownloadEvent{ | 130 | eventHandler.OnDownloadEvent(ctx, port.DownloadEvent{ | ||
M internal/infrastructure/webkit/webview.go +2 -3
| @@ -467,13 +467,12 @@ func (wv *WebView) connectLoadChangedSignal() { | |||
| 467 | 467 | } | |
| 468 | 468 | ||
| 469 | 469 | func (wv *WebView) connectLoadFailedSignal() { | |
| 470 | - | loadFailedCb := func(_ webkit.WebView, event webkit.LoadEvent, failingURI string, _ uintptr) bool { | |
| 471 | - | // Note: error details are a raw uintptr (GError*) — see bnema/puregotk#6 | |
| 472 | - | // for tracking proper *glib.Error conversion in signal callbacks. | |
| 470 | + | loadFailedCb := func(_ webkit.WebView, event webkit.LoadEvent, failingURI string, gerr *glib.Error) bool { | |
| 473 | 471 | wv.logger.Warn(). | |
| 474 | 472 | Str("component", "webview"). | |
| 475 | 473 | Str("uri", failingURI). | |
| 476 | 474 | Int("load_event", int(event)). | |
| 475 | + | Str("error", gerr.MessageGo()). | |
| 477 | 476 | Msg("load failed") | |
| 478 | 477 | return false | |
| 479 | 478 | } | |
| @@ -467,13 +467,12 @@ func (wv *WebView) connectLoadChangedSignal() { | |||||
| 467 | } | 467 | } | ||
| 468 | 468 | ||||
| 469 | func (wv *WebView) connectLoadFailedSignal() { | 469 | func (wv *WebView) connectLoadFailedSignal() { | ||
| 470 | - | loadFailedCb := func(_ webkit.WebView, event webkit.LoadEvent, failingURI string, _ uintptr) bool { | 470 | + | loadFailedCb := func(_ webkit.WebView, event webkit.LoadEvent, failingURI string, gerr *glib.Error) bool { |
| 471 | - | // Note: error details are a raw uintptr (GError*) — see bnema/puregotk#6 | |||
| 472 | - | // for tracking proper *glib.Error conversion in signal callbacks. | |||
| 473 | wv.logger.Warn(). | 471 | wv.logger.Warn(). | ||
| 474 | Str("component", "webview"). | 472 | Str("component", "webview"). | ||
| 475 | Str("uri", failingURI). | 473 | Str("uri", failingURI). | ||
| 476 | Int("load_event", int(event)). | 474 | Int("load_event", int(event)). | ||
| 475 | + | Str("error", gerr.MessageGo()). | |||
| 477 | Msg("load failed") | 476 | Msg("load failed") | ||
| 478 | return false | 477 | return false | ||
| 479 | } | 478 | } | ||