Refactored stats page.
|
@ -165,6 +165,7 @@ export default {
|
||||||
|
|
||||||
.campaign-banner {
|
.campaign-banner {
|
||||||
height: auto;
|
height: auto;
|
||||||
|
width: auto;
|
||||||
max-height: 100%;
|
max-height: 100%;
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
|
@ -288,6 +288,7 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.campaign-container {
|
.campaign-container {
|
||||||
|
max-height: 150px;
|
||||||
background: var(--background-dim);
|
background: var(--background-dim);
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: .5rem;
|
padding: .5rem;
|
||||||
|
|
|
@ -8,71 +8,80 @@
|
||||||
<dt class="stat-label">Version</dt>
|
<dt class="stat-label">Version</dt>
|
||||||
<dd class="stat-value">{{ version }}</dd>
|
<dd class="stat-value">{{ version }}</dd>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="stat-row">
|
|
||||||
<dt class="stat-label">Content updated</dt>
|
|
||||||
<dd class="stat-value">{{ formatDate(lastScrape, 'YYYY-MM-DD HH:mm') }}</dd>
|
|
||||||
</div>
|
|
||||||
</dl>
|
</dl>
|
||||||
|
|
||||||
<dl class="stat-table">
|
<template v-if="loaded">
|
||||||
<div class="stat-row">
|
<dl class="stat-table">
|
||||||
<dt class="stat-label">Networks</dt>
|
<div class="stat-row">
|
||||||
<dd class="stat-value">{{ totalNetworks }}</dd>
|
<dt class="stat-label">Content updated</dt>
|
||||||
</div>
|
<dd class="stat-value">{{ formatDate(lastScrape, 'YYYY-MM-DD HH:mm') }}</dd>
|
||||||
|
</div>
|
||||||
|
</dl>
|
||||||
|
|
||||||
<div class="stat-row">
|
<dl class="stat-table">
|
||||||
<dt class="stat-label">Channels</dt>
|
<div class="stat-row">
|
||||||
<dd class="stat-value">{{ totalChannels }}</dd>
|
<dt class="stat-label">Networks</dt>
|
||||||
</div>
|
<dd class="stat-value">{{ totalNetworks }}</dd>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="stat-row">
|
<div class="stat-row">
|
||||||
<dt class="stat-label">Scenes</dt>
|
<dt class="stat-label">Channels</dt>
|
||||||
<dd class="stat-value">{{ totalScenes }}</dd>
|
<dd class="stat-value">{{ totalChannels }}</dd>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="stat-row">
|
<div class="stat-row">
|
||||||
<dt class="stat-label">Movies</dt>
|
<dt class="stat-label">Scenes</dt>
|
||||||
<dd class="stat-value">{{ totalMovies }}</dd>
|
<dd class="stat-value">{{ totalScenes }}</dd>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="stat-row">
|
<div class="stat-row">
|
||||||
<dt class="stat-label">Actors</dt>
|
<dt class="stat-label">Movies</dt>
|
||||||
<dd class="stat-value">{{ totalActors }}</dd>
|
<dd class="stat-value">{{ totalMovies }}</dd>
|
||||||
</div>
|
</div>
|
||||||
</dl>
|
|
||||||
|
<div class="stat-row">
|
||||||
|
<dt class="stat-label">Actors</dt>
|
||||||
|
<dd class="stat-value">{{ totalActors }}</dd>
|
||||||
|
</div>
|
||||||
|
</dl>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<Ellipsis v-else />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Footer />
|
<Footer />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script setup>
|
||||||
async function mounted() {
|
import { ref, onMounted } from 'vue';
|
||||||
const stats = await this.$store.dispatch('fetchStats');
|
import { useStore } from 'vuex';
|
||||||
|
|
||||||
this.totalScenes = stats.totalScenes;
|
import Ellipsis from '../loading/ellipsis.vue';
|
||||||
this.totalMovies = stats.totalMovies;
|
|
||||||
this.totalActors = stats.totalActors;
|
|
||||||
this.totalNetworks = stats.totalNetworks;
|
|
||||||
this.totalChannels = stats.totalChannels;
|
|
||||||
this.lastScrape = stats.lastScrape;
|
|
||||||
|
|
||||||
this.version = VERSION; // eslint-disable-line no-undef
|
const store = useStore();
|
||||||
}
|
const version = VERSION; // eslint-disable-line no-undef
|
||||||
|
|
||||||
export default {
|
const loaded = ref(false);
|
||||||
data() {
|
const totalScenes = ref(0);
|
||||||
return {
|
const totalMovies = ref(0);
|
||||||
totalScenes: 0,
|
const totalActors = ref(0);
|
||||||
totalMovies: 0,
|
const totalNetworks = ref(0);
|
||||||
totalActors: 0,
|
const totalChannels = ref(0);
|
||||||
totalNetworks: 0,
|
const lastScrape = ref(null);
|
||||||
totalChannels: 0,
|
|
||||||
};
|
onMounted(async () => {
|
||||||
},
|
const stats = await store.dispatch('fetchStats');
|
||||||
mounted,
|
|
||||||
};
|
totalScenes.value = stats.totalScenes;
|
||||||
|
totalMovies.value = stats.totalMovies;
|
||||||
|
totalActors.value = stats.totalActors;
|
||||||
|
totalNetworks.value = stats.totalNetworks;
|
||||||
|
totalChannels.value = stats.totalChannels;
|
||||||
|
lastScrape.value = stats.lastScrape;
|
||||||
|
|
||||||
|
loaded.value = true;
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|
|
@ -280,23 +280,15 @@ function initUiActions(store, _router) {
|
||||||
actors,
|
actors,
|
||||||
networks,
|
networks,
|
||||||
channels,
|
channels,
|
||||||
|
batches: [batch],
|
||||||
} = await graphql(`
|
} = await graphql(`
|
||||||
query Stats {
|
query Stats {
|
||||||
scenes: releasesConnection(
|
scenes: releasesConnection { totalCount }
|
||||||
last: 1,
|
|
||||||
orderBy: BATCH_BY_CREATED_BATCH_ID__CREATED_AT_ASC
|
|
||||||
) {
|
|
||||||
totalCount
|
|
||||||
scenes: nodes {
|
|
||||||
batch: createdBatch {
|
|
||||||
createdAt
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
movies: moviesConnection { totalCount }
|
movies: moviesConnection { totalCount }
|
||||||
actors: actorsConnection { totalCount }
|
actors: actorsConnection { totalCount }
|
||||||
networks: entitiesConnection(filter: { type: { equalTo: "network" } }) { totalCount }
|
networks: entitiesConnection(filter: { type: { equalTo: "network" } }) { totalCount }
|
||||||
channels: entitiesConnection(filter: { type: { equalTo: "channel" } }) { totalCount }
|
channels: entitiesConnection(filter: { type: { equalTo: "channel" } }) { totalCount }
|
||||||
|
batches(orderBy: CREATED_AT_DESC, first: 1) { createdAt }
|
||||||
}
|
}
|
||||||
`);
|
`);
|
||||||
|
|
||||||
|
@ -306,7 +298,7 @@ function initUiActions(store, _router) {
|
||||||
totalActors: actors.totalCount,
|
totalActors: actors.totalCount,
|
||||||
totalNetworks: networks.totalCount,
|
totalNetworks: networks.totalCount,
|
||||||
totalChannels: channels.totalCount,
|
totalChannels: channels.totalCount,
|
||||||
lastScrape: new Date(scenes.scenes[0]?.batch.createdAt),
|
lastScrape: new Date(batch.createdAt),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 85 KiB |
After Width: | Height: | Size: 190 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 44 KiB |
After Width: | Height: | Size: 92 KiB |
After Width: | Height: | Size: 98 KiB |
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 88 KiB |
|
@ -40,6 +40,15 @@ const bannerTags = {
|
||||||
archangel_970_90_kendra_lust: ['dp', 'anal', 'sex', 'interracial', 'black'],
|
archangel_970_90_kendra_lust: ['dp', 'anal', 'sex', 'interracial', 'black'],
|
||||||
// dogfart
|
// dogfart
|
||||||
wefuckblackgirls_728_90_loss: ['mfm', 'threesome', 'anal', 'black', 'interracial'],
|
wefuckblackgirls_728_90_loss: ['mfm', 'threesome', 'anal', 'black', 'interracial'],
|
||||||
|
dfxtra_900_250_mfm: ['mfm', 'threesome', 'black', 'interracial'],
|
||||||
|
dfxtra_900_250_gay_anal: ['gay', 'anal', 'black', 'interracial'],
|
||||||
|
dfxtra_300_250_mfm: ['mfm', 'threesome', 'black', 'interracial'],
|
||||||
|
dfxtra_300_250_gay_bj: ['gay', 'blowjob', 'black', 'interracial'],
|
||||||
|
blacksonblondes_900_250_mfm: ['mfm', 'threesome', 'black', 'interracial'],
|
||||||
|
blacksonblondes_900_250_mfm_hj: ['mfm', 'threesome', 'handjob', 'black', 'interracial'],
|
||||||
|
blacksonblondes_300_250_mfm: ['mfm', 'threesome', 'black', 'interracial'],
|
||||||
|
blacksonblondes_300_250_mff_april: ['mff', 'threesome', 'black', 'interracial'],
|
||||||
|
blacksonblondes_300_250_mff_april2: ['mff', 'threesome', 'black', 'interracial'],
|
||||||
// evilangel
|
// evilangel
|
||||||
evilangel_728_90_adriana_chechik_gangbang: ['gangbang', 'airtight', 'dp', 'dvp', 'facial', 'brunette'],
|
evilangel_728_90_adriana_chechik_gangbang: ['gangbang', 'airtight', 'dp', 'dvp', 'facial', 'brunette'],
|
||||||
evilangel_728_90_kenzie_reeves_lexi_lore: ['anal', 'mff', 'blowjob', 'blonde'],
|
evilangel_728_90_kenzie_reeves_lexi_lore: ['anal', 'mff', 'blowjob', 'blonde'],
|
||||||
|
@ -250,6 +259,71 @@ const campaigns = [
|
||||||
affiliate: 'bang_signup',
|
affiliate: 'bang_signup',
|
||||||
comment: 'per signup',
|
comment: 'per signup',
|
||||||
},
|
},
|
||||||
|
// dfxtra / dogfart
|
||||||
|
{
|
||||||
|
network: 'dfxtra',
|
||||||
|
url: 'https://www.g2fame.com/dfxtra/go.php?pr=8&su=2&si=681&ad=277470&pa=index&ar=&campaign=460352&buffer=',
|
||||||
|
comment: 'per signup',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
network: 'dfxtra',
|
||||||
|
banner: 'dfxtra_900_250_mfm',
|
||||||
|
url: 'https://www.g2fame.com/dfxtra/go.php?pr=8&su=2&si=681&ad=277470&pa=index&ar=&campaign=460352&buffer=',
|
||||||
|
comment: 'per signup',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
network: 'dfxtra',
|
||||||
|
banner: 'dfxtra_900_250_gay_anal',
|
||||||
|
url: 'https://www.g2fame.com/dfxtra/go.php?pr=8&su=2&si=681&ad=277470&pa=index&ar=&campaign=460352&buffer=',
|
||||||
|
comment: 'per signup',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
network: 'dfxtra',
|
||||||
|
banner: 'dfxtra_300_250_mfm',
|
||||||
|
url: 'https://www.g2fame.com/dfxtra/go.php?pr=8&su=2&si=681&ad=277470&pa=index&ar=&campaign=460352&buffer=',
|
||||||
|
comment: 'per signup',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
network: 'dfxtra',
|
||||||
|
banner: 'dfxtra_300_250_gay_bj',
|
||||||
|
url: 'https://www.g2fame.com/dfxtra/go.php?pr=8&su=2&si=681&ad=277470&pa=index&ar=&campaign=460352&buffer=',
|
||||||
|
comment: 'per signup',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
channel: 'blacksonblondes',
|
||||||
|
url: 'https://www.g2fame.com/blacksonblondes/go.php?pr=8&su=2&si=682&ad=277470&pa=index&ar=&campaign=460352&buffer=',
|
||||||
|
comment: 'per signup',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
channel: 'blacksonblondes',
|
||||||
|
banner: 'blacksonblondes_900_250_mfm_hj',
|
||||||
|
url: 'https://www.g2fame.com/blacksonblondes/go.php?pr=8&su=2&si=682&ad=277470&pa=index&ar=&campaign=460352&buffer=',
|
||||||
|
comment: 'per signup',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
channel: 'blacksonblondes',
|
||||||
|
banner: 'blacksonblondes_900_250_mfm',
|
||||||
|
url: 'https://www.g2fame.com/blacksonblondes/go.php?pr=8&su=2&si=682&ad=277470&pa=index&ar=&campaign=460352&buffer=',
|
||||||
|
comment: 'per signup',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
channel: 'blacksonblondes',
|
||||||
|
banner: 'blacksonblondes_300_250_mfm',
|
||||||
|
url: 'https://www.g2fame.com/blacksonblondes/go.php?pr=8&su=2&si=682&ad=277470&pa=index&ar=&campaign=460352&buffer=',
|
||||||
|
comment: 'per signup',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
channel: 'blacksonblondes',
|
||||||
|
banner: 'blacksonblondes_300_250_mff_april',
|
||||||
|
url: 'https://www.g2fame.com/blacksonblondes/go.php?pr=8&su=2&si=682&ad=277470&pa=index&ar=&campaign=460352&buffer=',
|
||||||
|
comment: 'per signup',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
channel: 'blacksonblondes',
|
||||||
|
banner: 'blacksonblondes_300_250_mff_april2',
|
||||||
|
url: 'https://www.g2fame.com/blacksonblondes/go.php?pr=8&su=2&si=682&ad=277470&pa=index&ar=&campaign=460352&buffer=',
|
||||||
|
comment: 'per signup',
|
||||||
|
},
|
||||||
// julesjordan
|
// julesjordan
|
||||||
{
|
{
|
||||||
network: 'julesjordan',
|
network: 'julesjordan',
|
||||||
|
|