telephant/bridges.go

125 lines
3.7 KiB
Go
Raw Normal View History

2017-08-29 05:09:17 +00:00
package main
import (
2019-05-09 14:33:26 +00:00
"github.com/muesli/telephant/accounts/mastodon"
2017-08-29 05:09:17 +00:00
"github.com/therecipe/qt/core"
)
// UIBridge lets us trigger Go methods from QML
type UIBridge struct {
core.QObject
_ func(instance string) bool `slot:"connectButton"`
_ func(code string, redirectURI string) bool `slot:"authButton"`
_ func(body string) int `slot:"postLimitCount"`
_ func(replyid string, message string) `slot:"postButton"`
_ func(id string) `slot:"deleteButton"`
_ func(id string) `slot:"shareButton"`
2019-05-06 20:51:31 +00:00
_ func(id string) `slot:"unshareButton"`
2017-08-29 05:09:17 +00:00
_ func(id string) `slot:"likeButton"`
2019-05-06 20:51:31 +00:00
_ func(id string) `slot:"unlikeButton"`
_ func(id string, follow bool) `slot:"followButton"`
_ func(id string) `slot:"loadConversation"`
_ func(id string) `slot:"loadAccount"`
_ func(token string) `slot:"tag"`
2017-08-29 05:09:17 +00:00
_ func(idx int64) `slot:"closePane"`
2017-08-29 05:09:17 +00:00
_ func(object *core.QObject) `slot:"registerToGo"`
_ func(objectName string) `slot:"deregisterToGo"`
}
// AccountBridge makes an account plugin available in QML
type AccountBridge struct {
core.QObject
_ string `property:"username"`
_ string `property:"name"`
2017-08-29 05:09:17 +00:00
_ string `property:"avatar"`
2019-05-02 08:37:29 +00:00
_ string `property:"profileURL"`
_ string `property:"profileID"`
_ int64 `property:"posts"`
_ int64 `property:"followCount"`
_ int64 `property:"followerCount"`
_ int64 `property:"postSizeLimit"`
2017-08-29 05:09:17 +00:00
2019-05-10 13:45:38 +00:00
_ string `property:"error"`
_ *core.QAbstractListModel `property:"panes"`
2017-08-29 05:09:17 +00:00
_ *core.QAbstractListModel `property:"messages"`
_ *core.QAbstractListModel `property:"notifications"`
_ *core.QAbstractListModel `property:"conversation"`
_ *core.QAbstractListModel `property:"accountMessages"`
}
// ProfileBridge allows QML to access profile data
type ProfileBridge struct {
core.QObject
_ string `property:"username"`
_ string `property:"name"`
_ string `property:"avatar"`
_ string `property:"profileURL"`
_ string `property:"profileID"`
_ int64 `property:"posts"`
_ int64 `property:"followCount"`
_ int64 `property:"followerCount"`
_ bool `property:"following"`
_ bool `property:"followedBy"`
2017-08-29 05:09:17 +00:00
}
// ConfigBridge allows QML to access the app's config
type ConfigBridge struct {
core.QObject
_ bool `property:"firstRun"`
_ string `property:"authURL"`
2019-05-10 13:46:39 +00:00
_ string `property:"redirectURL"`
_ string `property:"theme"`
2017-08-29 05:09:17 +00:00
_ string `property:"style"`
}
var (
// qmlObjects = make(map[string]*core.QObject)
uiBridge *UIBridge
accountBridge *AccountBridge
configBridge *ConfigBridge
profileBridge *ProfileBridge
2019-05-01 15:15:56 +00:00
tc *mastodon.Account
2017-08-29 05:09:17 +00:00
)
// setupQmlBridges initializes the QML bridges
func setupQmlBridges() {
configBridge = NewConfigBridge(nil)
accountBridge = NewAccountBridge(nil)
2019-05-09 14:33:26 +00:00
accountBridge.SetUsername("Telephant!")
2017-08-29 05:09:17 +00:00
uiBridge = NewUIBridge(nil)
uiBridge.ConnectConnectButton(connectToInstance)
uiBridge.ConnectAuthButton(authInstance)
uiBridge.ConnectPostLimitCount(postLimitCount)
uiBridge.ConnectPostButton(reply)
uiBridge.ConnectDeleteButton(deletePost)
uiBridge.ConnectShareButton(share)
2019-05-06 20:51:31 +00:00
uiBridge.ConnectUnshareButton(unshare)
2017-08-29 05:09:17 +00:00
uiBridge.ConnectLikeButton(like)
2019-05-06 20:51:31 +00:00
uiBridge.ConnectUnlikeButton(unlike)
uiBridge.ConnectFollowButton(follow)
uiBridge.ConnectLoadConversation(loadConversation)
uiBridge.ConnectLoadAccount(loadAccount)
uiBridge.ConnectTag(tag)
uiBridge.ConnectClosePane(closePane)
profileBridge = NewProfileBridge(nil)
2017-08-29 05:09:17 +00:00
/* uiBridge.ConnectRegisterToGo(func(object *core.QObject) {
qmlObjects[object.ObjectName()] = object
})
uiBridge.ConnectDeregisterToGo(func(objectName string) {
qmlObjects[objectName] = nil
}) */
}