diff --git a/assets/components/networks/network.vue b/assets/components/networks/network.vue index 63921375..ad5e44f5 100644 --- a/assets/components/networks/network.vue +++ b/assets/components/networks/network.vue @@ -68,8 +68,16 @@ import Sites from '../sites/sites.vue'; async function fetchNetwork() { this.network = await this.$store.dispatch('fetchNetworks', this.$route.params.networkSlug); + if (this.network.studios) { + this.studios = this.network.studios.map(studio => ({ + ...studio, + network: this.network, + })); + } + this.sites = this.network.sites .filter(site => !site.independent) + .concat(this.studios) .sort(({ name: nameA }, { name: nameB }) => nameA.localeCompare(nameB)); this.releases = this.network.sites.map(site => site.releases).flat(); @@ -89,7 +97,8 @@ export default { data() { return { network: null, - sites: null, + sites: [], + studios: [], releases: [], pageTitle: null, expanded: false, @@ -158,12 +167,13 @@ export default { } .header { - background: $profile; width: 100%; - height: 4rem; + height: 3rem; display: none; + flex-shrink: 0; justify-content: center; border-bottom: solid 1px $shadow-hint; + background: $profile; } .sites.compact { diff --git a/assets/components/networks/networks.vue b/assets/components/networks/networks.vue index 508dcb6c..29724589 100644 --- a/assets/components/networks/networks.vue +++ b/assets/components/networks/networks.vue @@ -29,10 +29,18 @@ export default { diff --git a/assets/components/releases/release.vue b/assets/components/releases/release.vue index 4ec6d64b..5d3c5906 100644 --- a/assets/components/releases/release.vue +++ b/assets/components/releases/release.vue @@ -80,7 +80,21 @@ presents - + + + + + {{ release.network.name }} + {{ release.studio.name }} + {{ release.site.name }} curateRelease(release)); if (site.network || network) curatedSite.network = site.network || network; + if (site.parameters) { + curatedSite.independent = !!JSON.parse(site.parameters).independent; + } + return curatedSite; } @@ -52,6 +56,14 @@ function curateNetwork(network) { curatedNetwork.sites = network.sites.map(site => curateSite(site, curatedNetwork)); } + if (network.studios) { + curatedNetwork.studios = network.studios; + } + + if (network.parameters) { + curatedNetwork.parameters = JSON.parse(network.parameters); + } + return curatedNetwork; } diff --git a/assets/js/fragments.js b/assets/js/fragments.js index 013df6fe..27006318 100644 --- a/assets/js/fragments.js +++ b/assets/js/fragments.js @@ -113,6 +113,12 @@ const releasesFragment = ` ${releaseTagsFragment} ${releasePosterFragment} ${siteFragment} + studio { + id + name + slug + url + } } `; diff --git a/assets/js/networks/actions.js b/assets/js/networks/actions.js index 675aaab6..e1ddcbef 100644 --- a/assets/js/networks/actions.js +++ b/assets/js/networks/actions.js @@ -22,6 +22,7 @@ function initNetworksActions(store, _router) { slug url ${releasesFragment} + parameters network { id name @@ -29,6 +30,12 @@ function initNetworksActions(store, _router) { url } } + studios { + id + name + slug + url + } } } `, { diff --git a/config/default.js b/config/default.js index 38e138db..258cf281 100644 --- a/config/default.js +++ b/config/default.js @@ -51,7 +51,7 @@ module.exports = { 'vixen', 'xempire', ], - fetchAfter: [3, 'months'], + fetchAfter: [1, 'week'], columns: [ { value: 'date', diff --git a/package-lock.json b/package-lock.json index 207b3a8b..4136d3e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2626,6 +2626,14 @@ "toidentifier": "1.0.0" } }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, "mime-db": { "version": "1.40.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", @@ -4648,6 +4656,17 @@ "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } } }, "extglob": { @@ -6217,9 +6236,9 @@ } }, "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.0.tgz", + "integrity": "sha512-NnEhI9hIEKHOzJ4f697DMz9IQEXr/MMJ5w64vN2/4Ai+wRnvV7SBrL0KLoRlwaKVghOc7LQ5YkPLuX146b6Ydw==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -7746,6 +7765,14 @@ "ms": "^2.1.1" } }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -9236,6 +9263,14 @@ "toidentifier": "1.0.0" } }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, "setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", @@ -12039,6 +12074,16 @@ "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "requires": { "iconv-lite": "0.4.24" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } } }, "whatwg-mimetype": { diff --git a/package.json b/package.json index 3484e5fc..22023306 100644 --- a/package.json +++ b/package.json @@ -85,6 +85,7 @@ "face-api.js": "^0.21.0", "fs-extra": "^7.0.1", "graphile-utils": "^4.5.6", + "iconv-lite": "^0.5.0", "jsdom": "^15.2.1", "knex": "^0.16.5", "knex-migrate": "^1.7.4", diff --git a/public/css/style.css b/public/css/style.css index a2fcb116..54c92f24 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -149,9 +149,17 @@ position: absolute; font-size: 0; } +.details .favicon[data-v-3abcf101] { + height: 1rem; + margin: 0 .25rem 0 0; +} .site[data-v-3abcf101], .date[data-v-3abcf101] { color: #fff; + display: -webkit-box; + display: flex; + -webkit-box-align: center; + align-items: center; background: rgba(0, 0, 0, 0.5); position: relative; font-size: .8rem; @@ -684,13 +692,14 @@ filter: drop-shadow(1px 0 0 rgba(255, 255, 255, 0.2)) drop-shadow(-1px 0 0 rgba(255, 255, 255, 0.2)) drop-shadow(0 1px 0 rgba(255, 255, 255, 0.2)) drop-shadow(0 -1px 0 rgba(255, 255, 255, 0.2)); } .header[data-v-e2e12602] { - background: #222; width: 100%; - height: 4rem; + height: 3rem; display: none; + flex-shrink: 0; -webkit-box-pack: center; justify-content: center; border-bottom: solid 1px rgba(0, 0, 0, 0.1); + background: #222; } .sites.compact[data-v-e2e12602] { display: none; @@ -786,12 +795,18 @@ margin: 0; } +/* $primary: #ff886c; */ .networks[data-v-4709d404] { display: grid; grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr)); grid-gap: 1rem; padding: 1rem; } +@media (max-width: 720px) { +.networks[data-v-4709d404] { + grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr)); +} +} /* $primary: #ff886c; */ .photos[data-v-0a0430c7] { diff --git a/public/img/logos/bang/bang.png b/public/img/logos/bang/bang.png new file mode 100644 index 00000000..122642e3 Binary files /dev/null and b/public/img/logos/bang/bang.png differ diff --git a/public/img/logos/bang/bangcasting.png b/public/img/logos/bang/bangcasting.png new file mode 100644 index 00000000..d20f926f Binary files /dev/null and b/public/img/logos/bang/bangcasting.png differ diff --git a/public/img/logos/bang/bangconfessions.png b/public/img/logos/bang/bangconfessions.png new file mode 100644 index 00000000..495120bd Binary files /dev/null and b/public/img/logos/bang/bangconfessions.png differ diff --git a/public/img/logos/bang/bangfcknews.png b/public/img/logos/bang/bangfcknews.png new file mode 100644 index 00000000..9256f16f Binary files /dev/null and b/public/img/logos/bang/bangfcknews.png differ diff --git a/public/img/logos/bang/bangglamkore.png b/public/img/logos/bang/bangglamkore.png new file mode 100644 index 00000000..a1ed5c7f Binary files /dev/null and b/public/img/logos/bang/bangglamkore.png differ diff --git a/public/img/logos/bang/bangjapan.png b/public/img/logos/bang/bangjapan.png new file mode 100644 index 00000000..598a96cc Binary files /dev/null and b/public/img/logos/bang/bangjapan.png differ diff --git a/public/img/logos/bang/bangrammed.png b/public/img/logos/bang/bangrammed.png new file mode 100644 index 00000000..c10f6d51 Binary files /dev/null and b/public/img/logos/bang/bangrammed.png differ diff --git a/public/img/logos/bang/bangrealmilfs.png b/public/img/logos/bang/bangrealmilfs.png new file mode 100644 index 00000000..d0e9917b Binary files /dev/null and b/public/img/logos/bang/bangrealmilfs.png differ diff --git a/public/img/logos/bang/bangrealteens.png b/public/img/logos/bang/bangrealteens.png new file mode 100644 index 00000000..7d1ffa38 Binary files /dev/null and b/public/img/logos/bang/bangrealteens.png differ diff --git a/public/img/logos/bang/bangroadsidexxx.png b/public/img/logos/bang/bangroadsidexxx.png new file mode 100644 index 00000000..e2278e5b Binary files /dev/null and b/public/img/logos/bang/bangroadsidexxx.png differ diff --git a/public/img/logos/bang/bangscrewthecops.png b/public/img/logos/bang/bangscrewthecops.png new file mode 100644 index 00000000..e380ea31 Binary files /dev/null and b/public/img/logos/bang/bangscrewthecops.png differ diff --git a/public/img/logos/bang/bangsurprise.png b/public/img/logos/bang/bangsurprise.png new file mode 100644 index 00000000..cbdd345c Binary files /dev/null and b/public/img/logos/bang/bangsurprise.png differ diff --git a/public/img/logos/bang/bangtrickery.png b/public/img/logos/bang/bangtrickery.png new file mode 100644 index 00000000..2c4a5f7d Binary files /dev/null and b/public/img/logos/bang/bangtrickery.png differ diff --git a/public/img/logos/bang/favicon.png b/public/img/logos/bang/favicon.png new file mode 100644 index 00000000..ab91361b Binary files /dev/null and b/public/img/logos/bang/favicon.png differ diff --git a/public/img/logos/bang/network.png b/public/img/logos/bang/network.png new file mode 100644 index 00000000..acb808b8 Binary files /dev/null and b/public/img/logos/bang/network.png differ diff --git a/public/img/logos/bang/prettyandraw.png b/public/img/logos/bang/prettyandraw.png new file mode 100644 index 00000000..b9850a1f Binary files /dev/null and b/public/img/logos/bang/prettyandraw.png differ diff --git a/public/img/logos/bang/yngrcom.png b/public/img/logos/bang/yngrcom.png new file mode 100644 index 00000000..47d6ea29 Binary files /dev/null and b/public/img/logos/bang/yngrcom.png differ diff --git a/public/img/logos/brazzers/favicon.png b/public/img/logos/brazzers/favicon.png new file mode 100644 index 00000000..28ccaceb Binary files /dev/null and b/public/img/logos/brazzers/favicon.png differ diff --git a/public/img/logos/kink/favicon.png b/public/img/logos/kink/favicon.png new file mode 100644 index 00000000..65d5d8f8 Binary files /dev/null and b/public/img/logos/kink/favicon.png differ diff --git a/public/img/logos/legalporno/favicon.png b/public/img/logos/legalporno/favicon.png new file mode 100644 index 00000000..14b597f1 Binary files /dev/null and b/public/img/logos/legalporno/favicon.png differ diff --git a/public/img/logos/pervcity/network.png b/public/img/logos/pervcity/network.png index 6b6b2984..d26e9195 100644 Binary files a/public/img/logos/pervcity/network.png and b/public/img/logos/pervcity/network.png differ diff --git a/public/img/logos/realitykings/40inchplus.png b/public/img/logos/realitykings/40inchplus.png new file mode 100644 index 00000000..7a1d123f Binary files /dev/null and b/public/img/logos/realitykings/40inchplus.png differ diff --git a/public/img/logos/realitykings/8thstreetlatinas.png b/public/img/logos/realitykings/8thstreetlatinas.png index 7669b258..007f5f4d 100644 Binary files a/public/img/logos/realitykings/8thstreetlatinas.png and b/public/img/logos/realitykings/8thstreetlatinas.png differ diff --git a/public/img/logos/realitykings/badtowtruck.png b/public/img/logos/realitykings/badtowtruck.png index 2080aa75..d2034b88 100644 Binary files a/public/img/logos/realitykings/badtowtruck.png and b/public/img/logos/realitykings/badtowtruck.png differ diff --git a/public/img/logos/realitykings/bignaturals.png b/public/img/logos/realitykings/bignaturals.png index 13fe7384..044dac65 100644 Binary files a/public/img/logos/realitykings/bignaturals.png and b/public/img/logos/realitykings/bignaturals.png differ diff --git a/public/img/logos/realitykings/bigtitsboss.png b/public/img/logos/realitykings/bigtitsboss.png index 10ce84b1..47baa03f 100644 Binary files a/public/img/logos/realitykings/bigtitsboss.png and b/public/img/logos/realitykings/bigtitsboss.png differ diff --git a/public/img/logos/realitykings/bikinicrashers.png b/public/img/logos/realitykings/bikinicrashers.png index d1c4ff5e..0da72a8d 100644 Binary files a/public/img/logos/realitykings/bikinicrashers.png and b/public/img/logos/realitykings/bikinicrashers.png differ diff --git a/public/img/logos/realitykings/blackgfs.png b/public/img/logos/realitykings/blackgfs.png index 0e399ad1..59d4f849 100644 Binary files a/public/img/logos/realitykings/blackgfs.png and b/public/img/logos/realitykings/blackgfs.png differ diff --git a/public/img/logos/realitykings/captainstabbin.png b/public/img/logos/realitykings/captainstabbin.png index 423b6a57..c0896915 100644 Binary files a/public/img/logos/realitykings/captainstabbin.png and b/public/img/logos/realitykings/captainstabbin.png differ diff --git a/public/img/logos/realitykings/cfnmsecret.png b/public/img/logos/realitykings/cfnmsecret.png index 0988a7c8..90db0ded 100644 Binary files a/public/img/logos/realitykings/cfnmsecret.png and b/public/img/logos/realitykings/cfnmsecret.png differ diff --git a/public/img/logos/realitykings/crazyasiangfs.png b/public/img/logos/realitykings/crazyasiangfs.png index 5c180cbb..b3230822 100644 Binary files a/public/img/logos/realitykings/crazyasiangfs.png and b/public/img/logos/realitykings/crazyasiangfs.png differ diff --git a/public/img/logos/realitykings/crazycollegegfs.png b/public/img/logos/realitykings/crazycollegegfs.png index 540cb410..54d3c061 100644 Binary files a/public/img/logos/realitykings/crazycollegegfs.png and b/public/img/logos/realitykings/crazycollegegfs.png differ diff --git a/public/img/logos/realitykings/cumfiesta.png b/public/img/logos/realitykings/cumfiesta.png index 284a5aa3..e56e1f7a 100644 Binary files a/public/img/logos/realitykings/cumfiesta.png and b/public/img/logos/realitykings/cumfiesta.png differ diff --git a/public/img/logos/realitykings/cumgirls.png b/public/img/logos/realitykings/cumgirls.png new file mode 100644 index 00000000..ddf92372 Binary files /dev/null and b/public/img/logos/realitykings/cumgirls.png differ diff --git a/public/img/logos/realitykings/dangerousdongs.png b/public/img/logos/realitykings/dangerousdongs.png new file mode 100644 index 00000000..58835861 Binary files /dev/null and b/public/img/logos/realitykings/dangerousdongs.png differ diff --git a/public/img/logos/realitykings/daredorm.png b/public/img/logos/realitykings/daredorm.png index 94124205..7af49461 100644 Binary files a/public/img/logos/realitykings/daredorm.png and b/public/img/logos/realitykings/daredorm.png differ diff --git a/public/img/logos/realitykings/eurosexparties.png b/public/img/logos/realitykings/eurosexparties.png index 03ef8200..02dc1aa4 100644 Binary files a/public/img/logos/realitykings/eurosexparties.png and b/public/img/logos/realitykings/eurosexparties.png differ diff --git a/public/img/logos/realitykings/extremeasses.png b/public/img/logos/realitykings/extremeasses.png new file mode 100644 index 00000000..986519b1 Binary files /dev/null and b/public/img/logos/realitykings/extremeasses.png differ diff --git a/public/img/logos/realitykings/firsttimeauditions.png b/public/img/logos/realitykings/firsttimeauditions.png index 304b7cb8..3fa4d26e 100644 Binary files a/public/img/logos/realitykings/firsttimeauditions.png and b/public/img/logos/realitykings/firsttimeauditions.png differ diff --git a/public/img/logos/realitykings/flowertucci.png b/public/img/logos/realitykings/flowertucci.png new file mode 100644 index 00000000..d6284ac1 Binary files /dev/null and b/public/img/logos/realitykings/flowertucci.png differ diff --git a/public/img/logos/realitykings/gfrevenge.png b/public/img/logos/realitykings/gfrevenge.png index 816e0e59..f71bc46f 100644 Binary files a/public/img/logos/realitykings/gfrevenge.png and b/public/img/logos/realitykings/gfrevenge.png differ diff --git a/public/img/logos/realitykings/happytugs.png b/public/img/logos/realitykings/happytugs.png index bf2d5d0b..2ca4192d 100644 Binary files a/public/img/logos/realitykings/happytugs.png and b/public/img/logos/realitykings/happytugs.png differ diff --git a/public/img/logos/realitykings/hdlove.png b/public/img/logos/realitykings/hdlove.png index 8e73324b..d59c6220 100644 Binary files a/public/img/logos/realitykings/hdlove.png and b/public/img/logos/realitykings/hdlove.png differ diff --git a/public/img/logos/realitykings/hornybirds.png b/public/img/logos/realitykings/hornybirds.png new file mode 100644 index 00000000..fad858f0 Binary files /dev/null and b/public/img/logos/realitykings/hornybirds.png differ diff --git a/public/img/logos/realitykings/hotbush.png b/public/img/logos/realitykings/hotbush.png index 040e4858..9ebf7128 100644 Binary files a/public/img/logos/realitykings/hotbush.png and b/public/img/logos/realitykings/hotbush.png differ diff --git a/public/img/logos/realitykings/inthevip.png b/public/img/logos/realitykings/inthevip.png new file mode 100644 index 00000000..8562bc1f Binary files /dev/null and b/public/img/logos/realitykings/inthevip.png differ diff --git a/public/img/logos/realitykings/lilhumpers.png b/public/img/logos/realitykings/lilhumpers.png new file mode 100644 index 00000000..d61af75b Binary files /dev/null and b/public/img/logos/realitykings/lilhumpers.png differ diff --git a/public/img/logos/realitykings/lookathernow.png b/public/img/logos/realitykings/lookathernow.png index ffca06b9..2630773d 100644 Binary files a/public/img/logos/realitykings/lookathernow.png and b/public/img/logos/realitykings/lookathernow.png differ diff --git a/public/img/logos/realitykings/mikeinbrazil.png b/public/img/logos/realitykings/mikeinbrazil.png new file mode 100644 index 00000000..2d1e18fb Binary files /dev/null and b/public/img/logos/realitykings/mikeinbrazil.png differ diff --git a/public/img/logos/realitykings/mikesapartment.png b/public/img/logos/realitykings/mikesapartment.png index 53c8a61e..8fc5a94a 100644 Binary files a/public/img/logos/realitykings/mikesapartment.png and b/public/img/logos/realitykings/mikesapartment.png differ diff --git a/public/img/logos/realitykings/milfhunter.png b/public/img/logos/realitykings/milfhunter.png index c9d68028..8475a161 100644 Binary files a/public/img/logos/realitykings/milfhunter.png and b/public/img/logos/realitykings/milfhunter.png differ diff --git a/public/img/logos/realitykings/momsbangteens.png b/public/img/logos/realitykings/momsbangteens.png index 3346465f..599b8540 100644 Binary files a/public/img/logos/realitykings/momsbangteens.png and b/public/img/logos/realitykings/momsbangteens.png differ diff --git a/public/img/logos/realitykings/momslickteens.png b/public/img/logos/realitykings/momslickteens.png new file mode 100644 index 00000000..6a173bbf Binary files /dev/null and b/public/img/logos/realitykings/momslickteens.png differ diff --git a/public/img/logos/realitykings/moneytalks.png b/public/img/logos/realitykings/moneytalks.png index ce52f26b..3c6598ee 100644 Binary files a/public/img/logos/realitykings/moneytalks.png and b/public/img/logos/realitykings/moneytalks.png differ diff --git a/public/img/logos/realitykings/monstercurves.png b/public/img/logos/realitykings/monstercurves.png index e51e953b..e5b44de7 100644 Binary files a/public/img/logos/realitykings/monstercurves.png and b/public/img/logos/realitykings/monstercurves.png differ diff --git a/public/img/logos/realitykings/network.png b/public/img/logos/realitykings/network.png index d82e0056..0a828056 100644 Binary files a/public/img/logos/realitykings/network.png and b/public/img/logos/realitykings/network.png differ diff --git a/public/img/logos/realitykings/nofaces.png b/public/img/logos/realitykings/nofaces.png new file mode 100644 index 00000000..d387d8ed Binary files /dev/null and b/public/img/logos/realitykings/nofaces.png differ diff --git a/public/img/logos/realitykings/pure18.png b/public/img/logos/realitykings/pure18.png index 0dee4341..9679ea9f 100644 Binary files a/public/img/logos/realitykings/pure18.png and b/public/img/logos/realitykings/pure18.png differ diff --git a/public/img/logos/realitykings/realorgasms.png b/public/img/logos/realitykings/realorgasms.png new file mode 100644 index 00000000..a8ee9c8f Binary files /dev/null and b/public/img/logos/realitykings/realorgasms.png differ diff --git a/public/img/logos/realitykings/recklessinmiami.png b/public/img/logos/realitykings/recklessinmiami.png index 8953683e..12f52fa5 100644 Binary files a/public/img/logos/realitykings/recklessinmiami.png and b/public/img/logos/realitykings/recklessinmiami.png differ diff --git a/public/img/logos/realitykings/rkprime.png b/public/img/logos/realitykings/rkprime.png index 6f01e1a1..0509f35e 100644 Binary files a/public/img/logos/realitykings/rkprime.png and b/public/img/logos/realitykings/rkprime.png differ diff --git a/public/img/logos/realitykings/roundandbrown.png b/public/img/logos/realitykings/roundandbrown.png index 9c49b821..96b4774d 100644 Binary files a/public/img/logos/realitykings/roundandbrown.png and b/public/img/logos/realitykings/roundandbrown.png differ diff --git a/public/img/logos/realitykings/sneakysex.png b/public/img/logos/realitykings/sneakysex.png index 960be999..de2a95f2 100644 Binary files a/public/img/logos/realitykings/sneakysex.png and b/public/img/logos/realitykings/sneakysex.png differ diff --git a/public/img/logos/realitykings/streetblowjobs.png b/public/img/logos/realitykings/streetblowjobs.png index 07a68257..900bd4d8 100644 Binary files a/public/img/logos/realitykings/streetblowjobs.png and b/public/img/logos/realitykings/streetblowjobs.png differ diff --git a/public/img/logos/realitykings/teenslovehugecocks.png b/public/img/logos/realitykings/teenslovehugecocks.png index fbf6c4b5..388f13be 100644 Binary files a/public/img/logos/realitykings/teenslovehugecocks.png and b/public/img/logos/realitykings/teenslovehugecocks.png differ diff --git a/public/img/logos/realitykings/topshelfpussy.png b/public/img/logos/realitykings/topshelfpussy.png new file mode 100644 index 00000000..5d3e04d1 Binary files /dev/null and b/public/img/logos/realitykings/topshelfpussy.png differ diff --git a/public/img/logos/realitykings/trannysurprise.png b/public/img/logos/realitykings/trannysurprise.png index 077ffe73..185e1bf9 100644 Binary files a/public/img/logos/realitykings/trannysurprise.png and b/public/img/logos/realitykings/trannysurprise.png differ diff --git a/public/img/logos/realitykings/vipcrew.png b/public/img/logos/realitykings/vipcrew.png new file mode 100644 index 00000000..52b07897 Binary files /dev/null and b/public/img/logos/realitykings/vipcrew.png differ diff --git a/public/img/logos/realitykings/welivetogether.png b/public/img/logos/realitykings/welivetogether.png index 65c64508..25fe2e6d 100644 Binary files a/public/img/logos/realitykings/welivetogether.png and b/public/img/logos/realitykings/welivetogether.png differ diff --git a/seeds/00_networks.js b/seeds/00_networks.js index f09bc3c2..97aebfbc 100644 --- a/seeds/00_networks.js +++ b/seeds/00_networks.js @@ -8,6 +8,11 @@ const networks = [ url: 'https://www.21sextury.com', description: 'Watch all the latest scenes and porn video updates on 21Sextury.com, the best European porn site with the hottest pornstars from all over the world! Watch porn videos from the large network here.', }, + { + slug: 'bang', + name: 'Bang!', + url: 'https://bang.com', + }, { slug: 'bangbros', name: 'Bang Bros', diff --git a/seeds/01_sites.js b/seeds/01_sites.js index 1302df53..2f556579 100644 --- a/seeds/01_sites.js +++ b/seeds/01_sites.js @@ -119,6 +119,15 @@ function getSites(networksMap) { name: 'Sweet Sophie Moone', network_id: networksMap['21sextury'], }, + // BANG + { + slug: 'bang', + network_id: networksMap.bang, + name: 'Bang!', + url: 'https://bang.com', + description: null, + parameters: JSON.stringify({ independent: true }), + }, // BANGBROS { slug: 'assparade', @@ -638,7 +647,7 @@ function getSites(networksMap) { }, { slug: 'milfslikeitbig', - name: 'Milfs Like it Big', + name: 'MILFs Like It Big', url: 'https://www.brazzers.com/sites/view/id/36/milfs-like-it-big', description: "When hubby's away milfy will play. These bored housewives want to get fucked and they want it now. They're experienced and know what they want. America's suburbs are full of these cum-de-sacs just waiting to get laid. Their round tits and thick asses are just begging for it. Cum inside, but don't park out front!", network_id: networksMap.brazzers, @@ -2279,6 +2288,14 @@ function getSites(networksMap) { slug: 'girlsofnaked', network_id: networksMap.realitykings, }, + { + name: 'Lil Humpers', + url: 'https://lilhumpers.com', + description: '', + parameters: JSON.stringify({ siteId: 310 }), + slug: 'lilhumpers', + network_id: networksMap.realitykings, + }, { name: 'Mike in Brazil', url: 'https://www.realitykings.com/scenes?site=24', diff --git a/seeds/02_studios.js b/seeds/02_studios.js index c421f12e..a9e8e62c 100644 --- a/seeds/02_studios.js +++ b/seeds/02_studios.js @@ -2,6 +2,91 @@ const upsert = require('../src/utils/upsert'); function getStudios(networksMap) { return [ + // Bang! + { + name: 'Trickery', + slug: 'bangtrickery', + url: 'https://www.bang.com/original/4800/bang-trickery', + network_id: networksMap.bang, + }, + { + name: 'Yngr', + slug: 'yngrcom', + url: 'https://www.bang.com/original/5010/bang-yngr', + network_id: networksMap.bang, + }, + { + name: 'Roadside XXX', + slug: 'bangroadsidexxx', + url: 'https://www.bang.com/original/4864/roadside-xxx', + network_id: networksMap.bang, + }, + { + name: 'Surprise', + slug: 'bangsurprise', + url: 'https://www.bang.com/original/5000/bang-surprise', + network_id: networksMap.bang, + }, + { + name: 'Real Teens', + slug: 'bangrealteens', + url: 'https://www.bang.com/original/3366/bang-real-teens', + network_id: networksMap.bang, + }, + { + name: 'FCK.news', + slug: 'bangfcknews', + url: 'https://www.bang.com/original/4998/bang-fckNews', + network_id: networksMap.bang, + }, + { + name: 'Pretty & Raw', + slug: 'prettyandraw', + url: 'https://www.bang.com/original/4792/bang-pretty-and-raw', + network_id: networksMap.bang, + }, + { + name: 'Japan', + slug: 'bangjapan', + url: 'https://www.bang.com/original/3079/bang-japan', + network_id: networksMap.bang, + }, + { + name: 'Rammed', + slug: 'bangrammed', + url: 'https://www.bang.com/original/4836/bang-rammed', + network_id: networksMap.bang, + }, + { + name: 'Glamkore', + slug: 'bangglamkore', + url: 'https://www.bang.com/original/4586/bang-glamkore', + network_id: networksMap.bang, + }, + { + name: 'Screw The Cops', + slug: 'bangscrewthecops', + url: 'https://www.bang.com/original/4710/bang-screw-cops', + network_id: networksMap.bang, + }, + { + name: 'Real MILFs', + slug: 'bangrealmilfs', + url: 'https://www.bang.com/original/4448/bang-real-milfs', + network_id: networksMap.bang, + }, + { + name: 'Confessions', + slug: 'bangconfessions', + url: 'https://www.bang.com/original/4308/bang-confessions', + network_id: networksMap.bang, + }, + { + name: 'Casting', + slug: 'bangcasting', + url: 'https://www.bang.com/original/3261/bang-casting', + network_id: networksMap.bang, + }, // LegalPorno { slug: 'gonzocom', diff --git a/seeds/04_media.js b/seeds/04_media.js index d6aa6964..9661cf32 100644 --- a/seeds/04_media.js +++ b/seeds/04_media.js @@ -291,6 +291,6 @@ exports.seed = knex => Promise.resolve() return Promise.all([ upsert('tags_posters', tagPosterEntries, 'tag_id', knex), - upsert('tags_photos', tagPhotoEntries, 'tag_id', knex), + upsert('tags_photos', tagPhotoEntries, ['tag_id', 'media_id'], knex), ]); }); diff --git a/seeds/05_countries.js b/seeds/05_countries.js index 30828120..def7c01c 100644 --- a/seeds/05_countries.js +++ b/seeds/05_countries.js @@ -1646,6 +1646,7 @@ const countries = [ }, { name: 'United Kingdom of Great Britain and Northern Ireland', + alias: 'United Kingdom', code: 826, alpha2: 'GB', alpha3: 'GBR', diff --git a/src/releases.js b/src/releases.js index 1c96f338..f19cc7df 100644 --- a/src/releases.js +++ b/src/releases.js @@ -180,6 +180,23 @@ async function attachChannelSite(release) { }; } +async function attachStudio(release) { + if (!release.studio) { + return release; + } + + const studio = await knex('studios') + .where('name', release.studio) + .orWhere('slug', release.studio) + .orWhere('url', release.studio) + .first(); + + return { + ...release, + studio, + }; +} + async function curateReleaseEntry(release) { const curatedRelease = { site_id: release.site.id, @@ -295,27 +312,31 @@ async function storeReleaseAssets(release, releaseId) { await createMediaDirectory('releases', subpath); try { - await Promise.all([ - storePhotos(release.photos, { - targetId: releaseId, - subpath, - primaryRole: release.poster ? null : 'poster', - }, identifier), - release.poster && storePhotos([release.poster], { + // don't use Promise.all to prevent concurrency issues with duplicate detection + if (release.poster) { + await storePhotos([release.poster], { role: 'poster', targetId: releaseId, subpath, - }, identifier), - storePhotos(release.covers, { - role: 'cover', - targetId: releaseId, - subpath, - }, identifier), - storeTrailer(release.trailer, { - targetId: releaseId, - subpath, - }, identifier), - ]); + }, identifier); + } + + await storePhotos(release.photos, { + targetId: releaseId, + subpath, + primaryRole: release.poster ? null : 'poster', + }, identifier); + + await storePhotos(release.covers, { + role: 'cover', + targetId: releaseId, + subpath, + }, identifier); + + await storeTrailer(release.trailer, { + targetId: releaseId, + subpath, + }, identifier); } catch (error) { console.log(release.url, error); } @@ -363,7 +384,8 @@ async function storeReleases(releases) { const storedReleases = await Promise.map(releases, async (release) => { try { const releaseWithChannelSite = await attachChannelSite(release); - const releaseId = await storeRelease(releaseWithChannelSite); + const releaseWithStudio = await attachStudio(release); + const releaseId = await storeRelease(releaseWithStudio); return { id: releaseId, diff --git a/src/scrapers/bang.js b/src/scrapers/bang.js new file mode 100644 index 00000000..f0ed9b7e --- /dev/null +++ b/src/scrapers/bang.js @@ -0,0 +1,127 @@ +'use strict'; + +const bhttp = require('bhttp'); + +function encodeId(id) { + return Buffer + .from(id, 'hex') + .toString('base64') + .replace(/\+/g, '-') + .replace(/\//g, '_') + .replace(/=/g, ','); +} + +function scrapeLatest(scenes, site) { + return scenes.map(({ _source: scene }) => { + const release = { + site, + entryId: encodeId(scene.id), + title: scene.name, + description: scene.description, + actors: scene.actors.map(actor => actor.name), + tags: scene.genres.concat(scene.actions).map(genre => genre.name), + duration: scene.duration, + }; + + const slug = release.title.toLowerCase().trim().replace(/\s+/g, '-'); + release.url = `https://www.bang.com/video/${release.entryId}/${slug}`; + + const date = new Date(scene.releaseDate); + release.date = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate())); + + if (scene.is4k) release.tags.push('4k'); + if (scene.gay) release.tags.push('gay'); + + const defaultPoster = scene.screenshots.find(photo => photo.default === true); + const photoset = scene.screenshots.filter(photo => photo.default === false); + + const photos = defaultPoster ? photoset : photoset.slice(1); + const poster = defaultPoster || photoset[0]; + + release.poster = `https://i.bang.com/screenshots/${scene.dvd.id}/movie/1/${poster.screenId}.jpg`; + release.photos = photos.map(photo => `https://i.bang.com/screenshots/${scene.dvd.id}/movie/1/${photo.screenId}.jpg`); + + release.trailer = { + src: `https://i.bang.com/v/${scene.dvd.id}/${scene.identifier}/preview.mp4`, + }; + + release.studio = scene.series.name + .replace(/[! .]/g, '') + .replace('&', 'and'); + + return release; + }); +} + +async function fetchLatest(site, page = 1) { + const clusterId = '617fb597b659459bafe6472470d9073a'; + const authKey = 'YmFuZy1yZWFkOktqVDN0RzJacmQ1TFNRazI='; + + const res = await bhttp.post(`https://${clusterId}.us-east-1.aws.found.io/videos/video/_search`, { + size: 50, + from: (page - 1) * 50, + query: { + bool: { + must: [ + { + match: { + status: 'ok', + }, + }, + { + range: { + releaseDate: { + lte: 'now', + }, + }, + }, + { + nested: { + path: 'studio', + query: { + bool: { + must: [ + { + match: { + 'studio.name': { + operator: 'AND', + query: 'bang! originals', + }, + }, + }, + ], + }, + }, + }, + }, + ], + must_not: [ + { + match: { + type: 'trailer', + }, + }, + ], + }, + }, + sort: [ + { + releaseDate: { + order: 'desc', + }, + }, + ], + }, { + encodeJSON: true, + headers: { + Authorization: `Basic ${authKey}`, + }, + }); + + return scrapeLatest(res.body.hits.hits, site); +} + +module.exports = { + fetchLatest, + // fetchScene, +}; diff --git a/src/scrapers/legalporno.js b/src/scrapers/legalporno.js index b05f83f3..4a6d54a7 100644 --- a/src/scrapers/legalporno.js +++ b/src/scrapers/legalporno.js @@ -4,9 +4,6 @@ const bhttp = require('bhttp'); const { JSDOM } = require('jsdom'); const cheerio = require('cheerio'); const moment = require('moment'); -const knex = require('../knex'); - -const { matchTags } = require('../tags'); function extractTitle(originalTitle) { const titleComponents = originalTitle.split(' '); @@ -102,16 +99,8 @@ async function scrapeScene(html, url, site, useGallery) { const trailer = data.clip.qualities.find(clip => clip.quality === 'vga' || clip.quality === 'hd'); const studioName = $('.watchpage-studioname').first().text().trim(); - const studioSlug = studioName.replace(/\s+/g, '').toLowerCase(); - const rawTags = $(tagsElement).find('a').map((tagIndex, tagElement) => $(tagElement).text()).toArray(); - - const [studio, tags] = await Promise.all([ - knex('studios') - .where({ name: studioName }) - .orWhere({ slug: studioSlug }) - .first(), - matchTags(rawTags), - ]); + const studio = studioName.replace(/[\s.']+/g, '').toLowerCase(); + const tags = $(tagsElement).find('a').map((tagIndex, tagElement) => $(tagElement).text()).toArray(); return { url, diff --git a/src/scrapers/scrapers.js b/src/scrapers/scrapers.js index 27f31e38..fb7ce692 100644 --- a/src/scrapers/scrapers.js +++ b/src/scrapers/scrapers.js @@ -2,6 +2,7 @@ // releases const twentyonesextury = require('./21sextury'); +const bang = require('./bang'); const bangbros = require('./bangbros'); const blowpass = require('./blowpass'); const dogfart = require('./dogfart'); @@ -31,6 +32,7 @@ const pornhub = require('./pornhub'); module.exports = { releases: { '21sextury': twentyonesextury, + bang, bangbros, blowpass, brazzers, diff --git a/src/utils/rename.js b/src/utils/rename.js index bed1e5ed..95bd7f04 100644 --- a/src/utils/rename.js +++ b/src/utils/rename.js @@ -3,7 +3,7 @@ const path = require('path'); const Promise = require('bluebird'); const fs = require('fs-extra'); -const fetchScene = require('../scrape-release'); +const fetchScene = require('../scrape-releases'); const argv = require('../argv');