Commit Graph

55 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
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 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 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
Sarto 99f63f2e8e feat: add app customization features including dynamic icon and name changes 2026-04-15 18:32:04 +03:30
Sarto 0d236d3834 feat: implement password protection and app customization features for Android 2026-04-15 17:24:57 +03:30
Sarto 4111d5115a Refactor scanner presets, and add iran lion and sun flag 2026-04-15 15:04:11 +03:30
Sarto 7b65d605b8 fix: ensure resolvers have default port and update bank resolver handling 2026-04-15 01:38:36 +03:30
Sarto 1712206835 fix: update fetcher stats persistence and improve profile saving method 2026-04-15 00:47:37 +03:30
Sarto 904d6997a3 feat: implement resolver bank functionality and add verifyer to fetcher 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 2026-04-14 03:33:21 +03:30
Sarto d5d8763b3a fix: update background image handling in chat area for improved visibility 2026-04-14 03:22:19 +03:30
Sarto 894fbbdfd6 fix: remove fixed background attachment for improved responsiveness 2026-04-14 02:56:39 +03:30
Sarto 2d3b71bd04 better resolver score board (faster load) +UI features 2026-04-14 02:06:32 +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
Sarto a828f314ef feat: add XPublicReader for fetching public posts from X via Nitter RSS 2026-04-12 16:58:03 +03:30
Sarto ca54375e5e add internal scanner with iran Famous Public DNS Servers from SlipNet 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 59e526c073 first let user chose to start scanner or use old ones / fix cache bug / shufle resolvers 2026-04-07 03:35:07 +03:30
Sarto 63d46b4540 feat: implement saved resolvers feature with UI prompt and API integration 2026-04-06 23:58:48 +03:30
Sarto 956856562e feat: add cache clear and rescan APIs and message cache
- Implemented /api/cache/clear endpoint to delete all files in the cache directory.
- Added tests for cache clear functionality, including cases for empty cache and method not allowed.
- Introduced /api/rescan endpoint to trigger a manual rescan of the configured channels.
- Added tests for rescan functionality, covering cases for not configured, method not allowed, and successful rescans.
- Enhanced server initialization to bootstrap configuration from active profile if config.json is missing.
2026-04-06 00:18:37 +03:30
Sarto 9c53dad419 Enhance DNS resolver functionality and UI settings
- Refactor fetcher tests to improve coverage and add new tests for resolver scoring and query handling.
- Update ResolverChecker to retry every minute until a healthy resolver is found and adjust timeout settings.
- Introduce scatter parameter in the configuration to allow concurrent DNS requests, with UI adjustments for user input.
- Modify metadata fetching logic to utilize cached data efficiently and ensure fresh data is fetched when necessary.
- Implement server-side handling for fetch progress, including countdowns and UI updates during long fetch operations.
2026-04-04 19:04:11 +03:30
Sarto baa5a82748 feat: update channel notifications and hints in index.html for improved user experience 2026-04-04 01:51:55 +03:30
Sarto dbcf7fe5d0 feat: implement dynamic versioning in build.gradle and display app version in index.html; enhance resolver scanning messages in I18N 2026-04-04 01:28:24 +03:30
Sarto 4712be5c18 feat: enhance MainActivity with system window insets handling and improve WebView alert dialogs; update index.html for better user feedback on loading states 2026-04-04 01:00:13 +03:30
Sarto 0568fc61e7 feat: improve resolver scan log handling by using includes for event detection 2026-04-03 23:27:51 +03:30
Sarto 3ad823ed76 feat: enhance client probing mechanism and improve resolver scan logging 2026-04-03 23:10:58 +03:30
Sarto 3746dbdf1b feat: improve status message handling in MainActivity and enhance loading progress indication in index.html 2026-04-03 22:38:00 +03:30
Sarto 271e6f569e Implement profiles management and settings API
- Added Profile and ProfileList structs to manage user profiles with unique IDs and nicknames.
- Introduced endpoints for CRUD operations on profiles: `/api/profiles` for managing profiles and `/api/profiles/switch` for switching active profiles.
- Implemented settings management with an endpoint `/api/settings` to handle user preferences like font size and debug mode.
- Enhanced the server to load and save profiles from a `profiles.json` file.
- Updated the fetcher initialization to respect the active profile's configuration.
- Added comprehensive end-to-end tests for profiles and settings APIs to ensure functionality and persistence.
2026-04-03 22:08:54 +03:30
Sarto d1b3fb94ec feat: update log panel toggle icon and set initial visibility to hidden 2026-04-01 21:13:11 +03:30
Sarto 2450993c44 feat: update app icons and enhance message limit configuration in server setup 2026-04-01 21:01:23 +03:30
Sarto 563b56e42b feat: update resolver health check to run first check in background immediately 2026-03-31 20:24:30 +03:30
Sarto 0a8499e4d2 feat: remove service control buttons from MainActivity and update UI layout 2026-03-31 20:17:26 +03:30
Sarto b89fc93829 fix: adjust timeouts and payload sizes for improved performance; enhance UI styles and responsiveness 2026-03-31 17:37:19 +03:30
Sarto f7c611f69a make telegram login optional and add admin features for send message or change server configuration 2026-03-30 18:08:48 +03:30
Sarto 6449bdf697 fix: update default rate limit value to 5 in settings 2026-03-26 02:33:08 +03:30
Sarto 358c6c6406 feat: implement auto-refresh functionality with adjustable interval and quiet mode 2026-03-26 02:29:05 +03:30
Sarto 3aa7dc3244 feat: add message limit option for Telegram channels and update progress display 2026-03-26 01:51:00 +03:30