190 Commits

Author SHA1 Message Date
Sarto 643452234e fix: streamline setup_config and improve remote management handling 2026-04-30 22:57:02 +03:30
Sarto 2b8f49ad1d fix install.sh 2026-04-30 22:48:38 +03:30
Sarto c1367cf779 fix bash file 2026-04-30 22:41:02 +03:30
Sarto ef90c0d72b ratelimit v0.13.1-rc1 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 v0.13.0-rc9 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 v0.13.0-rc8 2026-04-30 20:52:06 +03:30
Sarto 503852fce9 feat: implement custom HTTP client for GitHub relay with fallback DNS support v0.13.0-rc7 2026-04-30 19:45:43 +03:30
Sarto ceb108c83a fix: update GitHub relay max file size to 15 MB and adjust TTL in setup script v0.13.0-rc6 2026-04-30 18:42:36 +03:30
Sarto 7e7f569dc2 fix: improve handling of GitHub prerelease detection and enhance setup configuration prompts v0.13.0-rc5 2026-04-30 17:47:12 +03:30
Sarto e7afe19925 fix: enable CGO for Android arm builds and configure NDK clang v0.13.0-rc4 2026-04-30 17:24:18 +03:30
Sarto f6329a5706 fix: update build workflow for Android and refine UPX installation conditions v0.13.0-rc3 v0.13.0-rc2 2026-04-30 17:09:49 +03:30
Sarto 989fec3cec feat: relays for download media v0.13.0 v0.13.0-rc1 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 v0.12.2 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 v0.12.1 2026-04-27 13:46:32 +03:30
Sarto 93c171d678 fix: add links to Telegram channels and setup guides in README files 2026-04-26 22:49:43 +03:30
Sarto 7999197919 fix: update download links format for build artifacts in workflow v0.12.0 2026-04-26 18:12:19 +03:30
Sarto baa17100d3 add donation 2026-04-26 18:07:30 +03:30
Sarto 052b7101fa fix: update Android APK download links and improve versioning in build process
Co-authored-by: Copilot <copilot@github.com>
v0.11.2-rc9
2026-04-26 18:00:06 +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>
v0.11.2-rc8
2026-04-26 17:38:40 +03:30
Sarto 2e9bd4df03 fix: specify localhost address for web server initialization in tests v0.11.2-rc7 v0.11.2-rc6 2026-04-26 17:11:33 +03:30
Sarto b9aefabbd1 fix: include VERSION in the output filename for the client build
Co-authored-by: Copilot <copilot@github.com>
v0.11.2-rc5
2026-04-26 17:06:36 +03:30
Sarto f40af8fbb1 feat: add host flag to configure web UI listen address
Co-authored-by: Copilot <copilot@github.com>
v0.11.2-rc4
2026-04-26 16:50:47 +03:30
Sarto 6b58b2ad0e Merge pull request #32 from sepehr-alipour/fix/mobile-nav-matchmedia
fix: use matchMedia for mobile nav to fix background restore bug
v0.11.2-rc3
2026-04-25 13:26:25 +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 06bdbefe33 Merge pull request #30 from sepehr-alipour/fix/skip-upx-android-arm
fix: skip UPX for android arm build
v0.11.2-rc2
2026-04-24 20:48:47 +03:30
Sepehr 145e894f82 fix: skip UPX for android arm build
Android 10+ enforces W^X (Write XOR Execute) — UPX's self-extracting
stub allocates RWX memory at runtime, which the kernel kills immediately.
Skip UPX for the armeabi-v7a matrix entry so the binary loads cleanly.
2026-04-24 13:00:25 -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
v0.11.2-rc1
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 v0.11.1 2026-04-23 11:25:45 +03:30
Sarto 452d8462c4 feat: preserve display name when merging cached messages v0.11.0 2026-04-22 17:38:10 +03:30
Sarto f753afc1db Merge pull request #20 from sepehr-alipour/feat/channel-display-name
feat: channel display names & mobile UX improvements
2026-04-22 16:15:45 +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
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