Added backendState for playing and canWatch.
Signed-off-by: Pavel Kirilin <win10@list.ru>
This commit is contained in:
@ -51,8 +51,6 @@ def start_watching(request: Request) -> None:
|
|||||||
cwd=anime_dir,
|
cwd=anime_dir,
|
||||||
)
|
)
|
||||||
request.app.state.pid = ret.pid
|
request.app.state.pid = ret.pid
|
||||||
ret.wait()
|
|
||||||
request.app.state.pid = None
|
|
||||||
|
|
||||||
|
|
||||||
@router.post("/player/offset")
|
@router.post("/player/offset")
|
||||||
|
@ -1,40 +1,29 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { ActionBar, ActionBarButton } from 'vant';
|
import { ActionBar, ActionBarButton } from 'vant';
|
||||||
import { postRequest } from '@/utils'
|
import { postRequest } from '@/utils'
|
||||||
import { ref } from 'vue'
|
import { useBackendStateStore } from '@/stores/backendState';
|
||||||
|
|
||||||
const is_playing = ref(false);
|
const backendStore = useBackendStateStore();
|
||||||
|
|
||||||
async function offsetRequest(offset, forward) {
|
async function offsetRequest(offset, forward) {
|
||||||
await postRequest(`/api/player/offset`, {
|
await postRequest(`/api/player/offset`, {
|
||||||
offset,
|
offset,
|
||||||
forward,
|
forward,
|
||||||
})
|
})
|
||||||
|
await backendStore.updatePlaying()
|
||||||
}
|
}
|
||||||
|
|
||||||
async function playPauseRequest() {
|
async function playPauseRequest() {
|
||||||
await postRequest(`/api/player/play-pause`)
|
await postRequest(`/api/player/play-pause`)
|
||||||
update_state()
|
await backendStore.updatePlaying()
|
||||||
}
|
}
|
||||||
|
|
||||||
function update_state() {
|
|
||||||
fetch('/api/player/playing').then((response) => {
|
|
||||||
if (response.ok) {
|
|
||||||
response.json().then((resp_json) => {
|
|
||||||
is_playing.value = resp_json.playing
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
update_state()
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<ActionBar>
|
<ActionBar>
|
||||||
<ActionBarButton icon="arrow-double-left" @click="offsetRequest(85, false)"></ActionBarButton>
|
<ActionBarButton icon="arrow-double-left" @click="offsetRequest(85, false)"></ActionBarButton>
|
||||||
<ActionBarButton icon="arrow-left" @click="offsetRequest(10, false)"></ActionBarButton>
|
<ActionBarButton icon="arrow-left" @click="offsetRequest(10, false)"></ActionBarButton>
|
||||||
<ActionBarButton :icon="is_playing ? 'pause' : 'play'" @click="playPauseRequest()"></ActionBarButton>
|
<ActionBarButton :icon="backendStore.backendState.playing ? 'pause' : 'play'" @click="playPauseRequest()"></ActionBarButton>
|
||||||
<ActionBarButton icon="arrow" @click="offsetRequest(10, true)"></ActionBarButton>
|
<ActionBarButton icon="arrow" @click="offsetRequest(10, true)"></ActionBarButton>
|
||||||
<ActionBarButton icon="arrow-double-right" @click="offsetRequest(85, true)"></ActionBarButton>
|
<ActionBarButton icon="arrow-double-right" @click="offsetRequest(85, true)"></ActionBarButton>
|
||||||
</ActionBar>
|
</ActionBar>
|
||||||
|
25
frontend/src/stores/backendState.js
Normal file
25
frontend/src/stores/backendState.js
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import { defineStore } from "pinia";
|
||||||
|
import { ref } from 'vue'
|
||||||
|
|
||||||
|
export const useBackendStateStore = defineStore('backendState', () => {
|
||||||
|
const backendState = ref({
|
||||||
|
canWatch: false,
|
||||||
|
playing: false
|
||||||
|
})
|
||||||
|
|
||||||
|
async function updateCanWatch() {
|
||||||
|
const response = await fetch("/api/can-start-watching");
|
||||||
|
backendState.value.canWatch = response.ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async function updatePlaying() {
|
||||||
|
const response = await fetch('/api/player/playing');
|
||||||
|
if (response.ok) {
|
||||||
|
let resp_json = await response.json()
|
||||||
|
backendState.value.playing = resp_json.playing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return { backendState, updateCanWatch, updatePlaying }
|
||||||
|
});
|
@ -1,12 +0,0 @@
|
|||||||
import { ref, computed } from 'vue'
|
|
||||||
import { defineStore } from 'pinia'
|
|
||||||
|
|
||||||
export const useCounterStore = defineStore('counter', () => {
|
|
||||||
const count = ref(0)
|
|
||||||
const doubleCount = computed(() => count.value * 2)
|
|
||||||
function increment() {
|
|
||||||
count.value++
|
|
||||||
}
|
|
||||||
|
|
||||||
return { count, doubleCount, increment }
|
|
||||||
})
|
|
@ -1,4 +1,5 @@
|
|||||||
import { showFailToast } from 'vant';
|
import { showFailToast } from 'vant';
|
||||||
|
import { usePlayingStore } from '@/stores/playing';
|
||||||
|
|
||||||
async function postRequest(url, data) {
|
async function postRequest(url, data) {
|
||||||
const response = await fetch(url, {
|
const response = await fetch(url, {
|
||||||
@ -17,7 +18,6 @@ async function postRequest(url, data) {
|
|||||||
return resp_data
|
return resp_data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export {
|
export {
|
||||||
postRequest
|
postRequest,
|
||||||
}
|
}
|
@ -1,21 +1,23 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import PlayerComponent from '@/components/PlayerComponent.vue';
|
import PlayerComponent from '@/components/PlayerComponent.vue';
|
||||||
import { Space, Button } from 'vant';
|
import { Space, Button } from 'vant';
|
||||||
import { ref } from 'vue';
|
|
||||||
import { postRequest } from '@/utils';
|
import { postRequest } from '@/utils';
|
||||||
|
import { useBackendStateStore } from '@/stores/backendState'
|
||||||
|
|
||||||
const can_watch = ref(false);
|
const backendStateStore = useBackendStateStore()
|
||||||
|
|
||||||
fetch("/api/can-start-watching").then((response) => {
|
backendStateStore.updateCanWatch()
|
||||||
can_watch.value = response.ok
|
|
||||||
|
function kill(...names) {
|
||||||
|
postRequest("/api/kill", { names }).then(() => {
|
||||||
|
setTimeout(() => backendStateStore.updatePlaying(), 500)
|
||||||
})
|
})
|
||||||
|
|
||||||
async function kill(...names) {
|
|
||||||
postRequest("/api/kill", { names })
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function startWatching() {
|
function startWatching() {
|
||||||
await postRequest("/api/start-watching")
|
postRequest("/api/start-watching").then(() => {
|
||||||
|
setTimeout(() => backendStateStore.updatePlaying(), 500)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@ -23,7 +25,8 @@ async function startWatching() {
|
|||||||
<Space fill direction="vertical" :size="20">
|
<Space fill direction="vertical" :size="20">
|
||||||
<Button type="warning" round size="large" @click="kill('mpv')">Убить MPV</Button>
|
<Button type="warning" round size="large" @click="kill('mpv')">Убить MPV</Button>
|
||||||
<Button type="danger" round size="large" @click="kill('awatch', 'mpv')">Убить awatch</Button>
|
<Button type="danger" round size="large" @click="kill('awatch', 'mpv')">Убить awatch</Button>
|
||||||
<Button type="primary" round size="large" :disabled="!can_watch" @click="startWatching">Начать потребление
|
<Button type="primary" round size="large" :disabled="!backendStateStore.backendState.canWatch"
|
||||||
|
@click="startWatching">Начать потребление
|
||||||
анимы</Button>
|
анимы</Button>
|
||||||
</Space>
|
</Space>
|
||||||
<PlayerComponent />
|
<PlayerComponent />
|
||||||
|
Reference in New Issue
Block a user