feat: add TitlesChannel (0xFFF9) for per-channel display names

- Add dedicated TitlesChannel (0xFFF9) following the VersionChannel pattern
- Server encodes name→title map via EncodeTitlesData/DecodeTitlesData
- Metadata wire format unchanged for backward compatibility with old clients
- All three fetchers (public Telegram, MTProto, X/Nitter) extract and store display names
- Client fetches TitlesChannel with a 10s deadline; falls back to channel handles gracefully on old servers
- Old clients are unaffected — they never query 0xFFF9
This commit is contained in:
Sepehr
2026-04-19 14:45:58 -04:00
parent dd77610f18
commit 85558074b4
7 changed files with 189 additions and 46 deletions
+18 -2
View File
@@ -999,8 +999,16 @@ func (s *Server) refreshMetadataOnly() {
return
}
titles, _ := fetcher.FetchTitles(ctx)
channels := meta.Channels
for i := range channels {
if t, ok := titles[channels[i].Name]; ok && t != "" {
channels[i].DisplayName = t
}
}
s.mu.Lock()
s.channels = meta.Channels
s.channels = channels
s.telegramLoggedIn = meta.TelegramLoggedIn
s.nextFetch = meta.NextFetch
s.metaFetchedAt = time.Now()
@@ -1088,8 +1096,16 @@ func (s *Server) refreshChannel(channelNum int) {
}
return
}
titles, _ := fetcher.FetchTitles(ctx)
channels := meta.Channels
for i := range channels {
if t, ok := titles[channels[i].Name]; ok && t != "" {
channels[i].DisplayName = t
}
}
meta.Channels = channels
s.mu.Lock()
s.channels = meta.Channels
s.channels = channels
s.telegramLoggedIn = meta.TelegramLoggedIn
s.nextFetch = meta.NextFetch
s.metaFetchedAt = time.Now()