Refactored http timeout handling.

This commit is contained in:
DebaucheryLibrarian
2021-03-17 02:09:34 +01:00
parent 36a8adbd8c
commit 336b91c872
9 changed files with 147 additions and 72 deletions

View File

@@ -50,6 +50,20 @@
icon="question2"
/>
</h2>
<Icon
v-show="me && isStashed"
icon="heart7"
class="stash stashed noselect"
@click="unstashScene"
/>
<Icon
v-show="me && !isStashed"
icon="heart8"
class="stash unstashed noselect"
@click="stashScene"
/>
</div>
<div class="row associations">
@@ -223,7 +237,7 @@ import Actor from '../actors/tile.vue';
import Releases from './releases.vue';
import Scroll from '../scroll/scroll.vue';
async function fetchRelease() {
async function fetchRelease(scroll = true) {
if (this.$route.name === 'scene') {
this.release = await this.$store.dispatch('fetchReleaseById', this.$route.params.releaseId);
}
@@ -232,11 +246,37 @@ async function fetchRelease() {
this.release = await this.$store.dispatch('fetchMovieById', this.$route.params.releaseId);
}
if (this.$refs.content) {
if (scroll && this.$refs.content) {
this.$refs.content.scrollTop = 0;
}
}
async function stashScene() {
this.$store.dispatch('stashScene', {
sceneId: this.release.id,
stashId: this.$store.getters.favorites.id,
});
this.fetchRelease(false);
}
async function unstashScene() {
this.$store.dispatch('unstashScene', {
sceneId: this.release.id,
stashId: this.$store.getters.favorites.id,
});
this.fetchRelease(false);
}
function me() {
return this.$store.state.auth.user;
}
function isStashed() {
return this.release.stashes?.length > 0;
}
function bannerBackground() {
return (this.release.poster && this.getBgPath(this.release.poster, 'thumbnail'))
|| (this.release.covers.length > 0 && this.getBgPath(this.release.covers[0], 'thumbnail'));
@@ -271,6 +311,8 @@ export default {
computed: {
pageTitle,
bannerBackground,
isStashed,
me,
showAlbum,
},
watch: {
@@ -279,6 +321,8 @@ export default {
mounted: fetchRelease,
methods: {
fetchRelease,
stashScene,
unstashScene,
},
};
</script>
@@ -353,6 +397,22 @@ export default {
color: var(--shadow);
}
.stash.icon {
width: 1.5rem;
height: 1.5rem;
padding: 0 1rem;
fill: var(--darken);
&.stashed {
fill: var(--primary);
}
&:hover {
fill: var(--primary);
cursor: pointer;
}
}
.album-toggle {
height: fit-content;
display: inline-flex;

View File

@@ -346,6 +346,21 @@ const releaseFragment = `
}
}
}
stashes: stashesScenesBySceneId(
filter: {
stash: {
userId: {
equalTo: $userId
}
}
}
) @include(if: $hasAuth) {
stash {
id
name
slug
}
}
}
`;

View File

@@ -37,11 +37,17 @@ function initReleasesActions(store, router) {
// const release = await get(`/releases/${releaseId}`);
const { release } = await graphql(`
query Release($releaseId:Int!) {
query Release(
$releaseId: Int!
$hasAuth: Boolean!
$userId: Int
) {
${releaseFragment}
}
`, {
releaseId: Number(releaseId),
hasAuth: !!store.state.auth.user,
userId: store.state.auth.user?.id,
});
if (!release) {

View File

@@ -9,9 +9,19 @@ function initStashesActions(_store, _router) {
await del(`/stashes/${stashId}/actors/${actorId}`);
}
async function stashScene(context, { sceneId, stashId }) {
await post(`/stashes/${stashId}/scenes`, { sceneId });
}
async function unstashScene(context, { sceneId, stashId }) {
await del(`/stashes/${stashId}/scenes/${sceneId}`);
}
return {
stashActor,
stashScene,
unstashActor,
unstashScene,
};
}

View File

@@ -1,4 +1,6 @@
import { graphql } from '../api';
import { releaseFields } from '../fragments';
import { curateUser } from '../curate';
function initUsersActions(_store, _router) {
async function fetchUser(context, username) {
@@ -43,45 +45,7 @@ function initUsersActions(_store, _router) {
scenes: stashesScenes {
comment
scene {
id
title
slug
url
date
actors: releasesActors {
actor {
id
name
slug
}
}
tags: releasesTags {
tag {
id
name
slug
}
}
entity {
id
name
slug
independent
parent {
id
name
slug
independent
}
}
poster: releasesPosterByReleaseId {
media {
path
thumbnail
lazy
isS3
}
}
${releaseFields}
}
}
}
@@ -91,7 +55,7 @@ function initUsersActions(_store, _router) {
username,
});
return user;
return curateUser(user);
}
return {