Fixed scene media lazy image. Fixed Perv City actor scope.
|
@ -64,7 +64,7 @@
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
:src="`/media/${cover.thumbnail}`"
|
: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"
|
class="item cover"
|
||||||
loading="lazy"
|
loading="lazy"
|
||||||
@load="$emit('load', $event)"
|
@load="$emit('load', $event)"
|
||||||
|
@ -86,7 +86,7 @@
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
:src="sfw ? `/img/${photo.sfw.thumbnail}` : `/media/${photo.thumbnail}`"
|
: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}`"
|
:alt="`Photo ${photo.index + 1}`"
|
||||||
loading="lazy"
|
loading="lazy"
|
||||||
class="item"
|
class="item"
|
||||||
|
|
|
@ -30,7 +30,7 @@ exports.up = knex => Promise.resolve()
|
||||||
|
|
||||||
table.text('hash');
|
table.text('hash');
|
||||||
|
|
||||||
table.integer('size', 12);
|
table.bigInteger('size', 12);
|
||||||
table.integer('quality', 6);
|
table.integer('quality', 6);
|
||||||
table.integer('width', 6);
|
table.integer('width', 6);
|
||||||
table.integer('height', 6);
|
table.integer('height', 6);
|
||||||
|
|
After Width: | Height: | Size: 2.6 MiB |
After Width: | Height: | Size: 6.2 KiB |
After Width: | Height: | Size: 2.7 MiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 1007 KiB |
After Width: | Height: | Size: 6.3 KiB |
After Width: | Height: | Size: 543 KiB |
After Width: | Height: | Size: 30 KiB |
|
@ -801,15 +801,16 @@ const tagPhotos = [
|
||||||
['fake-boobs', 14, 'Rikki Six for Dream Dolls'],
|
['fake-boobs', 14, 'Rikki Six for Dream Dolls'],
|
||||||
['fake-boobs', 2, 'Gia Milana in "Hot Anal Latina" for HardX'],
|
['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', 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', 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', 9, 'Putri Cinta for Watch 4 Beauty'],
|
||||||
['fake-boobs', 3, 'Ashly Anderson for Passion HD'],
|
['fake-boobs', 3, 'Ashly Anderson for Passion HD'],
|
||||||
['fake-boobs', 22, 'Sakura Sena'],
|
['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', 23, 'Lulu Sex Bomb in "Tropical Touch"'],
|
||||||
['fake-boobs', 21, 'Emelie Ekström'],
|
['fake-boobs', 21, 'Emelie Ekström'],
|
||||||
['fake-boobs', 10, 'Tia Cyrus in "Titty-Fucked Yoga Goddess" for Latina Sex Tapes'],
|
['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', 20, 'Chloe Lamour for DDF Busty'],
|
||||||
['fake-boobs', 11, 'Jessa Rhodes and Cali Carter in "Busty Anal Workout" for LesbianX'],
|
['fake-boobs', 11, 'Jessa Rhodes and Cali Carter in "Busty Anal Workout" for LesbianX'],
|
||||||
['fake-boobs', 13, 'Kitana Lure for Asshole Fever'],
|
['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', 1, 'Jynx Maze in "Big Anal Asses 2" for HardX'],
|
||||||
['latina', 0, 'Vienna Black for Spizoo'],
|
['latina', 0, 'Vienna Black for Spizoo'],
|
||||||
['maid', 1, 'Alessandra Jane for Brazzers'],
|
['maid', 1, 'Alessandra Jane for Brazzers'],
|
||||||
|
['milf', 2, 'Shalina Devine for Anal Mom'],
|
||||||
// ['milf', 0, 'Olivia Austin in "Dredd 3" for Jules Jordan'],
|
// ['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'],
|
['mff', 0, 'Madison Ivy, Adriana Chechik and Keiran Lee in "Day With A Pornstar" for Brazzers'],
|
||||||
['mfm', 7, 'Rose Valerie for Euro Sex Parties'],
|
['mfm', 7, 'Rose Valerie for Euro Sex Parties'],
|
||||||
|
|
|
@ -657,9 +657,9 @@ async function storeMedias(baseMedias, options) {
|
||||||
const newMediaWithEntries = savedMedias.filter(Boolean).map((media, index) => curateMediaEntry(media, index));
|
const newMediaWithEntries = savedMedias.filter(Boolean).map((media, index) => curateMediaEntry(media, index));
|
||||||
const newMediaEntries = newMediaWithEntries.filter(media => media.newEntry).map(media => media.entry);
|
const newMediaEntries = newMediaWithEntries.filter(media => media.newEntry).map(media => media.entry);
|
||||||
|
|
||||||
console.log('insert error', newMediaEntries.filter(mediaEntry => Object.values(mediaEntry).some(value => Number(value) && Number(value) > 1000000)));
|
// 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, false);
|
await bulkInsert('media', newMediaEntries);
|
||||||
|
|
||||||
return [...newMediaWithEntries, ...existingHashMedias];
|
return [...newMediaWithEntries, ...existingHashMedias];
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,13 +11,13 @@ function scrapeAll(scenes, entity) {
|
||||||
release.url = query.url('.videoPic a');
|
release.url = query.url('.videoPic a');
|
||||||
release.entryId = query.q('.videoPic img', 'id').match(/set-target-(\d+)/)[1];
|
release.entryId = query.q('.videoPic img', 'id').match(/set-target-(\d+)/)[1];
|
||||||
|
|
||||||
release.title = query.q('h3 a', true);
|
release.title = query.cnt('h3 a');
|
||||||
release.description = query.q('.runtime + p', true);
|
release.description = query.cnt('.runtime + p');
|
||||||
|
|
||||||
release.date = query.date('.date', 'MM-DD-YYYY');
|
release.date = query.date('.date', 'MM-DD-YYYY');
|
||||||
release.duration = query.dur('.runtime');
|
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.poster = query.img('.videoPic img');
|
||||||
release.entity = entity;
|
release.entity = entity;
|
||||||
|
@ -31,10 +31,10 @@ function scrapeScene({ query }) {
|
||||||
|
|
||||||
release.entryId = query.q('.trailerLeft img', 'id').match(/set-target-(\d+)/)[1];
|
release.entryId = query.q('.trailerLeft img', 'id').match(/set-target-(\d+)/)[1];
|
||||||
|
|
||||||
release.title = query.q('.infoHeader h1', true);
|
release.title = query.cnt('.infoHeader h1');
|
||||||
release.description = query.q('.infoBox p', true);
|
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.poster = query.img('.posterimg');
|
||||||
release.photos = query.imgs('.trailerSnaps img').slice(1); // first photo is poster in lower quality
|
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) => ({
|
const bio = query.all('.moreInfo li').reduce((acc, el) => ({
|
||||||
...acc,
|
...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.dateOfBirth = qu.extractDate(bio.date_of_birth, ['MMMM D, YYYY', 'DD-MMM-YY']);
|
||||||
|
|
||||||
profile.birthPlace = bio.birth_location;
|
profile.birthPlace = bio.birth_location;
|
||||||
|
|