This commit is contained in:
Brandon Watson 2023-09-06 22:17:06 -05:00
parent 3db8e1da05
commit d6f94287d4
17 changed files with 62 additions and 46 deletions

View File

@ -188,10 +188,13 @@ type UsernameTemplateArgs struct {
func (bc BridgeConfig) FormatDisplayname(gmid groupme.ID, member groupme.Member) string { func (bc BridgeConfig) FormatDisplayname(gmid groupme.ID, member groupme.Member) string {
var buf strings.Builder var buf strings.Builder
_ = bc.displaynameTemplate.Execute(&buf, map[string]string{ err := bc.displaynameTemplate.Execute(&buf, map[string]string{
"Name": member.Nickname, "Name": member.Nickname,
"GMID": gmid.String(), "GMID": gmid.String(),
}) })
if err != nil {
fmt.Println(err)
}
return buf.String() return buf.String()
} }

View File

@ -1,11 +1,11 @@
package config package config
import ( import (
"go.mau.fi/util/random"
"strings" "strings"
up "go.mau.fi/util/configupgrade"
"maunium.net/go/mautrix/bridge/bridgeconfig" "maunium.net/go/mautrix/bridge/bridgeconfig"
"maunium.net/go/mautrix/util"
up "maunium.net/go/mautrix/util/configupgrade"
) )
func DoUpgrade(helper *up.Helper) { func DoUpgrade(helper *up.Helper) {
@ -103,7 +103,7 @@ func DoUpgrade(helper *up.Helper) {
if secret, ok := helper.Get(up.Str, "appservice", "provisioning", "shared_secret"); ok && secret != "generate" { if secret, ok := helper.Get(up.Str, "appservice", "provisioning", "shared_secret"); ok && secret != "generate" {
helper.Set(up.Str, secret, "bridge", "provisioning", "shared_secret") helper.Set(up.Str, secret, "bridge", "provisioning", "shared_secret")
} else if secret, ok = helper.Get(up.Str, "bridge", "provisioning", "shared_secret"); !ok || secret == "generate" { } else if secret, ok = helper.Get(up.Str, "bridge", "provisioning", "shared_secret"); !ok || secret == "generate" {
sharedSecret := util.RandomString(64) sharedSecret := random.String(64)
helper.Set(up.Str, sharedSecret, "bridge", "provisioning", "shared_secret") helper.Set(up.Str, sharedSecret, "bridge", "provisioning", "shared_secret")
} else { } else {
helper.Copy(up.Str, "bridge", "provisioning", "shared_secret") helper.Copy(up.Str, "bridge", "provisioning", "shared_secret")

View File

@ -18,6 +18,7 @@ package database
import ( import (
"errors" "errors"
"go.mau.fi/util/dbutil"
"net" "net"
"github.com/lib/pq" "github.com/lib/pq"
@ -25,7 +26,6 @@ import (
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
"maunium.net/go/maulogger/v2" "maunium.net/go/maulogger/v2"
"maunium.net/go/mautrix/util/dbutil"
"github.com/beeper/groupme/database/upgrades" "github.com/beeper/groupme/database/upgrades"
) )

View File

@ -19,11 +19,11 @@ package database
import ( import (
"database/sql" "database/sql"
"errors" "errors"
"go.mau.fi/util/dbutil"
"time" "time"
log "maunium.net/go/maulogger/v2" log "maunium.net/go/maulogger/v2"
"maunium.net/go/mautrix/id" "maunium.net/go/mautrix/id"
"maunium.net/go/mautrix/util/dbutil"
"github.com/beeper/groupme-lib" "github.com/beeper/groupme-lib"
) )

View File

@ -19,12 +19,12 @@ package database
import ( import (
"database/sql" "database/sql"
"fmt" "fmt"
"go.mau.fi/util/dbutil"
"strconv" "strconv"
"strings" "strings"
log "maunium.net/go/maulogger/v2" log "maunium.net/go/maulogger/v2"
"maunium.net/go/mautrix/id" "maunium.net/go/mautrix/id"
"maunium.net/go/mautrix/util/dbutil"
"github.com/beeper/groupme-lib" "github.com/beeper/groupme-lib"
) )

View File

@ -18,11 +18,11 @@ package database
import ( import (
"database/sql" "database/sql"
"go.mau.fi/util/dbutil"
log "maunium.net/go/maulogger/v2" log "maunium.net/go/maulogger/v2"
"maunium.net/go/mautrix/id" "maunium.net/go/mautrix/id"
"maunium.net/go/mautrix/util/dbutil"
"github.com/beeper/groupme-lib" "github.com/beeper/groupme-lib"
) )
@ -151,8 +151,8 @@ func (puppet *Puppet) Update() {
_, err := puppet.db.Exec(` _, err := puppet.db.Exec(`
UPDATE puppet UPDATE puppet
SET displayname=$1, name_set=$2, avatar=$3, avatar_url=$4, avatar_set=$5, custom_mxid=$6, SET displayname=$1, name_set=$2, avatar=$3, avatar_url=$4, avatar_set=$5, custom_mxid=$6,
access_token=$7, next_batch=$8, enable_receipts=$10 access_token=$7, next_batch=$8, enable_receipts=$9
WHERE username=$11 WHERE GMID=$10
`, puppet.Displayname, puppet.NameSet, puppet.Avatar, puppet.AvatarURL.String(), puppet.AvatarSet, `, puppet.Displayname, puppet.NameSet, puppet.Avatar, puppet.AvatarURL.String(), puppet.AvatarSet,
puppet.CustomMXID, puppet.AccessToken, puppet.NextBatch, puppet.EnableReceipts, puppet.CustomMXID, puppet.AccessToken, puppet.NextBatch, puppet.EnableReceipts,
puppet.GMID) puppet.GMID)

View File

@ -3,12 +3,11 @@ package database
import ( import (
"database/sql" "database/sql"
"errors" "errors"
"go.mau.fi/util/dbutil"
log "maunium.net/go/maulogger/v2"
"maunium.net/go/mautrix/id"
"maunium.net/go/mautrix/util/dbutil"
"github.com/beeper/groupme-lib" "github.com/beeper/groupme-lib"
log "maunium.net/go/maulogger/v2"
"maunium.net/go/mautrix/id"
) )
type ReactionQuery struct { type ReactionQuery struct {

View File

@ -19,7 +19,7 @@ package upgrades
import ( import (
"embed" "embed"
"maunium.net/go/mautrix/util/dbutil" "go.mau.fi/util/dbutil"
) )
var Table dbutil.UpgradeTable var Table dbutil.UpgradeTable

View File

@ -18,16 +18,15 @@ package database
import ( import (
"database/sql" "database/sql"
"go.mau.fi/util/dbutil"
"strings" "strings"
"sync" "sync"
"time" "time"
log "maunium.net/go/maulogger/v2" log "maunium.net/go/maulogger/v2"
"maunium.net/go/mautrix/id"
"maunium.net/go/mautrix/util/dbutil"
"github.com/beeper/groupme-lib" "github.com/beeper/groupme-lib"
"maunium.net/go/mautrix/id"
) )
type UserQuery struct { type UserQuery struct {

View File

@ -92,7 +92,7 @@ bridge:
# {{call .UserID.String}} - the number GroupMe assigns to the user # {{call .UserID.String}} - the number GroupMe assigns to the user
# {{.Nickname}} - the nickname in that room # {{.Nickname}} - the nickname in that room
# {{.ImageURL}} - User's avatar URL is available but irrelevant here # {{.ImageURL}} - User's avatar URL is available but irrelevant here
displayname_template: "{{if .Nickname}}{{.Nickname}}{{else}}{{call .UserID.String}}{{end}} (GM)" displayname_template: "{{if .Name}}{{.Name}}{{else}}{{.GMID}}{{end}} (GM)"
# Should the bridge create a space for each logged-in user and add bridged rooms to it? # Should the bridge create a space for each logged-in user and add bridged rooms to it?
# Users who logged in before turning this on should run `!wa sync space` to create and fill the space for the first time. # Users who logged in before turning this on should run `!wa sync space` to create and fill the space for the first time.
personal_filtering_spaces: false personal_filtering_spaces: false

View File

@ -18,10 +18,10 @@ package main
import ( import (
"fmt" "fmt"
"go.mau.fi/util/variationselector"
"maunium.net/go/mautrix/event" "maunium.net/go/mautrix/event"
"maunium.net/go/mautrix/format" "maunium.net/go/mautrix/format"
"maunium.net/go/mautrix/util/variationselector"
) )
const formatterContextAllowedMentionsKey = "com.beeper.groupme.allowed_mentions" const formatterContextAllowedMentionsKey = "com.beeper.groupme.allowed_mentions"

5
go.mod
View File

@ -4,13 +4,14 @@ go 1.19
require ( require (
github.com/beeper/groupme-lib v0.2.1-0.20221021205945-8f23e04eea71 github.com/beeper/groupme-lib v0.2.1-0.20221021205945-8f23e04eea71
//github.com/beeper/groupme-lib v0.2.1-0.20221021205945-8f23e04eea71 => "../groupme-lib"
github.com/gabriel-vasile/mimetype v1.1.2 github.com/gabriel-vasile/mimetype v1.1.2
github.com/karmanyaahm/wray v0.0.0-20210303233435-756d58657c14 github.com/karmanyaahm/wray v0.0.0-20210303233435-756d58657c14
github.com/lib/pq v1.10.9 github.com/lib/pq v1.10.9
github.com/mattn/go-sqlite3 v1.14.17 github.com/mattn/go-sqlite3 v1.14.17
github.com/prometheus/client_golang v1.11.1 github.com/prometheus/client_golang v1.11.1
maunium.net/go/maulogger/v2 v2.4.1 maunium.net/go/maulogger/v2 v2.4.1
maunium.net/go/mautrix v0.15.0 maunium.net/go/mautrix v0.16.0
) )
require ( require (
@ -35,8 +36,10 @@ require (
github.com/tidwall/pretty v1.2.0 // indirect github.com/tidwall/pretty v1.2.0 // indirect
github.com/tidwall/sjson v1.2.5 // indirect github.com/tidwall/sjson v1.2.5 // indirect
github.com/yuin/goldmark v1.5.5 // indirect github.com/yuin/goldmark v1.5.5 // indirect
go.mau.fi/util v0.0.0-20230805171708-199bf3eec776 // indirect
go.mau.fi/zeroconfig v0.1.2 // indirect go.mau.fi/zeroconfig v0.1.2 // indirect
golang.org/x/crypto v0.12.0 // indirect golang.org/x/crypto v0.12.0 // indirect
golang.org/x/exp v0.0.0-20230810033253-352e893a4cad // indirect
golang.org/x/net v0.14.0 // indirect golang.org/x/net v0.14.0 // indirect
golang.org/x/sys v0.11.0 // indirect golang.org/x/sys v0.11.0 // indirect
google.golang.org/protobuf v1.26.0-rc.1 // indirect google.golang.org/protobuf v1.26.0-rc.1 // indirect

6
go.sum
View File

@ -21,6 +21,7 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/densestvoid/groupme v0.2.0/go.mod h1:i+bzB18n8RntitrMbr65boSHU0HfjDcbEUEIPPAV+QU=
github.com/gabriel-vasile/mimetype v1.1.2 h1:gaPnPcNor5aZSVCJVSGipcpbgMWiAAj9z182ocSGbHU= github.com/gabriel-vasile/mimetype v1.1.2 h1:gaPnPcNor5aZSVCJVSGipcpbgMWiAAj9z182ocSGbHU=
github.com/gabriel-vasile/mimetype v1.1.2/go.mod h1:6CDPel/o/3/s4+bp6kIbsWATq8pmgOisOPG40CJa6To= github.com/gabriel-vasile/mimetype v1.1.2/go.mod h1:6CDPel/o/3/s4+bp6kIbsWATq8pmgOisOPG40CJa6To=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
@ -146,6 +147,8 @@ github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
github.com/yuin/goldmark v1.5.5 h1:IJznPe8wOzfIKETmMkd06F8nXkmlhaHqFRM9l1hAGsU= github.com/yuin/goldmark v1.5.5 h1:IJznPe8wOzfIKETmMkd06F8nXkmlhaHqFRM9l1hAGsU=
github.com/yuin/goldmark v1.5.5/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark v1.5.5/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.mau.fi/util v0.0.0-20230805171708-199bf3eec776 h1:VrxDCO/gLFHLQywGUsJzertrvt2mUEMrZPf4hEL/s18=
go.mau.fi/util v0.0.0-20230805171708-199bf3eec776/go.mod h1:AxuJUMCxpzgJ5eV9JbPWKRH8aAJJidxetNdUj7qcb84=
go.mau.fi/zeroconfig v0.1.2 h1:DKOydWnhPMn65GbXZOafgkPm11BvFashZWLct0dGFto= go.mau.fi/zeroconfig v0.1.2 h1:DKOydWnhPMn65GbXZOafgkPm11BvFashZWLct0dGFto=
go.mau.fi/zeroconfig v0.1.2/go.mod h1:NcSJkf180JT+1IId76PcMuLTNa1CzsFFZ0nBygIQM70= go.mau.fi/zeroconfig v0.1.2/go.mod h1:NcSJkf180JT+1IId76PcMuLTNa1CzsFFZ0nBygIQM70=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
@ -153,6 +156,8 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk=
golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
golang.org/x/exp v0.0.0-20230810033253-352e893a4cad h1:g0bG7Z4uG+OgH2QDODnjp6ggkk1bJDsINcuWmJN1iJU=
golang.org/x/exp v0.0.0-20230810033253-352e893a4cad/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@ -216,4 +221,5 @@ maunium.net/go/maulogger/v2 v2.4.1 h1:N7zSdd0mZkB2m2JtFUsiGTQQAdP0YeFWT7YMc80yAL
maunium.net/go/maulogger/v2 v2.4.1/go.mod h1:omPuYwYBILeVQobz8uO3XC8DIRuEb5rXYlQSuqrbCho= maunium.net/go/maulogger/v2 v2.4.1/go.mod h1:omPuYwYBILeVQobz8uO3XC8DIRuEb5rXYlQSuqrbCho=
maunium.net/go/mautrix v0.15.0 h1:gkK9HXc1SSPwY7qOAqchzj2xxYqiOYeee8lr28A2g/o= maunium.net/go/mautrix v0.15.0 h1:gkK9HXc1SSPwY7qOAqchzj2xxYqiOYeee8lr28A2g/o=
maunium.net/go/mautrix v0.15.0/go.mod h1:1v8QVDd7q/eJ+eg4sgeOSEafBAFhkt4ab2i97M3IkNQ= maunium.net/go/mautrix v0.15.0/go.mod h1:1v8QVDd7q/eJ+eg4sgeOSEafBAFhkt4ab2i97M3IkNQ=
maunium.net/go/mautrix v0.16.0 h1:iUqCzJE2yqBC1ddAK6eAn159My8rLb4X8g4SFtQh2Dk=
maunium.net/go/mautrix v0.16.0/go.mod h1:XAjE9pTSGcr6vXaiNgQGiip7tddJ8FQV1a29u2QdBG4= maunium.net/go/mautrix v0.16.0/go.mod h1:XAjE9pTSGcr6vXaiNgQGiip7tddJ8FQV1a29u2QdBG4=

View File

@ -18,6 +18,8 @@ package main
import ( import (
_ "embed" _ "embed"
"github.com/beeper/groupme-lib"
"go.mau.fi/util/configupgrade"
"sync" "sync"
"maunium.net/go/mautrix" "maunium.net/go/mautrix"
@ -25,9 +27,6 @@ import (
"maunium.net/go/mautrix/bridge/commands" "maunium.net/go/mautrix/bridge/commands"
"maunium.net/go/mautrix/bridge/status" "maunium.net/go/mautrix/bridge/status"
"maunium.net/go/mautrix/id" "maunium.net/go/mautrix/id"
"maunium.net/go/mautrix/util/configupgrade"
"github.com/beeper/groupme-lib"
"github.com/beeper/groupme/config" "github.com/beeper/groupme/config"
"github.com/beeper/groupme/database" "github.com/beeper/groupme/database"

View File

@ -336,7 +336,7 @@ func (portal *Portal) finishHandling(source *User, message *groupme.Message, mxi
portal.log.Debugln("Handled message", message.ID.String(), "->", mxid) portal.log.Debugln("Handled message", message.ID.String(), "->", mxid)
} }
func (portal *Portal) SyncParticipants(metadata *groupme.Group) { func (portal *Portal) SyncParticipants(group *groupme.Group) {
changed := false changed := false
levels, err := portal.MainIntent().PowerLevels(portal.MXID) levels, err := portal.MainIntent().PowerLevels(portal.MXID)
if err != nil { if err != nil {
@ -344,7 +344,7 @@ func (portal *Portal) SyncParticipants(metadata *groupme.Group) {
changed = true changed = true
} }
participantMap := make(map[groupme.ID]bool) participantMap := make(map[groupme.ID]bool)
for _, participant := range metadata.Members { for _, participant := range group.Members {
participantMap[participant.UserID] = true participantMap[participant.UserID] = true
user := portal.bridge.GetUserByGMID(participant.UserID) user := portal.bridge.GetUserByGMID(participant.UserID)
portal.userMXIDAction(user, portal.ensureMXIDInvited) portal.userMXIDAction(user, portal.ensureMXIDInvited)
@ -558,7 +558,7 @@ func (portal *Portal) Sync(user *User, group *groupme.Group) {
if portal.IsPrivateChat() { if portal.IsPrivateChat() {
sub = user.Conn.SubscribeToDM sub = user.Conn.SubscribeToDM
} }
err := sub(context.TODO(), portal.Key.Receiver, user.Token) err := sub(context.TODO(), portal.Key.GMID, user.Token)
if err != nil { if err != nil {
portal.log.Errorln("Subscribing failed, live metadata updates won't work", err) portal.log.Errorln("Subscribing failed, live metadata updates won't work", err)
} }
@ -750,7 +750,7 @@ func (portal *Portal) CreateMatrixRoom(user *User) error {
portal.Topic = "GroupMe private chat" portal.Topic = "GroupMe private chat"
} else { } else {
var err error var err error
metadata, err = user.Client.ShowGroup(context.TODO(), groupme.ID(portal.Key.GMID)) metadata, err = user.Client.ShowGroup(context.TODO(), portal.Key.GMID)
if err == nil { if err == nil {
portal.Name = metadata.Name portal.Name = metadata.Name
portal.Topic = metadata.Description portal.Topic = metadata.Description

View File

@ -295,7 +295,7 @@ func (puppet *Puppet) updatePortalName() {
}) })
} }
func (puppet *Puppet) Sync(source *User, member *groupme.Member, forceAvatarSync, forcePortalSync bool) { func (puppet *Puppet) Sync(source *User, member *groupme.Member, forceAvatarSync bool, forcePortalSync bool) {
puppet.syncLock.Lock() puppet.syncLock.Lock()
defer puppet.syncLock.Unlock() defer puppet.syncLock.Unlock()
err := puppet.DefaultIntent().EnsureRegistered() err := puppet.DefaultIntent().EnsureRegistered()
@ -303,6 +303,13 @@ func (puppet *Puppet) Sync(source *User, member *groupme.Member, forceAvatarSync
puppet.log.Errorln("Failed to ensure registered:", err) puppet.log.Errorln("Failed to ensure registered:", err)
} }
update := false
update = puppet.UpdateName(*member, forcePortalSync) || update
update = puppet.UpdateAvatar(source, forcePortalSync) || update
if update {
puppet.Update()
}
//puppet.log.Debugfln("Syncing info through %s", source.GMID) //puppet.log.Debugfln("Syncing info through %s", source.GMID)
// TODO // TODO

34
user.go
View File

@ -359,7 +359,7 @@ func (user *User) Connect() bool {
func (user *User) RestoreSession() bool { func (user *User) RestoreSession() bool {
if len(user.Token) > 0 { if len(user.Token) > 0 {
err := user.Conn.SubscribeToUser(context.TODO(), groupme.ID(user.GMID), user.Token) err := user.Conn.SubscribeToUser(context.TODO(), user.GMID, user.Token)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
@ -616,7 +616,7 @@ func (user *User) syncPortals(createAll bool) {
}) })
} }
for _, dm := range user.ChatList { for _, dm := range user.ChatList {
portal := user.bridge.GetPortalByGMID(database.NewPortalKey(dm.OtherUser.ID, user.GMID)) portal := user.bridge.GetPortalByGMID(database.NewPortalKey(dm.LastMessage.ConversationID, user.GMID))
chats = append(chats, Chat{ chats = append(chats, Chat{
Portal: portal, Portal: portal,
LastMessageTime: uint64(dm.UpdatedAt.ToTime().Unix()), LastMessageTime: uint64(dm.UpdatedAt.ToTime().Unix()),
@ -624,25 +624,25 @@ func (user *User) syncPortals(createAll bool) {
}) })
} }
for _, chat := range chats { //for _, chat := range chats {
//var inSpace, ok bool //var inSpace, ok bool
//if inSpace, ok = existingKeys[chat.Portal.Key]; !ok || !inCommunity { //if inSpace, ok = existingKeys[chat.Portal.Key]; !ok || !inCommunity {
// inCommunity = user.addPortalToCommunity(chat.Portal) // inCommunity = user.addPortalToCommunity(chat.Portal)
// if chat.Portal.IsPrivateChat() { // if chat.Portal.IsPrivateChat() {
// puppet := user.bridge.GetPuppetByGMID(chat.Portal.Key.GMID) // puppet := user.bridge.GetPuppetByGMID(chat.Portal.Key.GMID)
// user.ad.addPuppetToCommunity(puppet) // user.ad.addPuppetToCommunity(puppet)
// } // }
//} //}
portalKeys = append(portalKeys, chat.Portal.Key) //portalKeys = append(portalKeys, chat.Portal.Key)
} //}
user.log.Infoln("Read chat list, updating user-portal mapping") //user.log.Infoln("Read chat list, updating user-portal mapping")
err := user.SetPortalKeys(portalKeys) //user.SetPortalKeys(portalKeys) err := user.SetPortalKeys(portalKeys)
if err != nil { if err != nil {
user.log.Warnln("Failed to update user-portal mapping:", err) user.log.Warnln("Failed to update user-portal mapping:", err)
} }
sort.Sort(chats) sort.Sort(chats)
limit := user.bridge.Config.Bridge.HistorySync.MaxInitialConversations limit := 5 //user.bridge.Config.Bridge.HistorySync.MaxInitialConversations
if limit < 0 { if limit < 0 {
limit = len(chats) limit = len(chats)
} }
@ -774,7 +774,7 @@ func (user *User) handleMessageLoop() {
puppet := user.bridge.GetPuppetByGMID(msg.data.UserID) puppet := user.bridge.GetPuppetByGMID(msg.data.UserID)
portal := user.bridge.GetPortalByGMID(msg.chat) portal := user.bridge.GetPortalByGMID(msg.chat)
if puppet != nil { if puppet != nil {
puppet.Sync(user, &groupme.Member{ puppet.Sync(nil, &groupme.Member{
UserID: msg.data.UserID, UserID: msg.data.UserID,
Nickname: msg.data.Name, Nickname: msg.data.Name,
ImageURL: msg.data.AvatarURL, ImageURL: msg.data.AvatarURL,