mirror of
https://github.com/fiatjaf/vnak.git
synced 2026-07-22 07:48:24 +00:00
bunker, event, req fixes.
This commit is contained in:
@@ -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)
|
||||
|
||||
4
event.go
4
event.go
@@ -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
92
main.go
@@ -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
18
req.go
@@ -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")
|
||||
}()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user