Commit Graph

104 Commits

Author SHA1 Message Date
Sarto afe285b55b fix: update empty state message when no channel is selected 2026-05-04 13:33:22 +03:30
Sarto 4f59ec8270 fix: improve channel selection hints and profile switching logic 2026-05-04 13:14:27 +03:30
Sarto 213dc86881 feat: per-profile channels cache + UX fixes (2x media playback, profile-switch race, pinch-zoom, bg picker) 2026-05-04 11:43:41 +03:30
Sarto 3976347c35 fix: improve chat panel visibility handling for mobile and desktop 2026-05-03 18:18:33 +03:30
Sarto 9ccaa8ae9a fix relay download 2026-05-03 17:46:23 +03:30
Sarto b472cda010 fix download from github on some networks 2026-05-03 17:36:25 +03:30
Sarto d489387d06 fix(android): pin WebView port + persist scan-prompt server-side 2026-05-03 17:06:06 +03:30
Sarto 920e6077f8 fix: ensure active resolver lists are updated correctly and broadcast changes to the UI 2026-05-03 13:30:31 +03:30
Sarto 6a6255bd31 refactor: update scoreboard layout to use flexbox for improved responsiveness and clarity 2026-05-03 11:35:31 +03:30
Sarto 6e062dbc73 test: refactor TestWriteListsInfoIncludeResolvers for clarity and structure 2026-05-03 00:28:31 +03:30
Sarto 8c0e9c5036 feat: introduce named active resolver lists for user-defined subsets and inapp new version download and ... 2026-05-03 00:03:37 +03:30
Sarto 6c1bb9f58f feat: add GitHub update check and APK handling for in-app updates 2026-05-02 17:22:28 +03:30
Sarto ad1196173a fix dns media downlaod timeouts and video play in android 2026-05-02 00:37:47 +03:30
Sarto ace8ce8627 feat: better handle back button and exit 2026-05-01 22:49:52 +03:30
Sarto 68009f5d92 fix some bugs! 2026-05-01 21:42:37 +03:30
Sarto c603442d01 fix teleport bug! 2026-05-01 11:48:21 +03:30
Sarto 76d958bdff feat: implement media handling via native bridge for Android 2026-05-01 00:01:51 +03:30
Sarto fea393a627 fix: update User-Agent header for GitHub requests and improve commit messages 2026-04-30 23:42:15 +03:30
Sarto ef90c0d72b ratelimit 2026-04-30 22:07:20 +03:30
Sarto 0defe0489b fix: enhance error handling in GitHub raw fetch with detailed rate limit and auth error context 2026-04-30 21:23:14 +03:30
Sarto 7834f0f598 fix: update Android build process to use cgo for DNS resolution and streamline HTTP client configuration 2026-04-30 20:52:06 +03:30
Sarto 503852fce9 feat: implement custom HTTP client for GitHub relay with fallback DNS support 2026-04-30 19:45:43 +03:30
Sarto 989fec3cec feat: relays for download media 2026-04-30 16:57:11 +03:30
Sarto b4e9cd8714 feat: media download with DNS query 2026-04-29 01:45:27 +03:30
Sarto 11946c0147 fix: enhance "new messages" handling with sticky separator and improved lastSeen timestamp management #35 2026-04-27 14:30:30 +03:30
Sarto 2f5a735203 fix: improve media parsing logic for Telegram messages and add regression tests for premium emojis 2026-04-27 13:46:32 +03:30
Sarto 2fe3c8b604 fix: update poll data extraction logic to ensure both question and options are present
Co-authored-by: Copilot <copilot@github.com>
2026-04-26 17:38:40 +03:30
Sarto f40af8fbb1 feat: add host flag to configure web UI listen address
Co-authored-by: Copilot <copilot@github.com>
2026-04-26 16:50:47 +03:30
Sepehr 2ff7cbd751 fix: use matchMedia for mobile nav to fix background restore bug
window.innerWidth can briefly report the desktop viewport width when
the page is restored from a long Android background session, causing
openChat() to skip adding chat-open even though chatIsOpen is true.

Replace all window.innerWidth checks with mobileQuery.matches so the
JS breakpoint always agrees with CSS. Also swap the resize listener
for mobileQuery.addEventListener('change') which only fires when the
breakpoint actually crosses, and add a visibilitychange handler to
re-apply chat-open when the app returns to the foreground.
2026-04-24 17:05:00 -04:00
Sarto e815dba9ec Merge pull request #25 from sepehr-alipour/fix/mobile-chat-layout-state
fix: restore chat-open state on viewport resize to prevent split layout bug
2026-04-24 02:17:26 +03:30
Sepehr a3fc6cc133 fix: restore chat-open state on viewport resize to prevent split layout bug 2026-04-23 18:13:49 -04:00
Sarto fce8f0dd65 feat: update chat name display to support emoji and custom HTML 2026-04-23 11:25:45 +03:30
Sarto 452d8462c4 feat: preserve display name when merging cached messages 2026-04-22 17:38:10 +03:30
Sepehr 2bd4835674 feat: lazy background title fetch with disk cache and backoff
- Persist display names in per-channel JSON cache files (Name +
  DisplayName fields on cachedChannel). GetAllTitles reads all ch_*.json
  files; PutTitle updates a channel file in-place without losing messages.

