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,45 @@
|
||||
package fileid
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
|
||||
"github.com/go-faster/errors"
|
||||
|
||||
"go.mau.fi/mautrix-telegram/pkg/gotd/bin"
|
||||
)
|
||||
|
||||
const (
|
||||
persistentIDVersionOld = 2
|
||||
persistentIDVersionMap = 3
|
||||
persistentIDVersion = 4
|
||||
)
|
||||
|
||||
// DecodeFileID parses FileID from a string.
|
||||
func DecodeFileID(s string) (fileID FileID, _ error) {
|
||||
if s == "" {
|
||||
return FileID{}, errors.New("input is empty")
|
||||
}
|
||||
data, err := base64Decode(s)
|
||||
if err != nil {
|
||||
return FileID{}, errors.Wrap(err, "base64")
|
||||
}
|
||||
data = rleDecode(data)
|
||||
if len(data) < 2 {
|
||||
return FileID{}, errors.New("RLE-decoded data is too small")
|
||||
}
|
||||
|
||||
switch version := data[len(data)-1]; version {
|
||||
case persistentIDVersionOld, persistentIDVersionMap:
|
||||
return FileID{}, errors.Errorf("%v is unsupported now", version)
|
||||
case persistentIDVersion:
|
||||
data = data[:len(data)-1]
|
||||
err := fileID.decodeLatestFileID(&bin.Buffer{Buf: data})
|
||||
return fileID, err
|
||||
default:
|
||||
return FileID{}, errors.Errorf("unknown file_id version %x", version)
|
||||
}
|
||||
}
|
||||
|
||||
func base64Decode(s string) ([]byte, error) {
|
||||
return base64.RawURLEncoding.DecodeString(s)
|
||||
}
|
||||
Reference in New Issue
Block a user