Added DarkkoTV scraper. Removed some obsolete web components.

This commit is contained in:
DebaucheryLibrarian
2026-03-31 06:29:30 +02:00
parent 64cdba6f6d
commit ebb8832096
31 changed files with 199 additions and 1098 deletions

View File

@@ -8,117 +8,6 @@ const argv = require('./argv');
const { updateSceneSearch } = require('./update-search');
const { flushOrphanedMedia } = require('./media');
const { graphql } = require('./web/graphql');
const releaseFields = `
id
entryId
shootId
title
url
date
description
duration
entity {
id
name
slug
parent {
id
name
slug
}
}
actors: releasesActors {
actor {
id
name
slug
gender
aliasFor
entityId
entryId
}
}
tags: releasesTags {
tag {
id
name
slug
}
}
chapters(orderBy: TIME_ASC) @include(if: $full) {
id
index
time
duration
title
description
tags: chaptersTags {
tag {
id
name
slug
}
}
poster: chaptersPoster {
media {
id
path
thumbnail
s3: isS3
width
height
size
}
}
photos: chaptersPhotos {
media {
id
path
thumbnail
s3: isS3
width
height
size
}
}
}
poster: releasesPoster {
media {
id
path
thumbnail
s3: isS3
width
height
size
}
}
photos: releasesPhotos @include (if: $full) {
media {
id
path
thumbnail
s3: isS3
width
height
size
}
}
trailer: releasesTrailer @include (if: $full) {
media {
id
path
s3: isS3
vr: isVr
quality
size
}
}
createdAt
`;
function curateRelease(release, withMedia = false, withPoster = true) {
if (!release) {
return null;
@@ -193,107 +82,6 @@ function curateRelease(release, withMedia = false, withPoster = true) {
};
}
function curateGraphqlRelease(release) {
if (!release) {
return null;
}
return {
id: release.id,
...(release.relevance && { relevance: release.relevance }),
entryId: release.entryId,
shootId: release.shootId,
title: release.title || null,
url: release.url || null,
date: release.date,
description: release.description || null,
duration: release.duration,
entity: release.entity,
actors: release.actors.map((actor) => actor.actor),
tags: release.tags.map((tag) => tag.tag),
...(release.chapters && { chapters: release.chapters.map((chapter) => ({
...chapter,
tags: chapter.tags.map((tag) => tag.tag),
poster: chapter.poster?.media || null,
photos: chapter.photos.map((photo) => photo.media),
})) }),
poster: release.poster?.media || null,
...(release.photos && { photos: release.photos.map((photo) => photo.media) }),
trailer: release.trailer?.media || null,
createdAt: release.createdAt,
};
}
async function fetchScene(releaseId) {
const { release } = await graphql(`
query Release(
$releaseId: Int!
$full: Boolean = true
) {
release(id: $releaseId) {
${releaseFields}
}
}
`, {
releaseId: Number(releaseId),
});
return curateGraphqlRelease(release);
}
async function fetchScenes(limit = 100) {
const { releases } = await graphql(`
query SearchReleases(
$limit: Int = 20
$full: Boolean = false
) {
releases(
first: $limit
orderBy: DATE_DESC
) {
${releaseFields}
}
}
`, {
limit: Math.min(limit, 10000),
});
return releases.map((release) => curateGraphqlRelease(release));
}
async function searchScenes(query, limit = 100, relevance = 0) {
const { releases } = await graphql(`
query SearchReleases(
$query: String!
$limit: Int = 20
$relevance: Float = 0.025
$full: Boolean = false
) {
releases: searchReleases(
query: $query
first: $limit
orderBy: RANK_DESC
filter: {
rank: {
greaterThan: $relevance
}
}
) {
rank
release {
${releaseFields}
}
}
}
`, {
query,
limit,
relevance,
});
return releases.map((release) => curateGraphqlRelease({ ...release.release, relevance: release.rank }));
}
async function deleteScenes(sceneIds) {
if (sceneIds.length === 0) {
return 0;
@@ -483,13 +271,10 @@ async function flushBatches(batchIds) {
module.exports = {
curateRelease,
fetchScene,
fetchScenes,
flushBatches,
flushMovies,
flushSeries,
flushScenes,
searchScenes,
deleteScenes,
deleteMovies,
deleteSeries,