- Replace blocking FetchTitles calls in fetchMeta and refreshChannel with
  an instant disk read (GetAllTitles) applied before the SSE broadcast,
  so channels appear with cached titles immediately on every load.

- ensureTitlesFetched runs in a single background goroutine (titlesMu +
  titlesLoading guard prevents duplicates). On success it persists titles
  and pushes an SSE update. On error or empty response it backs off for
  5 minutes so an old server does not cause endless retries.

- Block 0 of TitlesChannel now carries a uint16 total-block-count prefix
  (added in rebuildTitlesBlocks). FetchTitles reads the count from block 0
  and fetches all remaining blocks in parallel instead of sequentially.

- FetchTitles timeout raised from 10 s to 1 minute.
2026-04-21 21:19:29 -04:00
Sepehr 1496b00a94 feat: show @handle subtitle in channel list and chat header; add mobile kebab menu
- Channel list: always show @handle as subtitle below display name for Telegram channels
- Chat header: show @handle as subtitle below channel title
- Mobile (<768px): hide Search/Export buttons; show them in a ⋮ kebab menu (rightmost button)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 19:17:12 -04:00
Sepehr 85558074b4 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
2026-04-20 18:27:11 -04:00
Sepehr dd77610f18 fix: store display names separately to preserve channel handle identifiers
- Add DisplayName field to ChannelInfo in the wire protocol
- Add displayNames map to Feed; SetChannelDisplayName no longer mutates
  f.channels, keeping handles stable for cache keys and management
- Public fetcher: extract title via extractChannelTitle, pass to feed
- Telegram fetcher: capture ch.Title / user.FirstName from MTProto API
- Frontend: render DisplayName as sidebar label, keep Name as identifier
2026-04-20 18:27:11 -04:00
Sepehr d2922e6afb feat: fetch and display channel title from Telegram public page
fetchChannel now returns the channel's display title extracted from the
tgme_channel_info_header_title element. SetChannelDisplayName replaces
the raw @handle in the feed metadata with the human-readable title after
the first successful fetch.
2026-04-20 18:27:11 -04:00
Sarto 74e12801da fix: change proggress-bar timeout 2026-04-20 16:53:09 +03:30
Sarto dfa2bf6aee feat: enhance channel refresh handling with progress tracking and auto-remove functionality 2026-04-20 15:56:21 +03:30
Sarto c241920e6e refactor: update refresh handling to support multiple concurrent operations 2026-04-20 14:30:28 +03:30
Sepehr fcd9db7047 fix: output named links as [label](url) in logged-in Telegram fetcher
Aligns applyTextURLEntities with the public HTML fetcher so both modes
produce the same markdown link format for the client-side linkify renderer.
2026-04-18 11:00:46 -04:00
Sepehr 009d4917f0 fix: output named links as markdown [label](url) instead of label (url)
This ensures linkify in the web UI can render them as proper clickable
anchors with the label as display text.
2026-04-17 11:19:34 -04:00
Sepehr a874740e92 fix: linkify raw text to preserve URLs with & in query params
Previously linkify received pre-escaped text, so & in URLs became &amp;
causing the regex to truncate URLs at query-string boundaries. Now
linkify escapes HTML internally so URLs are matched against raw text.
Also adds [label](url) markdown link support.
2026-04-17 10:19:31 -04:00
Sarto 2f73101677 feat: implement applyTextURLEntities function to embed hyperlinks in message text 2026-04-16 14:49:37 +03:30
Sarto 8a426ef21f feat: enhance message parsing with support for polls and replies, and improve HTML rendering 2026-04-16 14:34:02 +03:30
Sarto 158bec5d4c feat: remove app name preset functionality and related UI elements 2026-04-16 00:58:17 +03:30
Sarto c5d32e0506 fix 2026-04-15 23:23:23 +03:30
Sarto a4bda5d155 feat: enhance settings UI with full-width buttons and improved cache clearing functionality 2026-04-15 22:34:55 +03:30
Sarto 4968bd191e feat: implement app name presets and enhance password management UI 2026-04-15 21:48:51 +03:30