Make it so that the bookmarks button replaces the content of the first tab

This commit is contained in:
2025-09-28 15:54:34 +01:00
parent 7ec143bc98
commit e9c1f8dbe1

138
main.go
View File

@@ -37,7 +37,7 @@ import (
// TODO: integrated theme switcher // TODO: integrated theme switcher
) )
var version string = "3i" var version string = "3.1i"
var statBar widget.Label var statBar widget.Label
var chatInfo fyne.Container var chatInfo fyne.Container
var chatSidebar fyne.Container var chatSidebar fyne.Container
@@ -402,9 +402,7 @@ func dropToSignInPage(reason string) {
} }
func main() { func main() {
muc.Since(time.Now()) muc.Since(time.Now())
config = piConfig{} config = piConfig{}
a = app.NewWithID("pi-im") a = app.NewWithID("pi-im")
reader, err := a.Storage().Open("pi.xml") reader, err := a.Storage().Open("pi.xml")
@@ -648,6 +646,7 @@ func main() {
} }
if bookmark.Autojoin { if bookmark.Autojoin {
if bookmark.Nick == "" { if bookmark.Nick == "" {
fmt.Println("WARNING: Bookmark has no name")
bookmark.Nick = client.Login.DisplayName bookmark.Nick = client.Login.DisplayName
} }
addChatTab(true, bookmark.JID, client.Login.DisplayName) addChatTab(true, bookmark.JID, client.Login.DisplayName)
@@ -971,15 +970,31 @@ func main() {
manageBookmarks := fyne.NewMenuItem("manage bookmarks", func() { manageBookmarks := fyne.NewMenuItem("manage bookmarks", func() {
bookmarks := client.BookmarkCache() bookmarks := client.BookmarkCache()
box := container.NewVBox() box := container.NewVBox()
box.Add(widget.NewRichTextFromMarkdown("# Manage Bookmarks"))
for address, bookmark := range bookmarks { for address, bookmark := range bookmarks {
bookmarkWidget := container.NewGridWithColumns(4) bookmarkWidget := container.NewGridWithColumns(5)
bookmarkWidget.Add(widget.NewLabel(address))
nameLabel := widget.NewLabel(bookmark.Name)
nameLabel.Wrapping = fyne.TextWrapBreak
bookmarkWidget.Add(nameLabel)
bookmarkJidWidget := widget.NewLabel(address)
bookmarkJidWidget.TextStyle.Monospace = true
bookmarkJidWidget.Selectable = true
bookmarkJidWidget.Wrapping = fyne.TextWrapWord
bookmarkWidget.Add(bookmarkJidWidget)
var autojoinCheck *widget.Check var autojoinCheck *widget.Check
var deleteBookmarkButton *widget.Button var deleteBookmarkButton *widget.Button
var joinRoomButton *widget.Button var joinRoomButton *widget.Button
joinRoomButton = widget.NewButtonWithIcon("Join", theme.AccountIcon(), func() { joinRoomButton = widget.NewButtonWithIcon("Join", theme.AccountIcon(), func() {
fyne.Do(func() { joinRoomButton.Disable() }) fyne.Do(func() { joinRoomButton.Disable() })
go func() { go func() {
if bookmark.Nick == "" {
bookmark.Nick = client.Login.DisplayName
}
var zero uint64 = uint64(0) var zero uint64 = uint64(0)
addChatTab(true, bookmark.JID, bookmark.Nick) addChatTab(true, bookmark.JID, bookmark.Nick)
_, err := client.ConnectMuc(bookmark, oasisSdk.MucLegacyHistoryConfig{MaxCount: &zero}, context.TODO()) _, err := client.ConnectMuc(bookmark, oasisSdk.MucLegacyHistoryConfig{MaxCount: &zero}, context.TODO())
@@ -1032,10 +1047,14 @@ func main() {
bookmarkWidget.Add(joinRoomButton) bookmarkWidget.Add(joinRoomButton)
box.Add(bookmarkWidget) box.Add(bookmarkWidget)
fmt.Println(address, bookmark)
} }
d := dialog.NewCustom("manage bookmarks", "cancel", box, w) myScroller := container.NewScroll(box)
d.Show() myScroller.Resize(fyne.NewSize(500,500))
AppTabs.Items[0].Content = myScroller
AppTabs.Items[0].Text = "Bookmarks"
AppTabs.SelectIndex(0)
//d := dialog.NewCustom("manage bookmarks", "cancel", myScroller, w)
//d.Show()
}) })
@@ -1101,67 +1120,6 @@ func main() {
}) })
/*
servDisc := fyne.NewMenuItem("Disco features", func() {
//var search jid.JID
dialog.ShowEntryDialog("Disco features", "JID: ", func(s string) { // TODO: replace with undeprecated widgetd
d := dialog.NewCustom("Please wait", "Close", widget.NewLabel("..."), w)
d.Show()
go func() {
//search, err = jid.Parse(s)
//if err != nil {
// d.Hide()
// dialog.ShowError(err, w)
// return
//}
txt := `<iq from='ringen@muc.isekai.rocks/sunglocto'
to='ringen@muc.iskai.rocks/snit'
type='get'
id='vc2'>
<vCard xmlns='vcard-temp'/>
</iq>`
var stan stanza.IQ
xml.Unmarshal([]byte(txt), &stan)
if err != nil {
d.Hide()
dialog.ShowError(err, w)
return
}
r, err := client.Session.EncodeIQ(client.Ctx, stan)
if err != nil {
d.Hide()
dialog.ShowError(err, w)
return
}
ra, _ := r.Token()
t, _ := xml.MarshalIndent(ra, "", "\t")
fmt.Println(string(t))
d.Hide()
/*
myBox := container.NewGridWithColumns(1, widget.NewLabel("Items"))
info, err := disco.GetInfo(client.Ctx, "", search, client.Session)
if err != nil {
d.Hide()
dialog.ShowError(err, w)
return
}
m := info.Identity
bytes, err := xml.MarshalIndent(m, "", "\t")
if err != nil {
d.Hide()
dialog.ShowError(err, w)
return
}
fyne.Do(func() {d.Hide()})
myBox.Objects = append(myBox.Objects, widget.NewLabel(string(bytes)))
dialog.ShowCustom("Service discovery", "cancel", myBox, w)
}()
}, w)
})
*/
savedata := fyne.NewMenuItem("DEBUG: Save tab data to disk", func() { savedata := fyne.NewMenuItem("DEBUG: Save tab data to disk", func() {
d := []ChatTab{} d := []ChatTab{}
for _, v := range chatTabs { for _, v := range chatTabs {
@@ -1176,31 +1134,6 @@ func main() {
os.WriteFile("text.xml", b, os.ModeAppend) os.WriteFile("text.xml", b, os.ModeAppend)
}) })
/*jbookmarks := fyne.NewMenuItem("Join rooms in bookmarks", func() {
// FIXME: Race condition
client.FetchBookmarks()
rooms := client.BookmarkCache()
for _, v := range rooms {
go func() {
if v.Autojoin == true {
joinjid, err := v.JID.WithResource(login.DisplayName)
if err != nil {
dialog.ShowError(err, w)
return
}
room, err := client.MucClient.Join(client.Ctx, joinjid, client.Session)
if err != nil {
dialog.ShowError(err, w)
return
}
client.MucChannels[v.JID.String()] = room
addChatTab(true, v.JID, login.DisplayName)
}
}()
}
})
*/
menu_help := fyne.NewMenu("π", mit, reconnect, licensesbtn, savedata) menu_help := fyne.NewMenu("π", mit, reconnect, licensesbtn, savedata)
menu_changeroom := fyne.NewMenu("Α", mic, beginADM, joinARoom, leaveRoom, manageBookmarks) menu_changeroom := fyne.NewMenu("Α", mic, beginADM, joinARoom, leaveRoom, manageBookmarks)
@@ -1387,19 +1320,14 @@ func main() {
} }
AppTabs = container.NewAppTabs( AppTabs = container.NewAppTabs(
container.NewTabItem("τίποτα", widget.NewLabel(` container.NewTabItem("...", widget.NewLabel(`
pi pi
This tab will be used for displaying certain actions, such as
managing your bookmarks configuring rooms.
`)), `)),
) )
/*
for _, mucJidStr := range login.MucsToJoin {
mucJid, err := jid.Parse(mucJidStr)
if err == nil {
addChatTab(true, mucJid, login.DisplayName)
}
}*/
for _, userJidStr := range DMs { for _, userJidStr := range DMs {
fmt.Println(userJidStr) fmt.Println(userJidStr)
DMjid, err := jid.Parse(userJidStr) DMjid, err := jid.Parse(userJidStr)
@@ -1457,7 +1385,9 @@ func main() {
imageWidget := canvas.NewImageFromImage(im) imageWidget := canvas.NewImageFromImage(im)
imageWidget.FillMode = canvas.ImageFillOriginal imageWidget.FillMode = canvas.ImageFillOriginal
imageWidget.Refresh() imageWidget.Refresh()
box.Add(container.NewGridWithColumns(3, imageWidget, widget.NewLabel(nickname), widget.NewButton("Mention", mention))) nickLabel := widget.NewLabel(nickname)
nickLabel.Selectable = true
box.Add(container.NewHBox(imageWidget, nickLabel))
} }
} }