dms kind work
This commit is contained in:
parent
e2daccc250
commit
23c5e89c4f
@ -17,6 +17,9 @@
|
|||||||
package database
|
package database
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
log "maunium.net/go/maulogger/v2"
|
log "maunium.net/go/maulogger/v2"
|
||||||
"maunium.net/go/mautrix/id"
|
"maunium.net/go/mautrix/id"
|
||||||
@ -31,6 +34,25 @@ type PortalKey struct {
|
|||||||
Receiver types.GroupMeID `gorm:"primaryKey"`
|
Receiver types.GroupMeID `gorm:"primaryKey"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ParsePortalKey(inp types.GroupMeID) *PortalKey {
|
||||||
|
parts := strings.Split(inp, "+")
|
||||||
|
|
||||||
|
if len(parts) != 2 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if i, err := strconv.Atoi(parts[0]); i == 0 || err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if i, err := strconv.Atoi(parts[1]); i == 0 || err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return &PortalKey{
|
||||||
|
JID: parts[0],
|
||||||
|
Receiver: parts[1],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func GroupPortalKey(jid types.GroupMeID) PortalKey {
|
func GroupPortalKey(jid types.GroupMeID) PortalKey {
|
||||||
return PortalKey{
|
return PortalKey{
|
||||||
JID: jid,
|
JID: jid,
|
||||||
@ -49,7 +71,7 @@ func (key PortalKey) String() string {
|
|||||||
if key.Receiver == key.JID {
|
if key.Receiver == key.JID {
|
||||||
return key.JID
|
return key.JID
|
||||||
}
|
}
|
||||||
return key.JID + "-" + key.Receiver
|
return key.JID + "+" + key.Receiver
|
||||||
}
|
}
|
||||||
|
|
||||||
func (key PortalKey) IsPrivate() bool {
|
func (key PortalKey) IsPrivate() bool {
|
||||||
|
@ -150,7 +150,10 @@ func (store *SQLStateStore) TryGetMember(roomID id.RoomID, userID id.UserID) (*e
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (store *SQLStateStore) TryGetMemberRaw(roomID id.RoomID, userID id.UserID) (user MxUserProfile, err bool) {
|
func (store *SQLStateStore) TryGetMemberRaw(roomID id.RoomID, userID id.UserID) (user MxUserProfile, err bool) {
|
||||||
ans := store.db.Where("room_id = ? AND user_id = ?", roomID, userID).Limit(1).Find(&user)
|
user.RoomID = roomID.String()
|
||||||
|
user.UserID = userID.String()
|
||||||
|
|
||||||
|
ans := store.db.Limit(1).Find(&user)
|
||||||
|
|
||||||
if ans.Error == gorm.ErrRecordNotFound {
|
if ans.Error == gorm.ErrRecordNotFound {
|
||||||
err = true
|
err = true
|
||||||
|
@ -941,6 +941,8 @@ func (portal *Portal) CreateMatrixRoom(user *User) error {
|
|||||||
portal.log.Infoln("Creating Matrix room. Info source:", user.MXID)
|
portal.log.Infoln("Creating Matrix room. Info source:", user.MXID)
|
||||||
|
|
||||||
var metadata *groupme.Group
|
var metadata *groupme.Group
|
||||||
|
fmt.Println(portal.IsPrivateChat(), portal.Key, portal.Key.Receiver, portal.Key.JID)
|
||||||
|
return nil
|
||||||
if portal.IsPrivateChat() {
|
if portal.IsPrivateChat() {
|
||||||
puppet := portal.bridge.GetPuppetByJID(portal.Key.JID)
|
puppet := portal.bridge.GetPuppetByJID(portal.Key.JID)
|
||||||
meta, err := portal.bridge.StateStore.TryGetMemberRaw("", puppet.MXID)
|
meta, err := portal.bridge.StateStore.TryGetMemberRaw("", puppet.MXID)
|
||||||
@ -967,8 +969,10 @@ func (portal *Portal) CreateMatrixRoom(user *User) error {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
portal.Name = metadata.Name
|
portal.Name = metadata.Name
|
||||||
portal.Topic = metadata.Description
|
portal.Topic = metadata.Description
|
||||||
|
portal.UpdateAvatar(user, metadata.ImageURL, false)
|
||||||
|
} else {
|
||||||
|
portal.log.Warnln("Cannot fetch group metadata for new portal")
|
||||||
}
|
}
|
||||||
portal.UpdateAvatar(user, metadata.ImageURL, false)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bridgeInfoStateKey, bridgeInfo := portal.getBridgeInfo()
|
bridgeInfoStateKey, bridgeInfo := portal.getBridgeInfo()
|
||||||
|
12
puppet.go
12
puppet.go
@ -189,6 +189,10 @@ func (puppet *Puppet) DefaultIntent() *appservice.IntentAPI {
|
|||||||
func (puppet *Puppet) UpdateAvatar(source *User, portalMXID id.RoomID, avatar string) bool {
|
func (puppet *Puppet) UpdateAvatar(source *User, portalMXID id.RoomID, avatar string) bool {
|
||||||
memberRaw, _ := puppet.bridge.StateStore.TryGetMemberRaw(portalMXID, puppet.MXID) //TODO Handle
|
memberRaw, _ := puppet.bridge.StateStore.TryGetMemberRaw(portalMXID, puppet.MXID) //TODO Handle
|
||||||
|
|
||||||
|
if memberRaw.Avatar == avatar {
|
||||||
|
return false // up to date
|
||||||
|
}
|
||||||
|
|
||||||
if len(avatar) == 0 {
|
if len(avatar) == 0 {
|
||||||
var err error
|
var err error
|
||||||
err = puppet.DefaultIntent().SetRoomAvatarURL(portalMXID, id.ContentURI{})
|
err = puppet.DefaultIntent().SetRoomAvatarURL(portalMXID, id.ContentURI{})
|
||||||
@ -206,10 +210,6 @@ func (puppet *Puppet) UpdateAvatar(source *User, portalMXID id.RoomID, avatar st
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
if memberRaw.Avatar == avatar {
|
|
||||||
return false // up to date
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO check its actually groupme?
|
//TODO check its actually groupme?
|
||||||
image, mime, err := groupmeExt.DownloadImage(avatar + ".large")
|
image, mime, err := groupmeExt.DownloadImage(avatar + ".large")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -241,13 +241,15 @@ func (puppet *Puppet) UpdateName(source *User, portalMXID id.RoomID, contact gro
|
|||||||
|
|
||||||
memberRaw, _ := puppet.bridge.StateStore.TryGetMemberRaw(portalMXID, puppet.MXID) //TODO Handle
|
memberRaw, _ := puppet.bridge.StateStore.TryGetMemberRaw(portalMXID, puppet.MXID) //TODO Handle
|
||||||
quality = quality //quality not used
|
quality = quality //quality not used
|
||||||
if memberRaw.DisplayName != newName { //&& quality >= puppet.NameQuality[portalMXID] {
|
|
||||||
|
if memberRaw.DisplayName != newName { //&& quality >= puppet.NameQuality[portalMXID] {
|
||||||
var err error
|
var err error
|
||||||
err = puppet.DefaultIntent().SetRoomDisplayName(portalMXID, newName)
|
err = puppet.DefaultIntent().SetRoomDisplayName(portalMXID, newName)
|
||||||
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
memberRaw.DisplayName = newName
|
memberRaw.DisplayName = newName
|
||||||
// puppet.NameQuality[portalMXID] = quality
|
// puppet.NameQuality[portalMXID] = quality
|
||||||
|
|
||||||
puppet.bridge.StateStore.SetMemberRaw(&memberRaw) //TODO handle; maybe .Update() ?
|
puppet.bridge.StateStore.SetMemberRaw(&memberRaw) //TODO handle; maybe .Update() ?
|
||||||
go puppet.updatePortalName()
|
go puppet.updatePortalName()
|
||||||
} else {
|
} else {
|
||||||
|
8
user.go
8
user.go
@ -914,12 +914,18 @@ func (user *User) handleMessageLoop() {
|
|||||||
func (user *User) HandleTextMessage(message groupme.Message) {
|
func (user *User) HandleTextMessage(message groupme.Message) {
|
||||||
var group bool
|
var group bool
|
||||||
var id string
|
var id string
|
||||||
|
|
||||||
if message.GroupID.String() != "" {
|
if message.GroupID.String() != "" {
|
||||||
group = true
|
group = true
|
||||||
id = message.GroupID.String()
|
id = message.GroupID.String()
|
||||||
} else if message.ConversationID.String() != "" {
|
} else if message.ConversationID.String() != "" {
|
||||||
group = false
|
group = false
|
||||||
id = message.ConversationID.String()
|
pk := database.ParsePortalKey(message.ConversationID.String())
|
||||||
|
if pk == nil {
|
||||||
|
user.log.Errorln("Error parsing conversationid/portalkey", message.ConversationID.String(), "ignoring message")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
id = pk.JID
|
||||||
} else {
|
} else {
|
||||||
user.log.Errorln("Message received without conversation or groupid")
|
user.log.Errorln("Message received without conversation or groupid")
|
||||||
return
|
return
|
||||||
|
Loading…
x
Reference in New Issue
Block a user