210 lines
4.8 KiB
JavaScript
210 lines
4.8 KiB
JavaScript
import { graphql } from '../api';
|
|
import { curateRelease, curateActor } from '../curate';
|
|
|
|
function initUiActions(_store, _router) {
|
|
function setTagFilter({ commit }, filter) {
|
|
const tagFilter = Array.from(new Set(filter));
|
|
|
|
commit('setTagFilter', tagFilter);
|
|
localStorage.setItem('tagFilter', tagFilter);
|
|
}
|
|
|
|
function setRange({ commit }, range) {
|
|
commit('setRange', range);
|
|
}
|
|
|
|
function setBatch({ commit }, batch) {
|
|
commit('setBatch', batch);
|
|
localStorage.setItem('batch', batch);
|
|
}
|
|
|
|
function setTheme({ commit }, theme) {
|
|
commit('setTheme', theme);
|
|
localStorage.setItem('theme', theme);
|
|
}
|
|
|
|
async function setSfw({ commit }, sfw) {
|
|
commit('setSfw', sfw);
|
|
localStorage.setItem('sfw', sfw);
|
|
}
|
|
|
|
async function search({ _commit }, { query, limit = 20 }) {
|
|
const res = await graphql(`
|
|
query SearchReleases(
|
|
$query: String!
|
|
$limit: Int = 20
|
|
) {
|
|
releases: searchReleases(
|
|
query: $query
|
|
first: $limit
|
|
) {
|
|
id
|
|
title
|
|
slug
|
|
date
|
|
url
|
|
isNew
|
|
entity {
|
|
id
|
|
slug
|
|
name
|
|
url
|
|
type
|
|
parent {
|
|
id
|
|
slug
|
|
name
|
|
url
|
|
type
|
|
}
|
|
}
|
|
actors: releasesActors {
|
|
actor {
|
|
id
|
|
slug
|
|
name
|
|
}
|
|
}
|
|
tags: releasesTags(orderBy: TAG_BY_TAG_ID__PRIORITY_DESC) {
|
|
tag {
|
|
id
|
|
name
|
|
slug
|
|
}
|
|
}
|
|
poster: releasesPosterByReleaseId {
|
|
media {
|
|
id
|
|
thumbnail
|
|
lazy
|
|
}
|
|
}
|
|
covers: releasesCovers {
|
|
media {
|
|
id
|
|
thumbnail
|
|
lazy
|
|
}
|
|
}
|
|
}
|
|
actors: searchActors(
|
|
search: $query,
|
|
first: $limit
|
|
) {
|
|
id
|
|
name
|
|
slug
|
|
age
|
|
ageAtDeath
|
|
dateOfBirth
|
|
dateOfDeath
|
|
gender
|
|
aliasFor: actorByAliasFor {
|
|
id
|
|
name
|
|
slug
|
|
age
|
|
ageAtDeath
|
|
dateOfBirth
|
|
dateOfDeath
|
|
gender
|
|
entity {
|
|
id
|
|
name
|
|
slug
|
|
}
|
|
avatar: avatarMedia {
|
|
id
|
|
path
|
|
thumbnail
|
|
lazy
|
|
comment
|
|
credit
|
|
}
|
|
birthCountry: countryByBirthCountryAlpha2 {
|
|
alpha2
|
|
name
|
|
alias
|
|
}
|
|
}
|
|
entity {
|
|
id
|
|
name
|
|
slug
|
|
}
|
|
avatar: avatarMedia {
|
|
id
|
|
path
|
|
thumbnail
|
|
lazy
|
|
comment
|
|
credit
|
|
}
|
|
birthCountry: countryByBirthCountryAlpha2 {
|
|
alpha2
|
|
name
|
|
alias
|
|
}
|
|
}
|
|
}
|
|
`, {
|
|
query,
|
|
limit,
|
|
});
|
|
|
|
return {
|
|
releases: res.releases.map(release => curateRelease(release)),
|
|
actors: res.actors.map(actor => curateActor(actor)),
|
|
};
|
|
}
|
|
|
|
async function fetchStats() {
|
|
const {
|
|
scenes,
|
|
movies,
|
|
actors,
|
|
networks,
|
|
channels,
|
|
} = await graphql(`
|
|
query Stats {
|
|
scenes: releasesConnection(
|
|
last: 1,
|
|
orderBy: BATCH_BY_CREATED_BATCH_ID__CREATED_AT_ASC
|
|
) {
|
|
totalCount
|
|
scenes: nodes {
|
|
batch: createdBatch {
|
|
createdAt
|
|
}
|
|
}
|
|
}
|
|
movies: moviesConnection { totalCount }
|
|
actors: actorsConnection { totalCount }
|
|
networks: entitiesConnection(filter: { type: { equalTo: "network" } }) { totalCount }
|
|
channels: entitiesConnection(filter: { type: { equalTo: "channel" } }) { totalCount }
|
|
}
|
|
`);
|
|
|
|
return {
|
|
totalScenes: scenes.totalCount,
|
|
totalMovies: movies.totalCount,
|
|
totalActors: actors.totalCount,
|
|
totalNetworks: networks.totalCount,
|
|
totalChannels: channels.totalCount,
|
|
lastScrape: new Date(scenes.scenes[0]?.batch.createdAt),
|
|
};
|
|
}
|
|
|
|
return {
|
|
search,
|
|
setTagFilter,
|
|
setRange,
|
|
setBatch,
|
|
setSfw,
|
|
setTheme,
|
|
fetchStats,
|
|
};
|
|
}
|
|
|
|
export default initUiActions;
|