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:
Adam Van Ymeren
2025-06-27 20:03:37 -07:00
committed by GitHub
parent 0952df0244
commit 7a04f298d2
19264 changed files with 1539697 additions and 84 deletions
+82
View File
@@ -0,0 +1,82 @@
package updates
import (
"sort"
"go.mau.fi/mautrix-telegram/pkg/gotd/tg"
)
func sortUpdatesByPts(u []tg.UpdateClass) {
sort.Stable(ptsSorter(u))
}
type ptsSorter []tg.UpdateClass
func (p ptsSorter) Len() int {
return len(p)
}
func (p ptsSorter) Less(i, j int) bool {
type (
ptsType int
compare struct {
typ ptsType
channelID int64
ptsDiff int
}
)
// Sorting order
//
// 0) Common updates without PTS.
// 1) Common PTS updates
// 2) Common QTS updates
// 3) Channel PTS updates (by channelID and by pts)
const (
other ptsType = iota
commonPts
commonQts
channelPts
)
getType := func(u tg.UpdateClass) compare {
if pts, ptsCount, ok := tg.IsPtsUpdate(u); ok {
return compare{typ: commonPts, ptsDiff: pts - ptsCount}
}
if channelID, pts, ptsCount, ok, _ := tg.IsChannelPtsUpdate(u); ok {
return compare{typ: channelPts, channelID: channelID, ptsDiff: pts - ptsCount}
}
if qts, ok := tg.IsQtsUpdate(u); ok {
return compare{typ: commonQts, ptsDiff: qts}
}
return compare{typ: other}
}
a, b := getType(p[i]), getType(p[j])
switch {
case a.typ < b.typ:
return true
case a.typ > b.typ:
return false
}
// a.typ == b.typ
switch a.typ {
case other:
// Keep original order
case commonPts, commonQts:
return a.ptsDiff < b.ptsDiff
case channelPts:
if a.channelID < b.channelID {
return true
}
if a.channelID > b.channelID {
return false
}
return a.ptsDiff < b.ptsDiff
}
return false
}
func (p ptsSorter) Swap(i, j int) {
p[i], p[j] = p[j], p[i]
}