bunker, event, req fixes.

This commit is contained in:
fiatjaf
2026-01-09 00:06:51 -03:00
parent 7dd973ae01
commit cbcf7d9fe7
4 changed files with 71 additions and 49 deletions
+3 -3
View File
@@ -171,8 +171,8 @@ func setupBunkerTab() *qt.QWidget {
func (b *bunkerVars) loadProfile() { func (b *bunkerVars) loadProfile() {
fileDialog := qt.NewQFileDialog(window.QWidget) fileDialog := qt.NewQFileDialog(window.QWidget)
fileDialog.SetFileMode(qt.QFileDialog__ExistingFile) fileDialog.SetFileMode(qt.QFileDialog__ExistingFile)
fileDialog.SetNameFilter("JSON files (*.json)")
fileDialog.SetWindowTitle("select bunker profile") fileDialog.SetWindowTitle("select bunker profile")
fileDialog.SetAcceptDrops(true)
if fileDialog.Exec() == int(qt.QDialog__Accepted) { if fileDialog.Exec() == int(qt.QDialog__Accepted) {
selectedFiles := fileDialog.SelectedFiles() selectedFiles := fileDialog.SelectedFiles()
@@ -401,11 +401,11 @@ func (bunker *bunkerVars) stopBunker() {
} }
func (bunker *bunkerVars) updateBunkerURI() { func (bunker *bunkerVars) updateBunkerURI() {
if bunker.config.Secret.Plain == nil { if currentSec == [32]byte{} {
return return
} }
pubkey := bunker.config.Secret.Plain.Public() pubkey := currentSec.Public()
qs := url.Values{} qs := url.Values{}
for _, relay := range bunker.relays { for _, relay := range bunker.relays {
qs.Add("relay", relay.URL) qs.Add("relay", relay.URL)
+3 -1
View File
@@ -100,7 +100,9 @@ func setupEventTab() *qt.QWidget {
// send button // send button
buttonHBox := qt.NewQHBoxLayout2() buttonHBox := qt.NewQHBoxLayout2()
sendButton := qt.NewQPushButton5("send request", event.tab)
// TODO: make sendButton be disabled if while we have no relays
sendButton := qt.NewQPushButton5("publish event", event.tab)
buttonHBox.AddWidget(sendButton.QWidget) buttonHBox.AddWidget(sendButton.QWidget)
buttonHBox.AddStretch() buttonHBox.AddStretch()
+50 -42
View File
@@ -4,6 +4,7 @@ import (
"context" "context"
"encoding/hex" "encoding/hex"
"flag" "flag"
"fmt"
"net/http" "net/http"
"os" "os"
"strings" "strings"
@@ -15,6 +16,7 @@ import (
"fiatjaf.com/nostr/nip49" "fiatjaf.com/nostr/nip49"
"fiatjaf.com/nostr/sdk" "fiatjaf.com/nostr/sdk"
qt "github.com/mappu/miqt/qt6" qt "github.com/mappu/miqt/qt6"
"github.com/mappu/miqt/qt6/mainthread"
) )
var ( var (
@@ -105,54 +107,60 @@ func main() {
secPasswordEdit := qt.NewQLineEdit(passwordWidget) secPasswordEdit := qt.NewQLineEdit(passwordWidget)
secPasswordEdit.SetEchoMode(qt.QLineEdit__Password) secPasswordEdit.SetEchoMode(qt.QLineEdit__Password)
passwordHBox.AddWidget(secPasswordEdit.QWidget) passwordHBox.AddWidget(secPasswordEdit.QWidget)
keyChanged = func(text string) { keyChanged = func(_ string) {
text = strings.TrimSpace(text) debounced.Call(func() {
mainthread.Start(func() {
text := strings.TrimSpace(secEdit.Text())
var sk nostr.SecretKey var sk nostr.SecretKey
var keyer nostr.Keyer var keyer nostr.Keyer
var err error var err error
if text == "" { if text == "" {
passwordWidget.SetVisible(false) passwordWidget.SetVisible(false)
goto empty currentSec = nostr.SecretKey{}
} currentKeyer = nil
statusLabel.SetText("")
if strings.HasPrefix(text, "ncryptsec1") {
passwordWidget.SetVisible(true)
password := secPasswordEdit.Text()
if password != "" {
sk, err = nip49.Decrypt(text, password)
if err != nil {
statusLabel.SetText("decryption failed: " + err.Error())
goto empty
} }
text = hex.EncodeToString(sk[:])
} else {
goto empty
}
} else {
passwordWidget.SetVisible(false)
}
sk, keyer, err = handleSecretKeyOrBunker(text) if strings.HasPrefix(text, "ncryptsec1") {
if err != nil { passwordWidget.SetVisible(true)
statusLabel.SetText(err.Error()) password := secPasswordEdit.Text()
currentSec = nostr.SecretKey{} if password != "" {
currentKeyer = nil sk, err = nip49.Decrypt(text, password)
return if err == nil {
} statusLabel.SetText(fmt.Sprintf("secret key decrypted, pubkey: " + sk.Public().Hex()))
} else {
currentSec = nostr.SecretKey{}
currentKeyer = nil
statusLabel.SetText("decryption failed: " + err.Error())
return
}
text = hex.EncodeToString(sk[:])
} else {
currentSec = nostr.SecretKey{}
currentKeyer = nil
statusLabel.SetText("")
return
}
} else {
passwordWidget.SetVisible(false)
}
currentSec = sk sk, keyer, err = handleSecretKeyOrBunker(text)
currentKeyer = keyer if err != nil {
statusLabel.SetText("") statusLabel.SetText(err.Error())
event.updateEvent() currentSec = nostr.SecretKey{}
return currentKeyer = nil
return
}
empty: currentSec = sk
currentSec = nostr.SecretKey{} currentKeyer = keyer
currentKeyer = nil event.updateEvent()
statusLabel.SetText("") return
return })
})
} }
secEdit.OnTextChanged(keyChanged) secEdit.OnTextChanged(keyChanged)
secPasswordEdit.OnTextChanged(keyChanged) secPasswordEdit.OnTextChanged(keyChanged)
+15 -3
View File
@@ -206,9 +206,14 @@ func setupReqTab() *qt.QWidget {
req.outputEdit.SetMaximumHeight(100) req.outputEdit.SetMaximumHeight(100)
outputHBox.AddWidget(req.outputEdit.QWidget) outputHBox.AddWidget(req.outputEdit.QWidget)
// TODO: make sendButton be disabled if while we have no relays
sendButton := qt.NewQPushButton5("send request", req.tab) sendButton := qt.NewQPushButton5("send request", req.tab)
sendButton.OnClicked(req.subscribe) sendButton.OnClicked(req.subscribe)
// TODO: add button for stopping the subscription (disabled if no subscription is in course -- check subCancel variable)
// TODO: add button for clearing the results box
// TODO: add button for exporting the events in the results box as a .jsonl file (open file dialog to let user choose where to save)
// relays // relays
relaysHBox := qt.NewQHBoxLayout2() relaysHBox := qt.NewQHBoxLayout2()
req.relaysHBox = relaysHBox req.relaysHBox = relaysHBox
@@ -225,6 +230,7 @@ func setupReqTab() *qt.QWidget {
resultsLabel := qt.NewQLabel2() resultsLabel := qt.NewQLabel2()
resultsLabel.SetText("results:") resultsLabel.SetText("results:")
req.resultsList = qt.NewQListWidget(req.tab) req.resultsList = qt.NewQListWidget(req.tab)
// TODO: make resultsList display items in monospace
resultsVBox.AddWidget(resultsLabel.QWidget) resultsVBox.AddWidget(resultsLabel.QWidget)
resultsVBox.AddWidget(req.resultsList.QWidget) resultsVBox.AddWidget(req.resultsList.QWidget)
@@ -375,10 +381,15 @@ func (req *reqVars) updateReq() {
req.outputEdit.SetPlainText(string(jsonBytes)) req.outputEdit.SetPlainText(string(jsonBytes))
} }
func (req *reqVars) subscribe() { func (req *reqVars) cancelSubscription() {
if req.subCancel != nil { if req.subCancel != nil {
req.subCancel(manualCancel) req.subCancel(manualCancel)
req.subCancel = nil
} }
}
func (req *reqVars) subscribe() {
req.cancelSubscription()
// collect relays // collect relays
relays := []string{} relays := []string{}
@@ -415,7 +426,7 @@ func (req *reqVars) subscribe() {
return return
} }
eventsChan := make(chan nostr.RelayEvent) eventsChan = make(chan nostr.RelayEvent)
go func() { go func() {
for event := range sub.Events { for event := range sub.Events {
eventsChan <- nostr.RelayEvent{ eventsChan <- nostr.RelayEvent{
@@ -429,7 +440,7 @@ func (req *reqVars) subscribe() {
go func() { go func() {
reason := <-sub.ClosedReason reason := <-sub.ClosedReason
time.Sleep(time.Second) req.subCancel = nil
mainthread.Wait(func() { mainthread.Wait(func() {
setStatus(tabs.req, "subscription closed: %s", reason) setStatus(tabs.req, "subscription closed: %s", reason)
}) })
@@ -454,6 +465,7 @@ func (req *reqVars) subscribe() {
} }
}) })
} }
req.subCancel = nil
setStatus(tabs.req, "subscription ended") setStatus(tabs.req, "subscription ended")
}() }()