fix(groups): presence pushes, uninstall cleanup, notification launch gate - #46
Merged
Merged
Conversation
Notifications opened uninstalled apps (all apps, as the reporter found) The home screen only hides uninstalled icons - nothing gated the launch function itself, so notification taps, deeplinks, server launches and Control Center all opened any app by id. openAppById is the single chokepoint for out-of-band opens; it now applies the same base-or-installed rule as the home grid and routes uninstalled apps to the App Store instead. Going offline never reached co-members Online dots were computed only inside the on-demand list() snapshot, and the groups module hooked no lifecycle events at all - a disconnect fired nothing, so open apps kept showing the player online until a manual refresh. The server now keeps an src -> citizenid map (refreshed on every groups interaction, so the player can still be identified after the framework unloads them mid-drop) and a playerDropped handler that nudges every online co-member's app to refetch, deduped across shared groups and delayed briefly so the refetched roster no longer counts the leaver. create/accept responses also now carry real online states instead of showing everyone offline until the next refresh. Uninstalling Groups left every membership behind Uninstall only edited the installed-ids list; there was no per-app cleanup hook anywhere. Uninstall now fires a first-party sd-phone:server:apps:uninstalled event (usable by any stateful app), and Groups listens: led groups are disbanded with members notified, plain memberships are removed with the leader notified, pending invites are dropped, and the active-group pointer is cleared. Includes the rebuilt NUI bundle. Typecheck, lint, tests clean. Not runtime-verified; the issue's three repros (uninstalled-app notification tap, uninstall-while-grouped, and a two-player disconnect watch) are the smoke tests.
… schema self-heal - init.lua: mirror the drop handler on player load so co-members see a player flip to online without a manual refresh (QBox/qb + esx loaded events) - App.tsx: evict an app's retained keep-alive instance on uninstall, so a reinstall + reopen mounts fresh instead of showing pre-uninstall state - store.lua: self-heal an older DATETIME sent_at column to BIGINT so group invites (os.time()) stop erroring, matching the avatar-column migration
Github-Samuel
pushed a commit
that referenced
this pull request
Sep 15, 2026
…gate (#46) Gates out-of-band launches (notifications/deeplinks/Control Center) of uninstalled apps, routing them to the App Store. Groups now pushes live presence to co-members on both disconnect and connect, and uninstalling Groups tears down memberships/invites via a first-party apps:uninstalled hook. Also folds in: evicting an app's retained keep-alive instance on uninstall so a reinstall reopens fresh, and a self-heal that brings an older DATETIME phone_group_invites.sent_at column up to BIGINT so invites stop erroring.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Notifications opened uninstalled apps (all apps, as the reporter found)
The home screen only hides uninstalled icons - nothing gated the launch
function itself, so notification taps, deeplinks, server launches and
Control Center all opened any app by id. openAppById is the single
chokepoint for out-of-band opens; it now applies the same
base-or-installed rule as the home grid and routes uninstalled apps to
the App Store instead.
Going offline never reached co-members
Online dots were computed only inside the on-demand list() snapshot, and
the groups module hooked no lifecycle events at all - a disconnect fired
nothing, so open apps kept showing the player online until a manual
refresh. The server now keeps an src -> citizenid map (refreshed on every
groups interaction, so the player can still be identified after the
framework unloads them mid-drop) and a playerDropped handler that nudges
every online co-member's app to refetch, deduped across shared groups and
delayed briefly so the refetched roster no longer counts the leaver.
create/accept responses also now carry real online states instead of
showing everyone offline until the next refresh.
Uninstalling Groups left every membership behind
Uninstall only edited the installed-ids list; there was no per-app
cleanup hook anywhere. Uninstall now fires a first-party
sd-phone:server:apps:uninstalled event (usable by any stateful app), and
Groups listens: led groups are disbanded with members notified, plain
memberships are removed with the leader notified, pending invites are
dropped, and the active-group pointer is cleared.
Includes the rebuilt NUI bundle.
Typecheck, lint, tests clean. Not runtime-verified; the issue's three
repros (uninstalled-app notification tap, uninstall-while-grouped, and a
two-player disconnect watch) are the smoke tests.
Fixes #14