PostProcessService::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 40
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 20
c 0
b 0
f 0
dl 0
loc 40
rs 9.6
cc 1
nc 1
nop 13

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Services;
6
7
use App\Services\AdditionalProcessing\AdditionalProcessingOrchestrator;
0 ignored issues
show
Bug introduced by
The type App\Services\AdditionalP...lProcessingOrchestrator 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 App\Services\NameFixing\NameFixingService;
9
use Blacklight\Nfo;
10
use Blacklight\NNTP;
11
use dariusiii\rarinfo\Par2Info;
12
use Illuminate\Contracts\Foundation\Application;
13
14
/**
15
 * Orchestrates post-processing of releases.
16
 *
17
 * This service coordinates various post-processing operations including:
18
 * - NFO processing
19
 * - Movie/TV/Anime lookups
20
 * - Music/Books/Games/Console processing
21
 * - XXX content processing
22
 * - Additional processing (RAR/ZIP contents, samples, etc.)
23
 */
24
final class PostProcessService
25
{
26
    private readonly bool $echoOutput;
27
    private readonly bool $alternateNNTP;
28
    private readonly bool $addPar2;
29
30
    private readonly NameFixingService $nameFixingService;
31
    private readonly Par2Info $par2Info;
32
    private readonly Nfo $nfo;
33
34
    private readonly Par2Processor $par2Processor;
35
    private readonly TvProcessor $tvProcessor;
36
    private readonly NfoProcessor $nfoProcessor;
37
    private readonly MoviesProcessor $moviesProcessor;
38
    private readonly MusicProcessor $musicProcessor;
39
    private readonly BooksProcessor $booksProcessor;
40
    private readonly ConsolesProcessor $consolesProcessor;
41
    private readonly GamesProcessor $gamesProcessor;
42
    private readonly AnimeProcessor $animeProcessor;
43
    private readonly XXXProcessor $xxxProcessor;
44
45
    public function __construct(
46
        ?NameFixingService $nameFixingService = null,
47
        ?Par2Info $par2Info = null,
48
        ?Nfo $nfo = null,
49
        ?Par2Processor $par2Processor = null,
50
        ?TvProcessor $tvProcessor = null,
51
        ?NfoProcessor $nfoProcessor = null,
52
        ?MoviesProcessor $moviesProcessor = null,
53
        ?MusicProcessor $musicProcessor = null,
54
        ?BooksProcessor $booksProcessor = null,
55
        ?ConsolesProcessor $consolesProcessor = null,
56
        ?GamesProcessor $gamesProcessor = null,
57
        ?AnimeProcessor $animeProcessor = null,
58
        ?XXXProcessor $xxxProcessor = null,
59
    ) {
60
        $this->echoOutput = (bool) config('nntmux.echocli');
0 ignored issues
show
Bug introduced by
The property echoOutput is declared read-only in App\Services\PostProcessService.
Loading history...
61
        $this->addPar2 = (bool) config('nntmux_settings.add_par2');
0 ignored issues
show
Bug introduced by
The property addPar2 is declared read-only in App\Services\PostProcessService.
Loading history...
62
        $this->alternateNNTP = (bool) config('nntmux_nntp.use_alternate_nntp_server');
0 ignored issues
show
Bug introduced by
The property alternateNNTP is declared read-only in App\Services\PostProcessService.
Loading history...
63
64
        // Core dependencies
65
        $this->nameFixingService = $nameFixingService ?? new NameFixingService();
0 ignored issues
show
Bug introduced by
The property nameFixingService is declared read-only in App\Services\PostProcessService.
Loading history...
66
        $this->par2Info = $par2Info ?? new Par2Info();
0 ignored issues
show
Bug introduced by
The property par2Info is declared read-only in App\Services\PostProcessService.
Loading history...
67
        $this->nfo = $nfo ?? new Nfo();
0 ignored issues
show
Bug introduced by
The property nfo is declared read-only in App\Services\PostProcessService.
Loading history...
68
69
        // Processors
70
        $this->par2Processor = $par2Processor ?? new Par2Processor(
0 ignored issues
show
Bug introduced by
The property par2Processor is declared read-only in App\Services\PostProcessService.
Loading history...
71
            $this->nameFixingService,
72
            $this->par2Info,
73
            $this->addPar2,
74
            $this->alternateNNTP
75
        );
76
        $this->tvProcessor = $tvProcessor ?? new TvProcessor($this->echoOutput);
0 ignored issues
show
Bug introduced by
The property tvProcessor is declared read-only in App\Services\PostProcessService.
Loading history...
77
        $this->nfoProcessor = $nfoProcessor ?? new NfoProcessor($this->nfo, $this->echoOutput);
0 ignored issues
show
Bug introduced by
The property nfoProcessor is declared read-only in App\Services\PostProcessService.
Loading history...
78
        $this->moviesProcessor = $moviesProcessor ?? new MoviesProcessor($this->echoOutput);
0 ignored issues
show
Bug introduced by
The property moviesProcessor is declared read-only in App\Services\PostProcessService.
Loading history...
79
        $this->musicProcessor = $musicProcessor ?? new MusicProcessor($this->echoOutput);
0 ignored issues
show
Bug introduced by
The property musicProcessor is declared read-only in App\Services\PostProcessService.
Loading history...
80
        $this->booksProcessor = $booksProcessor ?? new BooksProcessor($this->echoOutput);
0 ignored issues
show
Bug introduced by
The property booksProcessor is declared read-only in App\Services\PostProcessService.
Loading history...
81
        $this->consolesProcessor = $consolesProcessor ?? new ConsolesProcessor($this->echoOutput);
0 ignored issues
show
Bug introduced by
The property consolesProcessor is declared read-only in App\Services\PostProcessService.
Loading history...
82
        $this->gamesProcessor = $gamesProcessor ?? new GamesProcessor($this->echoOutput);
0 ignored issues
show
Bug introduced by
The property gamesProcessor is declared read-only in App\Services\PostProcessService.
Loading history...
83
        $this->animeProcessor = $animeProcessor ?? new AnimeProcessor($this->echoOutput);
0 ignored issues
show
Bug introduced by
The property animeProcessor is declared read-only in App\Services\PostProcessService.
Loading history...
84
        $this->xxxProcessor = $xxxProcessor ?? new XXXProcessor($this->echoOutput);
0 ignored issues
show
Bug introduced by
The property xxxProcessor is declared read-only in App\Services\PostProcessService.
Loading history...
85
    }
86
87
    /**
88
     * Run all post-processing types.
89
     *
90
     * @throws \Exception
91
     */
92
    public function processAll(NNTP $nntp): void
93
    {
94
        $this->processAdditional();
95
        $this->processNfos($nntp);
96
        $this->processMovies();
97
        $this->processMusic();
98
        $this->processConsoles();
99
        $this->processGames();
100
        $this->processAnime();
101
        $this->processTv();
102
        $this->processXXX();
103
        $this->processBooks();
104
    }
105
106
    /**
107
     * Process anime releases using AniDB.
108
     *
109
     * @param string $groupID Optional group ID filter
110
     * @param string $guidChar Optional GUID character filter
111
     *
112
     * @throws \Exception
113
     */
114
    public function processAnime(string $groupID = '', string $guidChar = ''): void
115
    {
116
        $this->animeProcessor->process($groupID, $guidChar);
117
    }
118
119
    /**
120
     * Process book releases using Amazon.
121
     *
122
     * @param string $groupID Optional group ID filter
123
     * @param string $guidChar Optional GUID character filter
124
     *
125
     * @throws \Exception
126
     */
127
    public function processBooks(string $groupID = '', string $guidChar = ''): void
128
    {
129
        $this->booksProcessor->process($groupID, $guidChar);
130
    }
131
132
    /**
133
     * Process console game releases.
134
     *
135
     * @throws \Exception
136
     */
137
    public function processConsoles(): void
138
    {
139
        $this->consolesProcessor->process();
140
    }
141
142
    /**
143
     * Process PC game releases.
144
     *
145
     * @throws \Exception
146
     */
147
    public function processGames(): void
148
    {
149
        $this->gamesProcessor->process();
150
    }
151
152
    /**
153
     * Process movie releases using IMDB/TMDB.
154
     *
155
     * @param string $groupID Optional group ID filter
156
     * @param string $guidChar Optional GUID character filter
157
     * @param int|string|null $processMovies Processing mode (0=skip, 1=all, 2=renamed only, ''=check setting)
158
     *
159
     * @throws \Exception
160
     */
161
    public function processMovies(
162
        string $groupID = '',
163
        string $guidChar = '',
164
        int|string|null $processMovies = ''
165
    ): void {
166
        $this->moviesProcessor->process($groupID, $guidChar, $processMovies);
167
    }
168
169
    /**
170
     * Process music releases.
171
     *
172
     * @throws \Exception
173
     */
174
    public function processMusic(): void
175
    {
176
        $this->musicProcessor->process();
177
    }
178
179
    /**
180
     * Process NFO files for releases.
181
     *
182
     * @param NNTP $nntp NNTP connection for downloading NFOs
183
     * @param string $groupID Optional group ID filter
184
     * @param string $guidChar Optional GUID character filter
185
     *
186
     * @throws \Exception
187
     */
188
    public function processNfos(NNTP $nntp, string $groupID = '', string $guidChar = ''): void
189
    {
190
        $this->nfoProcessor->process($nntp, $groupID, $guidChar);
191
    }
192
193
    /**
194
     * Process TV releases.
195
     *
196
     * @param string $groupID Optional group ID filter
197
     * @param string $guidChar Optional GUID character filter
198
     * @param int|string|null $processTV Processing mode (0=skip, 1=all, 2=renamed only, ''=check setting)
199
     * @param string $mode Processing mode ('pipeline' or 'parallel')
200
     *
201
     * @throws \Exception
202
     */
203
    public function processTv(
204
        string $groupID = '',
205
        string $guidChar = '',
206
        int|string|null $processTV = '',
207
        string $mode = 'pipeline'
208
    ): void {
209
        if ($guidChar === '') {
210
            $forkingService = new ForkingService();
211
            $processTV = is_numeric($processTV)
212
                ? $processTV
213
                : \App\Models\Settings::settingValue('lookuptv');
214
            $renamedOnly = ((int) $processTV === 2);
215
216
            $forkingService->processTv($renamedOnly);
217
        } else {
218
            $this->tvProcessor->process($groupID, $guidChar, $processTV, $mode);
219
        }
220
    }
221
222
    /**
223
     * Process XXX releases.
224
     *
225
     * @throws \Exception
226
     */
227
    public function processXXX(): void
228
    {
229
        $this->xxxProcessor->process();
230
    }
231
232
    /**
233
     * Process additional release data (RAR/ZIP contents, samples, media info).
234
     *
235
     * @param int|string $groupID Optional group ID filter
236
     * @param string $guidChar Optional GUID character filter
237
     *
238
     * @throws \Exception
239
     */
240
    public function processAdditional(int|string $groupID = '', string $guidChar = ''): void
241
    {
242
        app(AdditionalProcessingOrchestrator::class)->start($groupID, $guidChar);
243
    }
244
245
    /**
246
     * Attempt to get a better name from a PAR2 file and re-categorize.
247
     *
248
     * @param string $messageID Message ID from NZB
249
     * @param int $relID Release ID
250
     * @param int $groupID Group ID
251
     * @param NNTP $nntp NNTP connection
252
     * @param int $show Display mode (0=apply, 1=show only)
253
     *
254
     * @throws \Exception
255
     */
256
    public function parsePAR2(
257
        string $messageID,
258
        int $relID,
259
        int $groupID,
260
        NNTP $nntp,
261
        int $show
262
    ): bool {
263
        return $this->par2Processor->parseFromMessage($messageID, $relID, $groupID, $nntp, $show);
264
    }
265
}
266
267