mirror of
https://github.com/anatolykopyl/movieroom-front.git
synced 2026-03-26 12:55:20 +00:00
Also show reencoding progress
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
60
src/views/Room/components/Progress.vue
Normal file
60
src/views/Room/components/Progress.vue
Normal 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>
|
||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user