From a7eeeac54963d74e7f901bd4f2e890b91ce539f3 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Fri, 10 Apr 2026 15:20:12 +0200 Subject: [PATCH] Improve release indexng on release update --- app/Console/Commands/NntmuxRemoveBadReleases.php | 4 +++- .../Commands/NntmuxResetPostProcessing.php | 5 +++++ .../Commands/NntmuxResetTvShowPostProcessing.php | 2 ++ app/Console/Commands/ProcessAdditionalGuid.php | 2 ++ app/Console/Commands/RecategorizeReleases.php | 3 +++ .../Controllers/Admin/AdminMovieController.php | 6 ++++++ app/Models/Release.php | 16 +++++++++++++++- .../AdditionalProcessing/ReleaseFileManager.php | 4 ++++ app/Services/BookService.php | 2 ++ app/Services/MovieService.php | 7 +++++++ app/Services/NameFixing/ReleaseUpdateService.php | 1 + app/Services/ReleaseProcessingService.php | 5 +++++ .../Releases/ReleaseManagementService.php | 7 ++++++- 13 files changed, 61 insertions(+), 3 deletions(-) diff --git a/app/Console/Commands/NntmuxRemoveBadReleases.php b/app/Console/Commands/NntmuxRemoveBadReleases.php index 56df51c9c..32e918e6d 100644 --- a/app/Console/Commands/NntmuxRemoveBadReleases.php +++ b/app/Console/Commands/NntmuxRemoveBadReleases.php @@ -62,7 +62,9 @@ class NntmuxRemoveBadReleases extends Command $count = 0; foreach ($passReleases as $passRelease) { - Release::whereId($passRelease->releases_id)->update(['passwordstatus' => 1]); + $releasesId = (int) $passRelease->releases_id; + Release::whereId($releasesId)->update(['passwordstatus' => 1]); + Search::updateRelease($releasesId); $count++; } diff --git a/app/Console/Commands/NntmuxResetPostProcessing.php b/app/Console/Commands/NntmuxResetPostProcessing.php index b4551f6e7..501d76321 100644 --- a/app/Console/Commands/NntmuxResetPostProcessing.php +++ b/app/Console/Commands/NntmuxResetPostProcessing.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace App\Console\Commands; +use App\Facades\Search; use App\Models\Category; use App\Models\Release; use Illuminate\Console\Command; @@ -89,6 +90,7 @@ class NntmuxResetPostProcessing extends Command 'nfostatus' => -1, ] ); + Search::updateRelease((int) $releases->id); $bar->advance(); } $bar->finish(); @@ -244,6 +246,7 @@ class NntmuxResetPostProcessing extends Command 'movieinfo_id' => null, 'imdbid' => null, ]); + Search::updateRelease((int) $releases->id); $bar->advance(); } $bar->finish(); @@ -337,6 +340,7 @@ class NntmuxResetPostProcessing extends Command 'videos_id' => 0, 'tv_episodes_id' => 0, ]); + Search::updateRelease((int) $releases->id); $bar->advance(); } $bar->finish(); @@ -365,6 +369,7 @@ class NntmuxResetPostProcessing extends Command 'audiostatus' => 0, 'nfostatus' => -1, ]); + Search::updateRelease((int) $releases->id); $bar->advance(); } $bar->finish(); diff --git a/app/Console/Commands/NntmuxResetTvShowPostProcessing.php b/app/Console/Commands/NntmuxResetTvShowPostProcessing.php index 69918f6cb..f94c26873 100644 --- a/app/Console/Commands/NntmuxResetTvShowPostProcessing.php +++ b/app/Console/Commands/NntmuxResetTvShowPostProcessing.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace App\Console\Commands; +use App\Facades\Search; use App\Models\Category; use App\Models\Release; use App\Models\Video; @@ -71,6 +72,7 @@ class NntmuxResetTvShowPostProcessing extends Command 'videos_id' => 0, 'tv_episodes_id' => 0, ]); + Search::updateRelease((int) $release->id); $bar->advance(); } }); diff --git a/app/Console/Commands/ProcessAdditionalGuid.php b/app/Console/Commands/ProcessAdditionalGuid.php index 2a895aae4..d2b7b2da6 100644 --- a/app/Console/Commands/ProcessAdditionalGuid.php +++ b/app/Console/Commands/ProcessAdditionalGuid.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace App\Console\Commands; +use App\Facades\Search; use App\Models\Release; use App\Services\AdditionalProcessing\AdditionalProcessingOrchestrator; use Illuminate\Console\Command; @@ -75,6 +76,7 @@ class ProcessAdditionalGuid extends Command 'audiostatus' => 0, 'nfostatus' => -1, ]); + Search::updateRelease((int) $release->id); $this->info('Reset postprocessing flags for release ID '.$release->id.' (GUID '.$guid.')'); } diff --git a/app/Console/Commands/RecategorizeReleases.php b/app/Console/Commands/RecategorizeReleases.php index bd075f874..6d0593b12 100644 --- a/app/Console/Commands/RecategorizeReleases.php +++ b/app/Console/Commands/RecategorizeReleases.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace App\Console\Commands; +use App\Facades\Search; use App\Models\Category; use App\Models\Release; use App\Services\Categorization\CategorizationService; @@ -92,6 +93,8 @@ class RecategorizeReleases extends Command 'categories_id' => $catId['categories_id'], ]); + Search::updateRelease((int) $result->id); + /** @var Category|null $newCatName */ $newCatName = Category::query()->where('id', $catId['categories_id'])->first(); diff --git a/app/Http/Controllers/Admin/AdminMovieController.php b/app/Http/Controllers/Admin/AdminMovieController.php index 51e732863..89e82b452 100644 --- a/app/Http/Controllers/Admin/AdminMovieController.php +++ b/app/Http/Controllers/Admin/AdminMovieController.php @@ -4,10 +4,12 @@ declare(strict_types=1); namespace App\Http\Controllers\Admin; +use App\Facades\Search; use App\Http\Controllers\BasePageController; use App\Models\MovieInfo; use App\Models\Release; use App\Services\MovieService; +use App\Support\ReleaseSearchIndexSync; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\View\View; @@ -87,6 +89,7 @@ class AdminMovieController extends BasePageController if ($movieInfoId !== null) { foreach ($forUpdate as $rel) { Release::query()->where('id', $rel->id)->update(['movieinfo_id' => $movieInfoId->id]); + Search::updateRelease((int) $rel->id); } } } @@ -197,6 +200,9 @@ class AdminMovieController extends BasePageController $movieInfo = MovieInfo::query()->where('imdbid', $id)->first(['id']); if ($movieInfo !== null) { Release::query()->where('imdbid', $id)->update(['movieinfo_id' => $movieInfo->id]); + ReleaseSearchIndexSync::forIds( + Release::query()->where('imdbid', $id)->pluck('id') + ); } return redirect()->to('admin/movie-list') diff --git a/app/Models/Release.php b/app/Models/Release.php index 6cc8bacdb..76bddd0a0 100644 --- a/app/Models/Release.php +++ b/app/Models/Release.php @@ -255,7 +255,11 @@ class Release extends Model { $updateGrabs = ((int) Settings::settingValue('grabstatus') !== 0); if ($updateGrabs) { + $id = self::whereGuid($guid)->value('id'); self::whereGuid($guid)->increment('grabs'); + if ($id !== null) { + Search::updateRelease((int) $id); + } } } @@ -273,7 +277,11 @@ class Release extends Model } $updateGrabs = ((int) Settings::settingValue('grabstatus') !== 0); if ($updateGrabs) { + $ids = self::query()->whereIn('guid', $guids)->pluck('id'); self::query()->whereIn('guid', $guids)->increment('grabs'); + foreach ($ids as $id) { + Search::updateRelease((int) $id); + } } } @@ -287,7 +295,13 @@ class Release extends Model public static function removeVideoIdFromReleases(mixed $videoId): int { - return self::whereVideosId($videoId)->update(['videos_id' => 0, 'tv_episodes_id' => 0]); + $ids = self::whereVideosId($videoId)->pluck('id'); + $updated = self::whereVideosId($videoId)->update(['videos_id' => 0, 'tv_episodes_id' => 0]); + foreach ($ids as $id) { + Search::updateRelease((int) $id); + } + + return $updated; } public static function removeAnidbIdFromReleases(mixed $anidbID): int diff --git a/app/Services/AdditionalProcessing/ReleaseFileManager.php b/app/Services/AdditionalProcessing/ReleaseFileManager.php index 15634bb04..045f05634 100644 --- a/app/Services/AdditionalProcessing/ReleaseFileManager.php +++ b/app/Services/AdditionalProcessing/ReleaseFileManager.php @@ -190,6 +190,8 @@ class ReleaseFileManager $updateRows['rarinnerfilecount'] = $releaseFilesCount; Release::query()->where('id', $context->release->id)->update($updateRows); } + + Search::updateRelease((int) $context->release->id); } /** @@ -221,6 +223,8 @@ class ReleaseFileManager 'passwordstatus' => ReleaseBrowseService::PASSWD_NONE, ]); + Search::updateRelease((int) $release->id); + Log::warning('Release '.$release->id.' skipped after post-processing timeout ('.$newCount.'/'.$maxTimeoutCount.')'); return false; diff --git a/app/Services/BookService.php b/app/Services/BookService.php index fb6af6bb5..17cac7293 100644 --- a/app/Services/BookService.php +++ b/app/Services/BookService.php @@ -485,6 +485,7 @@ class BookService cli()->headerOver('Changing category to misc books: ').cli()->primary($releasename); } Release::query()->where('id', $releaseID)->update(['categories_id' => Category::BOOKS_UNKNOWN]); + Search::updateRelease((int) $releaseID); return false; } @@ -494,6 +495,7 @@ class BookService cli()->headerOver('Changing category to magazines: ').cli()->primary($releasename); } Release::query()->where('id', $releaseID)->update(['categories_id' => Category::BOOKS_MAGAZINES]); + Search::updateRelease((int) $releaseID); return false; } diff --git a/app/Services/MovieService.php b/app/Services/MovieService.php index 6ccfa25b5..e6c3e430d 100644 --- a/app/Services/MovieService.php +++ b/app/Services/MovieService.php @@ -5,12 +5,14 @@ declare(strict_types=1); namespace App\Services; use aharen\OMDbAPI; +use App\Facades\Search; use App\Models\Category; use App\Models\MovieInfo; use App\Models\Release; use App\Models\Settings; use App\Services\Releases\ReleaseBrowseService; use App\Services\TvProcessing\Providers\TraktProvider; +use App\Support\ReleaseSearchIndexSync; use GuzzleHttp\Client; use GuzzleHttp\Exception\GuzzleException; use Illuminate\Support\Carbon; @@ -991,6 +993,8 @@ class MovieService 'movieinfo_id' => $movieInfoId !== null ? $movieInfoId['id'] : null, ]); + Search::updateRelease($id); + if ($processImdb === 1) { $movCheck = $this->getMovieInfo($imdbId); $thirtyDaysInSeconds = 30 * 24 * 60 * 60; @@ -1007,6 +1011,8 @@ class MovieService Release::query()->where('id', $id)->update([ 'movieinfo_id' => $freshMovieInfo !== null ? $freshMovieInfo['id'] : null, ]); + + Search::updateRelease($id); } } } @@ -1126,6 +1132,7 @@ class MovieService foreach (array_chunk($failedIDs, 100) as $chunk) { Release::query()->whereIn('id', $chunk)->update(['imdbid' => '']); + ReleaseSearchIndexSync::forIds($chunk); } } } diff --git a/app/Services/NameFixing/ReleaseUpdateService.php b/app/Services/NameFixing/ReleaseUpdateService.php index 865316f1d..e7043db83 100644 --- a/app/Services/NameFixing/ReleaseUpdateService.php +++ b/app/Services/NameFixing/ReleaseUpdateService.php @@ -339,6 +339,7 @@ class ReleaseUpdateService { if ($column !== '' && $id !== 0) { Release::query()->where('id', $id)->update([$column => $status]); + Search::updateRelease($id); } } diff --git a/app/Services/ReleaseProcessingService.php b/app/Services/ReleaseProcessingService.php index 8abb1de53..87e024459 100644 --- a/app/Services/ReleaseProcessingService.php +++ b/app/Services/ReleaseProcessingService.php @@ -20,6 +20,7 @@ use App\Services\Releases\ReleaseManagementService; use App\Support\DTOs\ProcessReleasesSettings; use App\Support\DTOs\ReleaseCreationResult; use App\Support\DTOs\ReleaseDeleteStats; +use App\Support\ReleaseSearchIndexSync; use DateTimeInterface; use Illuminate\Database\QueryException; use Illuminate\Support\Carbon; @@ -291,6 +292,8 @@ final class ReleaseProcessingService 'iscategorized' => 0, ]); } + + ReleaseSearchIndexSync::reindexMatchingWhere($where); } /** @@ -334,6 +337,8 @@ final class ReleaseProcessingService 'iscategorized' => 1, ]); + ReleaseSearchIndexSync::forIds([(int) $release->id]); + $categorized++; $this->outputProgress($categorized, $total, 'Categorizing'); } diff --git a/app/Services/Releases/ReleaseManagementService.php b/app/Services/Releases/ReleaseManagementService.php index 9ca58db71..426b4c006 100644 --- a/app/Services/Releases/ReleaseManagementService.php +++ b/app/Services/Releases/ReleaseManagementService.php @@ -8,6 +8,7 @@ use App\Facades\Search; use App\Models\Release; use App\Services\Nzb\NzbService; use App\Services\ReleaseImageService; +use App\Support\ReleaseSearchIndexSync; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; @@ -103,7 +104,11 @@ class ReleaseManagementService 'imdbid' => $imdbId, ]; - return Release::query()->whereIn('guid', $guids)->update($update); + $releaseIds = Release::query()->whereIn('guid', $guids)->pluck('id'); + $updated = Release::query()->whereIn('guid', $guids)->update($update); + ReleaseSearchIndexSync::forIds($releaseIds); + + return $updated; } /**