Skip to content

Commit

Permalink
Really show history while it's available
Browse files Browse the repository at this point in the history
  • Loading branch information
simonharrer committed Nov 15, 2021
1 parent 8b57ee3 commit f893507
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 10 deletions.
8 changes: 8 additions & 0 deletions src/main/java/sh/mob/timer/web/Room.java
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,14 @@ public String name() {
return name;
}

public List<TimerRequest> historyWithoutLatest() {
if (timerRequests.isEmpty()) {
return List.of();
}

return timerRequests.subList(0, timerRequests.size() - 1);
}

public static final class TimerRequest {

enum TimerType {
Expand Down
14 changes: 7 additions & 7 deletions src/main/java/sh/mob/timer/web/RoomApiController.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public RoomApiController(RoomRepository roomRepository) {
@RequestMapping(
value = "/{roomId:[a-z0-9-]+}/events",
produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ServerSentEvent<Room.TimerRequest>> getEventStream(
public Flux<ServerSentEvent<Object>> getEventStream(
@PathVariable String roomId, ServerHttpResponse response) {
response
.getHeaders()
Expand All @@ -48,20 +48,20 @@ public Flux<ServerSentEvent<Room.TimerRequest>> getEventStream(
.asFlux()
.map(
timerRequest ->
ServerSentEvent.<TimerRequest>builder()
.event("TIMER_REQUEST")
.data(timerRequest)
.build());
ServerSentEvent.builder().event("TIMER_REQUEST").data(timerRequest).build());
var keepAliveFlux =
Flux.interval(Duration.ofSeconds(5L))
.map(
second ->
ServerSentEvent.<Room.TimerRequest>builder()
ServerSentEvent.builder()
.event("KEEP_ALIVE")
.data(new TimerRequest(null, null, null, null, null))
.build());
var initialHistory =
Flux.just(room.historyWithoutLatest())
.map(list -> ServerSentEvent.builder().event("INITIAL_HISTORY").data(list).build());

return keepAliveFlux.mergeWith(timerRequestFlux);
return Flux.concat(initialHistory, keepAliveFlux.mergeWith(timerRequestFlux));
}

@PutMapping("/{roomId:[a-z0-9-]+}")
Expand Down
26 changes: 24 additions & 2 deletions src/main/resources/templates/room.html
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,29 @@ <h5>Usage</h5>
document.getElementById('history-container').style.display = 'none';
}

eventSource.addEventListener('INITIAL_HISTORY', (event) => {
console.log('handling event INITIAL_HISTORY ' + event.data);
let historyEntries = JSON.parse(event.data);

if (historyEntries === null) {
return;
}

historyEntries.forEach(historyEntry => {
prependToHistory(createHistoryEntry(historyEntry));
});
})

function createHistoryEntry(timerRequest) {
let requested = timerRequest["requested"];
let timerInMinutes = timerRequest["timer"];
let user = timerRequest["user"];
let type = timerRequest["type"];
let finished = Date.parse(requested) + (timerInMinutes * 60 * 1000);
return `πŸ•’ ${formatTodayAware(requested)} ${type === "BREAKTIMER" ? "β˜•"
: "⏲"} ${timerInMinutes} min 🏁 ${(formatTodayAware(finished))} πŸ‘€ ${user}`;
}

eventSource.addEventListener('TIMER_REQUEST', (event) => {
console.log('handling event TIMER_REQUEST ' + event.data);
let timerRequest = JSON.parse(event.data);
Expand Down Expand Up @@ -306,7 +329,6 @@ <h5>Usage</h5>
return;
}

let finished = Date.parse(requested) + (timerInMinutes * 60 * 1000);
updateTimerUser(user)
updateTimerNextUser(null)
updateTimerType(type)
Expand All @@ -318,7 +340,7 @@ <h5>Usage</h5>
requestNextUser = nextUser
requestTimer = timerInMinutes

prependToHistory(`πŸ•’ ${formatTodayAware(requested)} ${type === "BREAKTIMER" ? "β˜•" : "⏲"} ${timerInMinutes} min 🏁 ${(formatTodayAware(finished))} πŸ‘€ ${user}`);
prependToHistory(createHistoryEntry(timerRequest));
});

checkAudioPlayback();
Expand Down
11 changes: 10 additions & 1 deletion test.sh
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
export MOB_TIMER_URL=http://localhost:8080/
export MOB_TIMER_ROOM=test
MOB_TIMER_USER=test1 mob t 1
sleep 1
MOB_TIMER_USER=test2 mob t 1
sleep 1
MOB_TIMER_USER=test1 mob break 1
sleep 1
MOB_TIMER_USER=test3 mob t 1
sleep 1
MOB_TIMER_USER=test3 mob t 1
sleep 1
MOB_TIMER_USER=test1 mob break 1
sleep 1
MOB_TIMER_USER=test2 mob t 1
MOB_TIMER_USER=test2 mob t 0
sleep 1
MOB_TIMER_USER=test2 mob t 0
sleep 1
MOB_TIMER_USER=test2 mob t 1

0 comments on commit f893507

Please sign in to comment.