diff --git a/.gitignore b/.gitignore index 8ddc82d71..e3b54977b 100755 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ config/* !config/default.js assets/js/config/ !assets/js/config/default.js +export* *.heapprofile *.heapsnapshot .vscode diff --git a/package-lock.json b/package-lock.json index 782697c79..ef733860d 100755 --- a/package-lock.json +++ b/package-lock.json @@ -61,7 +61,6 @@ "node-fetch": "^2.6.7", "object-merge-advanced": "^12.1.0", "object.omit": "^3.0.0", - "opn": "^6.0.0", "pg": "^8.5.1", "postgraphile": "^4.13.0", "postgraphile-plugin-connection-filter": "^2.2.2", @@ -10328,14 +10327,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "engines": { - "node": ">=4" - } - }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -12741,18 +12732,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/opn": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz", - "integrity": "sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==", - "deprecated": "The package has been renamed to `open`", - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -26413,11 +26392,6 @@ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -28284,14 +28258,6 @@ "mimic-fn": "^2.1.0" } }, - "opn": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz", - "integrity": "sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==", - "requires": { - "is-wsl": "^1.1.0" - } - }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", diff --git a/package.json b/package.json index d168912ef..5b804903f 100755 --- a/package.json +++ b/package.json @@ -120,7 +120,6 @@ "node-fetch": "^2.6.7", "object-merge-advanced": "^12.1.0", "object.omit": "^3.0.0", - "opn": "^6.0.0", "pg": "^8.5.1", "postgraphile": "^4.13.0", "postgraphile-plugin-connection-filter": "^2.2.2", diff --git a/public/img/logos/blurred/hot-guys-fuck.png b/public/img/logos/blurred/hot-guys-fuck.png new file mode 100644 index 000000000..9f805eede Binary files /dev/null and b/public/img/logos/blurred/hot-guys-fuck.png differ diff --git a/public/img/logos/blurred/hot-guys-fuck_dark.png b/public/img/logos/blurred/hot-guys-fuck_dark.png new file mode 100644 index 000000000..b317afdf4 Binary files /dev/null and b/public/img/logos/blurred/hot-guys-fuck_dark.png differ diff --git a/public/img/logos/blurred/hot-guys-fuck_exbg.png b/public/img/logos/blurred/hot-guys-fuck_exbg.png new file mode 100644 index 000000000..760213bc4 Binary files /dev/null and b/public/img/logos/blurred/hot-guys-fuck_exbg.png differ diff --git a/public/img/logos/blurred/hot-guys-fuck_native.png b/public/img/logos/blurred/hot-guys-fuck_native.png new file mode 100644 index 000000000..f784a00b0 Binary files /dev/null and b/public/img/logos/blurred/hot-guys-fuck_native.png differ diff --git a/public/img/logos/kink/lazy/boundgangbangs.png b/public/img/logos/kink/lazy/boundgangbangs.png index 635eb4132..f94f8c0f2 100644 Binary files a/public/img/logos/kink/lazy/boundgangbangs.png and b/public/img/logos/kink/lazy/boundgangbangs.png differ diff --git a/public/img/logos/kink/lazy/boundgods.png b/public/img/logos/kink/lazy/boundgods.png index 89ba4253f..c5c949d48 100644 Binary files a/public/img/logos/kink/lazy/boundgods.png and b/public/img/logos/kink/lazy/boundgods.png differ diff --git a/public/img/logos/kink/lazy/boundinpublic.png b/public/img/logos/kink/lazy/boundinpublic.png index f4fc118ce..52e941036 100644 Binary files a/public/img/logos/kink/lazy/boundinpublic.png and b/public/img/logos/kink/lazy/boundinpublic.png differ diff --git a/public/img/logos/kink/lazy/brutalsessions.png b/public/img/logos/kink/lazy/brutalsessions.png index 23c65b5f9..8cb4a67ee 100644 Binary files a/public/img/logos/kink/lazy/brutalsessions.png and b/public/img/logos/kink/lazy/brutalsessions.png differ diff --git a/public/img/logos/kink/lazy/buttmachineboys.png b/public/img/logos/kink/lazy/buttmachineboys.png index b2813bdd5..2cbb04a82 100644 Binary files a/public/img/logos/kink/lazy/buttmachineboys.png and b/public/img/logos/kink/lazy/buttmachineboys.png differ diff --git a/public/img/logos/kink/lazy/devicebondage.png b/public/img/logos/kink/lazy/devicebondage.png index b10ee1d87..2dcc62a90 100644 Binary files a/public/img/logos/kink/lazy/devicebondage.png and b/public/img/logos/kink/lazy/devicebondage.png differ diff --git a/public/img/logos/kink/lazy/divinebitches.png b/public/img/logos/kink/lazy/divinebitches.png index 77971fd6a..788e012a2 100644 Binary files a/public/img/logos/kink/lazy/divinebitches.png and b/public/img/logos/kink/lazy/divinebitches.png differ diff --git a/public/img/logos/kink/lazy/electrosluts.png b/public/img/logos/kink/lazy/electrosluts.png index d42511db6..36aaa7dfb 100644 Binary files a/public/img/logos/kink/lazy/electrosluts.png and b/public/img/logos/kink/lazy/electrosluts.png differ diff --git a/public/img/logos/kink/lazy/everythingbutt.png b/public/img/logos/kink/lazy/everythingbutt.png index 9e1bda8d7..6ba6709e1 100644 Binary files a/public/img/logos/kink/lazy/everythingbutt.png and b/public/img/logos/kink/lazy/everythingbutt.png differ diff --git a/public/img/logos/kink/lazy/familiestied.png b/public/img/logos/kink/lazy/familiestied.png index 230c1de5e..44b0380f7 100644 Binary files a/public/img/logos/kink/lazy/familiestied.png and b/public/img/logos/kink/lazy/familiestied.png differ diff --git a/public/img/logos/kink/lazy/favicon.png b/public/img/logos/kink/lazy/favicon.png index 8c5a575a4..fb7933386 100644 Binary files a/public/img/logos/kink/lazy/favicon.png and b/public/img/logos/kink/lazy/favicon.png differ diff --git a/public/img/logos/kink/lazy/favicon_dark.png b/public/img/logos/kink/lazy/favicon_dark.png index 8c5a575a4..fb7933386 100644 Binary files a/public/img/logos/kink/lazy/favicon_dark.png and b/public/img/logos/kink/lazy/favicon_dark.png differ diff --git a/public/img/logos/kink/lazy/favicon_light.png b/public/img/logos/kink/lazy/favicon_light.png index 8c5a575a4..fb7933386 100644 Binary files a/public/img/logos/kink/lazy/favicon_light.png and b/public/img/logos/kink/lazy/favicon_light.png differ diff --git a/public/img/logos/kink/lazy/filthyfemdom.png b/public/img/logos/kink/lazy/filthyfemdom.png index c623fb214..67266362e 100644 Binary files a/public/img/logos/kink/lazy/filthyfemdom.png and b/public/img/logos/kink/lazy/filthyfemdom.png differ diff --git a/public/img/logos/kink/lazy/footworship.png b/public/img/logos/kink/lazy/footworship.png index 0343c7c6c..b7a697f07 100644 Binary files a/public/img/logos/kink/lazy/footworship.png and b/public/img/logos/kink/lazy/footworship.png differ diff --git a/public/img/logos/kink/lazy/fuckedandbound.png b/public/img/logos/kink/lazy/fuckedandbound.png index f99a4f416..d40af8187 100644 Binary files a/public/img/logos/kink/lazy/fuckedandbound.png and b/public/img/logos/kink/lazy/fuckedandbound.png differ diff --git a/public/img/logos/kink/lazy/fuckingmachines.png b/public/img/logos/kink/lazy/fuckingmachines.png index 329123258..ab3ca2dbf 100644 Binary files a/public/img/logos/kink/lazy/fuckingmachines.png and b/public/img/logos/kink/lazy/fuckingmachines.png differ diff --git a/public/img/logos/kink/lazy/hardcoregangbang.png b/public/img/logos/kink/lazy/hardcoregangbang.png index 5fa4d0ea6..077b90c3a 100644 Binary files a/public/img/logos/kink/lazy/hardcoregangbang.png and b/public/img/logos/kink/lazy/hardcoregangbang.png differ diff --git a/public/img/logos/kink/lazy/hogtied.png b/public/img/logos/kink/lazy/hogtied.png index d526f40cf..f8284c799 100644 Binary files a/public/img/logos/kink/lazy/hogtied.png and b/public/img/logos/kink/lazy/hogtied.png differ diff --git a/public/img/logos/kink/lazy/kink-dvd.png b/public/img/logos/kink/lazy/kink-dvd.png index 80716174b..76c4c1dee 100644 Binary files a/public/img/logos/kink/lazy/kink-dvd.png and b/public/img/logos/kink/lazy/kink-dvd.png differ diff --git a/public/img/logos/kink/lazy/kinkclassics.png b/public/img/logos/kink/lazy/kinkclassics.png index d85162ed4..a5e1a8980 100644 Binary files a/public/img/logos/kink/lazy/kinkclassics.png and b/public/img/logos/kink/lazy/kinkclassics.png differ diff --git a/public/img/logos/kink/lazy/kinkfeatures.png b/public/img/logos/kink/lazy/kinkfeatures.png index 7f601fd4a..a607adae2 100644 Binary files a/public/img/logos/kink/lazy/kinkfeatures.png and b/public/img/logos/kink/lazy/kinkfeatures.png differ diff --git a/public/img/logos/kink/lazy/kinklive.png b/public/img/logos/kink/lazy/kinklive.png index 965feb2a9..f944ebe95 100644 Binary files a/public/img/logos/kink/lazy/kinklive.png and b/public/img/logos/kink/lazy/kinklive.png differ diff --git a/public/img/logos/kink/lazy/kinktestshoots.png b/public/img/logos/kink/lazy/kinktestshoots.png index af8875dd3..e9ad7ff10 100644 Binary files a/public/img/logos/kink/lazy/kinktestshoots.png and b/public/img/logos/kink/lazy/kinktestshoots.png differ diff --git a/public/img/logos/kink/lazy/kinkuniversity.png b/public/img/logos/kink/lazy/kinkuniversity.png index 1fe958dde..2c48cb6f3 100644 Binary files a/public/img/logos/kink/lazy/kinkuniversity.png and b/public/img/logos/kink/lazy/kinkuniversity.png differ diff --git a/public/img/logos/kink/lazy/kinkvr.png b/public/img/logos/kink/lazy/kinkvr.png index f2f9624bd..a93b31e2b 100644 Binary files a/public/img/logos/kink/lazy/kinkvr.png and b/public/img/logos/kink/lazy/kinkvr.png differ diff --git a/public/img/logos/kink/lazy/kinkybites.png b/public/img/logos/kink/lazy/kinkybites.png index ac780463c..cc294b9ed 100644 Binary files a/public/img/logos/kink/lazy/kinkybites.png and b/public/img/logos/kink/lazy/kinkybites.png differ diff --git a/public/img/logos/kink/lazy/meninpain.png b/public/img/logos/kink/lazy/meninpain.png index c39e42ca3..8dab77b0c 100644 Binary files a/public/img/logos/kink/lazy/meninpain.png and b/public/img/logos/kink/lazy/meninpain.png differ diff --git a/public/img/logos/kink/lazy/menonedge.png b/public/img/logos/kink/lazy/menonedge.png index 5f05a5913..1544dbd39 100644 Binary files a/public/img/logos/kink/lazy/menonedge.png and b/public/img/logos/kink/lazy/menonedge.png differ diff --git a/public/img/logos/kink/lazy/nakedkombat.png b/public/img/logos/kink/lazy/nakedkombat.png index 248f97482..6154ade44 100644 Binary files a/public/img/logos/kink/lazy/nakedkombat.png and b/public/img/logos/kink/lazy/nakedkombat.png differ diff --git a/public/img/logos/kink/lazy/network.png b/public/img/logos/kink/lazy/network.png index a5858c635..a7704a51d 100644 Binary files a/public/img/logos/kink/lazy/network.png and b/public/img/logos/kink/lazy/network.png differ diff --git a/public/img/logos/kink/lazy/publicdisgrace.png b/public/img/logos/kink/lazy/publicdisgrace.png index 7f9f0064a..b11a96836 100644 Binary files a/public/img/logos/kink/lazy/publicdisgrace.png and b/public/img/logos/kink/lazy/publicdisgrace.png differ diff --git a/public/img/logos/kink/lazy/sadisticrope.png b/public/img/logos/kink/lazy/sadisticrope.png index adbc94fb9..2400df585 100644 Binary files a/public/img/logos/kink/lazy/sadisticrope.png and b/public/img/logos/kink/lazy/sadisticrope.png differ diff --git a/public/img/logos/kink/lazy/savagegangbang.png b/public/img/logos/kink/lazy/savagegangbang.png new file mode 100644 index 000000000..e69797e26 Binary files /dev/null and b/public/img/logos/kink/lazy/savagegangbang.png differ diff --git a/public/img/logos/kink/lazy/sexandsubmission.png b/public/img/logos/kink/lazy/sexandsubmission.png index c619dcb04..deec37081 100644 Binary files a/public/img/logos/kink/lazy/sexandsubmission.png and b/public/img/logos/kink/lazy/sexandsubmission.png differ diff --git a/public/img/logos/kink/lazy/strugglingbabes.png b/public/img/logos/kink/lazy/strugglingbabes.png index 6bd9f9669..4aef82a06 100644 Binary files a/public/img/logos/kink/lazy/strugglingbabes.png and b/public/img/logos/kink/lazy/strugglingbabes.png differ diff --git a/public/img/logos/kink/lazy/thetrainingofo.png b/public/img/logos/kink/lazy/thetrainingofo.png index affe2ac41..69c07242f 100644 Binary files a/public/img/logos/kink/lazy/thetrainingofo.png and b/public/img/logos/kink/lazy/thetrainingofo.png differ diff --git a/public/img/logos/kink/lazy/theupperfloor.png b/public/img/logos/kink/lazy/theupperfloor.png index 3de2bab4f..e598df780 100644 Binary files a/public/img/logos/kink/lazy/theupperfloor.png and b/public/img/logos/kink/lazy/theupperfloor.png differ diff --git a/public/img/logos/kink/lazy/thirtyminutesoftorment.png b/public/img/logos/kink/lazy/thirtyminutesoftorment.png index f30b88aa7..346c4ea7a 100644 Binary files a/public/img/logos/kink/lazy/thirtyminutesoftorment.png and b/public/img/logos/kink/lazy/thirtyminutesoftorment.png differ diff --git a/public/img/logos/kink/lazy/tspussyhunters.png b/public/img/logos/kink/lazy/tspussyhunters.png index 25d320f8c..a9e2402ab 100644 Binary files a/public/img/logos/kink/lazy/tspussyhunters.png and b/public/img/logos/kink/lazy/tspussyhunters.png differ diff --git a/public/img/logos/kink/lazy/tsseduction.png b/public/img/logos/kink/lazy/tsseduction.png index b1b3f96b8..a7fe1720b 100644 Binary files a/public/img/logos/kink/lazy/tsseduction.png and b/public/img/logos/kink/lazy/tsseduction.png differ diff --git a/public/img/logos/kink/lazy/ultimatesurrender.png b/public/img/logos/kink/lazy/ultimatesurrender.png index a5286442b..a643713a7 100644 Binary files a/public/img/logos/kink/lazy/ultimatesurrender.png and b/public/img/logos/kink/lazy/ultimatesurrender.png differ diff --git a/public/img/logos/kink/lazy/waterbondage.png b/public/img/logos/kink/lazy/waterbondage.png index 9851a4a68..6f3398a16 100644 Binary files a/public/img/logos/kink/lazy/waterbondage.png and b/public/img/logos/kink/lazy/waterbondage.png differ diff --git a/public/img/logos/kink/lazy/whippedass.png b/public/img/logos/kink/lazy/whippedass.png index 9a185bd29..b61b22ddf 100644 Binary files a/public/img/logos/kink/lazy/whippedass.png and b/public/img/logos/kink/lazy/whippedass.png differ diff --git a/public/img/logos/kink/lazy/wiredpussy.png b/public/img/logos/kink/lazy/wiredpussy.png index ddda658e8..093a6abbc 100644 Binary files a/public/img/logos/kink/lazy/wiredpussy.png and b/public/img/logos/kink/lazy/wiredpussy.png differ diff --git a/public/img/logos/kink/misc/savage-gangbang_donna.png b/public/img/logos/kink/misc/savage-gangbang_donna.png new file mode 100644 index 000000000..0223ac9d2 Binary files /dev/null and b/public/img/logos/kink/misc/savage-gangbang_donna.png differ diff --git a/public/img/logos/kink/savagegangbang.png b/public/img/logos/kink/savagegangbang.png new file mode 100644 index 000000000..e9b362359 Binary files /dev/null and b/public/img/logos/kink/savagegangbang.png differ diff --git a/public/img/logos/kink/thumbs/boundgangbangs.png b/public/img/logos/kink/thumbs/boundgangbangs.png index e0109deed..526ab20f5 100644 Binary files a/public/img/logos/kink/thumbs/boundgangbangs.png and b/public/img/logos/kink/thumbs/boundgangbangs.png differ diff --git a/public/img/logos/kink/thumbs/boundgods.png b/public/img/logos/kink/thumbs/boundgods.png index 074bdae5b..b8c3f5f86 100644 Binary files a/public/img/logos/kink/thumbs/boundgods.png and b/public/img/logos/kink/thumbs/boundgods.png differ diff --git a/public/img/logos/kink/thumbs/boundinpublic.png b/public/img/logos/kink/thumbs/boundinpublic.png index aad46f917..38be823ad 100644 Binary files a/public/img/logos/kink/thumbs/boundinpublic.png and b/public/img/logos/kink/thumbs/boundinpublic.png differ diff --git a/public/img/logos/kink/thumbs/brutalsessions.png b/public/img/logos/kink/thumbs/brutalsessions.png index e59fbc195..aef23b7ae 100644 Binary files a/public/img/logos/kink/thumbs/brutalsessions.png and b/public/img/logos/kink/thumbs/brutalsessions.png differ diff --git a/public/img/logos/kink/thumbs/buttmachineboys.png b/public/img/logos/kink/thumbs/buttmachineboys.png index 68d7f344e..9f5b1b161 100644 Binary files a/public/img/logos/kink/thumbs/buttmachineboys.png and b/public/img/logos/kink/thumbs/buttmachineboys.png differ diff --git a/public/img/logos/kink/thumbs/devicebondage.png b/public/img/logos/kink/thumbs/devicebondage.png index 1a71e756f..b24935961 100644 Binary files a/public/img/logos/kink/thumbs/devicebondage.png and b/public/img/logos/kink/thumbs/devicebondage.png differ diff --git a/public/img/logos/kink/thumbs/divinebitches.png b/public/img/logos/kink/thumbs/divinebitches.png index 7bdf726ff..3cb13a7a9 100644 Binary files a/public/img/logos/kink/thumbs/divinebitches.png and b/public/img/logos/kink/thumbs/divinebitches.png differ diff --git a/public/img/logos/kink/thumbs/electrosluts.png b/public/img/logos/kink/thumbs/electrosluts.png index 1fb58d6d4..d1b91a4a5 100644 Binary files a/public/img/logos/kink/thumbs/electrosluts.png and b/public/img/logos/kink/thumbs/electrosluts.png differ diff --git a/public/img/logos/kink/thumbs/everythingbutt.png b/public/img/logos/kink/thumbs/everythingbutt.png index 8057062fe..05d170a20 100644 Binary files a/public/img/logos/kink/thumbs/everythingbutt.png and b/public/img/logos/kink/thumbs/everythingbutt.png differ diff --git a/public/img/logos/kink/thumbs/familiestied.png b/public/img/logos/kink/thumbs/familiestied.png index fc0cd8c2b..9ba590941 100644 Binary files a/public/img/logos/kink/thumbs/familiestied.png and b/public/img/logos/kink/thumbs/familiestied.png differ diff --git a/public/img/logos/kink/thumbs/favicon.png b/public/img/logos/kink/thumbs/favicon.png index 8c5a575a4..fb7933386 100644 Binary files a/public/img/logos/kink/thumbs/favicon.png and b/public/img/logos/kink/thumbs/favicon.png differ diff --git a/public/img/logos/kink/thumbs/favicon_dark.png b/public/img/logos/kink/thumbs/favicon_dark.png index 8c5a575a4..fb7933386 100644 Binary files a/public/img/logos/kink/thumbs/favicon_dark.png and b/public/img/logos/kink/thumbs/favicon_dark.png differ diff --git a/public/img/logos/kink/thumbs/favicon_light.png b/public/img/logos/kink/thumbs/favicon_light.png index 8c5a575a4..fb7933386 100644 Binary files a/public/img/logos/kink/thumbs/favicon_light.png and b/public/img/logos/kink/thumbs/favicon_light.png differ diff --git a/public/img/logos/kink/thumbs/filthyfemdom.png b/public/img/logos/kink/thumbs/filthyfemdom.png index 7aaef2a40..8ae3e6878 100644 Binary files a/public/img/logos/kink/thumbs/filthyfemdom.png and b/public/img/logos/kink/thumbs/filthyfemdom.png differ diff --git a/public/img/logos/kink/thumbs/footworship.png b/public/img/logos/kink/thumbs/footworship.png index 1e89842e6..346cc76f9 100644 Binary files a/public/img/logos/kink/thumbs/footworship.png and b/public/img/logos/kink/thumbs/footworship.png differ diff --git a/public/img/logos/kink/thumbs/fuckedandbound.png b/public/img/logos/kink/thumbs/fuckedandbound.png index 45f9c8fda..7a0207fe5 100644 Binary files a/public/img/logos/kink/thumbs/fuckedandbound.png and b/public/img/logos/kink/thumbs/fuckedandbound.png differ diff --git a/public/img/logos/kink/thumbs/fuckingmachines.png b/public/img/logos/kink/thumbs/fuckingmachines.png index 23c911b6e..5ae9ba411 100644 Binary files a/public/img/logos/kink/thumbs/fuckingmachines.png and b/public/img/logos/kink/thumbs/fuckingmachines.png differ diff --git a/public/img/logos/kink/thumbs/hardcoregangbang.png b/public/img/logos/kink/thumbs/hardcoregangbang.png index 581b35dad..1c491d702 100644 Binary files a/public/img/logos/kink/thumbs/hardcoregangbang.png and b/public/img/logos/kink/thumbs/hardcoregangbang.png differ diff --git a/public/img/logos/kink/thumbs/hogtied.png b/public/img/logos/kink/thumbs/hogtied.png index 1b58d60dc..ba14ea06d 100644 Binary files a/public/img/logos/kink/thumbs/hogtied.png and b/public/img/logos/kink/thumbs/hogtied.png differ diff --git a/public/img/logos/kink/thumbs/kink-dvd.png b/public/img/logos/kink/thumbs/kink-dvd.png index f2817f0df..235570269 100644 Binary files a/public/img/logos/kink/thumbs/kink-dvd.png and b/public/img/logos/kink/thumbs/kink-dvd.png differ diff --git a/public/img/logos/kink/thumbs/kinkclassics.png b/public/img/logos/kink/thumbs/kinkclassics.png index 621d7636e..6772c3160 100644 Binary files a/public/img/logos/kink/thumbs/kinkclassics.png and b/public/img/logos/kink/thumbs/kinkclassics.png differ diff --git a/public/img/logos/kink/thumbs/kinkfeatures.png b/public/img/logos/kink/thumbs/kinkfeatures.png index c8958530f..2107609d4 100644 Binary files a/public/img/logos/kink/thumbs/kinkfeatures.png and b/public/img/logos/kink/thumbs/kinkfeatures.png differ diff --git a/public/img/logos/kink/thumbs/kinklive.png b/public/img/logos/kink/thumbs/kinklive.png index 03502283c..9a6ab4074 100644 Binary files a/public/img/logos/kink/thumbs/kinklive.png and b/public/img/logos/kink/thumbs/kinklive.png differ diff --git a/public/img/logos/kink/thumbs/kinktestshoots.png b/public/img/logos/kink/thumbs/kinktestshoots.png index c80f8c053..5545a0e50 100644 Binary files a/public/img/logos/kink/thumbs/kinktestshoots.png and b/public/img/logos/kink/thumbs/kinktestshoots.png differ diff --git a/public/img/logos/kink/thumbs/kinkuniversity.png b/public/img/logos/kink/thumbs/kinkuniversity.png index 244854d24..ed5a0232e 100644 Binary files a/public/img/logos/kink/thumbs/kinkuniversity.png and b/public/img/logos/kink/thumbs/kinkuniversity.png differ diff --git a/public/img/logos/kink/thumbs/kinkvr.png b/public/img/logos/kink/thumbs/kinkvr.png index 7b320454c..9bf6cefb8 100644 Binary files a/public/img/logos/kink/thumbs/kinkvr.png and b/public/img/logos/kink/thumbs/kinkvr.png differ diff --git a/public/img/logos/kink/thumbs/kinkybites.png b/public/img/logos/kink/thumbs/kinkybites.png index 754772504..24ef56731 100644 Binary files a/public/img/logos/kink/thumbs/kinkybites.png and b/public/img/logos/kink/thumbs/kinkybites.png differ diff --git a/public/img/logos/kink/thumbs/meninpain.png b/public/img/logos/kink/thumbs/meninpain.png index ab61e7b86..ebc16a659 100644 Binary files a/public/img/logos/kink/thumbs/meninpain.png and b/public/img/logos/kink/thumbs/meninpain.png differ diff --git a/public/img/logos/kink/thumbs/menonedge.png b/public/img/logos/kink/thumbs/menonedge.png index 4c1284b0e..b9785b339 100644 Binary files a/public/img/logos/kink/thumbs/menonedge.png and b/public/img/logos/kink/thumbs/menonedge.png differ diff --git a/public/img/logos/kink/thumbs/nakedkombat.png b/public/img/logos/kink/thumbs/nakedkombat.png index 0c63cf9f3..198496e8b 100644 Binary files a/public/img/logos/kink/thumbs/nakedkombat.png and b/public/img/logos/kink/thumbs/nakedkombat.png differ diff --git a/public/img/logos/kink/thumbs/network.png b/public/img/logos/kink/thumbs/network.png index 53e343320..4a9edb995 100644 Binary files a/public/img/logos/kink/thumbs/network.png and b/public/img/logos/kink/thumbs/network.png differ diff --git a/public/img/logos/kink/thumbs/publicdisgrace.png b/public/img/logos/kink/thumbs/publicdisgrace.png index a651b7906..b1bce657d 100644 Binary files a/public/img/logos/kink/thumbs/publicdisgrace.png and b/public/img/logos/kink/thumbs/publicdisgrace.png differ diff --git a/public/img/logos/kink/thumbs/sadisticrope.png b/public/img/logos/kink/thumbs/sadisticrope.png index 1785280b6..a0baea451 100644 Binary files a/public/img/logos/kink/thumbs/sadisticrope.png and b/public/img/logos/kink/thumbs/sadisticrope.png differ diff --git a/public/img/logos/kink/thumbs/savagegangbang.png b/public/img/logos/kink/thumbs/savagegangbang.png new file mode 100644 index 000000000..781efa9cb Binary files /dev/null and b/public/img/logos/kink/thumbs/savagegangbang.png differ diff --git a/public/img/logos/kink/thumbs/sexandsubmission.png b/public/img/logos/kink/thumbs/sexandsubmission.png index d277d6d00..935e9de52 100644 Binary files a/public/img/logos/kink/thumbs/sexandsubmission.png and b/public/img/logos/kink/thumbs/sexandsubmission.png differ diff --git a/public/img/logos/kink/thumbs/strugglingbabes.png b/public/img/logos/kink/thumbs/strugglingbabes.png index 93eafe6cc..e2f4696b4 100644 Binary files a/public/img/logos/kink/thumbs/strugglingbabes.png and b/public/img/logos/kink/thumbs/strugglingbabes.png differ diff --git a/public/img/logos/kink/thumbs/thetrainingofo.png b/public/img/logos/kink/thumbs/thetrainingofo.png index 2d0cab32a..77efff60e 100644 Binary files a/public/img/logos/kink/thumbs/thetrainingofo.png and b/public/img/logos/kink/thumbs/thetrainingofo.png differ diff --git a/public/img/logos/kink/thumbs/theupperfloor.png b/public/img/logos/kink/thumbs/theupperfloor.png index 4fcb2bddb..9d2863025 100644 Binary files a/public/img/logos/kink/thumbs/theupperfloor.png and b/public/img/logos/kink/thumbs/theupperfloor.png differ diff --git a/public/img/logos/kink/thumbs/thirtyminutesoftorment.png b/public/img/logos/kink/thumbs/thirtyminutesoftorment.png index 7be02e1f6..dc56e8931 100644 Binary files a/public/img/logos/kink/thumbs/thirtyminutesoftorment.png and b/public/img/logos/kink/thumbs/thirtyminutesoftorment.png differ diff --git a/public/img/logos/kink/thumbs/tspussyhunters.png b/public/img/logos/kink/thumbs/tspussyhunters.png index 1aa3b93b8..2ec597c80 100644 Binary files a/public/img/logos/kink/thumbs/tspussyhunters.png and b/public/img/logos/kink/thumbs/tspussyhunters.png differ diff --git a/public/img/logos/kink/thumbs/tsseduction.png b/public/img/logos/kink/thumbs/tsseduction.png index 85c35ea79..bb166608c 100644 Binary files a/public/img/logos/kink/thumbs/tsseduction.png and b/public/img/logos/kink/thumbs/tsseduction.png differ diff --git a/public/img/logos/kink/thumbs/ultimatesurrender.png b/public/img/logos/kink/thumbs/ultimatesurrender.png index 25c6a9ad6..06c5cae0b 100644 Binary files a/public/img/logos/kink/thumbs/ultimatesurrender.png and b/public/img/logos/kink/thumbs/ultimatesurrender.png differ diff --git a/public/img/logos/kink/thumbs/waterbondage.png b/public/img/logos/kink/thumbs/waterbondage.png index 286f1c6fc..e7eb4ab6b 100644 Binary files a/public/img/logos/kink/thumbs/waterbondage.png and b/public/img/logos/kink/thumbs/waterbondage.png differ diff --git a/public/img/logos/kink/thumbs/whippedass.png b/public/img/logos/kink/thumbs/whippedass.png index 0d8877e22..f23662f41 100644 Binary files a/public/img/logos/kink/thumbs/whippedass.png and b/public/img/logos/kink/thumbs/whippedass.png differ diff --git a/public/img/logos/kink/thumbs/wiredpussy.png b/public/img/logos/kink/thumbs/wiredpussy.png index f2c6d5e3c..38b42aa15 100644 Binary files a/public/img/logos/kink/thumbs/wiredpussy.png and b/public/img/logos/kink/thumbs/wiredpussy.png differ diff --git a/seeds/02_sites.js b/seeds/02_sites.js index 289a6d30e..48832940e 100755 --- a/seeds/02_sites.js +++ b/seeds/02_sites.js @@ -5138,6 +5138,15 @@ const sites = [ description: 'Innocence Taken By Extreme Rope Bondage, Hardcore BDSM And Pussy-Destroying Orgasms.', parent: 'kink', }, + { + slug: 'savagegangbang', + name: 'Savage Gangbang', + url: 'https://www.kink.com/channel/savage-gangbang', + parent: 'kink', + parameters: { + slug: 'princessdonnapresentssavagegangbang', // lol + }, + }, { slug: 'sexandsubmission', name: 'Sex and Submission', diff --git a/src/scrapers/kink.js b/src/scrapers/kink.js index 9b698bfba..9f8f51a16 100755 --- a/src/scrapers/kink.js +++ b/src/scrapers/kink.js @@ -29,7 +29,9 @@ function scrapeAll(scenes, entity) { release.poster = query.img('.adimage'); release.photos = query.imgs('.rollover .roll-image', { attribute: 'data-imagesrc' }).map((photo) => [ - photo.replace('410/', '830/'), + photo + .replace('410/', '830/') + .replace('_thumb', '_full'), photo, ]); @@ -57,12 +59,12 @@ function scrapeScene({ query }, url, entity) { release.director = query.content('.director-name'); - release.photos = query.imgs('.gallery .thumb img, #gallerySlider .gallery-img', 'data-image-file'); + release.photos = query.imgs('.gallery .thumb img, #gallerySlider .gallery-img', { attribute: 'data-image-file' }); release.poster = query.poster(); release.tags = query.contents('.tag-list a[href*="/tag"]').map((tag) => tag.replace(/,\s*/, '')); - const trailer = query.attribute('.player span[data-type="trailer-src"]', 'data-url'); + const trailer = query.attribute('.player span[data-type="trailer-src"]', { attribute: 'data-url' }); if (trailer) { release.trailer = [ diff --git a/src/tools/transfer.js b/src/tools/transfer.js new file mode 100644 index 000000000..ba22d10aa --- /dev/null +++ b/src/tools/transfer.js @@ -0,0 +1,424 @@ +'use strict'; + +const config = require('config'); +const fs = require('fs').promises; +const moment = require('moment'); +const Promise = require('bluebird'); +const { nanoid } = require('nanoid/non-secure'); +const AWS = require('aws-sdk'); + +const { graphql } = require('../web/graphql'); +const knex = require('../knex'); +const args = require('../argv'); + +const endpoint = new AWS.Endpoint('s3.eu-central-1.wasabisys.com'); + +const s3 = new AWS.S3({ + // region: 'eu-central-1', + endpoint, + credentials: { + accessKeyId: config.s3.accessKey, + secretAccessKey: config.s3.secretKey, + }, +}); + +console.log(Object.keys(s3)); + +// NOT TRANSFERRED, unutilized on old server: production location, availabile qualities, actor alias for, actor entry id, chapter posters, chapter photos + +const releaseFields = ` + entryId + shootId + title + url + date + datePrecision + productionDate + description + duration + entity { + slug + type + } + studio { + slug + } + actors: releasesActors { + actor { + name + slug + entryId + entity { + slug + type + } + } + } + directors: releasesDirectors { + director { + slug + entryId + entity { + slug + type + } + } + } + tags: releasesTags { + tag { + slug + } + } + chapters(orderBy: TIME_ASC) { + index + time + duration + title + description + tags: chaptersTags { + tag { + slug + } + } + } + poster: releasesPoster { + media { + hash + path + thumbnail + lazy + s3: isS3 + mime + index + width + height + size + source + sourcePage + } + } + photos: releasesPhotos { + media { + hash + path + thumbnail + lazy + s3: isS3 + mime + index + width + height + size + source + sourcePage + } + } + covers: releasesCovers { + media { + hash + path + thumbnail + lazy + s3: isS3 + mime + index + width + height + size + source + sourcePage + } + } + trailer: releasesTrailer { + media { + hash + path + thumbnail + lazy + s3: isS3 + mime + index + width + height + size + source + sourcePage + } + } + teaser: releasesTeaser { + media { + hash + path + thumbnail + lazy + s3: isS3 + mime + index + width + height + size + source + sourcePage + } + } + createdAt +`; + +async function save() { + const limit = args.limit || 1000; + const offset = args.offset || 0; + + const { releases } = await graphql(` + query SearchReleases( + $limit: Int = 20 + $offset: Int = 0 + ) { + releases( + first: $limit + offset: $offset + orderBy: DATE_DESC + ) { + ${releaseFields} + } + } + `, { + limit, + offset, + }); + + const curatedReleases = releases.map((release) => ({ + ...release, + actors: release.actors.filter(Boolean).map(({ actor }) => actor), + directors: release.directors.filter(Boolean).map(({ director }) => director), + studio: release.studio?.slug, + tags: release.tags.map(({ tag }) => tag?.slug).filter(Boolean), + chapters: release.chapters.filter(Boolean).map((chapter) => ({ + ...chapter, + tags: chapter.tags.map(({ tag }) => tag?.slug).filter(Boolean), + })), + poster: release.poster?.media, + trailer: release.trailer?.media, + teaser: release.teaser?.media, + photos: release.photos.filter(Boolean).map(({ media }) => media), + covers: release.covers.filter(Boolean).map(({ media }) => media), + })); + + const filename = `export-${offset}-${offset + limit}-${moment().format('YYYY-MM-DD_hh_mm_ss')}.json`; + const serializedData = JSON.stringify(curatedReleases, null, 4); + + await fs.writeFile(filename, serializedData); + + console.log(`Saved ${releases.length} releases to ${filename}`); + + process.exit(); +} + +async function addReleaseTags(release, context) { + if (release.tags.length === 0) { + return; + } + + await knex('releases_tags').insert(release.tags.map((tag) => ({ + tag_id: context.tagIdsBySlug[tag], + release_id: release.id, + original_tag: tag, + }))); +} + +async function addNewActor(actor, entity, context) { + const [actorId] = await knex('actors') + .insert({ + name: actor.name, + slug: actor.slug, + entity_id: entity?.id, + batch_id: context.batchId, + }) + .returning('id'); + + return actorId; +} + +async function addReleaseActors(release, context, target = 'actor') { + await release[`${target}s`].reduce(async (chain, actor) => { + await chain; + + const entity = actor.entity + ? await knex('entities').where(actor.entity).first() + : null; + + if (actor.entity && !entity) { + throw new Error(`Actor ${actor.slug} contains non-existent ${release.entity.type} '${release.entity.slug}'`); + } + + const existingActor = await knex('actors') + .where('slug', actor.slug) + .where((builder) => { + if (entity) { + builder.where('entity_id', entity.id); + return; + } + + builder.whereNull('entity_id'); + }) + .first(); + + const actorId = existingActor?.id + || await addNewActor(actor, entity, context); + + await knex(`releases_${target}s`).insert({ + release_id: release.id, + [`${target}_id`]: actorId, + }); + }, Promise.resolve()); +} + +async function addReleaseDirectors(release, context) { + return addReleaseActors(release, context, 'director'); +} + +async function addReleaseChapters(release, context) { + await release.chapters.reduce(async (chain, chapter) => { + await chain; + + const [chapterId] = await knex('chapters') + .insert({ + release_id: release.id, + index: chapter.index, + time: chapter.time, + duration: chapter.duration, + description: chapter.description, + }) + .returning('id'); + + if (chapter.tags.length > 0) { + await knex('chapters_tags').insert(chapter.tags.map((tag) => ({ + tag_id: context.tagIdsBySlug[tag], + chapter_id: chapterId, + original_tag: tag, + }))); + } + }, Promise.resolve()); +} + +async function addReleaseMedia(medias, release, target) { + return Promise.all(medias.filter(Boolean).map(async (media) => { + try { + const id = nanoid(); + + await knex('media').insert({ + id, + hash: media.hash, + path: media.path, + thumbnail: media.thumbnail, + lazy: media.lazy, + is_s3: media.s3, + index: media.index, + mime: media.mime, + size: media.size, + width: media.width, + height: media.height, + source: media.source, + source_page: media.sourcePage, + }); + + await knex(`releases_${target}`).insert({ + release_id: release.id, + media_id: id, + }); + } catch (error) { + console.log(`Skipped existing media ${media.hash} from ${media.url}: ${error.message}`); + } + })); +} + +async function addRelease(release, context) { + const existingRelease = await knex('releases') + .leftJoin('entities', 'entities.id', 'releases.entity_id') + .where('entry_id', release.entryId) + .where('entities.slug', release.entity.slug) + .where('entities.type', release.entity.type) + .first(); + + if (existingRelease) { + return false; + } + + const [entity] = await Promise.all([ + knex('entities').select('id').where(release.entity).first(), + ]); + + if (!entity) { + throw new Error(`Release contains non-existent ${release.entity.type} '${release.entity.slug}'`); + } + + const [releaseId] = await knex('releases') + .insert({ + entry_id: release.entryId, + entity_id: entity.id, + studio_id: context.studioIdsBySlug[release.studio], + shoot_id: release.shootId, + url: release.url, + title: release.title, + slug: release.slug, + date: release.date, + date_precision: release.datePrecision, + production_date: release.productionDate, + description: release.description, + duration: release.duration, + created_batch_id: context.batchId, + updated_batch_id: context.batchId, + }) + .returning('id'); + + const releaseWithId = { ...release, id: releaseId }; + + await Promise.all([ + addReleaseTags(releaseWithId, context), + addReleaseActors(releaseWithId, context), + addReleaseDirectors(releaseWithId, context), + addReleaseChapters(releaseWithId, context), + addReleaseMedia([releaseWithId.poster], releaseWithId, 'posters', context), + addReleaseMedia(releaseWithId.photos, releaseWithId, 'photos', context), + // addReleaseMedia(releaseWithId.covers, releaseWithId, 'covers', context), + ]); + + return true; +} + +async function load() { + const file = await fs.readFile(args.file, 'utf8'); + const releases = JSON.parse(file); + + const [batchId] = await knex('batches').insert({ comment: `import ${args.file}` }).returning('id'); + + const aggTags = Array.from(new Set(releases.flatMap((release) => [...release.tags, ...release.chapters.flatMap((chapter) => chapter.tags)]).filter(Boolean))); + const aggStudios = Array.from(new Set(releases.map((release) => release.studio).filter(Boolean))); + + const tags = await knex('tags') + .select('id', 'slug') + .whereIn('slug', aggTags); + + const studios = await knex('entities') + .select('id', 'slug') + .where('type', 'studio') + .whereIn('slug', aggStudios); + + const tagIdsBySlug = Object.fromEntries(tags.map((tag) => [tag.slug, tag.id])); + const studioIdsBySlug = Object.fromEntries(studios.map((studio) => [studio.slug, studio.id])); + + const added = await releases.reduce(async (chain, release) => { + const acc = await chain; + const isAdded = await addRelease(release, { batchId, tagIdsBySlug, studioIdsBySlug }); + + return acc.concat(isAdded); + }, Promise.resolve([])); + + console.log(`Loaded ${added.filter(Boolean).length}/${releases.length} scenes in batch ${batchId}`); + + process.exit(); +} + +({ + save, + load, +})[args._](); diff --git a/src/web/postgraphile.js b/src/web/postgraphile.js index 67f009c4b..ae2134938 100755 --- a/src/web/postgraphile.js +++ b/src/web/postgraphile.js @@ -1,5 +1,6 @@ 'use strict'; +/* eslint-disable arrow-body-style */ const config = require('config'); const { postgraphile } = require('postgraphile'); @@ -7,7 +8,6 @@ const { postgraphile } = require('postgraphile'); const PgConnectionFilterPlugin = require('postgraphile-plugin-connection-filter'); const PgSimplifyInflectorPlugin = require('@graphile-contrib/pg-simplify-inflector'); const PgOrderByRelatedPlugin = require('@graphile-contrib/pg-order-by-related'); -const PgAggregatesPlugin = require('@graphile/pg-aggregates').default; const { ActorPlugins, SitePlugins, ReleasePlugins, MediaPlugins } = require('./plugins/plugins'); @@ -19,34 +19,6 @@ async function pgSettings(req) { }; } -// console.log(PgAggregatesPlugin); - -/* -const TagsAggregatePlugin = (builder) => { - builder.hook('build', (build) => { - const pgAggregateSpecs = [ - { - id: 'tags', - humanLabel: 'tags', - HumanLabel: 'Tags', - sqlAggregateWrap: (sqlFrag) => { - // console.log('sql frag', sqlFrag); - return build.pgSql.fragment`select tag_id from tags where release_id = ${sqlFrag}`; - }, - isSuitableType: (pgType) => { - // console.log('pg type', pgType); - return pgType.category === 'N'; - }, - }, - ]; - - build.pgAggregateGroupBySpecs = pgAggregateSpecs; // eslint-disable-line no-param-reassign - - return build; - }); -}; -*/ - module.exports = postgraphile( connectionString, 'public', @@ -67,13 +39,11 @@ module.exports = postgraphile( appendPlugins: [ PgSimplifyInflectorPlugin, PgConnectionFilterPlugin, - PgAggregatesPlugin, PgOrderByRelatedPlugin, ...ActorPlugins, ...SitePlugins, ...ReleasePlugins, ...MediaPlugins, - // TagsAggregatePlugin, ], pgSettings, },