diff --git a/assets/components/releases/release.vue b/assets/components/releases/release.vue index 39011b60..14da7b86 100644 --- a/assets/components/releases/release.vue +++ b/assets/components/releases/release.vue @@ -94,7 +94,7 @@ Promise.resolve() table.unique(['slug', 'type']); - table.text('alias'); + table.specificType('alias', 'text[]'); table.text('url'); table.text('description'); @@ -820,6 +820,8 @@ exports.up = knex => Promise.resolve() WHERE name ILIKE ('%' || search || '%') OR slug ILIKE ('%' || search || '%') OR + array_to_string(alias, '') ILIKE ('%' || search || '%') OR + replace(array_to_string(alias, ''), ' ', '') ILIKE ('%' || search || '%') OR url ILIKE ('%' || search || '%') $$ LANGUAGE SQL STABLE; diff --git a/public/img/logos/ddfnetwork/bustylover.png b/public/img/logos/ddfnetwork/bustylover.png deleted file mode 100644 index fc240e8d..00000000 Binary files a/public/img/logos/ddfnetwork/bustylover.png and /dev/null differ diff --git a/public/img/logos/ddfnetwork/favicon.png b/public/img/logos/ddfnetwork/favicon.png deleted file mode 100644 index 3019bb9a..00000000 Binary files a/public/img/logos/ddfnetwork/favicon.png and /dev/null differ diff --git a/public/img/logos/ddfnetwork/fuckinhd.png b/public/img/logos/ddfnetwork/fuckinhd.png deleted file mode 100644 index 57907e15..00000000 Binary files a/public/img/logos/ddfnetwork/fuckinhd.png and /dev/null differ diff --git a/public/img/logos/ddfnetwork/lazy/favicon.png b/public/img/logos/ddfnetwork/lazy/favicon.png deleted file mode 100644 index 49e323bb..00000000 Binary files a/public/img/logos/ddfnetwork/lazy/favicon.png and /dev/null differ diff --git a/public/img/logos/ddfnetwork/thumbs/favicon.png b/public/img/logos/ddfnetwork/thumbs/favicon.png deleted file mode 100644 index cdf9fd7a..00000000 Binary files a/public/img/logos/ddfnetwork/thumbs/favicon.png and /dev/null differ diff --git a/public/img/logos/pervcity/lazy/analoverdose.png b/public/img/logos/pervcity/lazy/analoverdose.png index 46ccfaef..5a5e7592 100644 Binary files a/public/img/logos/pervcity/lazy/analoverdose.png and b/public/img/logos/pervcity/lazy/analoverdose.png differ diff --git a/public/img/logos/pervcity/lazy/bangingbeauties.png b/public/img/logos/pervcity/lazy/bangingbeauties.png index 2cb906d8..c3796409 100644 Binary files a/public/img/logos/pervcity/lazy/bangingbeauties.png and b/public/img/logos/pervcity/lazy/bangingbeauties.png differ diff --git a/public/img/logos/pervcity/lazy/chocolatebjs.png b/public/img/logos/pervcity/lazy/chocolatebjs.png index 91cc3f9a..033f42eb 100644 Binary files a/public/img/logos/pervcity/lazy/chocolatebjs.png and b/public/img/logos/pervcity/lazy/chocolatebjs.png differ diff --git a/public/img/logos/pervcity/lazy/favicon.png b/public/img/logos/pervcity/lazy/favicon.png index 51d42f1f..b9a5f9c6 100644 Binary files a/public/img/logos/pervcity/lazy/favicon.png and b/public/img/logos/pervcity/lazy/favicon.png differ diff --git a/public/img/logos/pervcity/lazy/network.png b/public/img/logos/pervcity/lazy/network.png index 8229d948..4c74d1c7 100644 Binary files a/public/img/logos/pervcity/lazy/network.png and b/public/img/logos/pervcity/lazy/network.png differ diff --git a/public/img/logos/pervcity/lazy/oraloverdose.png b/public/img/logos/pervcity/lazy/oraloverdose.png index 26a467a3..2f20f677 100644 Binary files a/public/img/logos/pervcity/lazy/oraloverdose.png and b/public/img/logos/pervcity/lazy/oraloverdose.png differ diff --git a/public/img/logos/pervcity/lazy/pervcity.png b/public/img/logos/pervcity/lazy/pervcity.png new file mode 100644 index 00000000..10c3f5ec Binary files /dev/null and b/public/img/logos/pervcity/lazy/pervcity.png differ diff --git a/public/img/logos/pervcity/lazy/upherasshole.png b/public/img/logos/pervcity/lazy/upherasshole.png index f8c9a674..6333ab4d 100644 Binary files a/public/img/logos/pervcity/lazy/upherasshole.png and b/public/img/logos/pervcity/lazy/upherasshole.png differ diff --git a/public/img/logos/pervcity/pervcity.png b/public/img/logos/pervcity/pervcity.png new file mode 100644 index 00000000..5674a5a1 Binary files /dev/null and b/public/img/logos/pervcity/pervcity.png differ diff --git a/public/img/logos/pervcity/thumbs/analoverdose.png b/public/img/logos/pervcity/thumbs/analoverdose.png index 08add526..33dbb799 100644 Binary files a/public/img/logos/pervcity/thumbs/analoverdose.png and b/public/img/logos/pervcity/thumbs/analoverdose.png differ diff --git a/public/img/logos/pervcity/thumbs/bangingbeauties.png b/public/img/logos/pervcity/thumbs/bangingbeauties.png index 639e5d5a..515c0192 100644 Binary files a/public/img/logos/pervcity/thumbs/bangingbeauties.png and b/public/img/logos/pervcity/thumbs/bangingbeauties.png differ diff --git a/public/img/logos/pervcity/thumbs/chocolatebjs.png b/public/img/logos/pervcity/thumbs/chocolatebjs.png index 2b937b08..84553098 100644 Binary files a/public/img/logos/pervcity/thumbs/chocolatebjs.png and b/public/img/logos/pervcity/thumbs/chocolatebjs.png differ diff --git a/public/img/logos/pervcity/thumbs/favicon.png b/public/img/logos/pervcity/thumbs/favicon.png index 51d42f1f..b9a5f9c6 100644 Binary files a/public/img/logos/pervcity/thumbs/favicon.png and b/public/img/logos/pervcity/thumbs/favicon.png differ diff --git a/public/img/logos/pervcity/thumbs/network.png b/public/img/logos/pervcity/thumbs/network.png index 61e31c21..1ec6561f 100644 Binary files a/public/img/logos/pervcity/thumbs/network.png and b/public/img/logos/pervcity/thumbs/network.png differ diff --git a/public/img/logos/pervcity/thumbs/oraloverdose.png b/public/img/logos/pervcity/thumbs/oraloverdose.png index bc8f3113..942ae384 100644 Binary files a/public/img/logos/pervcity/thumbs/oraloverdose.png and b/public/img/logos/pervcity/thumbs/oraloverdose.png differ diff --git a/public/img/logos/pervcity/thumbs/pervcity.png b/public/img/logos/pervcity/thumbs/pervcity.png new file mode 100644 index 00000000..5d8f91b2 Binary files /dev/null and b/public/img/logos/pervcity/thumbs/pervcity.png differ diff --git a/public/img/logos/pervcity/thumbs/upherasshole.png b/public/img/logos/pervcity/thumbs/upherasshole.png index 16443dcc..f2fb6227 100644 Binary files a/public/img/logos/pervcity/thumbs/upherasshole.png and b/public/img/logos/pervcity/thumbs/upherasshole.png differ diff --git a/public/img/logos/ddfnetwork/1byday.png b/public/img/logos/pornworld/1byday.png similarity index 95% rename from public/img/logos/ddfnetwork/1byday.png rename to public/img/logos/pornworld/1byday.png index 3eacb60e..89922771 100644 Binary files a/public/img/logos/ddfnetwork/1byday.png and b/public/img/logos/pornworld/1byday.png differ diff --git a/public/img/logos/pornworld/bustylover.png b/public/img/logos/pornworld/bustylover.png new file mode 100644 index 00000000..ca9e3597 Binary files /dev/null and b/public/img/logos/pornworld/bustylover.png differ diff --git a/public/img/logos/ddfnetwork/ddfbusty.png b/public/img/logos/pornworld/ddfbusty.png similarity index 95% rename from public/img/logos/ddfnetwork/ddfbusty.png rename to public/img/logos/pornworld/ddfbusty.png index 2ac6cd96..ac1329b8 100644 Binary files a/public/img/logos/ddfnetwork/ddfbusty.png and b/public/img/logos/pornworld/ddfbusty.png differ diff --git a/public/img/logos/ddfnetwork/network.png b/public/img/logos/pornworld/ddfnetwork.png similarity index 98% rename from public/img/logos/ddfnetwork/network.png rename to public/img/logos/pornworld/ddfnetwork.png index 02a5a2b4..72501929 100644 Binary files a/public/img/logos/ddfnetwork/network.png and b/public/img/logos/pornworld/ddfnetwork.png differ diff --git a/public/img/logos/ddfnetwork/ddfnetworkvr.png b/public/img/logos/pornworld/ddfnetworkvr.png similarity index 97% rename from public/img/logos/ddfnetwork/ddfnetworkvr.png rename to public/img/logos/pornworld/ddfnetworkvr.png index c3c02734..7f359500 100644 Binary files a/public/img/logos/ddfnetwork/ddfnetworkvr.png and b/public/img/logos/pornworld/ddfnetworkvr.png differ diff --git a/public/img/logos/ddfnetwork/eurogirlsongirls.png b/public/img/logos/pornworld/eurogirlsongirls.png similarity index 96% rename from public/img/logos/ddfnetwork/eurogirlsongirls.png rename to public/img/logos/pornworld/eurogirlsongirls.png index 6439e49f..ffaaca27 100644 Binary files a/public/img/logos/ddfnetwork/eurogirlsongirls.png and b/public/img/logos/pornworld/eurogirlsongirls.png differ diff --git a/public/img/logos/ddfnetwork/euroteenerotica.png b/public/img/logos/pornworld/euroteenerotica.png similarity index 96% rename from public/img/logos/ddfnetwork/euroteenerotica.png rename to public/img/logos/pornworld/euroteenerotica.png index 1d96431a..9dbd56ed 100644 Binary files a/public/img/logos/ddfnetwork/euroteenerotica.png and b/public/img/logos/pornworld/euroteenerotica.png differ diff --git a/public/img/logos/pornworld/favicon.png b/public/img/logos/pornworld/favicon.png new file mode 100644 index 00000000..74693d34 Binary files /dev/null and b/public/img/logos/pornworld/favicon.png differ diff --git a/public/img/logos/pornworld/fuckinhd.png b/public/img/logos/pornworld/fuckinhd.png new file mode 100644 index 00000000..45263b05 Binary files /dev/null and b/public/img/logos/pornworld/fuckinhd.png differ diff --git a/public/img/logos/ddfnetwork/handsonhardcore.png b/public/img/logos/pornworld/handsonhardcore.png similarity index 97% rename from public/img/logos/ddfnetwork/handsonhardcore.png rename to public/img/logos/pornworld/handsonhardcore.png index a77d49b0..2d9d96f1 100644 Binary files a/public/img/logos/ddfnetwork/handsonhardcore.png and b/public/img/logos/pornworld/handsonhardcore.png differ diff --git a/public/img/logos/ddfnetwork/hotlegsandfeet.png b/public/img/logos/pornworld/hotlegsandfeet.png similarity index 96% rename from public/img/logos/ddfnetwork/hotlegsandfeet.png rename to public/img/logos/pornworld/hotlegsandfeet.png index db7d05cc..cc025fff 100644 Binary files a/public/img/logos/ddfnetwork/hotlegsandfeet.png and b/public/img/logos/pornworld/hotlegsandfeet.png differ diff --git a/public/img/logos/ddfnetwork/houseoftaboo.png b/public/img/logos/pornworld/houseoftaboo.png similarity index 96% rename from public/img/logos/ddfnetwork/houseoftaboo.png rename to public/img/logos/pornworld/houseoftaboo.png index d4780fab..87ad85b3 100644 Binary files a/public/img/logos/ddfnetwork/houseoftaboo.png and b/public/img/logos/pornworld/houseoftaboo.png differ diff --git a/public/img/logos/ddfnetwork/lazy/1byday.png b/public/img/logos/pornworld/lazy/1byday.png similarity index 92% rename from public/img/logos/ddfnetwork/lazy/1byday.png rename to public/img/logos/pornworld/lazy/1byday.png index 4d1991b0..f0421a88 100644 Binary files a/public/img/logos/ddfnetwork/lazy/1byday.png and b/public/img/logos/pornworld/lazy/1byday.png differ diff --git a/public/img/logos/ddfnetwork/lazy/bustylover.png b/public/img/logos/pornworld/lazy/bustylover.png similarity index 92% rename from public/img/logos/ddfnetwork/lazy/bustylover.png rename to public/img/logos/pornworld/lazy/bustylover.png index 022c8946..9bc76260 100644 Binary files a/public/img/logos/ddfnetwork/lazy/bustylover.png and b/public/img/logos/pornworld/lazy/bustylover.png differ diff --git a/public/img/logos/ddfnetwork/lazy/ddfbusty.png b/public/img/logos/pornworld/lazy/ddfbusty.png similarity index 91% rename from public/img/logos/ddfnetwork/lazy/ddfbusty.png rename to public/img/logos/pornworld/lazy/ddfbusty.png index bb568e35..f03ea9e1 100644 Binary files a/public/img/logos/ddfnetwork/lazy/ddfbusty.png and b/public/img/logos/pornworld/lazy/ddfbusty.png differ diff --git a/public/img/logos/ddfnetwork/lazy/network.png b/public/img/logos/pornworld/lazy/ddfnetwork.png similarity index 89% rename from public/img/logos/ddfnetwork/lazy/network.png rename to public/img/logos/pornworld/lazy/ddfnetwork.png index cbf50aa1..06effa1b 100644 Binary files a/public/img/logos/ddfnetwork/lazy/network.png and b/public/img/logos/pornworld/lazy/ddfnetwork.png differ diff --git a/public/img/logos/ddfnetwork/lazy/ddfnetworkvr.png b/public/img/logos/pornworld/lazy/ddfnetworkvr.png similarity index 92% rename from public/img/logos/ddfnetwork/lazy/ddfnetworkvr.png rename to public/img/logos/pornworld/lazy/ddfnetworkvr.png index d8107057..a4e1629d 100644 Binary files a/public/img/logos/ddfnetwork/lazy/ddfnetworkvr.png and b/public/img/logos/pornworld/lazy/ddfnetworkvr.png differ diff --git a/public/img/logos/ddfnetwork/lazy/eurogirlsongirls.png b/public/img/logos/pornworld/lazy/eurogirlsongirls.png similarity index 92% rename from public/img/logos/ddfnetwork/lazy/eurogirlsongirls.png rename to public/img/logos/pornworld/lazy/eurogirlsongirls.png index 3a7bc6d5..72006b77 100644 Binary files a/public/img/logos/ddfnetwork/lazy/eurogirlsongirls.png and b/public/img/logos/pornworld/lazy/eurogirlsongirls.png differ diff --git a/public/img/logos/ddfnetwork/lazy/euroteenerotica.png b/public/img/logos/pornworld/lazy/euroteenerotica.png similarity index 91% rename from public/img/logos/ddfnetwork/lazy/euroteenerotica.png rename to public/img/logos/pornworld/lazy/euroteenerotica.png index 272b63db..3d5f462b 100644 Binary files a/public/img/logos/ddfnetwork/lazy/euroteenerotica.png and b/public/img/logos/pornworld/lazy/euroteenerotica.png differ diff --git a/public/img/logos/pornworld/lazy/favicon.png b/public/img/logos/pornworld/lazy/favicon.png new file mode 100644 index 00000000..9561177a Binary files /dev/null and b/public/img/logos/pornworld/lazy/favicon.png differ diff --git a/public/img/logos/ddfnetwork/lazy/fuckinhd.png b/public/img/logos/pornworld/lazy/fuckinhd.png similarity index 91% rename from public/img/logos/ddfnetwork/lazy/fuckinhd.png rename to public/img/logos/pornworld/lazy/fuckinhd.png index 89f76ffc..2d75c9bc 100644 Binary files a/public/img/logos/ddfnetwork/lazy/fuckinhd.png and b/public/img/logos/pornworld/lazy/fuckinhd.png differ diff --git a/public/img/logos/ddfnetwork/lazy/handsonhardcore.png b/public/img/logos/pornworld/lazy/handsonhardcore.png similarity index 91% rename from public/img/logos/ddfnetwork/lazy/handsonhardcore.png rename to public/img/logos/pornworld/lazy/handsonhardcore.png index 815ba633..f593a3b7 100644 Binary files a/public/img/logos/ddfnetwork/lazy/handsonhardcore.png and b/public/img/logos/pornworld/lazy/handsonhardcore.png differ diff --git a/public/img/logos/ddfnetwork/lazy/hotlegsandfeet.png b/public/img/logos/pornworld/lazy/hotlegsandfeet.png similarity index 89% rename from public/img/logos/ddfnetwork/lazy/hotlegsandfeet.png rename to public/img/logos/pornworld/lazy/hotlegsandfeet.png index abc2f323..9806ff15 100644 Binary files a/public/img/logos/ddfnetwork/lazy/hotlegsandfeet.png and b/public/img/logos/pornworld/lazy/hotlegsandfeet.png differ diff --git a/public/img/logos/ddfnetwork/lazy/houseoftaboo.png b/public/img/logos/pornworld/lazy/houseoftaboo.png similarity index 92% rename from public/img/logos/ddfnetwork/lazy/houseoftaboo.png rename to public/img/logos/pornworld/lazy/houseoftaboo.png index abebc9f1..9973283c 100644 Binary files a/public/img/logos/ddfnetwork/lazy/houseoftaboo.png and b/public/img/logos/pornworld/lazy/houseoftaboo.png differ diff --git a/public/img/logos/pornworld/lazy/network.png b/public/img/logos/pornworld/lazy/network.png new file mode 100644 index 00000000..185634e8 Binary files /dev/null and b/public/img/logos/pornworld/lazy/network.png differ diff --git a/public/img/logos/ddfnetwork/lazy/onlyblowjob.png b/public/img/logos/pornworld/lazy/onlyblowjob.png similarity index 92% rename from public/img/logos/ddfnetwork/lazy/onlyblowjob.png rename to public/img/logos/pornworld/lazy/onlyblowjob.png index 1c30586c..e2076dd3 100644 Binary files a/public/img/logos/ddfnetwork/lazy/onlyblowjob.png and b/public/img/logos/pornworld/lazy/onlyblowjob.png differ diff --git a/public/img/logos/pornworld/lazy/pornworld.png b/public/img/logos/pornworld/lazy/pornworld.png new file mode 100644 index 00000000..7cea14ac Binary files /dev/null and b/public/img/logos/pornworld/lazy/pornworld.png differ diff --git a/public/img/logos/ddfnetwork/misc/busty-lover.png b/public/img/logos/pornworld/misc/busty-lover.png similarity index 100% rename from public/img/logos/ddfnetwork/misc/busty-lover.png rename to public/img/logos/pornworld/misc/busty-lover.png diff --git a/public/img/logos/ddfnetwork/misc/busty-lover.svg b/public/img/logos/pornworld/misc/busty-lover.svg similarity index 100% rename from public/img/logos/ddfnetwork/misc/busty-lover.svg rename to public/img/logos/pornworld/misc/busty-lover.svg diff --git a/public/img/logos/ddfnetwork/misc/fuck-in-hd.png b/public/img/logos/pornworld/misc/fuck-in-hd.png similarity index 100% rename from public/img/logos/ddfnetwork/misc/fuck-in-hd.png rename to public/img/logos/pornworld/misc/fuck-in-hd.png diff --git a/public/img/logos/ddfnetwork/misc/fuck-in-hd.svg b/public/img/logos/pornworld/misc/fuck-in-hd.svg similarity index 100% rename from public/img/logos/ddfnetwork/misc/fuck-in-hd.svg rename to public/img/logos/pornworld/misc/fuck-in-hd.svg diff --git a/public/img/logos/ddfnetwork/misc/porn-world.png b/public/img/logos/pornworld/misc/porn-world.png similarity index 100% rename from public/img/logos/ddfnetwork/misc/porn-world.png rename to public/img/logos/pornworld/misc/porn-world.png diff --git a/public/img/logos/ddfnetwork/misc/porn-world_basic.png b/public/img/logos/pornworld/misc/porn-world_basic.png similarity index 100% rename from public/img/logos/ddfnetwork/misc/porn-world_basic.png rename to public/img/logos/pornworld/misc/porn-world_basic.png diff --git a/public/img/logos/ddfnetwork/misc/porn-world_basic.svg b/public/img/logos/pornworld/misc/porn-world_basic.svg similarity index 100% rename from public/img/logos/ddfnetwork/misc/porn-world_basic.svg rename to public/img/logos/pornworld/misc/porn-world_basic.svg diff --git a/public/img/logos/pornworld/network.png b/public/img/logos/pornworld/network.png new file mode 100644 index 00000000..f9bd2881 Binary files /dev/null and b/public/img/logos/pornworld/network.png differ diff --git a/public/img/logos/ddfnetwork/onlyblowjob.png b/public/img/logos/pornworld/onlyblowjob.png similarity index 97% rename from public/img/logos/ddfnetwork/onlyblowjob.png rename to public/img/logos/pornworld/onlyblowjob.png index 1e39e367..dd8bf114 100644 Binary files a/public/img/logos/ddfnetwork/onlyblowjob.png and b/public/img/logos/pornworld/onlyblowjob.png differ diff --git a/public/img/logos/pornworld/pornworld.png b/public/img/logos/pornworld/pornworld.png new file mode 100644 index 00000000..546e9927 Binary files /dev/null and b/public/img/logos/pornworld/pornworld.png differ diff --git a/public/img/logos/ddfnetwork/thumbs/1byday.png b/public/img/logos/pornworld/thumbs/1byday.png similarity index 97% rename from public/img/logos/ddfnetwork/thumbs/1byday.png rename to public/img/logos/pornworld/thumbs/1byday.png index f507ced3..06df96cb 100644 Binary files a/public/img/logos/ddfnetwork/thumbs/1byday.png and b/public/img/logos/pornworld/thumbs/1byday.png differ diff --git a/public/img/logos/ddfnetwork/thumbs/bustylover.png b/public/img/logos/pornworld/thumbs/bustylover.png similarity index 97% rename from public/img/logos/ddfnetwork/thumbs/bustylover.png rename to public/img/logos/pornworld/thumbs/bustylover.png index de10a47f..20a504ff 100644 Binary files a/public/img/logos/ddfnetwork/thumbs/bustylover.png and b/public/img/logos/pornworld/thumbs/bustylover.png differ diff --git a/public/img/logos/ddfnetwork/thumbs/ddfbusty.png b/public/img/logos/pornworld/thumbs/ddfbusty.png similarity index 97% rename from public/img/logos/ddfnetwork/thumbs/ddfbusty.png rename to public/img/logos/pornworld/thumbs/ddfbusty.png index f35af1af..8823ef6c 100644 Binary files a/public/img/logos/ddfnetwork/thumbs/ddfbusty.png and b/public/img/logos/pornworld/thumbs/ddfbusty.png differ diff --git a/public/img/logos/ddfnetwork/thumbs/network.png b/public/img/logos/pornworld/thumbs/ddfnetwork.png similarity index 97% rename from public/img/logos/ddfnetwork/thumbs/network.png rename to public/img/logos/pornworld/thumbs/ddfnetwork.png index 9e9f845c..e9134421 100644 Binary files a/public/img/logos/ddfnetwork/thumbs/network.png and b/public/img/logos/pornworld/thumbs/ddfnetwork.png differ diff --git a/public/img/logos/ddfnetwork/thumbs/ddfnetworkvr.png b/public/img/logos/pornworld/thumbs/ddfnetworkvr.png similarity index 97% rename from public/img/logos/ddfnetwork/thumbs/ddfnetworkvr.png rename to public/img/logos/pornworld/thumbs/ddfnetworkvr.png index 719ac94d..e7508835 100644 Binary files a/public/img/logos/ddfnetwork/thumbs/ddfnetworkvr.png and b/public/img/logos/pornworld/thumbs/ddfnetworkvr.png differ diff --git a/public/img/logos/ddfnetwork/thumbs/eurogirlsongirls.png b/public/img/logos/pornworld/thumbs/eurogirlsongirls.png similarity index 97% rename from public/img/logos/ddfnetwork/thumbs/eurogirlsongirls.png rename to public/img/logos/pornworld/thumbs/eurogirlsongirls.png index bd0af7e9..5e167f5a 100644 Binary files a/public/img/logos/ddfnetwork/thumbs/eurogirlsongirls.png and b/public/img/logos/pornworld/thumbs/eurogirlsongirls.png differ diff --git a/public/img/logos/ddfnetwork/thumbs/euroteenerotica.png b/public/img/logos/pornworld/thumbs/euroteenerotica.png similarity index 97% rename from public/img/logos/ddfnetwork/thumbs/euroteenerotica.png rename to public/img/logos/pornworld/thumbs/euroteenerotica.png index d6e58f4d..19c8100e 100644 Binary files a/public/img/logos/ddfnetwork/thumbs/euroteenerotica.png and b/public/img/logos/pornworld/thumbs/euroteenerotica.png differ diff --git a/public/img/logos/pornworld/thumbs/favicon.png b/public/img/logos/pornworld/thumbs/favicon.png new file mode 100644 index 00000000..df7d1e41 Binary files /dev/null and b/public/img/logos/pornworld/thumbs/favicon.png differ diff --git a/public/img/logos/ddfnetwork/thumbs/fuckinhd.png b/public/img/logos/pornworld/thumbs/fuckinhd.png similarity index 97% rename from public/img/logos/ddfnetwork/thumbs/fuckinhd.png rename to public/img/logos/pornworld/thumbs/fuckinhd.png index 0ea5966d..b2b6c948 100644 Binary files a/public/img/logos/ddfnetwork/thumbs/fuckinhd.png and b/public/img/logos/pornworld/thumbs/fuckinhd.png differ diff --git a/public/img/logos/ddfnetwork/thumbs/handsonhardcore.png b/public/img/logos/pornworld/thumbs/handsonhardcore.png similarity index 97% rename from public/img/logos/ddfnetwork/thumbs/handsonhardcore.png rename to public/img/logos/pornworld/thumbs/handsonhardcore.png index ba0964d7..41c6582b 100644 Binary files a/public/img/logos/ddfnetwork/thumbs/handsonhardcore.png and b/public/img/logos/pornworld/thumbs/handsonhardcore.png differ diff --git a/public/img/logos/ddfnetwork/thumbs/hotlegsandfeet.png b/public/img/logos/pornworld/thumbs/hotlegsandfeet.png similarity index 97% rename from public/img/logos/ddfnetwork/thumbs/hotlegsandfeet.png rename to public/img/logos/pornworld/thumbs/hotlegsandfeet.png index 92f2b5ee..5df4d5a2 100644 Binary files a/public/img/logos/ddfnetwork/thumbs/hotlegsandfeet.png and b/public/img/logos/pornworld/thumbs/hotlegsandfeet.png differ diff --git a/public/img/logos/ddfnetwork/thumbs/houseoftaboo.png b/public/img/logos/pornworld/thumbs/houseoftaboo.png similarity index 97% rename from public/img/logos/ddfnetwork/thumbs/houseoftaboo.png rename to public/img/logos/pornworld/thumbs/houseoftaboo.png index 64c76d1a..728aa84b 100644 Binary files a/public/img/logos/ddfnetwork/thumbs/houseoftaboo.png and b/public/img/logos/pornworld/thumbs/houseoftaboo.png differ diff --git a/public/img/logos/pornworld/thumbs/network.png b/public/img/logos/pornworld/thumbs/network.png new file mode 100644 index 00000000..97dd90e2 Binary files /dev/null and b/public/img/logos/pornworld/thumbs/network.png differ diff --git a/public/img/logos/ddfnetwork/thumbs/onlyblowjob.png b/public/img/logos/pornworld/thumbs/onlyblowjob.png similarity index 97% rename from public/img/logos/ddfnetwork/thumbs/onlyblowjob.png rename to public/img/logos/pornworld/thumbs/onlyblowjob.png index 07727847..46508689 100644 Binary files a/public/img/logos/ddfnetwork/thumbs/onlyblowjob.png and b/public/img/logos/pornworld/thumbs/onlyblowjob.png differ diff --git a/public/img/logos/pornworld/thumbs/pornworld.png b/public/img/logos/pornworld/thumbs/pornworld.png new file mode 100644 index 00000000..3d2ddd59 Binary files /dev/null and b/public/img/logos/pornworld/thumbs/pornworld.png differ diff --git a/seeds/01_networks.js b/seeds/01_networks.js index 1b8e420c..f538acce 100644 --- a/seeds/01_networks.js +++ b/seeds/01_networks.js @@ -136,9 +136,13 @@ const networks = [ type: 'info', }, { - slug: 'ddfnetwork', - name: 'DDF Network', - url: 'https://ddfnetwork.com', + slug: 'pornworld', + name: 'Porn World', + alias: [ + 'ddf network', + 'denys defrancesco', + ], + url: 'https://pornworld.com', description: 'European porn videos hub with exclusive VR, 4K and full HD XXX videos and hot sex photos of Europes finest porn star babes.', parent: 'wgcz', }, @@ -417,7 +421,7 @@ exports.seed = knex => Promise.resolve() slug: network.slug, name: network.name, type: network.type || 'network', - alias: network.alias ? network.alias.join(',') : null, + alias: network.alias, url: network.url, description: network.description, parameters: network.parameters, diff --git a/seeds/02_sites.js b/seeds/02_sites.js index c141581d..665e45b4 100644 --- a/seeds/02_sites.js +++ b/seeds/02_sites.js @@ -1455,7 +1455,7 @@ const sites = [ alias: ['ddfb'], url: 'https://ddfbusty.com', description: 'Gorgeous Babes with big tits and Euro pornstars with huge natural boobs filmed in Exclusive Full HD, 4K, & VR porn videos.', - parent: 'ddfnetwork', + parent: 'pornworld', }, { slug: 'handsonhardcore', @@ -1463,7 +1463,7 @@ const sites = [ alias: ['hoh'], url: 'https://handsonhardcore.com', description: 'Hardcore Sex & Anal Fucking Exclusive XXX Videos in VR, 4K and full HD with Hot European Pornstars', - parent: 'ddfnetwork', + parent: 'pornworld', }, { slug: 'houseoftaboo', @@ -1471,7 +1471,7 @@ const sites = [ alias: ['hotb', 'hotab'], url: 'https://houseoftaboo.com', description: 'Exclusive BDSM Porn & Extreme Sex Videos Produced in VR, 4K and full HD with The Hottest European Fetish Pornstars', - parent: 'ddfnetwork', + parent: 'pornworld', }, { slug: 'ddfnetworkvr', @@ -1479,21 +1479,24 @@ const sites = [ alias: ['ddfvr'], url: 'https://ddfnetworkvr.com', description: 'VR Porn Videos shot Exclusively in 180 3D 4K Virtual Reality featuring the Hottest European & American VR Pornstar Babes', - parent: 'ddfnetwork', + parent: 'pornworld', + parameters: { + latest: 'https://ddfnetworkvr.com/home/tagfiltered/keywords/-/', + }, }, { slug: 'eurogirlsongirls', name: 'Euro Girls on Girls', url: 'https://eurogirlsongirls.com', description: 'Hot Lesbian Sex & Glamour Lesbian Porn Videos and Photos Starring Gorgeous European Pornstars in 4K and Full HD VR.', - parent: 'ddfnetwork', + parent: 'pornworld', }, { slug: '1byday', name: '1By-Day', url: 'https://1by-day.com', description: 'Ultra Sexy Exclusive Solo Masturbation Videos in VR, 4K and full HD showcasing Glamour Babes & Intense Orgasms', - parent: 'ddfnetwork', + parent: 'pornworld', }, { slug: 'euroteenerotica', @@ -1501,14 +1504,14 @@ const sites = [ alias: ['ete'], url: 'https://euroteenerotica.com', description: 'Teen Threesomes & Barely Legal Porn Videos in 4K, VR and FULL HD with Hot Nymphomaniac Teen Babes', - parent: 'ddfnetwork', + parent: 'pornworld', }, { slug: 'hotlegsandfeet', name: 'Hot Legs and Feet', url: 'https://hotlegsandfeet.com', description: 'Foot Fetish & Sexy Legs Porn Videos with Hot and Sexy Euro Pornstars', - parent: 'ddfnetwork', + parent: 'pornworld', }, { slug: 'onlyblowjob', @@ -1516,22 +1519,24 @@ const sites = [ alias: ['obj'], url: 'https://onlyblowjob.com', description: 'Fantasy Blowjobs & POV Cock Sucking Videos and Photos Produced in VR, 4K and full HD featuring Sexy European Pornstars', - parent: 'ddfnetwork', + parent: 'pornworld', }, { slug: 'fuckinhd', name: 'Fuck in HD', url: 'https://fuckinhd.com', description: 'HD Hardcore Sex & XXX Fantasy Porn Videos and Photos Produced in full HD featuring a Variety of Hardcore Porn Niches.', - parent: 'ddfnetwork', - parameters: { native: true }, + parent: 'pornworld', }, { slug: 'bustylover', name: 'Busty Lover', url: 'https://bustylover.com', - parent: 'ddfnetwork', - parameters: { native: true }, + parent: 'pornworld', + parameters: { + latest: 'https://bustylover.com/videos/', + blockLayout: true, + }, }, // DIGITAL PLAYGROUND { @@ -7434,7 +7439,7 @@ exports.seed = knex => Promise.resolve() slug: site.slug, name: site.name, type: site.type || 'channel', - alias: (site.alias || []).join(','), + alias: site.alias, description: site.description, url: site.url, parameters: site.parameters, diff --git a/src/actors.js b/src/actors.js index 6ff262f7..6a1cd64f 100644 --- a/src/actors.js +++ b/src/actors.js @@ -64,9 +64,10 @@ const ethnicities = { black: 'black', caucasian: 'white', european: 'white', - hispanic: 'latina', + hispanic: 'latin', indian: 'indian', japanese: 'japanese', + latin: 'latin', latina: 'latina', latino: 'latino', white: 'white', diff --git a/src/media.js b/src/media.js index ede2dc72..4a8f8f6e 100644 --- a/src/media.js +++ b/src/media.js @@ -591,13 +591,20 @@ async function storeMedias(baseMedias) { ); const [uniqueHashMedias, existingHashMedias] = await findHashDuplicates(fetchedMedias); - const newMedias = argv.force ? uniqueHashMedias.concat(existingHashMedias) : uniqueHashMedias; const savedMedias = await Promise.map( - newMedias, + uniqueHashMedias, async baseMedia => storeFile(baseMedia), ); + if (argv.force) { + // overwrite files in case image processing was changed + await Promise.map( + existingHashMedias, + async baseMedia => storeFile(baseMedia), + ); + } + const newMediaWithEntries = savedMedias.map((media, index) => curateMediaEntry(media, index)); const newMediaEntries = newMediaWithEntries.filter(media => media.newEntry).map(media => media.entry); diff --git a/src/scrapers/ddfnetwork.js b/src/scrapers/ddfnetwork.js index 00d64fac..79dcb6e1 100644 --- a/src/scrapers/ddfnetwork.js +++ b/src/scrapers/ddfnetwork.js @@ -2,53 +2,60 @@ const bhttp = require('bhttp'); -const { ed, ex, exa, get } = require('../utils/q'); +const qu = require('../utils/qu'); const slugify = require('../utils/slugify'); -/* eslint-disable newline-per-chained-call */ -function scrapeAll(html, site, origin) { - return exa(html, '.card.m-1:not(.pornstar-card)').map(({ q, qa, qd }) => { +function scrapeAll(scenes, site, origin) { + return scenes.map(({ query }) => { const release = {}; - release.title = q('a', 'title'); - release.url = `${site?.url || origin || 'https://ddfnetwork.com'}${q('a', 'href')}`; - [release.entryId] = release.url.split('/').slice(-1); + release.title = query.q('.card-title a, .videoContent h4 a', 'title'); + release.url = `${site?.url || origin || 'https://pornworld.com'}${query.q('a', 'href')}`; + release.entryId = release.url.match(/\/(\d+)$/)[1]; - release.date = qd('small[datetime]', 'YYYY-MM-DD HH:mm:ss', null, 'datetime'); - release.actors = qa('.card-subtitle a', true).filter(Boolean); + release.date = query.date('small[datetime]', 'YYYY-MM-DD HH:mm:ss', null, 'datetime'); + release.actors = query.all('.card-subtitle a, .featuring a', true).filter(Boolean); - const duration = parseInt(q('.card-info div:nth-child(2) .card-text', true), 10) * 60; + release.description = query.q('h4 + p', true); + + const duration = parseInt(query.q('.card-info div:nth-child(2) .card-text', true), 10) * 60; if (duration) release.duration = duration; + else release.duration = query.dur('.time'); - release.poster = q('img').dataset.src; + release.poster = query.img(); return release; }); } -async function scrapeScene(html, url, _site) { - const { qu } = ex(html); +async function scrapeScene({ query }, url, _site) { const release = {}; - [release.entryId] = url.split('/').slice(-1); + release.entryId = url.match(/\/(\d+)$/)[1]; - release.title = qu.meta('itemprop=name'); - release.description = qu.q('.descr-box p', true); - release.date = qu.date('meta[itemprop=uploadDate]', 'YYYY-MM-DD', null, 'content') - || qu.date('.title-border:nth-child(2) p', 'MM.DD.YYYY'); + release.title = query.meta('itemprop=name') || query.q('.video-title h1', true) || query.q('.about-text .story-title') || query.q('h3', true); + release.description = query.q('.descr-box p', true) || query.q('.about-text p:not(.story-title)', true) || query.text('.description p'); - release.actors = qu.all('.pornstar-card > a', 'title'); - release.tags = qu.all('.tags-tab .tags a', true); + release.date = query.date('meta[itemprop=uploadDate]', 'YYYY-MM-DD', null, 'content') + || query.date('.actors time', 'MMMM DD, YYYY') + || query.date('.title-border:nth-child(2) p', 'MM.DD.YYYY') + || query.date('.length', 'MMMM DD, YYYY', /\w+ \d{2}, \d{4}/); - release.duration = parseInt(qu.q('.icon-video-red + span', true), 10) * 60; - release.likes = Number(qu.q('.icon-like-red + span', true)); + if (query.exists('.pornstar-card > a')) release.actors = query.all('.pornstar-card > a', 'title'); + else if (query.exists('.actors a')) release.actors = query.all('.actors a', true); - release.poster = qu.poster(); - release.photos = qu.urls('.photo-slider-guest .card a'); + if (query.exists('.tags-tab')) release.tags = query.all('.tags-tab .tags a', true); + else if (query.exists('.tags-box')) release.tags = query.all('.tags-box .tags li', true); - release.trailer = qu.all('source[type="video/mp4"]').map(trailer => ({ + release.duration = parseInt(query.q('.icon-video-red + span', true), 10) * 60 || query.dur('.length') || null; + release.likes = Number(query.q('.icon-like-red + span', true)) || null; + + release.poster = query.poster() || query.poster('dl8-video'); + release.photos = query.urls('.photo-slider-guest .card a'); + + release.trailer = query.all('source[type="video/mp4"]').map(trailer => ({ src: trailer.src, - quality: Number(trailer.attributes.res.value), + quality: Number(trailer.attributes.res?.value || trailer.attributes.quality?.value.slice(0, -1)) || null, })); return release; @@ -59,9 +66,9 @@ async function fetchActorReleases(urls) { const sources = urls.filter(url => !/ddfnetwork/.test(url)); const releases = await Promise.all(sources.map(async (url) => { - const { html } = await get(url); + const res = await qu.getAll(url, '.card.m-1:not(.pornstar-card)'); - return scrapeAll(html, null, new URL(url).origin); + return res.ok ? scrapeAll(res.items, null, new URL(url).origin) : null; })); // DDF cross-releases scenes between sites, filter duplicates by entryId @@ -71,11 +78,9 @@ async function fetchActorReleases(urls) { .reduce((acc, release) => ({ ...acc, [release.entryId]: release }), {})); } -async function scrapeProfile(html, _url, actorName) { - const { qu } = ex(html); - - const keys = qu.all('.about-title', true).map(key => slugify(key, '_')); - const values = qu.all('.about-info').map((el) => { +async function scrapeProfile({ query }, _url, actorName) { + const keys = query.all('.about-title', true).map(key => slugify(key, '_')); + const values = query.all('.about-info').map((el) => { if (el.children.length > 0) { return Array.from(el.children, child => child.textContent.trim()).join(', '); } @@ -96,8 +101,8 @@ async function scrapeProfile(html, _url, actorName) { name: actorName, }; - profile.description = qu.q('.description-box', true); - profile.birthdate = ed(bio.birthday, 'MMMM DD, YYYY'); + profile.description = query.q('.description-box', true); + profile.birthdate = qu.extractDate(bio.birthday, 'MMMM DD, YYYY'); if (bio.nationality) profile.nationality = bio.nationality; @@ -118,34 +123,37 @@ async function scrapeProfile(html, _url, actorName) { if (bio.shoe_size) profile.shoes = Number(bio.shoe_size.split('|')[1]); - const avatarEl = qu.q('.pornstar-details .card-img-top'); + const avatarEl = query.q('.pornstar-details .card-img-top'); if (avatarEl && avatarEl.dataset.src.match('^//')) profile.avatar = `https:${avatarEl.dataset.src}`; - profile.releases = await fetchActorReleases(qu.urls('.find-me-tab li a')); + profile.releases = await fetchActorReleases(query.urls('.find-me-tab li a')); return profile; } -async function fetchLatest(site, page = 1) { +async function fetchLatest(channel, page = 1) { + /* ddfnetwork.com redirects to pornworld.com const url = site.parameters?.native ? `${site.url}/videos/search/latest/ever/allsite/-/${page}` : `https://ddfnetwork.com/videos/search/latest/ever/${new URL(site.url).hostname}/-/${page}`; + */ - const res = await bhttp.get(url); + const url = channel.parameters?.latest || `${channel.url}/videos/search/latest/ever/allsite/-/${page}`; + const res = await qu.getAll(url, '.card.m-1:not(.pornstar-card), .allVideos .videoBlock'); - if (res.statusCode === 200) { - return scrapeAll(res.body.toString(), site); + if (res.ok) { + return scrapeAll(res.items, channel); } - return res.statusCode; + return res.status; } async function fetchScene(url, site) { // DDF's main site moved to Porn World // const res = await bhttp.get(`https://ddfnetwork.com${new URL(url).pathname}`); - const res = await bhttp.get(url); + const res = await qu.get(url, '.content, #content, .taspVideoPage'); - return scrapeScene(res.body.toString(), url, site); + return res.ok ? scrapeScene(res.item, url, site) : res.status; } async function fetchProfile(actorName) { @@ -155,7 +163,7 @@ async function fetchProfile(actorName) { word: actorName, }, { - decodeJSON: true, + decodeJSON: false, headers: { 'x-requested-with': 'XMLHttpRequest', }, diff --git a/src/scrapers/kink.js b/src/scrapers/kink.js index a63ad7e2..62339375 100644 --- a/src/scrapers/kink.js +++ b/src/scrapers/kink.js @@ -1,54 +1,54 @@ 'use strict'; -const { get, getAll } = require('../utils/qu'); +const qu = require('../utils/qu'); -function scrapeLatest(scenes) { - return scenes.map(({ qu }) => { +function scrapeAll(scenes) { + return scenes.map(({ query }) => { const release = {}; - const href = qu.url('.shoot-thumb-title a'); + const href = query.url('.shoot-thumb-title a'); release.url = `https://kink.com${href}`; release.shootId = href.split('/').slice(-1)[0]; release.entryId = release.shootId; - release.title = qu.q('.shoot-thumb-title a', true); - release.date = qu.date('.date', 'MMM DD, YYYY'); + release.title = query.q('.shoot-thumb-title a', true); + release.date = query.date('.date', 'MMM DD, YYYY'); - release.actors = qu.all('.shoot-thumb-models a', true); - release.stars = qu.q('.average-rating', 'data-rating') / 10; + release.actors = query.all('.shoot-thumb-models a', true); + release.stars = query.q('.average-rating', 'data-rating') / 10; - release.poster = qu.img('.adimage'); - release.photos = qu.imgs('.rollover .roll-image', 'data-imagesrc').map(photo => [ + release.poster = query.img('.adimage'); + release.photos = query.imgs('.rollover .roll-image', 'data-imagesrc').map(photo => [ photo.replace('410/', '830/'), photo, ]); - release.duration = qu.dur('.video span'); + release.duration = query.dur('.video span'); return release; }); } -async function scrapeScene({ qu }, url) { +async function scrapeScene({ query }, url) { const release = { url }; release.shootId = new URL(url).pathname.split('/')[2]; release.entryId = release.shootId; - release.title = qu.q('.shoot-title span.favorite-button', 'data-title'); - release.description = qu.q('.description-text', true); + release.title = query.q('.shoot-title span.favorite-button', 'data-title'); + release.description = query.q('.description-text', true); - release.date = qu.date('.shoot-date', 'MMMM DD, YYYY'); - release.actors = qu.all('.names a', true).map(actor => actor.replace(/,\s*/, '')); - release.director = qu.q('.director-name', true); + release.date = query.date('.shoot-date', 'MMMM DD, YYYY'); + release.actors = query.all('.names a', true).map(actor => actor.replace(/,\s*/, '')); + release.director = query.q('.director-name', true); - release.photos = qu.imgs('.gallery .thumb img', 'data-image-file'); - release.poster = qu.poster(); + release.photos = query.imgs('.gallery .thumb img', 'data-image-file'); + release.poster = query.poster(); - release.tags = qu.all('.tag-list a[href*="/tag"]', true).map(tag => tag.replace(/,\s*/, '')); + release.tags = query.all('.tag-list a[href*="/tag"]', true).map(tag => tag.replace(/,\s*/, '')); - const trailer = qu.q('.player span[data-type="trailer-src"]', 'data-url'); + const trailer = query.q('.player span[data-type="trailer-src"]', 'data-url'); release.trailer = [ { @@ -69,23 +69,77 @@ async function scrapeScene({ qu }, url) { }, ]; - release.channel = qu.url('.shoot-logo a').split('/').slice(-1)[0]; + release.channel = query.url('.shoot-logo a').split('/').slice(-1)[0]; return release; } -async function fetchLatest(site, page = 1) { - const res = await getAll(`${site.url}/latest/page/${page}`, '.shoot-list .shoot'); +async function fetchActorReleases(actorUrl, page = 1, accReleases = []) { + const res = await qu.get(`${actorUrl}?page=${page}`); if (res.ok) { - return scrapeLatest(res.items, site); + const releases = scrapeAll(qu.initAll(res.item.el, '.shoot-list .shoot')); + const hasNextPage = res.item.query.exists('.paginated-nav li:last-child:not(.disabled)'); + + if (hasNextPage) { + return fetchActorReleases(actorUrl, page + 1, accReleases.concat(releases)); + } + + return accReleases.concat(releases); + } + + return accReleases; +} + +async function scrapeProfile({ query }, actorUrl, include) { + const profile = {}; + + profile.description = query.q('.bio #expand-text', true); + + const tags = query.all('.bio-tags a', true); + + if (tags.includes('brunette') || tags.includes('brunet')) profile.hairColor = 'brown'; + if (tags.includes('blonde') || tags.includes('blond')) profile.hairColor = 'blonde'; + if (tags.includes('black hair')) profile.hairColor = 'black'; + if (tags.includes('redhead')) profile.hairColor = 'red'; + + if (tags.includes('natural boobs')) profile.naturalBoobs = true; + if (tags.includes('fake boobs')) profile.naturalBoobs = false; + + if (tags.includes('white')) profile.ethnicity = 'white'; + if (tags.includes('latin')) profile.ethnicity = 'latin'; + if (tags.includes('Black')) profile.ethnicity = 'black'; + + if (tags.includes('pierced nipples')) profile.hasPiercings = true; + if (tags.includes('tattoo')) profile.hasTattoos = true; + + if (tags.includes('foreskin')) profile.hasForeskin = true; + + if ((tags.includes('big dick') || tags.includes('foreskin')) + && (tags.includes('fake boobs') || tags.includes('big tits'))) profile.gender = 'transsexual'; + + profile.avatar = query.img('.bio-slider-img, .bio-img:not([src*="Missing"])'); + profile.social = query.urls('a.social-link'); + + if (include.releases) { + profile.releases = await fetchActorReleases(actorUrl); + } + + return profile; +} + +async function fetchLatest(site, page = 1) { + const res = await qu.getAll(`${site.url}/latest/page/${page}`, '.shoot-list .shoot'); + + if (res.ok) { + return scrapeAll(res.items, site); } return res.status; } async function fetchScene(url, site) { - const res = await get(url); + const res = await qu.get(url); if (res.ok) { return scrapeScene(res.item, url, site); @@ -94,7 +148,32 @@ async function fetchScene(url, site) { return res.status; } +async function fetchProfile(actorName, entity, include) { + const searchRes = await qu.getAll(`https://kink.com/search?type=performers&q=${actorName}`, '.model'); + + if (searchRes.ok) { + const actorItem = searchRes.items.find(() => qu.query.exists(`.model-link img[alt="${actorName}"]`)); + + if (actorItem) { + const actorPath = actorItem.query.url('.model-link'); + const actorUrl = `https://kink.com${actorPath}`; + const actorRes = await qu.get(actorUrl); + + if (actorRes.ok) { + return scrapeProfile(actorRes.item, actorUrl, include); + } + + return actorRes.status; + } + + return null; + } + + return searchRes.status; +} + module.exports = { fetchLatest, fetchScene, + fetchProfile, }; diff --git a/src/scrapers/pervcity.js b/src/scrapers/pervcity.js index 1f827988..46a5431a 100644 --- a/src/scrapers/pervcity.js +++ b/src/scrapers/pervcity.js @@ -4,7 +4,7 @@ const qu = require('../utils/qu'); const slugify = require('../utils/slugify'); const { feetInchesToCm, lbsToKg } = require('../utils/convert'); -function scrapeAll(scenes) { +function scrapeAll(scenes, entity) { return scenes.map(({ query }) => { const release = {}; @@ -20,6 +20,7 @@ function scrapeAll(scenes) { release.actors = query.all('.tour_update_models a', true); release.poster = query.img('.videoPic img'); + release.entity = entity; return release; }); @@ -76,10 +77,21 @@ function scrapeProfile({ query }) { } async function fetchLatest(channel, page = 1) { - const url = `https://pervcity.com/search.php?site[]=${channel.parameters.siteId}&page=${page}`; - const res = await qu.getAll(url, '.videoBlock'); + if (channel.parameters?.siteId) { + const url = `https://pervcity.com/search.php?site[]=${channel.parameters.siteId}&page=${page}`; + const res = await qu.getAll(url, '.videoBlock'); - return res.ok ? scrapeAll(res.items, channel) : res.status; + return res.ok ? scrapeAll(res.items, channel) : res.status; + } + + return null; +} + +async function fetchUpcoming(channel) { + const url = 'https://pervcity.com'; + const res = await qu.getAll(url, '.upcoming .videoBlock'); + + return res.ok ? scrapeAll(res.items, channel.parent) : res.status; } async function fetchScene(url, entity) { @@ -110,4 +122,5 @@ module.exports = { fetchLatest, fetchScene, fetchProfile, + fetchUpcoming, }; diff --git a/src/scrapers/scrapers.js b/src/scrapers/scrapers.js index 9aed7412..08d16e03 100644 --- a/src/scrapers/scrapers.js +++ b/src/scrapers/scrapers.js @@ -83,7 +83,7 @@ module.exports = { brazzers, burningangel, cherrypimps, - ddfnetwork, + pornworld: ddfnetwork, digitalplayground, dogfart, dogfartnetwork: dogfart, @@ -155,7 +155,7 @@ module.exports = { brazzers, burningangel, cherrypimps, - ddfnetwork, + pornworld: ddfnetwork, deeper: vixen, deeplush: nubiles, devilsfilm: famedigital, @@ -180,6 +180,7 @@ module.exports = { julesjordan, kellymadison, killergram, + kink, legalporno, men, metrohd, diff --git a/src/store-releases.js b/src/store-releases.js index c313539b..dcba2b00 100644 --- a/src/store-releases.js +++ b/src/store-releases.js @@ -184,10 +184,10 @@ async function updateReleasesSearch(releaseIds) { COALESCE(releases.title, '') || ' ' || entities.name || ' ' || entities.slug || ' ' || - COALESCE(entities.alias, '') || ' ' || + COALESCE(array_to_string(entities.alias, ' '), '') || ' ' || COALESCE(parents.name, '') || ' ' || COALESCE(parents.slug, '') || ' ' || - COALESCE(parents.alias, '') || ' ' || + COALESCE(array_to_string(parents.alias, ' '), '') || ' ' || COALESCE(releases.shoot_id, '') || ' ' || COALESCE(TO_CHAR(releases.date, 'YYYY YY MM FMMM FMmonth mon DD FMDD'), '') || ' ' || STRING_AGG(COALESCE(actors.name, ''), ' ') || ' ' || diff --git a/src/updates.js b/src/updates.js index 7cb49f39..0a65b9ed 100644 --- a/src/updates.js +++ b/src/updates.js @@ -94,7 +94,10 @@ async function scrapeReleases(scraper, entity, preData, upcoming = false) { return accReleases; } - const latestReleasesWithEntity = latestReleases.map(release => ({ ...release, entity })); // attach entity the release is assigned to when stored + const latestReleasesWithEntity = latestReleases.map(release => ({ + ...release, + entity: release.entity || entity, // allow override + })); // attach entity the release is assigned to when stored const uniqueReleases = argv.redownload ? latestReleasesWithEntity diff --git a/src/utils/qu.js b/src/utils/qu.js index b5bc1906..70adbfbb 100644 --- a/src/utils/qu.js +++ b/src/utils/qu.js @@ -127,16 +127,16 @@ function date(context, selector, format, match, attr = 'textContent') { function image(context, selector = 'img', attr, origin, protocol = 'https') { const imageEl = (attr && q(context, selector, attr)) - || q(context, selector, 'src') - || q(context, selector, 'data-src'); + || q(context, selector, 'data-src') + || q(context, selector, 'src'); return prefixUrl(imageEl, origin, protocol); } function images(context, selector = 'img', attr, origin, protocol = 'https') { const attribute = attr - || (q(context, selector, 'src') && 'src') - || (q(context, selector, 'data-src') && 'data-src'); + || (q(context, selector, 'data-src') && 'data-src') + || (q(context, selector, 'src') && 'src'); const imageEls = all(context, selector, attribute); @@ -358,6 +358,7 @@ module.exports = { ctxa: initAll, geta: getAll, qu: quFuncs, + query: quFuncs, prefixUrl, ...legacyFuncs, };