diff --git a/main.go b/main.go index 12817a3..701e66c 100644 --- a/main.go +++ b/main.go @@ -141,25 +141,6 @@ var replying bool = false var notifications bool 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 w fyne.Window var a fyne.App @@ -421,11 +402,11 @@ func dropToSignInPage(reason string) { } func main() { + muc.Since(time.Now()) config = piConfig{} a = app.NewWithID("pi-im") - //a.Settings().SetTheme(&myTheme{}) reader, err := a.Storage().Open("pi.xml") if err != nil { dropToSignInPage(err.Error()) @@ -501,7 +482,7 @@ func main() { if correction { for i := len(tab.Messages) - 1; i > 0; i-- { 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() { UITabs[userJidStr].Scroller.Refresh() }) @@ -591,7 +572,7 @@ func main() { if correction { for i := len(tab.Messages) - 1; i > 0; i-- { 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() { UITabs[mucJidStr].Scroller.Refresh() }) @@ -965,7 +946,7 @@ func main() { }, w) }) - leaveRoom := fyne.NewMenuItem("Leave current room", func() { + leaveRoom := fyne.NewMenuItem("disconnect from current room", func() { selectedScroller, ok := AppTabs.Selected().Content.(*widget.List) if !ok { return @@ -980,15 +961,86 @@ func main() { AppTabs.Selected().Text = fmt.Sprintf("%s (disconnected)", AppTabs.Selected().Text) AppTabs.Items = append(AppTabs.Items[:AppTabs.SelectedIndex()], AppTabs.Items[AppTabs.SelectedIndex()+1:]...) AppTabs.SelectIndex(0) - err1, err2 := client.LeaveMuc(activeMucJid, "cya suckers!", context.TODO()) - if err1 != nil || err2 != nil { - dialog.ShowError(errors.Join(err1, err2), w) // beautiful... + err := client.DisconnectMuc(activeMucJid, "user left on own accord", context.TODO()) + if err != nil { + dialog.ShowError(err, w) } delete(UITabs, activeMucJid) }) - joinARoom := fyne.NewMenuItem("Join a room", func() { - dialog.ShowEntryDialog("Join a room", "JID:", func(s string) { + manageBookmarks := fyne.NewMenuItem("manage bookmarks", func() { + 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 gif, err := extraWidgets.NewAnimatedGifFromResource(i) if err != nil { @@ -1151,7 +1203,7 @@ func main() { 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) hafjag := fyne.NewMenuItem("Hafjag", func() { entry.Text = "Hafjag" @@ -1390,6 +1442,9 @@ func main() { continue // unrecoverable } nickname := userjid.Resourcepart() + if nickname == "" { + continue // we got the MUC presence, do not include it in the member list + } ii, err := gen.Draw(nickname) mention := func() { entry.SetText(fmt.Sprintf("%s %s", entry.Text, nickname)) @@ -1402,7 +1457,7 @@ func main() { imageWidget := canvas.NewImageFromImage(im) imageWidget.FillMode = canvas.ImageFillOriginal 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))) } }