diff --git a/assets/components/releases/release.vue b/assets/components/releases/release.vue
index 17b73150..b077d800 100644
--- a/assets/components/releases/release.vue
+++ b/assets/components/releases/release.vue
@@ -203,6 +203,19 @@
+
+ Available qualities
+
+ {{ quality }}
+
+
knex.schema.alterTable('releases', (table) => {
+ table.specificType('qualities', 'text[]');
+});
+
+exports.down = async (knex) => knex.schema.alterTable('releases', (table) => {
+ table.dropColumn('qualities');
+});
diff --git a/migrations/_20220330230122_stats.js b/migrations/_20220330230122_stats.js
new file mode 100644
index 00000000..02b81a71
--- /dev/null
+++ b/migrations/_20220330230122_stats.js
@@ -0,0 +1,12 @@
+exports.up = async (knex) => knex.raw(`
+ CREATE MATERIALIZED VIEW entities_stats
+ AS
+ SELECT entities.id AS entity_id, count(releases.id) AS releases_count
+ FROM entities
+ LEFT JOIN releases ON releases.entity_id = entities.id
+ GROUP BY entities.id;
+`);
+
+exports.down = async (knex) => knex.raw(`
+ DROP MATERIALIZED VIEW entities_stats;
+`);
diff --git a/src/scrapers/pervcity.js b/src/scrapers/pervcity.js
index 5ab48803..bbe44c4e 100644
--- a/src/scrapers/pervcity.js
+++ b/src/scrapers/pervcity.js
@@ -12,6 +12,13 @@ const channelCodes = {
uha: 'upherasshole',
};
+const qualities = {
+ v4k: 2160,
+ vFullHD: 1080,
+ vHD: 720,
+ vSD: 480,
+};
+
const channelRegExp = new RegExp(Object.keys(channelCodes).join('|'), 'i');
function scrapeAll(scenes, entity) {
@@ -42,9 +49,12 @@ function scrapeScene({ query }) {
release.entryId = query.q('.trailerLeft img', 'id').match(/set-target-(\d+)/)[1];
release.title = query.cnt('.infoHeader h1');
- release.description = query.cnt('.infoBox p');
+ release.description = query.cnt('.description');
+ release.duration = query.duration('.tRuntime');
release.actors = query.cnts('.infoBox .tour_update_models a');
+ release.tags = query.cnts('.tagcats a');
+ release.qualities = query.imgs('.avaiFormate img').map((src) => qualities[src.match(/\/(\w+)\.png/)[1]]).filter(Boolean);
release.poster = query.img('.posterimg');
release.photos = query.imgs('.trailerSnaps img').slice(1); // first photo is poster in lower quality
diff --git a/src/store-releases.js b/src/store-releases.js
index f51fab83..82a80974 100644
--- a/src/store-releases.js
+++ b/src/store-releases.js
@@ -38,11 +38,8 @@ async function curateReleaseEntry(release, batchId, existingRelease, type = 'sce
date_precision: release.datePrecision,
slug,
description: release.description,
+ qualities: release.qualities.map(Number).filter(Boolean),
comment: release.comment,
- // director: release.director,
- // likes: release.rating && release.rating.likes,
- // dislikes: release.rating && release.rating.dislikes,
- // rating: release.rating && release.rating.stars && Math.floor(release.rating.stars),
deep: typeof release.deep === 'boolean' ? release.deep : false,
deep_url: release.deepUrl,
updated_batch_id: batchId,
@@ -72,6 +69,8 @@ async function curateReleaseEntry(release, batchId, existingRelease, type = 'sce
curatedRelease.created_batch_id = batchId;
}
+ console.log(curatedRelease);
+
return curatedRelease;
}