move gotd fork into repo. (#111)
- update to latest telegram layer - remove some references to fields in tg.Entities that don't exist in the schema - originally added here: https://github.com/beeper/td/commit/820929062a2ba0104397bc01235ab58a9cff780e - referenced here - https://github.com/mautrix/telegramgo/commit/124f0967ed195b5a380c9bd02e170ada9710dde3 - https://github.com/mautrix/telegramgo/commit/4205047aab2e0639217148b5d125bfaab668bd8e
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
package peers
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/go-faster/errors"
|
||||
"go.uber.org/zap"
|
||||
|
||||
"go.mau.fi/mautrix-telegram/pkg/gotd/tg"
|
||||
)
|
||||
|
||||
// getUserFull gets tg.UserFull using given tg.InputUserClass.
|
||||
func (m *Manager) getUserFull(ctx context.Context, p tg.InputUserClass) (*tg.UserFull, error) {
|
||||
if userID, ok := m.getIDFromInputUser(p); ok && !m.needsUpdateFull(userPeerID(userID)) {
|
||||
// TODO(tdakkota): save full self.
|
||||
u, found, err := m.cache.FindUserFull(ctx, userID)
|
||||
if err == nil && found {
|
||||
u.SetFlags()
|
||||
return u, nil
|
||||
}
|
||||
if err != nil {
|
||||
m.logger.Warn("Find full user error", zap.Int64("user_id", userID), zap.Error(err))
|
||||
}
|
||||
}
|
||||
return m.updateUserFull(ctx, p)
|
||||
}
|
||||
|
||||
// updateUserFull forcibly updates tg.UserFull using given tg.InputUserClass.
|
||||
func (m *Manager) updateUserFull(ctx context.Context, p tg.InputUserClass) (*tg.UserFull, error) {
|
||||
r, err := m.api.UsersGetFullUser(ctx, p)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "get full user")
|
||||
}
|
||||
|
||||
if err := m.applyEntities(ctx, r.GetUsers(), r.GetChats()); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := m.applyFullUser(ctx, &r.FullUser); err != nil {
|
||||
return nil, errors.Wrap(err, "update full user")
|
||||
}
|
||||
|
||||
cp := r.FullUser
|
||||
return &cp, nil
|
||||
}
|
||||
|
||||
// getChatFull gets tg.ChatFull using given id.
|
||||
func (m *Manager) getChatFull(ctx context.Context, p int64) (*tg.ChatFull, error) {
|
||||
if !m.needsUpdateFull(chatPeerID(p)) {
|
||||
c, found, err := m.cache.FindChatFull(ctx, p)
|
||||
if err == nil && found {
|
||||
c.SetFlags()
|
||||
return c, nil
|
||||
}
|
||||
if err != nil {
|
||||
m.logger.Warn("Find full chat error", zap.Int64("chat_id", p), zap.Error(err))
|
||||
}
|
||||
}
|
||||
return m.updateChatFull(ctx, p)
|
||||
}
|
||||
|
||||
// updateChatFull forcibly updates tg.ChatFull using given id.
|
||||
func (m *Manager) updateChatFull(ctx context.Context, id int64) (*tg.ChatFull, error) {
|
||||
r, err := m.api.MessagesGetFullChat(ctx, id)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "get full chat")
|
||||
}
|
||||
|
||||
if err := m.applyEntities(ctx, r.GetUsers(), r.GetChats()); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
ch, ok := r.FullChat.(*tg.ChatFull)
|
||||
if !ok {
|
||||
return nil, errors.Errorf("got unexpected type %T", r.FullChat)
|
||||
}
|
||||
|
||||
if err := m.applyFullChat(ctx, ch); err != nil {
|
||||
return nil, errors.Wrap(err, "update full chat")
|
||||
}
|
||||
|
||||
return ch, nil
|
||||
}
|
||||
|
||||
// getChannelFull gets tg.ChannelFull using given tg.InputChannelClass.
|
||||
func (m *Manager) getChannelFull(ctx context.Context, p tg.InputChannelClass) (*tg.ChannelFull, error) {
|
||||
if id, ok := getIDFromInputChannel(p); ok && !m.needsUpdateFull(channelPeerID(id)) {
|
||||
c, found, err := m.cache.FindChannelFull(ctx, id)
|
||||
if err == nil && found {
|
||||
c.SetFlags()
|
||||
return c, nil
|
||||
}
|
||||
if err != nil {
|
||||
m.logger.Warn("Find channel error", zap.Int64("channel_id", id), zap.Error(err))
|
||||
}
|
||||
}
|
||||
return m.updateChannelFull(ctx, p)
|
||||
}
|
||||
|
||||
// updateChannelFull forcibly updates tg.ChannelFull using given tg.InputChannelClass.
|
||||
func (m *Manager) updateChannelFull(ctx context.Context, p tg.InputChannelClass) (*tg.ChannelFull, error) {
|
||||
r, err := m.api.ChannelsGetFullChannel(ctx, p)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "get full channel")
|
||||
}
|
||||
|
||||
if err := m.applyEntities(ctx, r.GetUsers(), r.GetChats()); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
ch, ok := r.FullChat.(*tg.ChannelFull)
|
||||
if !ok {
|
||||
return nil, errors.Errorf("got unexpected type %T", r.FullChat)
|
||||
}
|
||||
|
||||
if err := m.applyFullChannel(ctx, ch); err != nil {
|
||||
return nil, errors.Wrap(err, "update full channel")
|
||||
}
|
||||
|
||||
return ch, nil
|
||||
}
|
||||
Reference in New Issue
Block a user