282 lines
5.8 KiB
JavaScript
282 lines
5.8 KiB
JavaScript
import { graphql, patch } from '../api';
|
|
import { releaseFields, actorStashesFields } from '../fragments';
|
|
import { curateRelease, curateActor, curateNotification } 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 fetchNotifications(_context, { page = 1, limit = 10 } = {}) {
|
|
if (!store.state.auth.user) {
|
|
return [];
|
|
}
|
|
|
|
const { notifications, unseenNotifications } = await graphql(`
|
|
query Notifications(
|
|
$hasAuth: Boolean!
|
|
$userId: Int
|
|
$limit: Int = 10
|
|
$offset: Int = 0
|
|
) {
|
|
notifications: notificationsConnection(
|
|
first: $limit
|
|
offset: $offset
|
|
orderBy: CREATED_AT_DESC
|
|
) {
|
|
nodes {
|
|
id
|
|
sceneId
|
|
userId
|
|
seen
|
|
createdAt
|
|
scene {
|
|
${releaseFields}
|
|
}
|
|
alert {
|
|
tags: alertsTags {
|
|
tag {
|
|
id
|
|
name
|
|
slug
|
|
}
|
|
}
|
|
actors: alertsActors {
|
|
actor {
|
|
id
|
|
name
|
|
slug
|
|
}
|
|
}
|
|
entity: alertsEntityByAlertId {
|
|
entity {
|
|
id
|
|
name
|
|
slug
|
|
independent
|
|
}
|
|
}
|
|
}
|
|
}
|
|
totalCount
|
|
}
|
|
unseenNotifications: notificationsConnection(
|
|
filter: { seen: { equalTo: false } }
|
|
) {
|
|
totalCount
|
|
}
|
|
}
|
|
`, {
|
|
hasAuth: !!store.state.auth.user,
|
|
userId: store.state.auth.user?.id,
|
|
limit,
|
|
offset: (page - 1) * limit,
|
|
});
|
|
|
|
if (!notifications) {
|
|
return {
|
|
notifications: [],
|
|
totalCount: 0,
|
|
unseenCount: 0,
|
|
};
|
|
}
|
|
|
|
const curatedNotifications = notifications.nodes.map(notification => curateNotification(notification));
|
|
|
|
return {
|
|
notifications: curatedNotifications,
|
|
totalCount: notifications.totalCount,
|
|
unseenCount: unseenNotifications.totalCount,
|
|
};
|
|
}
|
|
|
|
async function checkNotification(context, notificationId) {
|
|
await patch(`/users/${store.state.auth.user?.id}/notifications/${notificationId}`, {
|
|
seen: true,
|
|
});
|
|
}
|
|
|
|
async function checkNotifications() {
|
|
await patch(`/users/${store.state.auth.user?.id}/notifications`, {
|
|
seen: true,
|
|
});
|
|
}
|
|
|
|
async function search({ _commit }, { query, limit = 20 }) {
|
|
const res = await graphql(`
|
|
query SearchReleases(
|
|
$query: String!
|
|
$limit: Int = 20
|
|
$hasAuth: Boolean!
|
|
$userId: Int
|
|
) {
|
|
results: searchReleases(
|
|
query: $query
|
|
first: $limit
|
|
orderBy: RANK_DESC
|
|
filter: {
|
|
rank: {
|
|
greaterThan: 0.015
|
|
}
|
|
}
|
|
) {
|
|
release {
|
|
${releaseFields}
|
|
}
|
|
rank
|
|
}
|
|
actors: searchActors(
|
|
query: $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
|
|
isS3
|
|
width
|
|
height
|
|
comment
|
|
credit
|
|
}
|
|
birthCountry: countryByBirthCountryAlpha2 {
|
|
alpha2
|
|
name
|
|
alias
|
|
}
|
|
}
|
|
entity {
|
|
id
|
|
name
|
|
slug
|
|
}
|
|
avatar: avatarMedia {
|
|
id
|
|
path
|
|
thumbnail
|
|
lazy
|
|
isS3
|
|
width
|
|
height
|
|
comment
|
|
credit
|
|
}
|
|
birthCountry: countryByBirthCountryAlpha2 {
|
|
alpha2
|
|
name
|
|
alias
|
|
}
|
|
${actorStashesFields}
|
|
}
|
|
}
|
|
`, {
|
|
query,
|
|
limit,
|
|
hasAuth: !!store.state.auth.user,
|
|
userId: store.state.auth.user?.id,
|
|
});
|
|
|
|
return {
|
|
releases: res?.results.map(result => curateRelease(result.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 {
|
|
checkNotification,
|
|
checkNotifications,
|
|
search,
|
|
setTagFilter,
|
|
setRange,
|
|
setBatch,
|
|
setSfw,
|
|
setTheme,
|
|
fetchNotifications,
|
|
fetchStats,
|
|
};
|
|
}
|
|
|
|
export default initUiActions;
|