|
@@ -107,23 +107,23 @@ discard block |
|
|
block discarded – undo |
|
107
|
107
|
} |
|
108
|
108
|
|
|
109
|
109
|
// Check for known studios/sites |
|
110
|
|
- if (preg_match('/\b(' . self::KNOWN_STUDIOS . ')\b/i', $name)) { |
|
|
110
|
+ if (preg_match('/\b('.self::KNOWN_STUDIOS.')\b/i', $name)) { |
|
111
|
111
|
return true; |
|
112
|
112
|
} |
|
113
|
113
|
|
|
114
|
114
|
// Check for known VR sites |
|
115
|
|
- if (preg_match('/\b(' . self::VR_SITES . ')\b/i', $name)) { |
|
|
115
|
+ if (preg_match('/\b('.self::VR_SITES.')\b/i', $name)) { |
|
116
|
116
|
return true; |
|
117
|
117
|
} |
|
118
|
118
|
|
|
119
|
119
|
// Check for adult content indicators combined with video markers |
|
120
|
|
- if (preg_match('/\b(' . self::ADULT_KEYWORDS . ')\b/i', $name) && |
|
|
120
|
+ if (preg_match('/\b('.self::ADULT_KEYWORDS.')\b/i', $name) && |
|
121
|
121
|
preg_match('/\b(720p|1080p|2160p|4k|mp4|mkv|avi|wmv)\b/i', $name)) { |
|
122
|
122
|
return true; |
|
123
|
123
|
} |
|
124
|
124
|
|
|
125
|
125
|
// Check for JAV/AV marker (common in Japanese adult releases) |
|
126
|
|
- if (preg_match('/\b(AV|JAV)\b/', $name) && preg_match('/\b(' . self::KNOWN_STUDIOS . ')\b/i', $name)) { |
|
|
126
|
+ if (preg_match('/\b(AV|JAV)\b/', $name) && preg_match('/\b('.self::KNOWN_STUDIOS.')\b/i', $name)) { |
|
127
|
127
|
return true; |
|
128
|
128
|
} |
|
129
|
129
|
|
|
@@ -131,7 +131,7 @@ discard block |
|
|
block discarded – undo |
|
131
|
131
|
// This pattern is very common for adult sites but rare for regular content |
|
132
|
132
|
if (preg_match('/^[A-Za-z]+[.\-_ ](19|20)?\d{2}[.\-_ ]\d{2}[.\-_ ]\d{2}[.\-_ ][A-Za-z]/i', $name)) { |
|
133
|
133
|
// Check it's not a TV daily show by checking for adult keywords or specific patterns |
|
134
|
|
- if (preg_match('/\b(' . self::ADULT_KEYWORDS . ')\b/i', $name)) { |
|
|
134
|
+ if (preg_match('/\b('.self::ADULT_KEYWORDS.')\b/i', $name)) { |
|
135
|
135
|
return true; |
|
136
|
136
|
} |
|
137
|
137
|
// Check for performer name patterns (firstname.lastname) after the date |
|
@@ -169,7 +169,7 @@ discard block |
|
|
block discarded – undo |
|
169
|
169
|
} |
|
170
|
170
|
|
|
171
|
171
|
// Check for known VR site |
|
172
|
|
- $hasVRSite = preg_match('/\b(' . self::VR_SITES . ')\b/i', $name); |
|
|
172
|
+ $hasVRSite = preg_match('/\b('.self::VR_SITES.')\b/i', $name); |
|
173
|
173
|
|
|
174
|
174
|
// Require either a VR site token, explicit VR180/VR360, or VR device |
|
175
|
175
|
if (!preg_match('/\bVR(?:180|360)\b/i', $name) && |
|
@@ -179,7 +179,7 @@ discard block |
|
|
block discarded – undo |
|
179
|
179
|
} |
|
180
|
180
|
|
|
181
|
181
|
// VR pattern matching - includes VR devices |
|
182
|
|
- $vrPattern = '/\b(' . self::VR_SITES . ')\b|\bVR(?:180|360)\b|\b(?:5K|6K|7K|8K)\b.*\bVR\b|\b(?:GearVR|Oculus|Quest[123]?|PSVR|Vive|Index|Pimax)\b/i'; |
|
|
182
|
+ $vrPattern = '/\b('.self::VR_SITES.')\b|\bVR(?:180|360)\b|\b(?:5K|6K|7K|8K)\b.*\bVR\b|\b(?:GearVR|Oculus|Quest[123]?|PSVR|Vive|Index|Pimax)\b/i'; |
|
183
|
183
|
|
|
184
|
184
|
if (preg_match($vrPattern, $name)) { |
|
185
|
185
|
// VR sites are definitively adult content |
|
@@ -187,7 +187,7 @@ discard block |
|
|
block discarded – undo |
|
187
|
187
|
return $this->matched(Category::XXX_VR, 0.95, 'vr_site'); |
|
188
|
188
|
} |
|
189
|
189
|
// VR device with adult keywords |
|
190
|
|
- if (preg_match('/\bXXX\b/i', $name) || preg_match('/\b(' . self::ADULT_KEYWORDS . ')\b/i', $name)) { |
|
|
190
|
+ if (preg_match('/\bXXX\b/i', $name) || preg_match('/\b('.self::ADULT_KEYWORDS.')\b/i', $name)) { |
|
191
|
191
|
return $this->matched(Category::XXX_VR, 0.9, 'vr_device'); |
|
192
|
192
|
} |
|
193
|
193
|
} |
|
@@ -203,7 +203,7 @@ discard block |
|
|
block discarded – undo |
|
203
|
203
|
|
|
204
|
204
|
// Check for adult markers |
|
205
|
205
|
$hasAdultMarker = preg_match('/\bXXX\b/i', $name) || |
|
206
|
|
- preg_match('/\b(' . self::KNOWN_STUDIOS . ')\b/i', strtolower($name)) || |
|
|
206
|
+ preg_match('/\b('.self::KNOWN_STUDIOS.')\b/i', strtolower($name)) || |
|
207
|
207
|
preg_match('/\b(Hardcore|Porn|Sex|Anal|Creampie|MILF|Lesbian|Teen|Interracial)\b/i', $name); |
|
208
|
208
|
|
|
209
|
209
|
if (!$hasAdultMarker) { |
|
@@ -234,12 +234,12 @@ discard block |
|
|
block discarded – undo |
|
234
|
234
|
$hasHD = preg_match('/\b(720p|1080p|2160p|HD|4K)\b/i', $name); |
|
235
|
235
|
|
|
236
|
236
|
// Studio + performer + HD resolution |
|
237
|
|
- if (preg_match('/^(' . self::KNOWN_STUDIOS . ')\.([A-Z][a-z]+).*?(720p|1080p|2160p|HD|4K)/i', $name)) { |
|
|
237
|
+ if (preg_match('/^('.self::KNOWN_STUDIOS.')\.([A-Z][a-z]+).*?(720p|1080p|2160p|HD|4K)/i', $name)) { |
|
238
|
238
|
return $this->matched(Category::XXX_CLIPHD, 0.9, 'clip_hd_studio'); |
|
239
|
239
|
} |
|
240
|
240
|
|
|
241
|
241
|
// Known studio with date pattern: site.YYYY.MM.DD or site.YY.MM.DD |
|
242
|
|
- if (preg_match('/^(' . self::KNOWN_STUDIOS . ')[.\-_ ](19|20)?\d{2}[.\-_ ]\d{2}[.\-_ ]\d{2}/i', $name)) { |
|
|
242
|
+ if (preg_match('/^('.self::KNOWN_STUDIOS.')[.\-_ ](19|20)?\d{2}[.\-_ ]\d{2}[.\-_ ]\d{2}/i', $name)) { |
|
243
|
243
|
if ($hasHD) { |
|
244
|
244
|
return $this->matched(Category::XXX_CLIPHD, 0.95, 'clip_hd_studio_date'); |
|
245
|
245
|
} |
|
@@ -251,7 +251,7 @@ discard block |
|
|
block discarded – undo |
|
251
|
251
|
if (preg_match('/^([A-Z][a-zA-Z0-9]+)[.\-_ ](19|20)\d{2}[.\-_ ]\d{2}[.\-_ ]\d{2}[.\-_ ]/i', $name) && |
|
252
|
252
|
!preg_match('/\b(S\d{2}E\d{2}|Documentary|Series)\b/i', $name)) { |
|
253
|
253
|
// Check if it has adult keywords or HD resolution |
|
254
|
|
- if ($hasHD || preg_match('/\b(' . self::ADULT_KEYWORDS . ')\b/i', $name)) { |
|
|
254
|
+ if ($hasHD || preg_match('/\b('.self::ADULT_KEYWORDS.')\b/i', $name)) { |
|
255
|
255
|
return $this->matched(Category::XXX_CLIPHD, 0.85, 'clip_hd_date_4digit'); |
|
256
|
256
|
} |
|
257
|
257
|
} |
|
@@ -263,7 +263,7 @@ discard block |
|
|
block discarded – undo |
|
263
|
263
|
} |
|
264
|
264
|
|
|
265
|
265
|
// JAV compact date pattern: site.YYMMDD (e.g., 10musume.121025) |
|
266
|
|
- if (preg_match('/^(' . self::KNOWN_STUDIOS . ')[.\-_ ](\d{6})/i', $name)) { |
|
|
266
|
+ if (preg_match('/^('.self::KNOWN_STUDIOS.')[.\-_ ](\d{6})/i', $name)) { |
|
267
|
267
|
if ($hasHD) { |
|
268
|
268
|
return $this->matched(Category::XXX_CLIPHD, 0.9, 'clip_hd_jav_date'); |
|
269
|
269
|
} |
|
@@ -271,7 +271,7 @@ discard block |
|
|
block discarded – undo |
|
271
|
271
|
} |
|
272
|
272
|
|
|
273
|
273
|
// Known studio with XXX marker and HD resolution |
|
274
|
|
- if (preg_match('/^(' . self::KNOWN_STUDIOS . ')[.\-_ ].*\bXXX\b.*?(720p|1080p|2160p|HD|4K)/i', $name)) { |
|
|
274
|
+ if (preg_match('/^('.self::KNOWN_STUDIOS.')[.\-_ ].*\bXXX\b.*?(720p|1080p|2160p|HD|4K)/i', $name)) { |
|
275
|
275
|
return $this->matched(Category::XXX_CLIPHD, 0.9, 'clip_hd_studio_xxx'); |
|
276
|
276
|
} |
|
277
|
277
|
|
|
@@ -323,8 +323,8 @@ discard block |
|
|
block discarded – undo |
|
323
|
323
|
} |
|
324
|
324
|
|
|
325
|
325
|
if (preg_match('/web[._ -]dl|web-?rip/i', $name) && |
|
326
|
|
- (preg_match('/\b(' . self::ADULT_KEYWORDS . ')\b/i', $name) || |
|
327
|
|
- preg_match('/\b(' . self::KNOWN_STUDIOS . ')\b/i', $name) || |
|
|
326
|
+ (preg_match('/\b('.self::ADULT_KEYWORDS.')\b/i', $name) || |
|
|
327
|
+ preg_match('/\b('.self::KNOWN_STUDIOS.')\b/i', $name) || |
|
328
|
328
|
preg_match('/\b(XXX|Porn|Adult|JAV|Hentai)\b/i', $name))) { |
|
329
|
329
|
return $this->matched(Category::XXX_WEBDL, 0.85, 'webdl'); |
|
330
|
330
|
} |