Class ReminderService
Multiplexes reminder subscriptions for one circuit, delivering batched updates to interested links or menus. General reminders are registered app-wide; their cached counts are pushed by the IReminderSource where a server-side job runs, and polled by this service under the current user's session in WebAssembly, where it does not. Personal reminders are materialised once per authenticated principal from the factory registered by AddPersonalReminders(IServiceCollection, Func<IServices, Task<IEnumerable<IReminder>>>) and refreshed by this service, uncached, as the current user.
The save-driven and periodic refresh mirrors the WPF RemindersController: counts are queried through
IReminderStore (which resolves to a local or remote/RPC implementation) rather than by subscribing
to the ORM query cache, so one batched read per refresh serves both 1-tier and 2-tier frontend (including WebAssembly).
public class ReminderService : IAmReminded, IDisposable
- Inheritance
-
ReminderService
- Implements
- Inherited Members
Constructors
ReminderService(IServices, IReminderStore, IReminderSource, Func<IServices, Task<IEnumerable<IReminder>>>?, TimeSpan)
public ReminderService(IServices services, IReminderStore store, IReminderSource source, Func<IServices, Task<IEnumerable<IReminder>>>? personalReminders, TimeSpan refreshInterval)
Parameters
servicesIServicesstoreIReminderStoresourceIReminderSourcepersonalRemindersFunc<IServices, Task<IEnumerable<IReminder>>>refreshIntervalTimeSpan
Properties
HasPersonalReminders
Whether the current user may have personal reminders: a factory is registered and has not materialised an empty set.
public bool HasPersonalReminders { get; }
Property Value
PersonalReminders
The current user's personal reminders, if they have been materialised for this circuit; empty otherwise.
public IEnumerable<IReminder> PersonalReminders { get; }
Property Value
RegisteredReminders
The app-wide general reminders.
public IEnumerable<IReminder> RegisteredReminders { get; }
Property Value
Methods
FindReminderAsync(string)
Find a registered general or personal reminder by description (case-insensitively, for use from URLs), materialising personal reminders if necessary.
public Task<IReminder?> FindReminderAsync(string description)
Parameters
descriptionstring
Returns
RemindersUpdated(IEnumerable<ReminderUpdate>)
public void RemindersUpdated(IEnumerable<ReminderUpdate> updates)
Parameters
updatesIEnumerable<ReminderUpdate>
Subscribe(IPrincipal, IAmReminded, IReminder)
Subscribe to a single registered reminder, matched by description; returns null if the reminder is not registered or not visible to principal.
public ReminderUpdate? Subscribe(IPrincipal principal, IAmReminded subscriber, IReminder reminder)
Parameters
principalIPrincipalsubscriberIAmRemindedreminderIReminder
Returns
SubscribeAll(IPrincipal, IAmReminded)
Subscribe to every currently-registered reminder visible to principal. Does not materialise personal reminders; prefer SubscribeAllAsync(IPrincipal, IAmReminded).
public IEnumerable<ReminderUpdate> SubscribeAll(IPrincipal principal, IAmReminded subscriber)
Parameters
principalIPrincipalsubscriberIAmReminded
Returns
SubscribeAllAsync(IPrincipal, IAmReminded)
Subscribe to every reminder visible to principal, materialising personal reminders if necessary.
public Task<IEnumerable<ReminderUpdate>> SubscribeAllAsync(IPrincipal principal, IAmReminded subscriber)
Parameters
principalIPrincipalsubscriberIAmReminded
Returns
SubscribeAsync(IPrincipal, IAmReminded, IReminder)
Subscribe to a single reminder, matched by description against the registered general and personal reminders, materialising personal reminders if necessary.
public Task<ReminderUpdate?> SubscribeAsync(IPrincipal principal, IAmReminded subscriber, IReminder reminder)
Parameters
principalIPrincipalsubscriberIAmRemindedreminderIReminder
Returns
Unsubscribe(IAmReminded, IReminder)
public void Unsubscribe(IAmReminded subscriber, IReminder reminder)
Parameters
subscriberIAmRemindedreminderIReminder
UnsubscribeAll(IAmReminded)
public void UnsubscribeAll(IAmReminded subscriber)
Parameters
subscriberIAmReminded