diff --git a/assets/components/filters/channel-filter.vue b/assets/components/filters/channel-filter.vue index 5ab3d10d..49c91c88 100644 --- a/assets/components/filters/channel-filter.vue +++ b/assets/components/filters/channel-filter.vue @@ -26,10 +26,19 @@ v-for="channel in channelsPerNetwork" :key="`channel-${channel.id}`" class="filter-item" - :class="{ [channel.type]: true, independent: channel.independent }" + :class="{ + [channel.type]: true, + independent: channel.independent, + selected: selectedChannels.includes(channel.slug), + }" > function getNewRange(channel) { - if (this.selectedChannels.includes(channel)) { - return { channels: this.selectedChannels.filter(selectedTag => selectedTag !== channel).join(',') || undefined }; + console.log(channel); + + if (this.selectedChannels.includes(channel.slug)) { + return { + channels: this.selectedChannels.filter(selectedTag => selectedTag !== channel.slug).join(',') || undefined, + networks: undefined, + }; } - return { channels: this.selectedChannels.concat(channel).join(',') }; + return { + channels: this.selectedChannels.concat(channel.slug).join(','), + networks: undefined, + }; } function selectedChannels() { diff --git a/assets/components/filters/tag-filter.vue b/assets/components/filters/tag-filter.vue index ae3a8b98..7f3495e1 100644 --- a/assets/components/filters/tag-filter.vue +++ b/assets/components/filters/tag-filter.vue @@ -104,8 +104,3 @@ export default { }, }; - - diff --git a/public/img/tags/facefucking/4.jpeg b/public/img/tags/facefucking/4.jpeg new file mode 100644 index 00000000..e108426e Binary files /dev/null and b/public/img/tags/facefucking/4.jpeg differ diff --git a/public/img/tags/facefucking/lazy/4.jpeg b/public/img/tags/facefucking/lazy/4.jpeg new file mode 100644 index 00000000..90942141 Binary files /dev/null and b/public/img/tags/facefucking/lazy/4.jpeg differ diff --git a/public/img/tags/facefucking/thumbs/4.jpeg b/public/img/tags/facefucking/thumbs/4.jpeg new file mode 100644 index 00000000..cabdfaff Binary files /dev/null and b/public/img/tags/facefucking/thumbs/4.jpeg differ diff --git a/seeds/00_tags.js b/seeds/00_tags.js index fae9ee69..2f2c9de7 100644 --- a/seeds/00_tags.js +++ b/seeds/00_tags.js @@ -1259,6 +1259,10 @@ const aliases = [ name: 'cunnilingus', for: 'pussy-eating', }, + { + name: 'cunilingus', + for: 'pussy-eating', + }, { name: 'pussy licking', for: 'pussy-eating', diff --git a/seeds/02_sites.js b/seeds/02_sites.js index ce1fbfd1..99d0f4d1 100644 --- a/seeds/02_sites.js +++ b/seeds/02_sites.js @@ -5014,6 +5014,7 @@ const sites = [ url: 'http://www.analoverdose.com', description: 'Before proceeding, use caution: the stunning pornstars of Anal Overdose are so fiery that they cause heavy breathing, throbbing cocks and volcanic loads of cum. If you think you can handle the heat of smoking tits, sweltering pussy and red hot ass.', parent: 'pervcity', + tags: ['anal'], parameters: { siteId: 2, tourId: 3, @@ -5036,6 +5037,7 @@ const sites = [ description: "Oral Overdose is the only site you need to live out every saliva soaked blowjob of your dreams in HD POV! We've got the most stunning cocksuckers in the world going to town on big dick. These babes not only love cock, they can't get enough of it! In fact, there is no prick too huge for our hungry girls' throats. You'll find gorgeous, big tits pornstars exercising their gag reflex in intense balls deep facefuck scenes. We also feature fresh, young newbies taking on the gagging deepthroat challenge.", url: 'http://www.oraloverdose.com', parent: 'pervcity', + tags: ['blowjob'], parameters: { siteId: 4, tourId: 4, @@ -5047,6 +5049,7 @@ const sites = [ description: "You've just won the golden ticket to the best Chocolate BJs on the planet! We've sought far and wide to bring you the most beautiful black and ethnic pornstars. And they're in our members' area now! They can't wait to suck your white lollipop and lick the thick cream shooting from your big dick. Of course, no matter how sweet the booty or juicy the big tits, these brown foxes aren't all sugar and spice. In fact, when it comes to giving head, these big ass ebony babes know what they want: huge white cocks filling their throats!", url: 'http://www.chocolatebjs.com', parent: 'pervcity', + tags: ['blowjob', 'ebony'], parameters: { siteId: 5, tourId: 6, @@ -5058,6 +5061,7 @@ const sites = [ description: "You don't need to travel the globe in search of the anal wonders of the world, because you get your own private tour right here on Up Her Asshole! Our stunning pornstars and rookie starlets welcome all ass fetish and anal sex fans, with their twerking bubble butts and winking assholes. However, big booty worship is just a slice of the fun. Combined with juicy tits (big and small, wet pussy (hairy and bald, these girls deliver a spectacular sensory experience in HD POV. Not only are you in danger of busting a nut before the going gets good, but also when the good turns remarkable with rimming, fingering and butt toys!", url: 'http://upherasshole.com', parent: 'pervcity', + tags: ['anal'], parameters: { siteId: 6, tourId: 9, diff --git a/seeds/04_media.js b/seeds/04_media.js index 80498dd5..98e12ce3 100644 --- a/seeds/04_media.js +++ b/seeds/04_media.js @@ -617,7 +617,7 @@ const tagPosters = [ ['dvp', 'poster', 'Riley Reid in "Pizza That Ass" for Reid My Lips'], ['dv-tp', 'poster', 'Juelz Ventura in "Gangbanged 5" for Elegant Angel'], ['ebony', 2, 'Nia Nacci for Sweetheart Video'], - ['facefucking', 1, 'Paige Owens in "Dark Meat 12" for Evil Angel'], + ['facefucking', 4, 'Brooklyn Gray in "Throats Fucks 6" for Evil Angel'], ['facial', 0, 'Brooklyn Gray in "All About Ass 4" for Evil Angel'], ['fake-boobs', 2, 'Gia Milana in "Hot Anal Latina" for HardX'], ['family', 0, 'Teanna Trump in "A Family Appear: Part One" for Brazzers'], @@ -707,6 +707,7 @@ const tagPhotos = [ ['ebony', 1, 'Ana Foxxx in "DP Me 4" for HardX'], ['facial', 2, 'Ashly Anderson for Hookup Hotshot'], ['facial', 'poster', 'Jynx Maze'], + ['facefucking', 1, 'Paige Owens in "Dark Meat 12" for Evil Angel'], ['facefucking', 2, 'Jynx Maze for Throated'], ['facefucking', 3, 'Adriana Chechik in "Performing Magic Butt Tricks With Jules Jordan. What Will Disappear In Her Ass?" for Jules Jordan'], ['fake-boobs', 9, 'Putri Cinta for StasyQ'], diff --git a/src/logger.js b/src/logger.js index 6621e08b..080daf20 100644 --- a/src/logger.js +++ b/src/logger.js @@ -9,7 +9,7 @@ require('winston-daily-rotate-file'); const args = require('./argv'); function logger(filepath) { - const root = filepath.match(/src\/|dist\//); + const root = filepath.match(/src[/\\]|dist[/\\]/); const filename = filepath.slice(root.index + root[0].length) .replace(path.extname(filepath), ''); @@ -29,7 +29,7 @@ function logger(filepath) { }), new winston.transports.DailyRotateFile({ datePattern: 'YYYY-MM-DD', - filename: 'log/%DATE%.log', + filename: path.join('log', '%DATE%.log'), level: 'silly', }), ], diff --git a/src/scrapers/gamma.js b/src/scrapers/gamma.js index 0d6059da..014a5cd0 100644 --- a/src/scrapers/gamma.js +++ b/src/scrapers/gamma.js @@ -310,7 +310,7 @@ async function fetchActorReleases(profileUrl, getActorReleasesUrl, page = 1, acc if (!res.ok) return []; const releases = scrapeAll(res.item.html, null, origin); - const nextPage = res.item.qu.url('.Gamma_Paginator a.next'); + const nextPage = res.item.query.url('.Gamma_Paginator a.next'); if (nextPage) { return fetchActorReleases(profileUrl, getActorReleasesUrl, page + 1, accReleases.concat(releases)); @@ -434,8 +434,6 @@ async function fetchApiLatest(site, page = 1, preData, include, upcoming = false encodeJSON: true, }); - console.log(page, res.statusCode, res.body.results); - if (res.statusCode === 200 && res.body.results?.[0]?.hits) { return scrapeApiReleases(res.body.results[0].hits, site); } @@ -592,7 +590,7 @@ async function fetchProfile({ name: actorName }, context, altSearchUrl, getActor return null; } -async function fetchApiProfile(actorName, context, include) { +async function fetchApiProfile({ name: actorName }, context, include) { const siteSlug = context.entity.slug || context.site?.slug || context.network?.slug; const actorSlug = encodeURI(actorName); @@ -600,7 +598,7 @@ async function fetchApiProfile(actorName, context, include) { const { apiUrl } = await fetchApiCredentials(referer); - const res = await bhttp.post(apiUrl, { + const res = await http.post(apiUrl, { requests: [ { indexName: 'all_actors', @@ -608,13 +606,12 @@ async function fetchApiProfile(actorName, context, include) { }, ], }, { - headers: { - Referer: referer, - }, + Referer: referer, + }, { encodeJSON: true, }); - if (res.statusCode === 200 && res.body.results[0].hits.length > 0) { + if (res.status === 200 && res.body.results[0].hits.length > 0) { const actorData = res.body.results[0].hits.find(actor => slugify(actor.name) === slugify(actorName)); if (actorData) { diff --git a/src/utils/argv-include.js b/src/utils/argv-include.js index 72fd0d3e..0ad65b3f 100644 --- a/src/utils/argv-include.js +++ b/src/utils/argv-include.js @@ -7,8 +7,8 @@ function include(argv) { photos: argv.media && argv.photos, poster: argv.media && argv.posters, posters: argv.media && argv.posters, - releases: argv.withScenes, - scenes: argv.withScenes, + releases: argv.actorsScenes, + scenes: argv.actorsScenes, teaser: argv.media && argv.videos && argv.teasers, teasers: argv.media && argv.videos && argv.teasers, trailer: argv.media && argv.videos && argv.trailers, diff --git a/src/utils/qu.js b/src/utils/qu.js index 7094a6f7..dab80730 100644 --- a/src/utils/qu.js +++ b/src/utils/qu.js @@ -40,6 +40,10 @@ function formatDate(dateValue, format, inputFormat) { } function prefixUrl(urlValue, origin, protocol = 'https') { + if (!urlValue) { + return null; + } + if (/^http/.test(urlValue)) { return urlValue; } @@ -52,7 +56,11 @@ function prefixUrl(urlValue, origin, protocol = 'https') { return `${origin}${urlValue}`; } - return `${origin}/${urlValue}`; + if (origin) { + return `${origin}/${urlValue}`; + } + + return urlValue; } function q(context, selector, attrArg, applyTrim = true) { @@ -217,7 +225,7 @@ function images(context, selector = 'img', attr, { origin, protocol = 'https' } function url(context, selector = 'a', attr = 'href', { origin, protocol = 'https' } = {}) { const urlEl = q(context, selector, attr); - return attr ? prefixUrl(urlEl, origin, protocol) : urlEl; + return prefixUrl(urlEl, origin, protocol); } function urls(context, selector = 'a', attr = 'href', { origin, protocol = 'https' } = {}) {