Add search functionality for adult content in MediaController

This commit is contained in:
Lars Behrends
2026-01-21 22:12:55 +01:00
parent 91a53402c6
commit b69d35c7fe
2 changed files with 59 additions and 5 deletions

3
.gitignore vendored
View File

@@ -149,6 +149,3 @@ composer.lock
/public/public/images/backdrops /public/public/images/backdrops
/public/public/images/posters /public/public/images/posters
/storage/images /storage/images
/frontend/

View File

@@ -426,6 +426,14 @@ class MediaController extends ApiController
$results['actors'] = $this->searchActors($query, $pagination); $results['actors'] = $this->searchActors($query, $pagination);
} }
if ($type === 'all' || $type === 'adult') {
$results['adult'] = $this->searchAdult($query, $pagination);
}
/*
print_r($results);
print_r($query);
die("results");
*/
return $this->success($response, $results); return $this->success($response, $results);
} catch (\Exception $e) { } catch (\Exception $e) {
return $this->error($response, 'Search failed: ' . $e->getMessage(), 500); return $this->error($response, 'Search failed: ' . $e->getMessage(), 500);
@@ -628,6 +636,45 @@ class MediaController extends ApiController
} }
} }
private function searchAdult(string $query, array $pagination): array
{
try {
// Use the actor model's search method if available
if (method_exists($this->actorModel, 'search')) {
$actors = $this->adultModel->search($query, $pagination['per_page'], $pagination['offset']);
$total = method_exists($this->actorModel, 'countSearchResults')
? $this->adultModel->countSearchResults($query)
: count($actors);
}
// Fallback to basic filtering
else {
$allActors = $this->adultModel->findAll();
$filtered = array_filter($allActors, function($actor) use ($query) {
return stripos($actor['title'] ?? '', $query) !== false;
});
// Apply pagination
$actors = array_slice($filtered, $pagination['offset'], $pagination['per_page']);
$total = count($filtered);
}
return [
'items' => $actors,
'total' => $total,
'page' => $pagination['page'],
'per_page' => $pagination['per_page']
];
} catch (\Exception $e) {
return [
'items' => [],
'total' => 0,
'page' => $pagination['page'],
'per_page' => $pagination['per_page'],
'error' => $e->getMessage()
];
}
}
// List all movies with pagination // List all movies with pagination
public function listMovies(Request $request, Response $response): Response public function listMovies(Request $request, Response $response): Response
{ {
@@ -785,6 +832,16 @@ class MediaController extends ApiController
$pagination['offset'] $pagination['offset']
); );
// Add actors to each adult video
foreach ($adultContent as &$video) {
try {
$adultVideoModel = new \App\Models\AdultVideo($this->pdo);
$video['actors'] = $adultVideoModel->actors($video['id']);
} catch (\Exception $e) {
$video['actors'] = [];
}
}
$total = $this->adultModel->count($filters); $total = $this->adultModel->count($filters);
// Get available filter options // Get available filter options