7a04f298d2
- 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
46 lines
1.1 KiB
Go
46 lines
1.1 KiB
Go
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)
|
|
}
|