Skip to content
Snippets Groups Projects
Commit 46a6f8b9 authored by Ondřej Trojan's avatar Ondřej Trojan
Browse files

synchronization only when all connected

parent 298007eb
No related branches found
No related tags found
No related merge requests found
...@@ -208,18 +208,13 @@ public class WebController implements WebMvcConfigurer { ...@@ -208,18 +208,13 @@ public class WebController implements WebMvcConfigurer {
@GetMapping("/control/videoedit") @GetMapping("/control/videoedit")
public String ControlVideoEdit(Principal principal, Model model, VideoSetForm videoSetForm, BindingResult bindingResult) { public String ControlVideoEdit(Principal principal, Model model, VideoSetForm videoSetForm, BindingResult bindingResult) {
modelViewService.populateHeader(principal, model); modelViewService.populateVideoSet(principal, model);
model.addAttribute("activeTab", "control");
model.addAttribute("videosets", displaySetService.getAllDisplaySets());
return "videoedit/videoset"; return "videoedit/videoset";
} }
@GetMapping("/control/videoedit/videoset") @GetMapping("/control/videoedit/videoset")
public String ControlVideoEditVideoSet(Principal principal, Model model, VideoSetForm videoSetForm, BindingResult bindingResult) { public String ControlVideoEditVideoSet(Principal principal, Model model, VideoSetForm videoSetForm, BindingResult bindingResult) {
modelViewService.populateHeader(principal, model); modelViewService.populateVideoSet(principal, model);
model.addAttribute("activeTab", "control");
model.addAttribute("activeTabSecondary", "videoset");
model.addAttribute("videosets", displaySetService.getAllDisplaySets());
return "videoedit/videoset"; return "videoedit/videoset";
} }
......
package com.museum.projection.service; package com.museum.projection.service;
import com.museum.projection.clients.DummyClient;
import com.museum.projection.config.CustomConfig; import com.museum.projection.config.CustomConfig;
import com.museum.projection.dao.ResponseData; import com.museum.projection.dao.ResponseData;
import com.museum.projection.dto.*; import com.museum.projection.dto.*;
import com.museum.projection.util.StringUtils; import com.museum.projection.util.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -21,6 +24,8 @@ public class ClientService { ...@@ -21,6 +24,8 @@ public class ClientService {
private final VideofileService videofileService; private final VideofileService videofileService;
private final CustomConfig config; private final CustomConfig config;
private static final Logger log = LoggerFactory.getLogger(ClientService.class);
public ClientService(PlaylistService playlistService, ControlService controlService, DisplaySetService displaySetService, DisplayTrackService displayTrackService, VideofileService videofileService, CustomConfig config) { public ClientService(PlaylistService playlistService, ControlService controlService, DisplaySetService displaySetService, DisplayTrackService displayTrackService, VideofileService videofileService, CustomConfig config) {
this.playlistService = playlistService; this.playlistService = playlistService;
this.controlService = controlService; this.controlService = controlService;
...@@ -49,8 +54,14 @@ public class ClientService { ...@@ -49,8 +54,14 @@ public class ClientService {
} }
if (connectedClient == Integer.MAX_VALUE) if (connectedClient == Integer.MAX_VALUE)
return new ResponseData<PlayedTrackDto>(null, "No client is connected"); return new ResponseData<PlayedTrackDto>(null, "No client is connected");
List<String> playlist = controlService.getPlaylist(connectedClient);
List<String> titles = playlistService.parseTitlesPlaylist(controlService.getPlaylist(connectedClient)); if (playlist.isEmpty()) {
log.error("Invalid playlist received from client");
return new ResponseData<>(new PlayedTrackDto(controlService.getTitle(connectedClient),
"unknown", "unknown", controlService.getTime(connectedClient),
controlService.getLength(connectedClient)));
}
List<String> titles = playlistService.parseTitlesPlaylist(playlist);
List<String>[] dbPlaylist = new List[config.getClientCount()]; List<String>[] dbPlaylist = new List[config.getClientCount()];
for (DisplaySetDto displaySet : displaySetService.getAllDisplaySets()) { for (DisplaySetDto displaySet : displaySetService.getAllDisplaySets()) {
for (DisplayTrackDto displayTrack : displayTrackService.getDisplayTracksByDisplaySetId(displaySet.getId())) { for (DisplayTrackDto displayTrack : displayTrackService.getDisplayTracksByDisplaySetId(displaySet.getId())) {
...@@ -61,7 +72,7 @@ public class ClientService { ...@@ -61,7 +72,7 @@ public class ClientService {
} }
if (titles.equals(dbPlaylist[connectedClient])) { if (titles.equals(dbPlaylist[connectedClient])) {
return new ResponseData<>(new PlayedTrackDto(controlService.getTitle(connectedClient), return new ResponseData<>(new PlayedTrackDto(controlService.getTitle(connectedClient),
displaySet.getName(), displayTrack.getName(), controlService.getTime(connectedClient), displaySet.getName(), displayTrack.getName(), controlService.getTime(connectedClient),
controlService.getLength(connectedClient))); controlService.getLength(connectedClient)));
} }
} }
...@@ -70,7 +81,6 @@ public class ClientService { ...@@ -70,7 +81,6 @@ public class ClientService {
} }
} }
return new ResponseData<>(new PlayedTrackDto(controlService.getTitle(connectedClient), return new ResponseData<>(new PlayedTrackDto(controlService.getTitle(connectedClient),
"unknown", "unknown", controlService.getTime(connectedClient), "unknown", "unknown", controlService.getTime(connectedClient),
controlService.getLength(connectedClient))); controlService.getLength(connectedClient)));
// return null; // return null;
......
...@@ -60,6 +60,10 @@ public class ControlService { ...@@ -60,6 +60,10 @@ public class ControlService {
return client.sendForPlaylist(cmd + " " + parameter, getLinesFor(cmd)); return client.sendForPlaylist(cmd + " " + parameter, getLinesFor(cmd));
} }
public boolean areAllConnected(){
return client1.isConnected() && client2.isConnected();
}
public boolean isConnected(int clientId) { public boolean isConnected(int clientId) {
boolean ret = false; boolean ret = false;
switch (clientId) { switch (clientId) {
......
...@@ -18,17 +18,19 @@ public class ModelViewService { ...@@ -18,17 +18,19 @@ public class ModelViewService {
private final DisplayTrackService displayTrackService; private final DisplayTrackService displayTrackService;
private final DisplaySetService displaySetService; private final DisplaySetService displaySetService;
private final ClientService clientService; private final ClientService clientService;
private final ControlService controlService;
private final MultipartConfigElement multipartConfigElement; private final MultipartConfigElement multipartConfigElement;
private final CustomConfig customConfig; private final CustomConfig customConfig;
public ModelViewService(UserService userService, FolderService folderService, VideofileService videofileService, DisplayTrackService displayTrackService, DisplaySetService displaySetService, ClientService clientService, MultipartConfigElement multipartConfigElement, CustomConfig customConfig) { public ModelViewService(UserService userService, FolderService folderService, VideofileService videofileService, DisplayTrackService displayTrackService, DisplaySetService displaySetService, ClientService clientService, ControlService controlService, MultipartConfigElement multipartConfigElement, CustomConfig customConfig) {
this.userService = userService; this.userService = userService;
this.folderService = folderService; this.folderService = folderService;
this.videofileService = videofileService; this.videofileService = videofileService;
this.displayTrackService = displayTrackService; this.displayTrackService = displayTrackService;
this.displaySetService = displaySetService; this.displaySetService = displaySetService;
this.clientService = clientService; this.clientService = clientService;
this.controlService = controlService;
this.multipartConfigElement = multipartConfigElement; this.multipartConfigElement = multipartConfigElement;
this.customConfig = customConfig; this.customConfig = customConfig;
} }
...@@ -62,6 +64,7 @@ public class ModelViewService { ...@@ -62,6 +64,7 @@ public class ModelViewService {
model.addAttribute("activeTab", "control"); model.addAttribute("activeTab", "control");
model.addAttribute("activeTabSecondary", "videoset"); model.addAttribute("activeTabSecondary", "videoset");
model.addAttribute("videosets", displaySetService.getAllDisplaySets()); model.addAttribute("videosets", displaySetService.getAllDisplaySets());
model.addAttribute("clientConnected", controlService.areAllConnected() ? "" : "disabled");
return model; return model;
} }
......
...@@ -12,7 +12,8 @@ ...@@ -12,7 +12,8 @@
<h1>Video set</h1> <h1>Video set</h1>
<p>Video set is a set of video tracks</p> <p>Video set is a set of video tracks</p>
<form th:method="post" th:action="@{/control/videoedit/videoset/synchronize}"> <form th:method="post" th:action="@{/control/videoedit/videoset/synchronize}">
<button type="submit" class="btn btn-warning">Synchronize</button> <p>Synchronization copies current pulished videosets to clients</p>
<button type="submit" class="btn btn-warning" th:disabled="${clientConnected}">Synchronize</button>
</form> </form>
<table class="table"> <table class="table">
<thead class="thead-dark"> <thead class="thead-dark">
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment