Expand description
Multi-user profiles on one device.
A “profile” is an account on the currently connected Jellyfin server that
this device has signed into at least once. The rows have existed since the
first schema (users), and so have storage_get_users /
storage_set_active_user; what was missing was never the storage but the
decision of who may switch to what — which is domain logic, and stays here.
Two things this module is careful about:
- Switching is not logging out.
auth_logoutcalls Jellyfin’s logout endpoint, which invalidates the token server-side. That is precisely the behaviour a switch must not have, or every switch back would need a password. Nothing here calls it. - “Child account” is not modelled. A child’s profile is simply one with
no PIN. The frontend receives an opaque
UnlockMethodand renders it; it never infers a role, and no role taxonomy is invented on either side.
TRACES: UR-082, UR-083, UR-084 | DR-267, DR-268
Modules§
- pin
- Profile PIN: hashing, and the lockout policy that decides what a guess costs.
- store
- Database access for profiles.
- switch
- Profile switch orchestration, as a plan rather than a procedure.
Structs§
- Profile
- A switchable account on this device.
Enums§
- Startup
Target - What the app should do when it starts.
- Unlock
Method - How a profile is entered.
- Unlock
Outcome - The result of an unlock attempt.
Functions§
- startup_
target - Decide the startup target from the profiles present and the user’s setting.