Skip to content

fix(groups): presence pushes, uninstall cleanup, notification launch gate - #46

Merged
Github-Samuel merged 4 commits into
mainfrom
fix/14-groups
Jul 19, 2026
Merged

Github-Samuel merged 4 commits into
mainfrom
fix/14-groups

Conversation

@Epixx1337

Copy link
Copy Markdown
Collaborator

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

Epixx1337 and others added 4 commits July 19, 2026 01:58
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
Github-Samuel merged commit 08bbfdd into main Jul 19, 2026
1 check passed
@Github-Samuel
Github-Samuel deleted the fix/14-groups branch July 19, 2026 17:38
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.
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.

groups app

2 participants