]> git.mxchange.org Git - friendica.git/commitdiff
Add a payload
authorMichael <heluecht@pirati.ca>
Mon, 16 Aug 2021 06:11:26 +0000 (06:11 +0000)
committerMichael <heluecht@pirati.ca>
Mon, 16 Aug 2021 06:11:26 +0000 (06:11 +0000)
src/Model/Subscription.php
src/Worker/PushSubscription.php

index 71d26248f3e87c67b85d6d074126a3c82ab7f9ec..5fb88911ac4dc903a28da7f03652ace6f07a19bb 100644 (file)
@@ -155,7 +155,7 @@ class Subscription
                $subscriptions = DBA::select('subscription', [], ['uid' => $notification['uid'], $type => true]);
                while ($subscription = DBA::fetch($subscriptions)) {
                        Logger::info('Push notification', ['id' => $subscription['id'], 'uid' => $subscription['uid'], 'type' => $type]);
-                       Worker::add(PRIORITY_HIGH, 'PushSubscription', $subscription['id']);
+                       Worker::add(PRIORITY_HIGH, 'PushSubscription', $subscription['id'], $nid);
                }
                DBA::close($subscriptions);
        }
index de385afa1c16d0a497fa72b37c90499526546acb..f3c3a4046faa687771d7c2efd1646ef7dfe257c1 100644 (file)
@@ -24,23 +24,43 @@ namespace Friendica\Worker;
 use Friendica\Core\Logger;
 use Friendica\Database\DBA;
 use Friendica\DI;
+use Friendica\Model\Contact;
 use Friendica\Model\Subscription as ModelSubscription;
+use Friendica\Util\DateTimeFormat;
 use Minishlink\WebPush\WebPush;
 use Minishlink\WebPush\Subscription;
 
 class PushSubscription
 {
-       public static function execute(int $sid)
+       public static function execute(int $sid, int $nid)
        {
                $subscription = DBA::selectFirst('subscription', [], ['id' => $sid]);
+               $notification = DBA::selectFirst('notification', [], ['id' => $nid]);
 
-               $notification = [
+               if (!empty($notification['uri-id'])) {
+                       $notify = DBA::selectFirst('notify', ['msg'], ['uri-id' => $notification['target-uri-id']]);
+               }
+
+               if (!empty($notification['actor-id'])) {
+                       $actor = Contact::getById($notification['actor-id']);
+               }
+
+               $push = [
                        'subscription' => Subscription::create([
                                'endpoint'  => $subscription['endpoint'],
                                'publicKey' => $subscription['pubkey'],
                                'authToken' => $subscription['secret'],
                        ]),
-                       'payload' => null,
+                       // @todo Check if we are supposed to transmit a payload at all
+                       'payload' => json_encode([
+                               'title'     => 'Friendica',
+                               'body'      => $notify['msg'] ?? '',
+                               'icon'      => $actor['thumb'] ?? '',
+                               'image'     => '',
+                               'badge'     => DI::baseUrl()->get() . '/images/friendica-192.png',
+                               'tag'       => $notification['parent-uri-id'] ?? '',
+                               'timestamp' => DateTimeFormat::utc($notification['created'], DateTimeFormat::JSON),
+                       ]),
                ];
 
                $auth = [
@@ -54,8 +74,8 @@ class PushSubscription
                $webPush = new WebPush($auth);
 
                $report = $webPush->sendOneNotification(
-                       $notification['subscription'],
-                       $notification['payload']
+                       $push['subscription'],
+                       $push['payload']
                );
 
                $endpoint = $report->getRequest()->getUri()->__toString();