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

View File

@@ -171,8 +171,8 @@ func setupBunkerTab() *qt.QWidget {
func (b *bunkerVars) loadProfile() {
fileDialog := qt.NewQFileDialog(window.QWidget)
fileDialog.SetFileMode(qt.QFileDialog__ExistingFile)
fileDialog.SetNameFilter("JSON files (*.json)")
fileDialog.SetWindowTitle("select bunker profile")
fileDialog.SetAcceptDrops(true)
if fileDialog.Exec() == int(qt.QDialog__Accepted) {
selectedFiles := fileDialog.SelectedFiles()
@@ -401,11 +401,11 @@ func (bunker *bunkerVars) stopBunker() {
}
func (bunker *bunkerVars) updateBunkerURI() {
if bunker.config.Secret.Plain == nil {
if currentSec == [32]byte{} {
return
}
pubkey := bunker.config.Secret.Plain.Public()
pubkey := currentSec.Public()
qs := url.Values{}
for _, relay := range bunker.relays {
qs.Add("relay", relay.URL)

View File

@@ -100,7 +100,9 @@ func setupEventTab() *qt.QWidget {
// send button
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.AddStretch()

92
main.go
View File

@@ -4,6 +4,7 @@ import (
"context"
"encoding/hex"
"flag"
"fmt"
"net/http"
"os"
"strings"
@@ -15,6 +16,7 @@ import (
"fiatjaf.com/nostr/nip49"
"fiatjaf.com/nostr/sdk"
qt "github.com/mappu/miqt/qt6"
"github.com/mappu/miqt/qt6/mainthread"
)
var (
@@ -105,54 +107,60 @@ func main() {
secPasswordEdit := qt.NewQLineEdit(passwordWidget)
secPasswordEdit.SetEchoMode(qt.QLineEdit__Password)
passwordHBox.AddWidget(secPasswordEdit.QWidget)
keyChanged = func(text string) {
text = strings.TrimSpace(text)
keyChanged = func(_ string) {
debounced.Call(func() {
mainthread.Start(func() {
text := strings.TrimSpace(secEdit.Text())
var sk nostr.SecretKey
var keyer nostr.Keyer
var err error
var sk nostr.SecretKey
var keyer nostr.Keyer
var err error
if text == "" {
passwordWidget.SetVisible(false)
goto empty
}
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
if text == "" {
passwordWidget.SetVisible(false)
currentSec = nostr.SecretKey{}
currentKeyer = nil
statusLabel.SetText("")
}
text = hex.EncodeToString(sk[:])
} else {
goto empty
}
} else {
passwordWidget.SetVisible(false)
}
sk, keyer, err = handleSecretKeyOrBunker(text)
if err != nil {
statusLabel.SetText(err.Error())
currentSec = nostr.SecretKey{}
currentKeyer = nil
return
}
if strings.HasPrefix(text, "ncryptsec1") {
passwordWidget.SetVisible(true)
password := secPasswordEdit.Text()
if password != "" {
sk, err = nip49.Decrypt(text, password)
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
currentKeyer = keyer
statusLabel.SetText("")
event.updateEvent()
return
sk, keyer, err = handleSecretKeyOrBunker(text)
if err != nil {
statusLabel.SetText(err.Error())
currentSec = nostr.SecretKey{}
currentKeyer = nil
return
}
empty:
currentSec = nostr.SecretKey{}
currentKeyer = nil
statusLabel.SetText("")
return
currentSec = sk
currentKeyer = keyer
event.updateEvent()
return
})
})
}
secEdit.OnTextChanged(keyChanged)
secPasswordEdit.OnTextChanged(keyChanged)

18
req.go
View File

@@ -206,9 +206,14 @@ func setupReqTab() *qt.QWidget {
req.outputEdit.SetMaximumHeight(100)
outputHBox.AddWidget(req.outputEdit.QWidget)
// TODO: make sendButton be disabled if while we have no relays
sendButton := qt.NewQPushButton5("send request", req.tab)
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
relaysHBox := qt.NewQHBoxLayout2()
req.relaysHBox = relaysHBox
@@ -225,6 +230,7 @@ func setupReqTab() *qt.QWidget {
resultsLabel := qt.NewQLabel2()
resultsLabel.SetText("results:")
req.resultsList = qt.NewQListWidget(req.tab)
// TODO: make resultsList display items in monospace
resultsVBox.AddWidget(resultsLabel.QWidget)
resultsVBox.AddWidget(req.resultsList.QWidget)
@@ -375,10 +381,15 @@ func (req *reqVars) updateReq() {
req.outputEdit.SetPlainText(string(jsonBytes))
}
func (req *reqVars) subscribe() {
func (req *reqVars) cancelSubscription() {
if req.subCancel != nil {
req.subCancel(manualCancel)
req.subCancel = nil
}
}
func (req *reqVars) subscribe() {
req.cancelSubscription()
// collect relays
relays := []string{}
@@ -415,7 +426,7 @@ func (req *reqVars) subscribe() {
return
}
eventsChan := make(chan nostr.RelayEvent)
eventsChan = make(chan nostr.RelayEvent)
go func() {
for event := range sub.Events {
eventsChan <- nostr.RelayEvent{
@@ -429,7 +440,7 @@ func (req *reqVars) subscribe() {
go func() {
reason := <-sub.ClosedReason
time.Sleep(time.Second)
req.subCancel = nil
mainthread.Wait(func() {
setStatus(tabs.req, "subscription closed: %s", reason)
})
@@ -454,6 +465,7 @@ func (req *reqVars) subscribe() {
}
})
}
req.subCancel = nil
setStatus(tabs.req, "subscription ended")
}()