mirror of
https://code.castopod.org/adaures/castopod
synced 2025-04-19 13:01:19 +00:00
fix(episode-unpublish): set consistent posts_counts' increments/decrements for actors and episodes
Some episodes could not be unpublished because of out of range error when removing posts. fixes #233
This commit is contained in:
parent
9cc2996261
commit
8acdafd260
@ -122,23 +122,9 @@ Events::on('on_undo_follow', function ($actor, $targetActor): void {
|
||||
* @param Post $post
|
||||
*/
|
||||
Events::on('on_post_add', function ($post): void {
|
||||
$isReply = $post->in_reply_to_id !== null;
|
||||
|
||||
if ($isReply) {
|
||||
$post = $post->reply_to_post;
|
||||
}
|
||||
|
||||
if ($post->episode_id !== null) {
|
||||
if ($isReply) {
|
||||
model(EpisodeModel::class, false)->builder()
|
||||
->where('id', $post->episode_id)
|
||||
->increment('comments_count');
|
||||
} else {
|
||||
model(EpisodeModel::class, false)->builder()
|
||||
->where('id', $post->episode_id)
|
||||
->increment('posts_count');
|
||||
}
|
||||
}
|
||||
model(EpisodeModel::class, false)->builder()
|
||||
->where('id', $post->episode_id)
|
||||
->increment('posts_count');
|
||||
|
||||
if ($post->actor->is_podcast) {
|
||||
// Removing all of the podcast pages is a bit overkill, but works to avoid caching bugs
|
||||
@ -154,10 +140,6 @@ Events::on('on_post_add', function ($post): void {
|
||||
* @param Post $post
|
||||
*/
|
||||
Events::on('on_post_remove', function ($post): void {
|
||||
if ($post->in_reply_to_id !== null) {
|
||||
Events::trigger('on_post_remove', $post->reply_to_post);
|
||||
}
|
||||
|
||||
if ($episodeId = $post->episode_id) {
|
||||
model(EpisodeModel::class, false)->builder()
|
||||
->where('id', $episodeId)
|
||||
@ -237,6 +219,10 @@ Events::on('on_post_undo_reblog', function ($reblogPost): void {
|
||||
Events::on('on_post_reply', function ($reply): void {
|
||||
$post = $reply->reply_to_post;
|
||||
|
||||
model(EpisodeModel::class, false)->builder()
|
||||
->where('id', $post->episode_id)
|
||||
->increment('comments_count');
|
||||
|
||||
if ($post->actor->is_podcast) {
|
||||
cache()
|
||||
->deleteMatching("podcast#{$post->actor->podcast->id}*");
|
||||
@ -254,6 +240,10 @@ Events::on('on_post_reply', function ($reply): void {
|
||||
Events::on('on_reply_remove', function ($reply): void {
|
||||
$post = $reply->reply_to_post;
|
||||
|
||||
model(EpisodeModel::class, false)->builder()
|
||||
->where('id', $post->episode_id)
|
||||
->decrement('comments_count');
|
||||
|
||||
if ($post->actor->is_podcast) {
|
||||
cache()
|
||||
->deleteMatching("page_podcast#{$post->actor->podcast->id}*");
|
||||
|
@ -74,6 +74,10 @@ class PostController extends FediversePostController
|
||||
$this->registerPodcastWebpageHit($this->podcast->id);
|
||||
}
|
||||
|
||||
if ($this->post === null) {
|
||||
throw PageNotFoundException::forPageNotFound();
|
||||
}
|
||||
|
||||
$cacheName = implode(
|
||||
'_',
|
||||
array_filter([
|
||||
@ -177,7 +181,7 @@ class PostController extends FediversePostController
|
||||
'created_by' => user_id(),
|
||||
]);
|
||||
|
||||
if ($this->post->in_reply_to_id === null && $this->post->episode_id !== null) {
|
||||
if ($this->post->episode_id !== null) {
|
||||
$newPost->episode_id = $this->post->episode_id;
|
||||
}
|
||||
|
||||
|
@ -62,7 +62,6 @@ class PostModel extends FediversePostModel
|
||||
->join(config('Fediverse')->tablesPrefix . 'posts as p2', 'p1.id = p2.in_reply_to_id')
|
||||
->select('p2.id, p1.episode_id')
|
||||
->where([
|
||||
'p1.in_reply_to_id' => null,
|
||||
'p2.in_reply_to_id IS NOT' => null,
|
||||
'p2.episode_id' => null,
|
||||
'p1.episode_id IS NOT' => null,
|
||||
|
@ -714,6 +714,8 @@ class EpisodeController extends BaseController
|
||||
$allPostsLinkedToEpisode = (new PostModel())
|
||||
->where([
|
||||
'episode_id' => $this->episode->id,
|
||||
'in_reply_to_id' => null,
|
||||
'reblog_of_id' => null,
|
||||
])
|
||||
->findAll();
|
||||
foreach ($allPostsLinkedToEpisode as $post) {
|
||||
|
@ -277,10 +277,12 @@ class PostModel extends BaseUuidModel
|
||||
}
|
||||
|
||||
if ($post->in_reply_to_id === null) {
|
||||
// increment posts_count only if not reply
|
||||
// post is not a reply
|
||||
model('ActorModel', false)
|
||||
->where('id', $post->actor_id)
|
||||
->increment('posts_count');
|
||||
|
||||
Events::trigger('on_post_add', $post);
|
||||
}
|
||||
|
||||
if ($registerActivity) {
|
||||
@ -314,8 +316,6 @@ class PostModel extends BaseUuidModel
|
||||
]);
|
||||
}
|
||||
|
||||
Events::trigger('on_post_add', $post);
|
||||
|
||||
$this->clearCache($post);
|
||||
|
||||
$this->db->transComplete();
|
||||
@ -365,26 +365,13 @@ class PostModel extends BaseUuidModel
|
||||
{
|
||||
$this->db->transStart();
|
||||
|
||||
model('ActorModel', false)
|
||||
->where('id', $post->actor_id)
|
||||
->decrement('posts_count');
|
||||
|
||||
if ($post->in_reply_to_id !== null) {
|
||||
// Post to remove is a reply
|
||||
model('PostModel', false)
|
||||
->where('id', $this->uuid->fromString($post->in_reply_to_id) ->getBytes())
|
||||
->decrement('replies_count');
|
||||
|
||||
Events::trigger('on_reply_remove', $post);
|
||||
}
|
||||
|
||||
// remove all post reblogs
|
||||
foreach ($post->reblogs as $reblog) {
|
||||
// FIXME: issue when actor is not local, can't get actor information
|
||||
$this->removePost($reblog);
|
||||
$this->undoReblog($reblog);
|
||||
}
|
||||
|
||||
// remove all post replies
|
||||
// remove all replies
|
||||
foreach ($post->replies as $reply) {
|
||||
$this->removePost($reply);
|
||||
}
|
||||
@ -427,11 +414,24 @@ class PostModel extends BaseUuidModel
|
||||
]);
|
||||
}
|
||||
|
||||
if ($post->in_reply_to_id === null && $post->reblog_of_id === null) {
|
||||
model('ActorModel', false)
|
||||
->where('id', $post->actor_id)
|
||||
->decrement('posts_count');
|
||||
|
||||
Events::trigger('on_post_remove', $post);
|
||||
} elseif ($post->in_reply_to_id !== null) {
|
||||
// Post to remove is a reply
|
||||
model('PostModel', false)
|
||||
->where('id', $this->uuid->fromString($post->in_reply_to_id) ->getBytes())
|
||||
->decrement('replies_count');
|
||||
|
||||
Events::trigger('on_reply_remove', $post);
|
||||
}
|
||||
|
||||
$result = model('PostModel', false)
|
||||
->delete($post->id);
|
||||
|
||||
Events::trigger('on_post_remove', $post);
|
||||
|
||||
$this->clearCache($post);
|
||||
|
||||
$this->db->transComplete();
|
||||
@ -574,11 +574,11 @@ class PostModel extends BaseUuidModel
|
||||
]);
|
||||
}
|
||||
|
||||
Events::trigger('on_post_undo_reblog', $reblogPost);
|
||||
|
||||
$result = model('PostModel', false)
|
||||
->delete($reblogPost->id);
|
||||
|
||||
Events::trigger('on_post_undo_reblog', $reblogPost);
|
||||
|
||||
$this->clearCache($reblogPost);
|
||||
|
||||
$this->db->transComplete();
|
||||
|
Loading…
x
Reference in New Issue
Block a user