initial commit
This commit is contained in:
@@ -37,3 +37,37 @@
|
||||
background-color: var(--lumo-contrast-5pct);
|
||||
padding: var(--lumo-space-s) var(--lumo-space-l);
|
||||
}
|
||||
|
||||
.v-grid-cell.red {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.v-grid-cell.yellow {
|
||||
color: yellow;
|
||||
}
|
||||
|
||||
.v-grid-cell.green {
|
||||
color: green;
|
||||
}
|
||||
|
||||
[part~="cell"].success {
|
||||
background: green;
|
||||
}
|
||||
|
||||
.success {
|
||||
background: green;
|
||||
}
|
||||
|
||||
.v-grid-cell.success {
|
||||
color: green;
|
||||
}
|
||||
|
||||
.error {
|
||||
color: red;
|
||||
}
|
||||
|
||||
series-cliffhanger
|
||||
|
||||
series-cliffhanger-open
|
||||
|
||||
series-open
|
||||
@@ -12,6 +12,7 @@ import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.SortedMap;
|
||||
|
||||
public class Serie
|
||||
@@ -146,6 +147,19 @@ public class Serie
|
||||
this.maxSeason = maxSeason;
|
||||
}
|
||||
|
||||
public String getSeriesStyle()
|
||||
{
|
||||
String style = "";
|
||||
|
||||
if(seriesCliffhanger)
|
||||
style = style + "font-style: italic; ";
|
||||
|
||||
if(Objects.equals(seriesStatus, "Returning Series"))
|
||||
style = style + "font-weight: bold; ";
|
||||
|
||||
return style;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
|
||||
@@ -19,26 +19,26 @@ public class EpisodeService
|
||||
try
|
||||
{
|
||||
return jdbcTemplate.query("SELECT serie.seriesID seriesID," +
|
||||
" serie.seriesName seriesName," +
|
||||
" YEAR(serie.firstAired) seriesFirstAired," +
|
||||
" serie.resolution seriesResolution," +
|
||||
" serie.cliffhanger seriesCliffhanger," +
|
||||
" serie.status seriesStatus," +
|
||||
" serie.download seriesDownload," +
|
||||
" season.seasonNumber seasonNumber," +
|
||||
" episode.episodeNumber episodeNumber," +
|
||||
" episode.state episodeState," +
|
||||
" ( SELECT MIN(s.seasonNumber) FROM season s WHERE s.seriesID = serie.seriesID ) minSeason," +
|
||||
" ( SELECT MAX(s.seasonNumber) FROM season s WHERE s.seriesID = serie.seriesID ) maxSeason" +
|
||||
" FROM serie" +
|
||||
" LEFT JOIN season ON serie.seriesID = season.seriesID" +
|
||||
" LEFT JOIN episode ON serie.seriesID = episode.seriesID AND season.seasonNumber = episode.seasonNumber" +
|
||||
" WHERE season.seasonNumber != 0 OR" +
|
||||
" serie.seriesID >= 1000000 " +
|
||||
" ORDER BY serie.seriesName," +
|
||||
" serie.firstAired," +
|
||||
" season.seasonNumber," +
|
||||
" episode.episodeNumber;",
|
||||
" serie.seriesName seriesName," +
|
||||
" YEAR(serie.firstAired) seriesFirstAired," +
|
||||
" serie.resolution seriesResolution," +
|
||||
" serie.cliffhanger seriesCliffhanger," +
|
||||
" serie.status seriesStatus," +
|
||||
" serie.download seriesDownload," +
|
||||
" season.seasonNumber seasonNumber," +
|
||||
" episode.episodeNumber episodeNumber," +
|
||||
" episode.state episodeState," +
|
||||
" ( SELECT MIN(s.seasonNumber) FROM season s WHERE s.seriesID = serie.seriesID ) minSeason," +
|
||||
" ( SELECT MAX(s.seasonNumber) FROM season s WHERE s.seriesID = serie.seriesID ) maxSeason" +
|
||||
" FROM serie" +
|
||||
" LEFT JOIN season ON serie.seriesID = season.seriesID" +
|
||||
" LEFT JOIN episode ON serie.seriesID = episode.seriesID AND season.seasonNumber = episode.seasonNumber" +
|
||||
" WHERE season.seasonNumber != 0 OR" +
|
||||
" serie.seriesID >= 1000000 " +
|
||||
" ORDER BY serie.seriesName," +
|
||||
" serie.firstAired," +
|
||||
" season.seasonNumber," +
|
||||
" episode.episodeNumber;",
|
||||
(rs, rowNum) -> new Episode(rs.getInt("seriesID"), rs.getString("seriesName"), rs.getInt("seriesFirstAired"), rs.getString("seriesResolution"), rs.getBoolean("seriesCliffhanger"), rs.getString("seriesStatus"), rs.getString("seriesDownload"), rs.getInt("seasonNumber"), rs.getInt("episodeNumber"), rs.getInt("episodeState"), rs.getInt("minSeason"), rs.getInt("maxSeason")));
|
||||
|
||||
} catch(Exception e)
|
||||
|
||||
@@ -19,6 +19,8 @@ import com.vaadin.flow.router.PageTitle;
|
||||
import com.vaadin.flow.router.Route;
|
||||
import com.vaadin.flow.server.StreamResource;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import com.vaadin.flow.data.renderer.ComponentRenderer;
|
||||
import com.vaadin.flow.data.renderer.TemplateRenderer;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.xml.transform.stream.StreamSource;
|
||||
@@ -50,6 +52,9 @@ public class SeriesView extends Div implements AfterNavigationObserver
|
||||
|
||||
private boolean isInitialized = false;
|
||||
|
||||
private Integer stateWidth = 4;
|
||||
private Integer stateHeight = 20;
|
||||
|
||||
public SeriesView()
|
||||
{
|
||||
setId("series-view");
|
||||
@@ -57,10 +62,12 @@ public class SeriesView extends Div implements AfterNavigationObserver
|
||||
serie = new Grid<>();
|
||||
serie.addThemeVariants(GridVariant.LUMO_NO_BORDER);
|
||||
serie.setHeightFull();
|
||||
serie.addColumn(Serie::getSeriesName).setHeader("Series Name");
|
||||
serie.addColumn(TemplateRenderer.<Serie>of("<div style$=\"[[item.style]]\">[[item.name]]</div>")
|
||||
.withProperty("name", Serie::getSeriesName)
|
||||
.withProperty("style", Serie::getSeriesStyle))
|
||||
.setHeader("Series Name");
|
||||
serie.addColumn(Serie::getSeriesFirstAired).setHeader("First Aired");
|
||||
serie.addColumn(Serie::getSeriesResolution).setHeader("Resolution");
|
||||
serie.addColumn(Serie::getSeriesCliffhanger).setHeader("Cliffhanger");
|
||||
|
||||
serie.addItemDoubleClickListener(
|
||||
event ->
|
||||
@@ -68,6 +75,8 @@ public class SeriesView extends Div implements AfterNavigationObserver
|
||||
Notification.show("Clicked Item: " + event.getItem());
|
||||
});
|
||||
|
||||
serie.getColumns().forEach(col -> col.setAutoWidth(true));
|
||||
|
||||
add(serie);
|
||||
}
|
||||
|
||||
@@ -87,9 +96,6 @@ public class SeriesView extends Div implements AfterNavigationObserver
|
||||
final Integer sFinal = s;
|
||||
serie.addComponentColumn(i ->
|
||||
{
|
||||
// StreamResource r = new StreamResource("image.png", () -> getImageInputStream(sFinal, i.getEpisodeState()));
|
||||
// Image img = new Image(r, "");
|
||||
// return img;
|
||||
return new Image(new StreamResource("image.png", () -> getImageInputStream(sFinal, i.getEpisodeState())), "");
|
||||
}).setHeader("Season " + sFinal);
|
||||
}
|
||||
@@ -125,10 +131,10 @@ public class SeriesView extends Div implements AfterNavigationObserver
|
||||
|
||||
private InputStream getImageInputStream(Integer curSeason, SortedMap<Integer, Integer> state)
|
||||
{
|
||||
ByteArrayOutputStream imagebuffer = null;
|
||||
Integer season = -1;
|
||||
Integer episode = -1;
|
||||
boolean found = false;
|
||||
ByteArrayOutputStream imagebuffer = null;
|
||||
Integer season = -1;
|
||||
Integer episode = -1;
|
||||
SortedMap<Integer, Integer> seasonState = new TreeMap<>();
|
||||
|
||||
for(Integer key : state.keySet())
|
||||
{
|
||||
@@ -136,13 +142,12 @@ public class SeriesView extends Div implements AfterNavigationObserver
|
||||
episode = key & 0xFF;
|
||||
|
||||
if(season == curSeason)
|
||||
{
|
||||
found = true;
|
||||
seasonState.put(episode, state.get(key));
|
||||
else if(season > curSeason)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(!found)
|
||||
if(seasonState.size() == 0)
|
||||
{
|
||||
BufferedImage image = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);
|
||||
Graphics2D drawable = image.createGraphics();
|
||||
@@ -161,13 +166,38 @@ public class SeriesView extends Div implements AfterNavigationObserver
|
||||
}
|
||||
}
|
||||
|
||||
BufferedImage image = new BufferedImage(100, 10, BufferedImage.TYPE_INT_RGB);
|
||||
BufferedImage image = new BufferedImage(stateWidth * seasonState.lastKey(), stateHeight, BufferedImage.TYPE_INT_RGB);
|
||||
Graphics2D drawable = image.createGraphics();
|
||||
Color colGrey = new Color(192, 192, 192);
|
||||
Color colBlue = new Color(0, 0, 192);
|
||||
Color colGreen = new Color(0, 192, 0);
|
||||
Color colBlack = new Color(0, 0, 0);
|
||||
Color col = colBlack;
|
||||
|
||||
drawable.setColor(Color.WHITE);
|
||||
drawable.fillRect(0, 0, 100, 10);
|
||||
drawable.setColor(Color.BLACK);
|
||||
drawable.drawString("S" + season + "E" + episode, 5, 10);
|
||||
drawable.setColor(colBlack);
|
||||
drawable.fillRect(0, 0, stateWidth * seasonState.lastKey(), stateHeight);
|
||||
|
||||
for(Integer key : seasonState.keySet())
|
||||
{
|
||||
switch(seasonState.get(key))
|
||||
{
|
||||
case 0:
|
||||
col = colBlack;
|
||||
break;
|
||||
case 1:
|
||||
col = colGrey;
|
||||
break;
|
||||
case 2:
|
||||
col = colBlue;
|
||||
break;
|
||||
case 3:
|
||||
col = colGreen;
|
||||
break;
|
||||
}
|
||||
|
||||
drawable.setColor(col);
|
||||
drawable.fillRect((key - 1) * stateWidth, 0, stateWidth - 1, stateHeight);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user