mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-12-30 09:36:14 -06:00
Use packed notification flags
This commit is contained in:
parent
464d920cfd
commit
255833683f
8 changed files with 109 additions and 129 deletions
|
|
@ -48,26 +48,15 @@ func (p *Processor) CreateOrReplace(
|
|||
|
||||
// Insert a new one.
|
||||
subscription := >smodel.WebPushSubscription{
|
||||
ID: id.NewULID(),
|
||||
AccountID: accountID,
|
||||
TokenID: tokenID,
|
||||
Endpoint: request.Subscription.Endpoint,
|
||||
Auth: request.Subscription.Keys.Auth,
|
||||
P256dh: request.Subscription.Keys.P256dh,
|
||||
NotifyFollow: &request.Data.Alerts.Follow,
|
||||
NotifyFollowRequest: &request.Data.Alerts.FollowRequest,
|
||||
NotifyFavourite: &request.Data.Alerts.Favourite,
|
||||
NotifyMention: &request.Data.Alerts.Mention,
|
||||
NotifyReblog: &request.Data.Alerts.Reblog,
|
||||
NotifyPoll: &request.Data.Alerts.Poll,
|
||||
NotifyStatus: &request.Data.Alerts.Status,
|
||||
NotifyUpdate: &request.Data.Alerts.Update,
|
||||
NotifyAdminSignup: &request.Data.Alerts.AdminSignup,
|
||||
NotifyAdminReport: &request.Data.Alerts.AdminReport,
|
||||
NotifyPendingFavourite: &request.Data.Alerts.PendingFavourite,
|
||||
NotifyPendingReply: &request.Data.Alerts.PendingReply,
|
||||
NotifyPendingReblog: &request.Data.Alerts.PendingReblog,
|
||||
ID: id.NewULID(),
|
||||
AccountID: accountID,
|
||||
TokenID: tokenID,
|
||||
Endpoint: request.Subscription.Endpoint,
|
||||
Auth: request.Subscription.Keys.Auth,
|
||||
P256dh: request.Subscription.Keys.P256dh,
|
||||
NotificationFlags: alertsToNotificationFlags(request.Data.Alerts),
|
||||
}
|
||||
|
||||
if err := p.state.DB.PutWebPushSubscription(ctx, subscription); err != nil {
|
||||
return nil, gtserror.NewErrorInternalError(
|
||||
gtserror.Newf("couldn't create Web Push subscription for token ID %s: %w", tokenID, err),
|
||||
|
|
|
|||
|
|
@ -64,3 +64,25 @@ func (p *Processor) apiSubscription(ctx context.Context, subscription *gtsmodel.
|
|||
|
||||
return apiSubscription, nil
|
||||
}
|
||||
|
||||
// alertsToNotificationFlags turns the alerts section of a push subscription API request into a packed bitfield.
|
||||
func alertsToNotificationFlags(alerts *apimodel.WebPushSubscriptionAlerts) gtsmodel.WebPushSubscriptionNotificationFlags {
|
||||
var n gtsmodel.WebPushSubscriptionNotificationFlags
|
||||
|
||||
n.Set(gtsmodel.NotificationFollow, alerts.Follow)
|
||||
n.Set(gtsmodel.NotificationFollowRequest, alerts.FollowRequest)
|
||||
n.Set(gtsmodel.NotificationFavourite, alerts.Favourite)
|
||||
n.Set(gtsmodel.NotificationMention, alerts.Mention)
|
||||
n.Set(gtsmodel.NotificationReblog, alerts.Reblog)
|
||||
n.Set(gtsmodel.NotificationPoll, alerts.Poll)
|
||||
n.Set(gtsmodel.NotificationStatus, alerts.Status)
|
||||
// TODO: (Vyr) handle NotificationUpdate when edit patch is merged
|
||||
//n.Set(gtsmodel.NotificationUpdate, alerts.Update)
|
||||
n.Set(gtsmodel.NotificationAdminSignup, alerts.AdminSignup)
|
||||
n.Set(gtsmodel.NotificationAdminReport, alerts.AdminReport)
|
||||
n.Set(gtsmodel.NotificationPendingFave, alerts.PendingFavourite)
|
||||
n.Set(gtsmodel.NotificationPendingReply, alerts.PendingReply)
|
||||
n.Set(gtsmodel.NotificationPendingReblog, alerts.PendingReblog)
|
||||
|
||||
return n
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,35 +49,11 @@ func (p *Processor) Update(
|
|||
}
|
||||
|
||||
// Update it.
|
||||
subscription.NotifyFollow = &request.Data.Alerts.Follow
|
||||
subscription.NotifyFollowRequest = &request.Data.Alerts.FollowRequest
|
||||
subscription.NotifyFavourite = &request.Data.Alerts.Favourite
|
||||
subscription.NotifyMention = &request.Data.Alerts.Mention
|
||||
subscription.NotifyReblog = &request.Data.Alerts.Reblog
|
||||
subscription.NotifyPoll = &request.Data.Alerts.Poll
|
||||
subscription.NotifyStatus = &request.Data.Alerts.Status
|
||||
subscription.NotifyUpdate = &request.Data.Alerts.Update
|
||||
subscription.NotifyAdminSignup = &request.Data.Alerts.AdminSignup
|
||||
subscription.NotifyAdminReport = &request.Data.Alerts.AdminReport
|
||||
subscription.NotifyPendingFavourite = &request.Data.Alerts.PendingFavourite
|
||||
subscription.NotifyPendingReply = &request.Data.Alerts.PendingReply
|
||||
subscription.NotifyPendingReblog = &request.Data.Alerts.PendingReblog
|
||||
subscription.NotificationFlags = alertsToNotificationFlags(request.Data.Alerts)
|
||||
if err = p.state.DB.UpdateWebPushSubscription(
|
||||
ctx,
|
||||
subscription,
|
||||
"notify_follow",
|
||||
"notify_follow_request",
|
||||
"notify_favourite",
|
||||
"notify_mention",
|
||||
"notify_reblog",
|
||||
"notify_poll",
|
||||
"notify_status",
|
||||
"notify_update",
|
||||
"notify_admin_signup",
|
||||
"notify_admin_report",
|
||||
"notify_pending_favourite",
|
||||
"notify_pending_reply",
|
||||
"notify_pending_reblog",
|
||||
"notification_flags",
|
||||
); err != nil {
|
||||
return nil, gtserror.NewErrorInternalError(
|
||||
gtserror.Newf("couldn't update Web Push subscription for token ID %s: %w", tokenID, err),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue