Issues (569)

app/Console/Commands/ProcessReleasesCommand.php (1 issue)

Labels
Severity
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Console\Commands;
6
7
use Blacklight\processing\ProcessReleases;
0 ignored issues
show
The type Blacklight\processing\ProcessReleases was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
8
use Illuminate\Console\Command;
9
use Illuminate\Support\Facades\Log;
10
11
class ProcessReleasesCommand extends Command
12
{
13
    /**
14
     * The name and signature of the console command.
15
     *
16
     * @var string
17
     */
18
    protected $signature = 'releases:process {groupId? : Group ID to process (optional)}';
19
20
    /**
21
     * The console command description.
22
     *
23
     * @var string
24
     */
25
    protected $description = 'Process releases for a specific group or all groups';
26
27
    /**
28
     * Execute the console command.
29
     */
30
    public function handle(): int
31
    {
32
        $groupId = $this->argument('groupId');
33
34
        try {
35
            $releases = new ProcessReleases();
36
37
            if (is_numeric($groupId)) {
38
                $this->processReleasesForGroup($releases, (string) $groupId);
39
            } else {
40
                $this->processReleasesForGroup($releases, '');
41
                $this->runPostProcessingTasks($releases);
42
            }
43
44
            return self::SUCCESS;
45
        } catch (\Throwable $e) {
46
            Log::error($e->getTraceAsString());
47
            $this->error($e->getMessage());
48
49
            return self::FAILURE;
50
        }
51
    }
52
53
    /**
54
     * Create / process releases for a groupID.
55
     *
56
     * Uses the ProcessReleases DTO-based workflow for cleaner code.
57
     */
58
    private function processReleasesForGroup(ProcessReleases $releases, string $groupID): void
59
    {
60
        $limit = $releases->getReleaseCreationLimit();
61
62
        $releases->processIncompleteCollections($groupID);
63
        $releases->processCollectionSizes($groupID);
64
        $releases->deleteUnwantedCollections($groupID);
65
66
        do {
67
            $result = $releases->createReleases($groupID);
68
            $nzbFilesAdded = $releases->createNZBs($groupID);
69
70
            // Continue if we processed up to the limit (more work may be available)
71
            $shouldContinue = $result->total() >= $limit || $nzbFilesAdded >= $limit;
72
        } while ($shouldContinue);
73
74
        $releases->deleteCollections($groupID);
75
    }
76
77
    /**
78
     * Run post-processing tasks after all group releases are processed.
79
     */
80
    private function runPostProcessingTasks(ProcessReleases $releases): void
81
    {
82
        $releases->deletedReleasesByGroup();
83
        $releases->deleteReleases();
84
        $releases->categorizeReleases(2);
85
    }
86
}
87