Commit Graph

108 Commits

Author SHA1 Message Date
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
Sarto 1668619c4d Merge pull request #19 from sepehr-alipour/fix/linkify-raw-text-escaping
fix: linkify raw text to preserve URLs with & in query params
2026-04-20 13:42:31 +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 v0.10.1-rc3 v0.10.2 2026-04-16 14:49:37 +03:30
Sarto 8a426ef21f feat: enhance message parsing with support for polls and replies, and improve HTML rendering v0.10.1-rc2 2026-04-16 14:34:02 +03:30
Sarto 158bec5d4c feat: remove app name preset functionality and related UI elements v0.10.1-rc1 2026-04-16 00:58:17 +03:30
Sarto c5d32e0506 fix v0.10.0-rc11 2026-04-15 23:23:23 +03:30
Sarto a4bda5d155 feat: enhance settings UI with full-width buttons and improved cache clearing functionality v0.10.0-rc10 2026-04-15 22:34:55 +03:30
Sarto 4968bd191e feat: implement app name presets and enhance password management UI v0.10.0-rc9 2026-04-15 21:48:51 +03:30
Sarto 99f63f2e8e feat: add app customization features including dynamic icon and name changes v0.10.0-rc8 2026-04-15 18:32:04 +03:30
Sarto 0d236d3834 feat: implement password protection and app customization features for Android v0.10.0-rc7 2026-04-15 17:24:57 +03:30
Sarto ebef4d0fd7 feat: enhance Android APK build process and update download links in documentation v0.10.0-rc6 2026-04-15 15:53:37 +03:30
Sarto e31bafe001 fix: update build configuration for Android ARM to use Linux settings v0.10.0-rc5 2026-04-15 15:15:13 +03:30
Sarto 4111d5115a Refactor scanner presets, and add iran lion and sun flag v0.10.0-rc4 2026-04-15 15:04:11 +03:30
Sarto 7b65d605b8 fix: ensure resolvers have default port and update bank resolver handling v0.10.0-rc3 2026-04-15 01:38:36 +03:30
Sarto 1712206835 fix: update fetcher stats persistence and improve profile saving method v0.10.0-rc2 2026-04-15 00:47:37 +03:30
Sarto 0db140465a fix: remove unnecessary closing braces in MainActivity v0.10.0-rc1 2026-04-15 00:18:09 +03:30
Sarto 904d6997a3 feat: implement resolver bank functionality and add verifyer to fetcher v0.10.0 2026-04-14 23:40:47 +03:30
Sarto 6c1765e881 feat: add automatic hourly resolver health-check and UI toggle 2026-04-14 17:51:16 +03:30
Sarto 9ab82c33ba feat: add background image handling and language/theme settings API v0.9.3 2026-04-14 03:33:21 +03:30
Sarto d5d8763b3a fix: update background image handling in chat area for improved visibility v0.9.2 2026-04-14 03:22:19 +03:30
Sarto 894fbbdfd6 fix: remove fixed background attachment for improved responsiveness v0.9.1 2026-04-14 02:56:39 +03:30
Sarto 558fea70f5 feat: implement file chooser support in WebView for image selection v0.9.0 2026-04-14 02:29:11 +03:30
Sarto 2d3b71bd04 better resolver score board (faster load) +UI features v0.9.0-rc1 2026-04-14 02:06:32 +03:30
Sarto 255294ebbb Merge pull request #10 from ChosoMeister/main
feat: add Docker support for server deployment
2026-04-14 00:02:40 +03:30
Mustafa Tayefi 8aede3671a Update x_accounts.txt 2026-04-13 23:39:35 +03:30
Mustafa Tayefi 93f53c4eef Update x_accounts.txt 2026-04-13 23:36:32 +03:30
Mustafa Tayefi c4742470a0 Update channels.txt 2026-04-13 23:36:17 +03:30
Mustafa Tayefi d60b625921 Merge branch 'sartoopjj:main' into main 2026-04-13 23:35:34 +03:30
Sarto 6ab7de9bd7 feat: enhance logging for fetch cycles in public, telegram, xpublic readers and version tracker v0.8.0-rc1 2026-04-13 22:47:52 +03:30
Sarto 487ff23840 feat: improve frontend (add light theme, handle back button, get approve for resolver checker, new message lable, ... ) 2026-04-13 22:08:19 +03:30
Mustafa 15137c9e69 feat: add Docker support for server deployment
Add Docker deployment option for the server with multi-stage build.

Changes:
- Dockerfile: multi-stage build (golang:1.26-alpine → alpine:3.21, ~23MB)
- docker-compose.yml: server service on port 5300/udp with iptables redirect
- .env.example: documented environment variables template
- .dockerignore: optimized build context
- README.md & README-FA.md: Docker deployment guide, port 53 safety checks,
  and troubleshooting instructions (both EN and FA)
- configs: added more Telegram channels and X accounts

The container listens on port 5300 to avoid conflict with systemd-resolved.
External DNS traffic (port 53) is redirected via iptables PREROUTING.
No changes to existing Go source code.
2026-04-13 01:04:09 +03:30
Sarto 90254f9d93 fix: correct formatting in usage output for X accounts 2026-04-12 20:49:09 +03:30
Sarto a828f314ef feat: add XPublicReader for fetching public posts from X via Nitter RSS v0.7.0 2026-04-12 16:58:03 +03:30
Sarto ca54375e5e add internal scanner with iran Famous Public DNS Servers from SlipNet v0.6.0-rc1 2026-04-11 22:35:58 +03:30
Sarto 8c413f9ebf feat: Implement version tracking, fix telegram fetcher, hourly report, fix add channel bug 2026-04-11 15:45:59 +03:30
Sarto f360a14e46 style: increase gap in layout for better spacing 2026-04-08 04:45:00 +03:30
Sarto cbc85cef98 format code! 2026-04-08 04:33:09 +03:30
Sarto de6c6268f4 feat: update README 2026-04-08 04:23:46 +03:30
Sarto 59e526c073 first let user chose to start scanner or use old ones / fix cache bug / shufle resolvers v0.5.1 2026-04-07 03:35:07 +03:30
Sarto 63d46b4540 feat: implement saved resolvers feature with UI prompt and API integration v0.5.0 2026-04-06 23:58:48 +03:30