Also show reencoding progress

This commit is contained in:
2022-01-01 22:10:00 +03:00
parent 74793bb2d6
commit c60c9b6522
5 changed files with 71 additions and 35 deletions

View File

@@ -4,6 +4,8 @@ export interface Room {
createdAt: Date; createdAt: Date;
movie?: string; movie?: string;
filename?: string; filename?: string;
downloadedProg?: number;
reencodedProg?: number;
downloaded?: boolean; downloaded?: boolean;
downloadedAt?: Date; downloadedAt?: Date;
position: number; position: number;

View File

@@ -12,6 +12,7 @@
create room create room
</button> </button>
</form> </form>
<a href="https://nutbread.github.io/t2m/">convert .torrent file to a magnet link</a>
</div> </div>
</template> </template>
@@ -39,6 +40,8 @@ export default defineComponent({
<style lang="scss" scoped> <style lang="scss" scoped>
form { form {
margin-bottom: 32px;
> * { > * {
margin: 0 8px; margin: 0 8px;
} }

View File

@@ -1,11 +1,10 @@
<template> <template>
<div class="room"> <div class="room">
<h1>{{ room.movie }}</h1> <h1>{{ room.movie }}</h1>
<ProgressBar <Progress
v-if="!room.downloaded" v-if="!room.downloaded"
:id="id" :id="id"
@downloaded="onDownloaded" @downloaded="onDownloaded"
class="progress-bar"
/> />
<video <video
@@ -27,14 +26,14 @@ import getRoom from '@/api/getRoom';
import setPosition from '@/api/setPosition'; import setPosition from '@/api/setPosition';
import getPosition from '@/api/getPosition'; import getPosition from '@/api/getPosition';
import ProgressBar from './components/ProgressBar.vue'; import Progress from './components/Progress.vue';
import { Room } from '@/interfaces'; import { Room } from '@/interfaces';
export default defineComponent({ export default defineComponent({
name: 'Room', name: 'Room',
components: { components: {
ProgressBar, Progress,
}, },
props: { props: {
id: { id: {
@@ -89,13 +88,6 @@ export default defineComponent({
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.progress-bar {
width: 400px;
height: 25px;
border: 1px solid black;
margin: auto;
}
h1 { h1 {
margin-bottom: 32px; margin-bottom: 32px;
} }

View File

@@ -0,0 +1,60 @@
<template>
<div class="progress">
<ProgressBar
:progress="downloadedProg"
/>
<ProgressBar
v-if="reencodedProg > 0"
:progress="reencodedProg"
/>
</div>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
import getStatus from '@/api/getStatus';
import ProgressBar from './ProgressBar.vue';
export default defineComponent({
emits: ['downloaded'],
components: {
ProgressBar,
},
props: {
id: {
type: String,
required: true,
},
},
data() {
return {
downloadedProg: 0,
reencodedProg: 0,
progressInterval: undefined as undefined | number,
};
},
mounted() {
this.progressInterval = setInterval(async () => {
const result = await getStatus(this.id);
this.downloadedProg = result.downloadedProg;
this.reencodedProg = result.reencodedProg;
if (result.downloaded) {
this.$emit('downloaded');
clearInterval(this.progressInterval);
}
}, 2 * 1000);
},
beforeUnmount() {
clearInterval(this.progressInterval);
},
});
</script>
<style lang="scss" scoped>
.progress > * {
width: 400px;
height: 25px;
border: 1px solid black;
margin: 8px auto;
}
</style>

View File

@@ -3,7 +3,7 @@
<div <div
class="fill" class="fill"
:style="{ :style="{
width: `${progress * 100}%` width: `${progressPerc}%`
}" }"
/> />
<div class="digits"> <div class="digits">
@@ -14,40 +14,19 @@
<script lang="ts"> <script lang="ts">
import { defineComponent } from 'vue'; import { defineComponent } from 'vue';
import getStatus from '@/api/getStatus';
export default defineComponent({ export default defineComponent({
emits: ['downloaded'],
props: { props: {
id: { progress: {
type: String, type: Number,
required: true, required: true,
}, },
}, },
data() {
return {
progress: 0,
progressInterval: undefined as undefined | number,
};
},
computed: { computed: {
progressPerc() { progressPerc() {
return Math.floor(this.progress * 100); return Math.floor(this.progress * 100);
}, },
}, },
mounted() {
this.progressInterval = setInterval(async () => {
const result = await getStatus(this.id);
this.progress = result.progress;
if (result.downloaded || this.progress === 1) {
this.$emit('downloaded');
clearInterval(this.progressInterval);
}
}, 2 * 1000);
},
beforeUnmount() {
clearInterval(this.progressInterval);
},
}); });
</script> </script>