Bookmark management

This commit is contained in:
2025-09-28 09:45:56 +01:00
parent adf86896e9
commit 7ec143bc98

115
main.go
View File

@@ -141,25 +141,6 @@ var replying bool = false
var notifications bool var notifications bool
var connection bool = true var connection bool = true
/*
func (m myTheme) Font(style fyne.TextStyle) fyne.Resource {
return resourceAppleColorEmojiTtf
}
func (m myTheme) Color(name fyne.ThemeColorName, variant fyne.ThemeVariant) color.Color {
return adwaita.AdwaitaTheme().Color(name, fyne.CurrentApp().Settings().ThemeVariant())
}
func (m myTheme) Icon(name fyne.ThemeIconName) fyne.Resource {
return theme.DefaultTheme().Icon(name)
}
/*
func (m myTheme) Font(style fyne.TextStyle) fyne.Resource {
return theme.DefaultTheme().Font(style)
}
*/
var scrollDownOnNewMessage bool = true var scrollDownOnNewMessage bool = true
var w fyne.Window var w fyne.Window
var a fyne.App var a fyne.App
@@ -421,11 +402,11 @@ 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")
//a.Settings().SetTheme(&myTheme{})
reader, err := a.Storage().Open("pi.xml") reader, err := a.Storage().Open("pi.xml")
if err != nil { if err != nil {
dropToSignInPage(err.Error()) dropToSignInPage(err.Error())
@@ -501,7 +482,7 @@ func main() {
if correction { if correction {
for i := len(tab.Messages) - 1; i > 0; i-- { for i := len(tab.Messages) - 1; i > 0; i-- {
if tab.Messages[i].Raw.From.String() == msg.From.String() { if tab.Messages[i].Raw.From.String() == msg.From.String() {
tab.Messages[i].Content = *msg.CleanedBody + " (edited)" tab.Messages[i].Content = *msg.CleanedBody + " (corrected)"
fyne.Do(func() { fyne.Do(func() {
UITabs[userJidStr].Scroller.Refresh() UITabs[userJidStr].Scroller.Refresh()
}) })
@@ -591,7 +572,7 @@ func main() {
if correction { if correction {
for i := len(tab.Messages) - 1; i > 0; i-- { for i := len(tab.Messages) - 1; i > 0; i-- {
if tab.Messages[i].Raw.From.String() == msg.From.String() { if tab.Messages[i].Raw.From.String() == msg.From.String() {
tab.Messages[i].Content = *msg.CleanedBody + " (edited)" tab.Messages[i].Content = *msg.CleanedBody + " (corrected)"
fyne.Do(func() { fyne.Do(func() {
UITabs[mucJidStr].Scroller.Refresh() UITabs[mucJidStr].Scroller.Refresh()
}) })
@@ -965,7 +946,7 @@ func main() {
}, w) }, w)
}) })
leaveRoom := fyne.NewMenuItem("Leave current room", func() { leaveRoom := fyne.NewMenuItem("disconnect from current room", func() {
selectedScroller, ok := AppTabs.Selected().Content.(*widget.List) selectedScroller, ok := AppTabs.Selected().Content.(*widget.List)
if !ok { if !ok {
return return
@@ -980,15 +961,86 @@ func main() {
AppTabs.Selected().Text = fmt.Sprintf("%s (disconnected)", AppTabs.Selected().Text) AppTabs.Selected().Text = fmt.Sprintf("%s (disconnected)", AppTabs.Selected().Text)
AppTabs.Items = append(AppTabs.Items[:AppTabs.SelectedIndex()], AppTabs.Items[AppTabs.SelectedIndex()+1:]...) AppTabs.Items = append(AppTabs.Items[:AppTabs.SelectedIndex()], AppTabs.Items[AppTabs.SelectedIndex()+1:]...)
AppTabs.SelectIndex(0) AppTabs.SelectIndex(0)
err1, err2 := client.LeaveMuc(activeMucJid, "cya suckers!", context.TODO()) err := client.DisconnectMuc(activeMucJid, "user left on own accord", context.TODO())
if err1 != nil || err2 != nil { if err != nil {
dialog.ShowError(errors.Join(err1, err2), w) // beautiful... dialog.ShowError(err, w)
} }
delete(UITabs, activeMucJid) delete(UITabs, activeMucJid)
}) })
joinARoom := fyne.NewMenuItem("Join a room", func() { manageBookmarks := fyne.NewMenuItem("manage bookmarks", func() {
dialog.ShowEntryDialog("Join a room", "JID:", func(s string) { bookmarks := client.BookmarkCache()
box := container.NewVBox()
for address, bookmark := range bookmarks {
bookmarkWidget := container.NewGridWithColumns(4)
bookmarkWidget.Add(widget.NewLabel(address))
var autojoinCheck *widget.Check
var deleteBookmarkButton *widget.Button
var joinRoomButton *widget.Button
joinRoomButton = widget.NewButtonWithIcon("Join", theme.AccountIcon(), func() {
fyne.Do(func() { joinRoomButton.Disable() })
go func() {
var zero uint64 = uint64(0)
addChatTab(true, bookmark.JID, bookmark.Nick)
_, err := client.ConnectMuc(bookmark, oasisSdk.MucLegacyHistoryConfig{MaxCount: &zero}, context.TODO())
if err != nil {
fyne.Do(func() {
joinRoomButton.Enable()
dialog.ShowError(err, w)
})
return
}
client.RefreshBookmarks(false)
fyne.Do(func() { joinRoomButton.Enable() })
}()
})
autojoinCheck = widget.NewCheck("Autojoin", func(b bool) {
go func() {
fyne.Do(func() { autojoinCheck.Disable() })
bookmark.Autojoin = b
err := client.PublishBookmark(bookmark, context.TODO())
if err != nil {
fyne.Do(func() {
autojoinCheck.Enable()
dialog.ShowError(err, w)
})
return
}
client.RefreshBookmarks(false)
fyne.Do(func() { autojoinCheck.Enable() })
}()
})
autojoinCheck.Checked = bookmark.Autojoin
deleteBookmarkButton = widget.NewButtonWithIcon("Delete", theme.CancelIcon(), func() {
go func() {
err := client.DeleteBookmark(bookmark.JID, context.TODO())
if err != nil {
fyne.Do(func() {
dialog.ShowError(err, w)
})
return
}
client.RefreshBookmarks(false)
bookmarkWidget.RemoveAll()
}()
})
bookmarkWidget.Add(autojoinCheck)
bookmarkWidget.Add(deleteBookmarkButton)
bookmarkWidget.Add(joinRoomButton)
box.Add(bookmarkWidget)
fmt.Println(address, bookmark)
}
d := dialog.NewCustom("manage bookmarks", "cancel", box, w)
d.Show()
})
joinARoom := fyne.NewMenuItem("connect to a room", func() {
dialog.ShowEntryDialog("connect to a room", "JID:", func(s string) {
i := resourcePiloadingGif i := resourcePiloadingGif
gif, err := extraWidgets.NewAnimatedGifFromResource(i) gif, err := extraWidgets.NewAnimatedGifFromResource(i)
if err != nil { if err != nil {
@@ -1151,7 +1203,7 @@ func main() {
menu_help := fyne.NewMenu("π", mit, reconnect, licensesbtn, savedata) menu_help := fyne.NewMenu("π", mit, reconnect, licensesbtn, savedata)
menu_changeroom := fyne.NewMenu("Α", mic, beginADM, joinARoom, leaveRoom) menu_changeroom := fyne.NewMenu("Α", mic, beginADM, joinARoom, leaveRoom, manageBookmarks)
menu_configureview := fyne.NewMenu("Β", mia, jtt, jtb) menu_configureview := fyne.NewMenu("Β", mia, jtt, jtb)
hafjag := fyne.NewMenuItem("Hafjag", func() { hafjag := fyne.NewMenuItem("Hafjag", func() {
entry.Text = "Hafjag" entry.Text = "Hafjag"
@@ -1390,6 +1442,9 @@ func main() {
continue // unrecoverable continue // unrecoverable
} }
nickname := userjid.Resourcepart() nickname := userjid.Resourcepart()
if nickname == "" {
continue // we got the MUC presence, do not include it in the member list
}
ii, err := gen.Draw(nickname) ii, err := gen.Draw(nickname)
mention := func() { mention := func() {
entry.SetText(fmt.Sprintf("%s %s", entry.Text, nickname)) entry.SetText(fmt.Sprintf("%s %s", entry.Text, nickname))
@@ -1402,7 +1457,7 @@ 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.NewHBox(imageWidget, widget.NewLabel(nickname), widget.NewButton("Mention", mention))) box.Add(container.NewGridWithColumns(3, imageWidget, widget.NewLabel(nickname), widget.NewButton("Mention", mention)))
} }
} }