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

playlist parsing with id and running

parent e7912356
No related branches found
No related tags found
No related merge requests found
package com.museum.projection.dto;
import com.museum.projection.dto.other.ParsedPlaylistTrack;
import com.museum.projection.util.StringUtils;
import java.util.List;
......@@ -14,9 +15,9 @@ public class PlayedTrackDto {
private int currentTime;
private int length;
private int percentage;
private List<String> playlist;
private List<ParsedPlaylistTrack> playlist;
public PlayedTrackDto(String title, String displaySet, String displayTrack, int currentTime, int length, List<String> playlist) {
public PlayedTrackDto(String title, String displaySet, String displayTrack, int currentTime, int length, List<ParsedPlaylistTrack> playlist) {
this.title = title;
this.currentTimeFormated = StringUtils.getTimeFromSeconds(currentTime);
this.lengthTimeFormated = StringUtils.getTimeFromSeconds(length);
......@@ -88,11 +89,11 @@ public class PlayedTrackDto {
this.lengthTimeFormated = lengthTimeFormated;
}
public List<String> getPlaylist() {
public List<ParsedPlaylistTrack> getPlaylist() {
return playlist;
}
public void setPlaylist(List<String> playlist) {
public void setPlaylist(List<ParsedPlaylistTrack> playlist) {
this.playlist = playlist;
}
}
package com.museum.projection.dto.other;
public class ParsedPlaylistTrack {
private boolean isRunning;
private int index;
private String name;
private String displayTrackId;
public ParsedPlaylistTrack(boolean isRunning, int index, String name) {
this.isRunning = isRunning;
this.index = index;
this.name = name;
}
public boolean isRunning() {
return isRunning;
}
public int getIndex() {
return index;
}
public String getName() {
return name;
}
public String getDisplayTrackId() {
return displayTrackId;
}
public void setDisplayTrackId(String displayTrackId) {
this.displayTrackId = displayTrackId;
}
}
......@@ -3,6 +3,8 @@ package com.museum.projection.service;
import com.museum.projection.config.CustomConfig;
import com.museum.projection.dao.ResponseData;
import com.museum.projection.dto.*;
import com.museum.projection.dto.other.ParsedPlaylistTrack;
import javafx.util.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
......@@ -46,7 +48,7 @@ public class ClientService {
private String currentDisplaySetName = "";
private String currentDisplayTrackId = "";
private String currentDisplayTrackName = "";
private List<String> currentPlaylistTracks = new ArrayList<>();
private List<ParsedPlaylistTrack> currentPlaylistTracks = new ArrayList<>();
private int currentTrackLength = 0;
int connectedClient = Integer.MAX_VALUE;
......@@ -93,15 +95,17 @@ public class ClientService {
}
if (!currentDisplayTrackId.equals(displayTrack.getData().getId()) || currentPlaylistTracks.isEmpty()) {
//check playlist
List<String> displayTracks = new ArrayList<>();
List<String> tracks = playlistService.parseTitlesPlaylist(controlService.getPlaylist(connectedClient));
for (String parsedName : tracks) {
ResponseData<DisplayTrackDto> displayTrackFromParsed = displayTrackService.getDisplayTrackById(parsedName.split("-")[1]);
// List<String> displayTracks = new ArrayList<>();
List<ParsedPlaylistTrack> displayTracks = new ArrayList<>();
List<ParsedPlaylistTrack> tracks = playlistService.parseTitlesPlaylist(controlService.getPlaylist(connectedClient));
for (ParsedPlaylistTrack parsedTrack : tracks) {
ResponseData<DisplayTrackDto> displayTrackFromParsed = displayTrackService.getDisplayTrackById(parsedTrack.getName().split("-")[1]);
if (displayTrackFromParsed.getData() == null) {
displayTracks.add("unknown displayTrack");
displayTracks.add(new ParsedPlaylistTrack(parsedTrack.isRunning(),parsedTrack.getIndex(),"unknown displayTrack"));
continue;
}
displayTracks.add(displayTrackFromParsed.getData().getName());
parsedTrack.setDisplayTrackId(displayTrackFromParsed.getData().getId());
displayTracks.add(parsedTrack);
}
currentPlaylistTracks = displayTracks;
currentDisplayTrackId = displayTrack.getData().getId();
......
......@@ -2,11 +2,14 @@ package com.museum.projection.service;
import com.museum.projection.config.CustomConfig;
import com.museum.projection.dao.ResponseData;
import com.museum.projection.dto.other.ParsedPlaylistTrack;
import com.museum.projection.dto.other.PlaylistTrack;
import javafx.util.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import javax.xml.crypto.dsig.keyinfo.KeyValue;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
......@@ -28,6 +31,8 @@ public class PlaylistService {
private final String PLAYLIST_END = "+----[ End of playlist ]";
private final String PLAYLIST_1 = "| 1 - Playlist";
private final String PLAYLIST_PARSE_REG_NAME_ = "[|]\\s{2,3}[*]*\\d+\\s*[-]\\s{1}(?<name>.+?)\\s";
private final String PLAYLIST_PARSE_REG_ID_NAME = "[|]\\s{2,3}[*]*(?<id>\\d+?)\\s*[-]\\s{1}(?<name>.+?)\\s";
private final String PLAYLIST_PARSE_REG_RUN_ID_NAME = "[|]\\s{2,3}(?<run>[*]*?)(?<id>\\d+?)\\s*[-]\\s{1}(?<name>.+?)\\s";
private final String PLAYLIST_PARSE_REG_ALL = "[|]\\s{2,3}[*]*\\d+\\s*[-]\\s{1}(?<name>.+?)\\s([(](?<time>.+?)[)]\\s)*\\[\\w*\\s(?<played>\\d*)\\s[\\w]*]";
private final String PLAYLIST_PARSE_REG_NAME_TIME = "[|]\\s{2,3}[*]*\\d+\\s*[-]\\s{1}(?<name>.+?)\\s([(](?<time>.+?)[)]\\s)";
......@@ -132,14 +137,14 @@ public class PlaylistService {
}
}
public List<String> parseTitlesPlaylist(List<String> playlist) {
ArrayList<String> ret = new ArrayList<>();
if (playlist.get(0) == null || !playlist.get(0).equals(PLAYLIST_START) || playlist.get(1) == null || !playlist.get(1).equals(PLAYLIST_1)) {
log.error("invalid playlist input");
public List<ParsedPlaylistTrack> parseTitlesPlaylist(List<String> playlist) {
ArrayList<ParsedPlaylistTrack> ret = new ArrayList<>();
if (playlist.isEmpty() || playlist.get(0) == null || !playlist.get(0).equals(PLAYLIST_START) || playlist.get(1) == null || !playlist.get(1).equals(PLAYLIST_1)) {
log.error("invalid playlist input of " + playlist.toString());
return List.of();
}
final Pattern PATTERN = Pattern.compile(PLAYLIST_PARSE_REG_NAME_);
final Pattern PATTERN = Pattern.compile(PLAYLIST_PARSE_REG_RUN_ID_NAME);
Matcher normal, chosen;
for (int i = 2; i < playlist.size() - 2; i++) {
......@@ -149,7 +154,7 @@ public class PlaylistService {
log.error("Cannot match incoming playlist " + playlist.toString() + " item from client with reg");
return List.of();
}
ret.add(normal.group("name"));
ret.add(new ParsedPlaylistTrack(normal.group("run").equals("*"), Integer.parseInt(normal.group("id")),normal.group("name")));
}
return ret;
}
......
......@@ -47,6 +47,11 @@ function controlShutdown(btn, client) {
})
}
let shutdownButtons = document.querySelectorAll(".shutdown")
shutdownButtons.forEach(button => button.addEventListener('click', function () {
controlShutdown(shutdown1Btn, this.value);
}));
function handeResponseAlert(text) {
console.log(text);
// alertMessageBox.insertAdjacentHTML('beforeend', '<div class="alert alert-success" role="alert">'+text+'</div>');
......@@ -57,9 +62,3 @@ playBtn.addEventListener('click', () => controlEvent("play"));
nextBtn.addEventListener('click', () => controlEvent("next"));
prevBtn.addEventListener('click', () => controlEvent("prev"));
pauseBtn.addEventListener('click', () => controlEvent("pause"));
shutdown1Btn.addEventListener('click', () => {
controlShutdown(shutdown1Btn, 1);
})
shutdown2Btn.addEventListener('click', () => {
controlShutdown(shutdown1Btn, 2);
})
......@@ -67,7 +67,7 @@
<a> Wrong configuration, client count = 0</a>
</div>
<div th:unless="${clientCount==0}">
<button th:id="${'shutdown' + client}" type="button" class="btn btn-danger my-2"
<button th:value="${client}" type="button" class="shutdown btn btn-danger my-2"
th:text="${'Restart ' + client}" th:each="client:${#numbers.sequence(1,clientCount)}"></button>
</div>
......
......@@ -27,7 +27,7 @@
<dt class="col-sm-3">Playlist</dt>
<ol>
<li th:if="${track.playlist.isEmpty()}">Unknown</li>
<li th:classappend="${playTrack == track.displayTrack} ? font-weight-bolder : ''" th:text="${playTrack}" th:each="playTrack : ${track.playlist}" ></li>
<li th:classappend="${playTrack.isRunning()} ? font-weight-bolder : ''" th:text="${playTrack.getName()}" th:each="playTrack : ${track.playlist}" ></li>
</ol>
</div>
......
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