mirror of
https://github.com/fiatjaf/vnak.git
synced 2026-10-05 15:38:23 +00:00
bunker, event, req fixes.
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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")
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user