Compare commits

...

3 Commits

Author SHA1 Message Date
DebaucheryLibrarian 70795a69c8 1.151.2 2021-01-01 04:28:17 +01:00
DebaucheryLibrarian 236d4fcde7 Fixed scene media lazy image. Fixed Perv City actor scope. 2021-01-01 04:28:10 +01:00
DebaucheryLibrarian ba3b87471e Added scene flush. Added temporary media insert log for integer out of range error. 2020-12-30 04:17:09 +01:00
18 changed files with 50 additions and 16 deletions

View File

@ -64,7 +64,7 @@
>
<img
:src="`/media/${cover.thumbnail}`"
:style="{ background: sfw ? `/media/${cover.sfw.lazy}` : `/media/${cover.lazy}` }"
:style="{ 'background-image': sfw ? `url(/media/${cover.sfw.lazy})` : `url(/media/${cover.lazy})` }"
class="item cover"
loading="lazy"
@load="$emit('load', $event)"
@ -86,7 +86,7 @@
>
<img
:src="sfw ? `/img/${photo.sfw.thumbnail}` : `/media/${photo.thumbnail}`"
:style="{ background: sfw ? `/img/${photo.sfw.lazy}` : `/media/${photo.lazy}` }"
:style="{ 'background-image': sfw ? `url(/img/${photo.sfw.lazy})` : `url(/media/${photo.lazy})` }"
:alt="`Photo ${photo.index + 1}`"
loading="lazy"
class="item"

View File

@ -30,7 +30,7 @@ exports.up = knex => Promise.resolve()
table.text('hash');
table.integer('size', 12);
table.bigInteger('size', 12);
table.integer('quality', 6);
table.integer('width', 6);
table.integer('height', 6);

2
package-lock.json generated
View File

