diff --git a/client/src/components/controls.vue b/client/src/components/controls.vue index ee423afa..0797d976 100644 --- a/client/src/components/controls.vue +++ b/client/src/components/controls.vue @@ -9,9 +9,31 @@ 'fa-keyboard', 'request', ]" + v-tooltip="{ + content: !hosted || hosting ? (hosting ? 'Release Controls' : 'Request Controls') : '', + placement: 'top', + offset: 5, + boundariesElement: 'body', + delay: { show: 300, hide: 100 }, + }" @click.stop.prevent="toggleControl" /> +
  • + +
  • @@ -149,6 +234,14 @@ return this.$accessor.video.playable } + get locked() { + return this.$accessor.remote.locked && this.$accessor.remote.hosting + } + + set locked(locked: boolean) { + this.$accessor.remote.setLocked(locked) + } + toggleControl() { if (!this.playable) { return diff --git a/client/src/components/header.vue b/client/src/components/header.vue index a92f7300..36be9399 100644 --- a/client/src/components/header.vue +++ b/client/src/components/header.vue @@ -106,9 +106,9 @@ toggleLock() { if (this.admin) { if (this.locked) { - this.$accessor.remote.unlock() + this.$accessor.unlock() } else { - this.$accessor.remote.lock() + this.$accessor.lock() } } } diff --git a/client/src/components/settings.vue b/client/src/components/settings.vue index f684bf10..7a9ee151 100644 --- a/client/src/components/settings.vue +++ b/client/src/components/settings.vue @@ -108,7 +108,7 @@ right: 0; bottom: 0; background-color: $background-tertiary; - transition: 0.4s; + transition: 0.2s; border-radius: 34px; &:before { diff --git a/client/src/components/video.vue b/client/src/components/video.vue index 93a80feb..65a847a0 100644 --- a/client/src/components/video.vue +++ b/client/src/components/video.vue @@ -206,6 +206,10 @@ return this.$accessor.settings.autoplay } + get locked() { + return this.$accessor.remote.locked + } + get scroll() { return this.$accessor.settings.scroll } @@ -240,8 +244,6 @@ @Watch('width') onWidthChanged(width: number) { - const { videoWidth, videoHeight } = this._video - console.log({ videoWidth, videoHeight }) this.onResise() } @@ -321,7 +323,7 @@ }) this._video.addEventListener('error', event => { - console.error(event.error) + this.$log.error(event.error) this.$accessor.video.setPlayable(false) }) @@ -344,7 +346,7 @@ .then(() => { this.onResise() }) - .catch(err => console.log(err)) + .catch(err => this.$log.error(err)) } pause() { @@ -385,7 +387,7 @@ this.$accessor.remote.sendClipboard(text) } }) - .catch(console.error) + .catch(this.$log.error) } } @@ -399,7 +401,7 @@ } onWheel(e: WheelEvent) { - if (!this.hosting) { + if (!this.hosting || this.locked) { return } this.onMousePos(e) @@ -419,7 +421,7 @@ } onMouseDown(e: MouseEvent) { - if (!this.hosting) { + if (!this.hosting || this.locked) { return } this.onMousePos(e) @@ -427,7 +429,7 @@ } onMouseUp(e: MouseEvent) { - if (!this.hosting) { + if (!this.hosting || this.locked) { return } this.onMousePos(e) @@ -435,7 +437,7 @@ } onMouseMove(e: MouseEvent) { - if (!this.hosting) { + if (!this.hosting || this.locked) { return } this.onMousePos(e) @@ -452,14 +454,14 @@ } onKeyDown(e: KeyboardEvent) { - if (!this.focused || !this.hosting) { + if (!this.focused || !this.hosting || this.locked) { return } this.$client.sendData('keydown', { key: e.keyCode }) } onKeyUp(e: KeyboardEvent) { - if (!this.focused || !this.hosting) { + if (!this.focused || !this.hosting || this.locked) { return } this.$client.sendData('keyup', { key: e.keyCode }) diff --git a/client/src/store/index.ts b/client/src/store/index.ts index b9f6ac7e..386bca37 100644 --- a/client/src/store/index.ts +++ b/client/src/store/index.ts @@ -1,6 +1,7 @@ import Vue from 'vue' import Vuex from 'vuex' import { useAccessor, mutationTree, actionTree } from 'typed-vuex' +import { EVENT } from '~/neko/events' import { get, set } from '~/utils/localstorage' import * as video from './video' @@ -51,6 +52,22 @@ export const actions = actionTree( accessor.emoji.initialise() }, + lock() { + if (!accessor.connected || !accessor.user.admin) { + return + } + + $client.sendMessage(EVENT.ADMIN.LOCK) + }, + + unlock() { + if (!accessor.connected || !accessor.user.admin) { + return + } + + $client.sendMessage(EVENT.ADMIN.UNLOCK) + }, + login({ state }, { username, password }: { username: string; password: string }) { accessor.setLogin({ username, password }) $client.login(password, username) diff --git a/client/src/store/remote.ts b/client/src/store/remote.ts index 724367c0..965af5cb 100644 --- a/client/src/store/remote.ts +++ b/client/src/store/remote.ts @@ -8,6 +8,7 @@ export const namespaced = true export const state = () => ({ id: '', clipboard: '', + locked: false, }) export const getters = getterTree(state, { @@ -35,9 +36,14 @@ export const mutations = mutationTree(state, { state.clipboard = clipboard }, + setLocked(state, locked: boolean) { + state.locked = locked + }, + reset(state) { state.id = '' state.clipboard = '' + state.locked = false }, }) @@ -127,21 +133,5 @@ export const actions = actionTree( $client.sendMessage(EVENT.ADMIN.GIVE, { id: member.id }) }, - - lock() { - if (!accessor.connected || !accessor.user.admin) { - return - } - - $client.sendMessage(EVENT.ADMIN.LOCK) - }, - - unlock() { - if (!accessor.connected || !accessor.user.admin) { - return - } - - $client.sendMessage(EVENT.ADMIN.UNLOCK) - }, }, )