dms kind work

This commit is contained in:
Karmanyaah Malhotra 2021-04-30 17:21:13 -04:00
parent e2daccc250
commit 23c5e89c4f
5 changed files with 46 additions and 9 deletions

View File

@ -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 {

View File

@ -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

View File

@ -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) portal.UpdateAvatar(user, metadata.ImageURL, false)
} else {
portal.log.Warnln("Cannot fetch group metadata for new portal")
}
} }
bridgeInfoStateKey, bridgeInfo := portal.getBridgeInfo() bridgeInfoStateKey, bridgeInfo := portal.getBridgeInfo()

View File

@ -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,6 +241,7 @@ 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)
@ -248,6 +249,7 @@ func (puppet *Puppet) UpdateName(source *User, portalMXID id.RoomID, contact gro
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 {

View File

@ -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