@ -1,6 +1,6 @@
{
"name": "traxxx",
"version": "1.151.1",
"version": "1.151.2",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View File

@ -1,6 +1,6 @@
{
"name": "traxxx",
"version": "1.151.1",
"version": "1.151.2",
"description": "All the latest porn releases in one place",
"main": "src/app.js",
"scripts": {

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
public/img/tags/milf/2.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1007 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -801,15 +801,16 @@ const tagPhotos = [
['fake-boobs', 14, 'Rikki Six for Dream Dolls'],
['fake-boobs', 2, 'Gia Milana in "Hot Anal Latina" for HardX'],
['fake-boobs', 17, 'Felina in "With Flowers On The Floor" for LouisDeMirabert'],
['fake-boobs', 18, 'Ebony Godess for Action Girls'],
['fake-boobs', 1, 'Lela Star in "Thick" for Jules Jordan'],
['fake-boobs', 16, 'Marsha May in "Once You Go Black 7" for Jules Jordan'],
['fake-boobs', 18, 'Ebony Godess for Action Girls'],
['fake-boobs', 9, 'Putri Cinta for Watch 4 Beauty'],
['fake-boobs', 3, 'Ashly Anderson for Passion HD'],
['fake-boobs', 22, 'Sakura Sena'],
['fake-boobs', 16, 'Marsha May in "Once You Go Black 7" for Jules Jordan'],
['fake-boobs', 23, 'Lulu Sex Bomb in "Tropical Touch"'],
['fake-boobs', 21, 'Emelie Ekström'],
['fake-boobs', 10, 'Tia Cyrus in "Titty-Fucked Yoga Goddess" for Latina Sex Tapes'],
['fake-boobs', 24, 'Shalina Devine in "Rumbling in the Ring, Part 2" for DDF Network'],
['fake-boobs', 20, 'Chloe Lamour for DDF Busty'],
['fake-boobs', 11, 'Jessa Rhodes and Cali Carter in "Busty Anal Workout" for LesbianX'],
['fake-boobs', 13, 'Kitana Lure for Asshole Fever'],
@ -837,6 +838,7 @@ const tagPhotos = [
['latina', 1, 'Jynx Maze in "Big Anal Asses 2" for HardX'],
['latina', 0, 'Vienna Black for Spizoo'],
['maid', 1, 'Alessandra Jane for Brazzers'],
['milf', 2, 'Shalina Devine for Anal Mom'],
// ['milf', 0, 'Olivia Austin in "Dredd 3" for Jules Jordan'],
['mff', 0, 'Madison Ivy, Adriana Chechik and Keiran Lee in "Day With A Pornstar" for Brazzers'],
['mfm', 7, 'Rose Valerie for Euro Sex Parties'],

View File

@ -11,7 +11,7 @@ const { fetchScenes, fetchMovies } = require('./deep');
const { storeScenes, storeMovies, updateReleasesSearch } = require('./store-releases');
const { scrapeActors, flushActors, flushProfiles, interpolateProfiles } = require('./actors');
const { flushEntities } = require('./entities');
const { deleteScenes, deleteMovies, flushBatches } = require('./releases');
const { deleteScenes, deleteMovies, flushScenes, flushBatches } = require('./releases');
const { flushOrphanedMedia } = require('./media');
const getFileEntries = require('./utils/file-entries');
@ -45,6 +45,10 @@ async function init() {
await flushBatches(argv.flushBatches);
}
if (argv.flushScenes) {
await flushScenes();
}
if (argv.deleteScenes) {
await deleteScenes(argv.deleteScenes);
}

View File

@ -283,6 +283,10 @@ const { argv } = yargs
type: 'array',
alias: 'flush-batch',
})
.option('flush-scenes', {
describe: 'Remove all scenes.',
type: 'boolean',
})
.option('delete-scenes', {
describe: 'Remove scenes by ID.',
type: 'array',

View File

@ -657,6 +657,8 @@ async function storeMedias(baseMedias, options) {
const newMediaWithEntries = savedMedias.filter(Boolean).map((media, index) => curateMediaEntry(media, index));
const newMediaEntries = newMediaWithEntries.filter(media => media.newEntry).map(media => media.entry);
// TODO: path duplicates disappear in DO NOTHING query, causing association error. source duplicate detection not working? use scene generator
// await bulkInsert('media', newMediaEntries, false);
await bulkInsert('media', newMediaEntries);
return [...newMediaWithEntries, ...existingHashMedias];

View File

@ -155,6 +155,27 @@ async function deleteScenes(sceneIds) {
return deleteCount;
}
async function flushScenes() {
const sceneIds = await knex('releases').select('id').pluck('id');
const confirmed = await inquirer.prompt([{
type: 'confirm',
name: 'flushScenes',
message: `You are about to remove ${sceneIds.length} scenes. Are you sure?`,
default: false,
}]);
if (!confirmed.flushScenes) {
logger.warn('Confirmation rejected, not flushing scenes');
return;
}
const deleteCount = await deleteScenes(sceneIds);
await flushOrphanedMedia();
logger.info(`Removed ${deleteCount}/${sceneIds.length} scenes`);
}
async function deleteMovies(movieIds) {
if (movieIds.length === 0) {
return 0;
@ -208,6 +229,7 @@ module.exports = {
fetchScene,
fetchScenes,
flushBatches,
flushScenes,
searchScenes,
deleteScenes,
deleteMovies,

View File

@ -11,13 +11,13 @@ function scrapeAll(scenes, entity) {
release.url = query.url('.videoPic a');
release.entryId = query.q('.videoPic img', 'id').match(/set-target-(\d+)/)[1];
release.title = query.q('h3 a', true);
release.description = query.q('.runtime + p', true);
release.title = query.cnt('h3 a');
release.description = query.cnt('.runtime + p');
release.date = query.date('.date', 'MM-DD-YYYY');
release.duration = query.dur('.runtime');
release.actors = query.all('.tour_update_models a', true);
release.actors = query.cnts('.tour_update_models a');
release.poster = query.img('.videoPic img');
release.entity = entity;
@ -31,10 +31,10 @@ function scrapeScene({ query }) {
release.entryId = query.q('.trailerLeft img', 'id').match(/set-target-(\d+)/)[1];
release.title = query.q('.infoHeader h1', true);
release.description = query.q('.infoBox p', true);
release.title = query.cnt('.infoHeader h1');
release.description = query.cnt('.infoBox p');
release.actors = query.all('.tour_update_models a', true);
release.actors = query.cnts('.infoBox .tour_update_models a');
release.poster = query.img('.posterimg');
release.photos = query.imgs('.trailerSnaps img').slice(1); // first photo is poster in lower quality
@ -55,10 +55,10 @@ function scrapeProfile({ query }) {
const bio = query.all('.moreInfo li').reduce((acc, el) => ({
...acc,
[slugify(query.q(el, 'span', true), '_')]: query.text(el),
[slugify(query.cnt(el, 'span'), '_')]: query.text(el),
}), {});
profile.description = query.q('.aboutModel p', true);
profile.description = query.cnt('.aboutModel p');
profile.dateOfBirth = qu.extractDate(bio.date_of_birth, ['MMMM D, YYYY', 'DD-MMM-YY']);
profile.birthPlace = bio.birth_location;