mirror of
https://github.com/tulir/mautrix-whatsapp
synced 2024-11-20 10:09:53 +01:00
Handle user avatar changes
This commit is contained in:
parent
060516f9cf
commit
ccfa85e44a
5 changed files with 91 additions and 7 deletions
|
@ -42,7 +42,12 @@
|
|||
* [ ] Avatar
|
||||
* [ ] Description
|
||||
* [x] Initial group metadata
|
||||
* [x] User metadata (displayname/avatar)
|
||||
* [ ] User metadata changes
|
||||
* [ ] Display name
|
||||
* [x] Avatar
|
||||
* [x] Initial user metadata
|
||||
* [x] Display name
|
||||
* [x] Avatar
|
||||
* Misc
|
||||
* [x] Automatic portal creation
|
||||
* [x] At startup
|
||||
|
|
21
puppet.go
21
puppet.go
|
@ -146,17 +146,26 @@ func (puppet *Puppet) Intent() *appservice.IntentAPI {
|
|||
return puppet.bridge.AppService.Intent(puppet.MXID)
|
||||
}
|
||||
|
||||
func (puppet *Puppet) UpdateAvatar() bool {
|
||||
avatar, err := puppet.user.Conn.GetProfilePicThumb(puppet.JID)
|
||||
if err != nil {
|
||||
puppet.log.Errorln(err)
|
||||
return false
|
||||
func (puppet *Puppet) UpdateAvatar(avatar *whatsapp_ext.ProfilePicInfo) bool {
|
||||
if avatar == nil {
|
||||
var err error
|
||||
avatar, err = puppet.user.Conn.GetProfilePicThumb(puppet.JID)
|
||||
if err != nil {
|
||||
puppet.log.Errorln(err)
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
if avatar.Tag == puppet.Avatar {
|
||||
return false
|
||||
}
|
||||
|
||||
if len(avatar.URL) == 0 {
|
||||
puppet.Intent().SetAvatarURL("")
|
||||
puppet.Avatar = avatar.Tag
|
||||
return true
|
||||
}
|
||||
|
||||
data, err := avatar.DownloadBytes()
|
||||
if err != nil {
|
||||
puppet.log.Errorln("Failed to download avatar:", err)
|
||||
|
@ -189,7 +198,7 @@ func (puppet *Puppet) Sync(contact whatsapp.Contact) {
|
|||
}
|
||||
}
|
||||
|
||||
if puppet.UpdateAvatar() {
|
||||
if puppet.UpdateAvatar(nil) {
|
||||
puppet.Update()
|
||||
}
|
||||
}
|
||||
|
|
8
user.go
8
user.go
|
@ -291,6 +291,14 @@ func (user *User) HandleMsgInfo(info whatsapp_ext.MsgInfo) {
|
|||
}
|
||||
}
|
||||
|
||||
func (user *User) HandleCommand(cmd whatsapp_ext.Command) {
|
||||
switch cmd.Type {
|
||||
case whatsapp_ext.CommandPicture:
|
||||
puppet := user.GetPuppetByJID(cmd.JID)
|
||||
puppet.UpdateAvatar(cmd.ProfilePicInfo)
|
||||
}
|
||||
}
|
||||
|
||||
func (user *User) HandleJsonMessage(message string) {
|
||||
user.log.Debugln("JSON message:", message)
|
||||
}
|
||||
|
|
59
whatsapp-ext/cmd.go
Normal file
59
whatsapp-ext/cmd.go
Normal file
|
@ -0,0 +1,59 @@
|
|||
// mautrix-whatsapp - A Matrix-WhatsApp puppeting bridge.
|
||||
// Copyright (C) 2018 Tulir Asokan
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
package whatsapp_ext
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"strings"
|
||||
|
||||
"github.com/Rhymen/go-whatsapp"
|
||||
)
|
||||
|
||||
type CommandType string
|
||||
|
||||
const (
|
||||
CommandPicture CommandType = "picture"
|
||||
)
|
||||
|
||||
type Command struct {
|
||||
Type CommandType `json:"type"`
|
||||
JID string `json:"jid"`
|
||||
|
||||
*ProfilePicInfo
|
||||
}
|
||||
|
||||
type CommandHandler interface {
|
||||
whatsapp.Handler
|
||||
HandleCommand(Command)
|
||||
}
|
||||
|
||||
func (ext *ExtendedConn) handleMessageCommand(msgType JSONMessageType, message []byte) {
|
||||
var event Command
|
||||
err := json.Unmarshal(message, &event)
|
||||
if err != nil {
|
||||
ext.jsonParseError(err)
|
||||
return
|
||||
}
|
||||
event.JID = strings.Replace(event.JID, OldUserSuffix, NewUserSuffix, 1)
|
||||
for _, handler := range ext.handlers {
|
||||
commandHandler, ok := handler.(CommandHandler)
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
go commandHandler.HandleCommand(event)
|
||||
}
|
||||
}
|
|
@ -33,6 +33,7 @@ const (
|
|||
MessageStream JSONMessageType = "Stream"
|
||||
MessageConn JSONMessageType = "Conn"
|
||||
MessageProps JSONMessageType = "Props"
|
||||
MessageCmd JSONMessageType = "Cmd"
|
||||
)
|
||||
|
||||
func (ext *ExtendedConn) AddHandler(handler whatsapp.Handler) {
|
||||
|
@ -83,6 +84,8 @@ func (ext *ExtendedConn) HandleJsonMessage(message string) {
|
|||
ext.handleMessageProps(msg[1])
|
||||
case MessageMsgInfo, MessageMsg:
|
||||
ext.handleMessageMsgInfo(msgType, msg[1])
|
||||
case MessageCmd:
|
||||
ext.handleMessageCommand(msgType, msg[1])
|
||||
default:
|
||||
for _, handler := range ext.handlers {
|
||||
ujmHandler, ok := handler.(UnhandledJSONMessageHandler)
|
||||
|
|
Loading…
Reference in a new issue