Allow users to receive notificiations on push
We currently have these ways of getting notifications for a project:
- Subscribe to the group or the project. This will give you notifications on MRs, issues, and comments, depending on your setting. The custom notification level is equivalent to the participating level, with the addition of any extra events chosen on that screen. Docs: https://docs.gitlab.com/ce/workflow/notifications.html
- Be added to the emails on push service by a user with master access on the project. This will send you diffs for each push to the project, but you have to be added by email address, not by your username, and you can't manage your subscription yourself. Docs: https://docs.gitlab.com/ce/project_services/emails_on_push.html
Combining these elegantly will be tricky, but we can make a start by doing something like the below:
- For the custom notification level only, allow users to subscribe to push events and tag push events.
- If the emails on push service is enabled on the project, we should add the user's email to the recipients when we're sending the emails. (But make sure it's not duplicated, so that the user only gets one email.)
- If the emails on push service is not enabled on the project, construct our own emails on push worker (not service!). Because of the point above, this should still add the user to the recipients - but these should now only be subscribers. This should use the default service settings.
- When the service settings are updated, it would also be nice to check the email addresses in the list. If any of those match the notification email address of a user with the participating or custom notification levels for the project, we could remove them from the list at that point and add them as having the custom notification level.
- We could also show users who have subscribed to this manually on this page.
- We might want to allow users with different notification levels to subscribe to these events. Specifically, watch is a higher level than participating / custom, but won't get the emails on push.
- This fits outside our current notification levels. We might want to consider a (painful) migration to change the
NotificationSetting
model to have columns for each notification type, and have the different levels fill those in as required. So the watch level would be something like: subscribed + participating + new note + new issue + reopened issue + ..., but any level could be easily converted to a custom level.
Zendesk issue: https://gitlab.zendesk.com/agent/tickets/16200