Compare commits
2 Commits
a45c5f8f37
...
e095d8317b
Author | SHA1 | Date |
---|---|---|
|
e095d8317b | |
|
c2a008afbe |
|
@ -268,7 +268,7 @@ const releaseFragment = `
|
|||
${releaseTrailerFragment}
|
||||
${releaseTeaserFragment}
|
||||
${siteFragment}
|
||||
chapters {
|
||||
chapters(orderBy: TIME_ASC) {
|
||||
id
|
||||
index
|
||||
time
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
{
|
||||
"name": "traxxx",
|
||||
"version": "1.177.0",
|
||||
"version": "1.177.1",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"version": "1.177.0",
|
||||
"version": "1.177.1",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@graphile-contrib/pg-order-by-related": "^1.0.0-beta.6",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "traxxx",
|
||||
"version": "1.177.0",
|
||||
"version": "1.177.1",
|
||||
"description": "All the latest porn releases in one place",
|
||||
"main": "src/app.js",
|
||||
"scripts": {
|
||||
|
|
|
@ -116,9 +116,9 @@ async function scrapeRelease(baseRelease, entitiesBySlug, type = 'scene') {
|
|||
? await fetchScene(layoutScraper, baseRelease.url, entity, baseRelease, options, null)
|
||||
: await layoutScraper.fetchMovie(baseRelease.url, entity, baseRelease, options, null);
|
||||
|
||||
if (typeof scrapedRelease !== 'object' || Array.isArray(scrapedRelease)) {
|
||||
if (!scrapedRelease || typeof scrapedRelease !== 'object' || Array.isArray(scrapedRelease)) {
|
||||
// scraper is unable to fetch the releases and returned a HTTP code or null
|
||||
throw new Error(`Scraper returned ${scrapedRelease} when fetching latest from '${entity.name}' (${entity.parent?.name})`);
|
||||
throw new Error(`Scraper returned '${scrapedRelease}' when fetching latest from '${entity.name}' (${entity.parent?.name})`);
|
||||
}
|
||||
|
||||
// object-merge-advance will use null as explicit false on hard merged keys, even when null as explicit falls is disabled
|
||||
|
|
|
@ -487,6 +487,10 @@ async function storeFile(media, options) {
|
|||
throw new Error(`Media for '${media.role}' must be an image, but '${media.meta.mimetype}' was detected`);
|
||||
}
|
||||
|
||||
if (['teasers', 'trailers'].includes(media.role) && media.meta.type !== 'video') {
|
||||
throw new Error(`Media for '${media.role}' must be a video, but '${media.meta.mimetype}' was detected in ${media.src}`);
|
||||
}
|
||||
|
||||
const [stat] = await Promise.all([
|
||||
fsPromises.stat(media.file.path),
|
||||
fsPromises.mkdir(path.join(config.media.path, filedir), { recursive: true }),
|
||||
|
|
|
@ -45,7 +45,7 @@ const releaseFields = `
|
|||
slug
|
||||
}
|
||||
}
|
||||
chapters @include (if: $full) {
|
||||
chapters(orderBy: TIME_ASC) @include(if: $full) {
|
||||
id
|
||||
index
|
||||
time
|
||||
|
|
|
@ -84,6 +84,12 @@ function scrapeLatestX(data, site, filterChannel) {
|
|||
if (teaser) release.teaser = teaser;
|
||||
if (trailer) release.trailer = trailer;
|
||||
|
||||
release.chapters = data.timeTags?.map(chapter => ({
|
||||
time: chapter.startTime,
|
||||
duration: chapter.endTime - chapter.startTime,
|
||||
tags: [chapter.name],
|
||||
}));
|
||||
|
||||
return release;
|
||||
}
|
||||
|
||||
|
@ -114,6 +120,12 @@ function scrapeScene(data, url, _site, networkName) {
|
|||
if (teaser) release.teaser = teaser;
|
||||
if (trailer) release.trailer = trailer;
|
||||
|
||||
release.chapters = data.timeTags?.map(chapter => ({
|
||||
time: chapter.startTime,
|
||||
duration: chapter.endTime - chapter.startTime,
|
||||
tags: [chapter.name],
|
||||
}));
|
||||
|
||||
const siteName = data.collections[0]?.name || data.brand;
|
||||
release.channel = slugify(siteName, '');
|
||||
|
||||
|
@ -279,7 +291,7 @@ async function fetchScene(url, site, baseScene, options) {
|
|||
return baseScene;
|
||||
}
|
||||
|
||||
const entryId = url.match(/\d+/)[0];
|
||||
const entryId = new URL(url).pathname.match(/\/(\d+)/)?.[1];
|
||||
const { session, instanceToken } = await getSession(site, options.parameters);
|
||||
|
||||
const res = await http.get(`https://site-api.project1service.com/v2/releases/${entryId}`, {
|
||||
|
|
|
@ -250,17 +250,21 @@ async function updateReleasesSearch(releaseIds) {
|
|||
}
|
||||
|
||||
async function storeChapters(releases) {
|
||||
const chapters = releases.map(release => release.chapters?.map((chapter, index) => ({
|
||||
releaseId: release.id,
|
||||
index: index + 1,
|
||||
time: chapter.time,
|
||||
duration: chapter.duration,
|
||||
title: chapter.title,
|
||||
description: chapter.description,
|
||||
poster: chapter.poster,
|
||||
photos: chapter.photos,
|
||||
tags: chapter.tags,
|
||||
}))).flat().filter(Boolean);
|
||||
const chapters = releases
|
||||
.map(release => release.chapters?.map((chapter, index) => ({
|
||||
releaseId: release.id,
|
||||
index: index + 1,
|
||||
time: chapter.time,
|
||||
duration: chapter.duration,
|
||||
title: chapter.title,
|
||||
description: chapter.description,
|
||||
poster: chapter.poster,
|
||||
photos: chapter.photos,
|
||||
tags: chapter.tags,
|
||||
})))
|
||||
.flat()
|
||||
.filter(Boolean)
|
||||
.sort((chapterA, chapterB) => chapterA.time - chapterB.time);
|
||||
|
||||
const curatedChapterEntries = chapters.map(chapter => ({
|
||||
index: chapter.index,
|
||||
|
|
Loading…
Reference in New Issue