Loading modules/Fediverse/Commands/Broadcast.php +37 −19 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ declare(strict_types=1); namespace Modules\Fediverse\Commands; use CodeIgniter\CLI\BaseCommand; use Exception; use Override; class Broadcast extends BaseCommand Loading @@ -22,10 +23,19 @@ class Broadcast extends BaseCommand // retrieve scheduled activities from database $scheduledActivities = model('ActivityModel', false) ->getScheduledActivities(); ->getScheduledActivities(10); foreach ($scheduledActivities as $scheduledActivity) { // set activity post to processing model('ActivityModel', false) ->update($scheduledActivity->id, [ 'status' => 'processing', ]); } // Send activity to all followers foreach ($scheduledActivities as $scheduledActivity) { try { if ($scheduledActivity->target_actor_id !== null) { if ($scheduledActivity->actor_id !== $scheduledActivity->target_actor_id) { // send activity to targeted actor Loading @@ -48,6 +58,14 @@ class Broadcast extends BaseCommand ->update($scheduledActivity->id, [ 'status' => 'delivered', ]); } catch (Exception) { // set activity post to delivered model('ActivityModel', false) ->update($scheduledActivity->id, [ 'status' => 'failed', ]); } } } } modules/Fediverse/Database/Migrations/2018-01-02-120000_update_activities_status.php 0 → 100644 +31 −0 Original line number Diff line number Diff line <?php declare(strict_types=1); /** * @copyright 2024 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 * @link https://castopod.org/ */ namespace Modules\Fediverse\Migrations; use App\Database\Migrations\BaseMigration; use Override; class UpdateActivitiesStatus extends BaseMigration { #[Override] public function up(): void { $fields = [ 'status' => [ 'type' => 'ENUM', 'constraint' => ['queued', 'processing', 'delivered', 'failed'], 'null' => true, ], ]; $this->forge->modifyColumn('fediverse_activities', $fields); } } modules/Fediverse/Helpers/fediverse_helper.php +1 −0 Original line number Diff line number Diff line Loading @@ -131,6 +131,7 @@ if (! function_exists('send_activity_to_followers')) { */ function send_activity_to_followers(Actor $actor, string $activityPayload): void { // TODO: send activities in parallel with https://www.php.net/manual/en/function.curl-multi-init.php foreach ($actor->followers as $follower) { send_activity_to_actor($actor, $follower, $activityPayload); } Loading modules/Fediverse/Models/ActivityModel.php +2 −1 Original line number Diff line number Diff line Loading @@ -123,11 +123,12 @@ class ActivityModel extends UuidModel /** * @return Activity[] */ public function getScheduledActivities(): array public function getScheduledActivities(int $limit = 10): array { return $this->where('`scheduled_at` <= UTC_TIMESTAMP()', null, false) ->where('status', 'queued') ->orderBy('scheduled_at', 'ASC') ->limit($limit) ->findAll(); } Loading Loading
modules/Fediverse/Commands/Broadcast.php +37 −19 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ declare(strict_types=1); namespace Modules\Fediverse\Commands; use CodeIgniter\CLI\BaseCommand; use Exception; use Override; class Broadcast extends BaseCommand Loading @@ -22,10 +23,19 @@ class Broadcast extends BaseCommand // retrieve scheduled activities from database $scheduledActivities = model('ActivityModel', false) ->getScheduledActivities(); ->getScheduledActivities(10); foreach ($scheduledActivities as $scheduledActivity) { // set activity post to processing model('ActivityModel', false) ->update($scheduledActivity->id, [ 'status' => 'processing', ]); } // Send activity to all followers foreach ($scheduledActivities as $scheduledActivity) { try { if ($scheduledActivity->target_actor_id !== null) { if ($scheduledActivity->actor_id !== $scheduledActivity->target_actor_id) { // send activity to targeted actor Loading @@ -48,6 +58,14 @@ class Broadcast extends BaseCommand ->update($scheduledActivity->id, [ 'status' => 'delivered', ]); } catch (Exception) { // set activity post to delivered model('ActivityModel', false) ->update($scheduledActivity->id, [ 'status' => 'failed', ]); } } } }
modules/Fediverse/Database/Migrations/2018-01-02-120000_update_activities_status.php 0 → 100644 +31 −0 Original line number Diff line number Diff line <?php declare(strict_types=1); /** * @copyright 2024 Ad Aures * @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3 * @link https://castopod.org/ */ namespace Modules\Fediverse\Migrations; use App\Database\Migrations\BaseMigration; use Override; class UpdateActivitiesStatus extends BaseMigration { #[Override] public function up(): void { $fields = [ 'status' => [ 'type' => 'ENUM', 'constraint' => ['queued', 'processing', 'delivered', 'failed'], 'null' => true, ], ]; $this->forge->modifyColumn('fediverse_activities', $fields); } }
modules/Fediverse/Helpers/fediverse_helper.php +1 −0 Original line number Diff line number Diff line Loading @@ -131,6 +131,7 @@ if (! function_exists('send_activity_to_followers')) { */ function send_activity_to_followers(Actor $actor, string $activityPayload): void { // TODO: send activities in parallel with https://www.php.net/manual/en/function.curl-multi-init.php foreach ($actor->followers as $follower) { send_activity_to_actor($actor, $follower, $activityPayload); } Loading
modules/Fediverse/Models/ActivityModel.php +2 −1 Original line number Diff line number Diff line Loading @@ -123,11 +123,12 @@ class ActivityModel extends UuidModel /** * @return Activity[] */ public function getScheduledActivities(): array public function getScheduledActivities(int $limit = 10): array { return $this->where('`scheduled_at` <= UTC_TIMESTAMP()', null, false) ->where('status', 'queued') ->orderBy('scheduled_at', 'ASC') ->limit($limit) ->findAll(); } Loading