Update RemoteStatusDelete, fix decrement logic

pull/6068/head
Daniel Supernault 4 months ago
parent 2a9c28b81e
commit 4ab85248e9
No known key found for this signature in database
GPG Key ID: 23740873EE6F76A1

@ -2,47 +2,35 @@
namespace App\Jobs\StatusPipeline;
use DB, Cache, Storage;
use App\{
AccountInterstitial,
Bookmark,
CollectionItem,
DirectMessage,
Like,
Media,
MediaTag,
Mention,
Notification,
Report,
Status,
StatusArchived,
StatusHashtag,
StatusView
};
use App\AccountInterstitial;
use App\Bookmark;
use App\CollectionItem;
use App\DirectMessage;
use App\Jobs\MediaPipeline\MediaDeletePipeline;
use App\Like;
use App\Media;
use App\MediaTag;
use App\Mention;
use App\Notification;
use App\Report;
use App\Services\Account\AccountStatService;
use App\Services\AccountService;
use App\Services\CollectionService;
use App\Services\NotificationService;
use App\Services\StatusService;
use App\Status;
use App\StatusArchived;
use App\StatusHashtag;
use App\StatusView;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\Middleware\WithoutOverlapping;
use League\Fractal;
use Illuminate\Support\Str;
use League\Fractal\Serializer\ArraySerializer;
use App\Transformer\ActivityPub\Verb\DeleteNote;
use App\Util\ActivityPub\Helpers;
use GuzzleHttp\Pool;
use GuzzleHttp\Client;
use GuzzleHttp\Promise;
use App\Util\ActivityPub\HttpSignature;
use App\Services\AccountService;
use App\Services\CollectionService;
use App\Services\StatusService;
use App\Jobs\MediaPipeline\MediaDeletePipeline;
use App\Services\NotificationService;
use App\Services\Account\AccountStatService;
use Illuminate\Queue\SerializesModels;
class RemoteStatusDelete implements ShouldQueue, ShouldBeUniqueUntilProcessing
class RemoteStatusDelete implements ShouldBeUniqueUntilProcessing, ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
@ -56,8 +44,11 @@ class RemoteStatusDelete implements ShouldQueue, ShouldBeUniqueUntilProcessing
public $deleteWhenMissingModels = true;
public $tries = 3;
public $maxExceptions = 3;
public $timeout = 180;
public $failOnTimeout = true;
/**
@ -72,7 +63,7 @@ class RemoteStatusDelete implements ShouldQueue, ShouldBeUniqueUntilProcessing
*/
public function uniqueId(): string
{
return 'status:remote:delete:' . $this->status->id;
return 'status:remote:delete:'.$this->status->id;
}
/**
@ -104,11 +95,12 @@ class RemoteStatusDelete implements ShouldQueue, ShouldBeUniqueUntilProcessing
{
$status = $this->status;
if($status->deleted_at) {
if ($status->deleted_at) {
return;
}
StatusService::del($status->id, true);
// AccountStatService::decrementPostCount($status->profile_id);
return $this->unlinkRemoveMedia($status);
}
@ -116,11 +108,13 @@ class RemoteStatusDelete implements ShouldQueue, ShouldBeUniqueUntilProcessing
public function unlinkRemoveMedia($status)
{
if($status->in_reply_to_id) {
if ($status->in_reply_to_id) {
$parent = Status::find($status->in_reply_to_id);
if($parent) {
--$parent->reply_count;
$parent->save();
if ($parent) {
if ($parent->reply_count) {
$parent->reply_count = $parent->reply_count - 1;
$parent->save();
}
StatusService::del($parent->id);
}
}
@ -132,16 +126,16 @@ class RemoteStatusDelete implements ShouldQueue, ShouldBeUniqueUntilProcessing
CollectionItem::whereObjectType('App\Status')
->whereObjectId($status->id)
->get()
->each(function($col) {
->each(function ($col) {
CollectionService::removeItem($col->collection_id, $col->object_id);
$col->delete();
});
});
$dms = DirectMessage::whereStatusId($status->id)->get();
foreach($dms as $dm) {
foreach ($dms as $dm) {
$not = Notification::whereItemType('App\DirectMessage')
->whereItemId($dm->id)
->first();
if($not) {
if ($not) {
NotificationService::del($not->profile_id, $not->id);
$not->forceDeleteQuietly();
}
@ -149,16 +143,16 @@ class RemoteStatusDelete implements ShouldQueue, ShouldBeUniqueUntilProcessing
}
Like::whereStatusId($status->id)->forceDelete();
Media::whereStatusId($status->id)
->get()
->each(function($media) {
MediaDeletePipeline::dispatch($media)->onQueue('mmo');
});
->get()
->each(function ($media) {
MediaDeletePipeline::dispatch($media)->onQueue('mmo');
});
$mediaTags = MediaTag::where('status_id', $status->id)->get();
foreach($mediaTags as $mtag) {
foreach ($mediaTags as $mtag) {
$not = Notification::whereItemType('App\MediaTag')
->whereItemId($mtag->id)
->first();
if($not) {
if ($not) {
NotificationService::del($not->profile_id, $not->id);
$not->forceDeleteQuietly();
}

Loading…
Cancel
Save