mirror of
https://github.com/tulir/mautrix-whatsapp
synced 2024-11-11 12:32:13 +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
|
* [ ] Avatar
|
||||||
* [ ] Description
|
* [ ] Description
|
||||||
* [x] Initial group metadata
|
* [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
|
* Misc
|
||||||
* [x] Automatic portal creation
|
* [x] Automatic portal creation
|
||||||
* [x] At startup
|
* [x] At startup
|
||||||
|
|
15
puppet.go
15
puppet.go
|
@ -146,17 +146,26 @@ func (puppet *Puppet) Intent() *appservice.IntentAPI {
|
||||||
return puppet.bridge.AppService.Intent(puppet.MXID)
|
return puppet.bridge.AppService.Intent(puppet.MXID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (puppet *Puppet) UpdateAvatar() bool {
|
func (puppet *Puppet) UpdateAvatar(avatar *whatsapp_ext.ProfilePicInfo) bool {
|
||||||
avatar, err := puppet.user.Conn.GetProfilePicThumb(puppet.JID)
|
if avatar == nil {
|
||||||
|
var err error
|
||||||
|
avatar, err = puppet.user.Conn.GetProfilePicThumb(puppet.JID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
puppet.log.Errorln(err)
|
puppet.log.Errorln(err)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if avatar.Tag == puppet.Avatar {
|
if avatar.Tag == puppet.Avatar {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(avatar.URL) == 0 {
|
||||||
|
puppet.Intent().SetAvatarURL("")
|
||||||
|
puppet.Avatar = avatar.Tag
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
data, err := avatar.DownloadBytes()
|
data, err := avatar.DownloadBytes()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
puppet.log.Errorln("Failed to download avatar:", err)
|
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()
|
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) {
|
func (user *User) HandleJsonMessage(message string) {
|
||||||
user.log.Debugln("JSON message:", message)
|
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"
|
MessageStream JSONMessageType = "Stream"
|
||||||
MessageConn JSONMessageType = "Conn"
|
MessageConn JSONMessageType = "Conn"
|
||||||
MessageProps JSONMessageType = "Props"
|
MessageProps JSONMessageType = "Props"
|
||||||
|
MessageCmd JSONMessageType = "Cmd"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (ext *ExtendedConn) AddHandler(handler whatsapp.Handler) {
|
func (ext *ExtendedConn) AddHandler(handler whatsapp.Handler) {
|
||||||
|
@ -83,6 +84,8 @@ func (ext *ExtendedConn) HandleJsonMessage(message string) {
|
||||||
ext.handleMessageProps(msg[1])
|
ext.handleMessageProps(msg[1])
|
||||||
case MessageMsgInfo, MessageMsg:
|
case MessageMsgInfo, MessageMsg:
|
||||||
ext.handleMessageMsgInfo(msgType, msg[1])
|
ext.handleMessageMsgInfo(msgType, msg[1])
|
||||||
|
case MessageCmd:
|
||||||
|
ext.handleMessageCommand(msgType, msg[1])
|
||||||
default:
|
default:
|
||||||
for _, handler := range ext.handlers {
|
for _, handler := range ext.handlers {
|
||||||
ujmHandler, ok := handler.(UnhandledJSONMessageHandler)
|
ujmHandler, ok := handler.(UnhandledJSONMessageHandler)
|
||||||
|
|
Loading…
Reference in a new issue