Skip to content

feat: add AyuGram-style Ghost Mode (WataGram settings)#2169

Open
Seoul81 wants to merge 2 commits into
TelegramMessenger:masterfrom
Seoul81:feat/ghost-mode
Open

feat: add AyuGram-style Ghost Mode (WataGram settings)#2169
Seoul81 wants to merge 2 commits into
TelegramMessenger:masterfrom
Seoul81:feat/ghost-mode

Conversation

@Seoul81
Copy link
Copy Markdown

@Seoul81 Seoul81 commented May 20, 2026

Adds a new Ghost Mode feature set with four toggles, modeled after AyuGram:

  • Don't send read receipts
  • Don't send typing/recording/sticker activity
  • Don't update online presence to the server
  • Don't mark stories as seen

Storage:

  • WataGramSettings (Codable) in TelegramUIPreferences with 4 Bool flags
  • Registered as SharedDataKey add louder/longer alert sounds #23
  • updateWataGramSettingsInteractively helper, mirroring the ExperimentalUISettings pattern

Plumbing:

  • SharedAccountContext exposes immediateWataGramSettings; loaded via Atomic + accountManager.sharedData disposable
  • SharedWakeupManager takes a closure getGhostHideOnline to read the flag without depending on SharedAccountContext directly

UI:

  • WataGramSettingsController with four ItemListSwitchItem rows under a single Ghost Mode section + footer
  • New .wataGram case in PeerInfoSettingsSection, with a row in the advanced section right under Privacy and Security

Gating:

  • Read receipts: ChatHistoryListNode (6 sites) and applyMaxReadIndex callsite all check ghostModeReadReceipts
  • Typing: ChatController activitySpace is set to nil when ghostModeTypingIndicator is on, suppressing typing/sticker/recording broadcasts uniformly
  • Online: SharedWakeupManager.checkTasks gates shouldKeepOnlinePresence on ghostModeOnlineStatus
  • Story-seen: 4 markAsSeen call sites in StoryChatContent gated on ghostModeStorySeen

kiro-agent and others added 2 commits May 20, 2026 21:07
Adds a new Ghost Mode feature set with four toggles, modeled after AyuGram:
- Don't send read receipts
- Don't send typing/recording/sticker activity
- Don't update online presence to the server
- Don't mark stories as seen

Storage:
- WataGramSettings (Codable) in TelegramUIPreferences with 4 Bool flags
- Registered as SharedDataKey TelegramMessenger#23
- updateWataGramSettingsInteractively helper, mirroring the
  ExperimentalUISettings pattern

Plumbing:
- SharedAccountContext exposes immediateWataGramSettings; loaded via
  Atomic + accountManager.sharedData disposable
- SharedWakeupManager takes a closure getGhostHideOnline to read the
  flag without depending on SharedAccountContext directly

UI:
- WataGramSettingsController with four ItemListSwitchItem rows under
  a single Ghost Mode section + footer
- New .wataGram case in PeerInfoSettingsSection, with a row in the
  advanced section right under Privacy and Security

Gating:
- Read receipts: ChatHistoryListNode (6 sites) and applyMaxReadIndex
  callsite all check ghostModeReadReceipts
- Typing: ChatController activitySpace is set to nil when
  ghostModeTypingIndicator is on, suppressing typing/sticker/recording
  broadcasts uniformly
- Online: SharedWakeupManager.checkTasks gates
  shouldKeepOnlinePresence on ghostModeOnlineStatus
- Story-seen: 4 markAsSeen call sites in StoryChatContent gated on
  ghostModeStorySeen

Co-authored-by: Seoul81 <286274373+Seoul81@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants