From b8bce6302dcd3e8878b5acc768901c43ad8de9d3 Mon Sep 17 00:00:00 2001 From: cv <34649812+cpvalente@users.noreply.github.com> Date: Tue, 27 Apr 2021 23:59:02 +0200 Subject: [PATCH] feat: increment running timer --- .../src/features/control/PlaybackControl.jsx | 35 +++++++++++++++++++ .../control/PlaybackControl.module.css | 22 ++++++++++-- server/classes/EventTimer.js | 14 ++++++++ server/classes/Timer.js | 20 +++++++++-- 4 files changed, 86 insertions(+), 5 deletions(-) diff --git a/client/src/features/control/PlaybackControl.jsx b/client/src/features/control/PlaybackControl.jsx index 5e7eaf3f8..36947fc76 100644 --- a/client/src/features/control/PlaybackControl.jsx +++ b/client/src/features/control/PlaybackControl.jsx @@ -3,6 +3,7 @@ import Countdown from '../../common/components/countdown/Countdown'; import { stringFromMillis } from '../../common/dateConfig'; import { useEffect, useState } from 'react'; import { useSocket } from '../../app/context/socketContext'; +import { Button } from '@chakra-ui/button'; import StartIconBtn from '../../common/components/buttons/StartIconBtn'; import PauseIconBtn from '../../common/components/buttons/PauseIconBtn'; import PrevIconBtn from '../../common/components/buttons/PrevIconBtn'; @@ -96,6 +97,14 @@ export default function PlaybackControl() { const started = stringFromMillis(timer.startedAt, true); const finish = stringFromMillis(timer.expectedFinish, true); + const incrementProps = { + size: 'sm', + width: '2.9em', + colorScheme: 'whiteAlpha', + variant: 'outline', + _focus: { boxShadow: 'none' }, + }; + return (
@@ -110,6 +119,32 @@ export default function PlaybackControl() { Finish at {finish}
+
+ + + + +
diff --git a/client/src/features/control/PlaybackControl.module.css b/client/src/features/control/PlaybackControl.module.css index 05eff83c9..99014c21f 100644 --- a/client/src/features/control/PlaybackControl.module.css +++ b/client/src/features/control/PlaybackControl.module.css @@ -17,10 +17,10 @@ .timeContainer { display: grid; grid-template-areas: - 'clk clk ...' - 'sta fin ...'; + 'clk clk btn' + 'sta fin btn'; grid-template-rows: 1fr auto; - grid-template-columns: 1fr 1fr 80px; + grid-template-columns: 2fr 2fr 22%; gap: 5px; justify-items: start; } @@ -29,6 +29,22 @@ grid-area: clk; } +.btn { + grid-area: btn; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + gap: 0.5em; +} + +.minus { + grid-area: min; + display: flex; + flex-direction: column; +} + .start { grid-area: sta; } diff --git a/server/classes/EventTimer.js b/server/classes/EventTimer.js index 623ae96d5..f202623da 100644 --- a/server/classes/EventTimer.js +++ b/server/classes/EventTimer.js @@ -239,6 +239,12 @@ class EventTimer extends Timer { socket.emit('timer', this.getObject()); }); + socket.on('increment-timer', (data) => { + if (isNaN(parseInt(data))) return; + if (data < -5 || data > 5) return; + this.increment(data * 1000 * 60); + }); + /*******************************************/ // playstate socket.on('set-playstate', (data) => { @@ -624,6 +630,14 @@ class EventTimer extends Timer { this.broadcastState(); } + increment(amount) { + // call super + super.increment(amount); + + // broadcast current state + this.broadcastState(); + } + goto(eventIndex) { // load event this.loadEvent(eventIndex); diff --git a/server/classes/Timer.js b/server/classes/Timer.js index d228d725c..81ef0a975 100644 --- a/server/classes/Timer.js +++ b/server/classes/Timer.js @@ -58,6 +58,7 @@ class Timer { } break; case 'pause': + if (this.current <= 0) return; // update paused time this._pausedInterval = now - this._pausedAt; break; @@ -129,8 +130,8 @@ class Timer { start() { // do we need to change if (this.state === 'start') return; - else if (this.duration === 0) return; - else if (this.startedAt == null) { + else if (this.duration <= 0) return; + else if (this._startedAt == null) { this._resetTimers(); const now = this._getCurrentTime(); this._startedAt = now; @@ -165,6 +166,21 @@ class Timer { this._resetTimers(); this.state = 'stop'; } + + increment(amount) { + + if (amount < 0) { + if (Math.abs(amount) > this.current) { + console.log('ot os'); + + this.current = 0; + this._finishAt = this._getCurrentTime(); + return; + } + } + this.current += amount; + this._finishAt += amount; + } } module.exports = Timer;