Full Update implemented

This commit is contained in:
2021-02-24 22:10:56 +01:00
parent 1768e2bad2
commit d1d9a952c2
65 changed files with 889 additions and 374 deletions
+24
View File
@@ -18,5 +18,29 @@
</value>
</option>
</JetCodeStyleSettings>
<DBN-PSQL>
<case-options enabled="true">
<option name="KEYWORD_CASE" value="lower" />
<option name="FUNCTION_CASE" value="lower" />
<option name="PARAMETER_CASE" value="lower" />
<option name="DATATYPE_CASE" value="lower" />
<option name="OBJECT_CASE" value="preserve" />
</case-options>
<formatting-settings enabled="false" />
</DBN-PSQL>
<DBN-SQL>
<case-options enabled="true">
<option name="KEYWORD_CASE" value="lower" />
<option name="FUNCTION_CASE" value="lower" />
<option name="PARAMETER_CASE" value="lower" />
<option name="DATATYPE_CASE" value="lower" />
<option name="OBJECT_CASE" value="preserve" />
</case-options>
<formatting-settings enabled="false">
<option name="STATEMENT_SPACING" value="one_line" />
<option name="CLAUSE_CHOP_DOWN" value="chop_down_if_statement_long" />
<option name="ITERATION_ELEMENTS_WRAPPING" value="chop_down_if_not_single" />
</formatting-settings>
</DBN-SQL>
</code_scheme>
</component>
+3
View File
@@ -9,5 +9,8 @@
<module name="multimedia" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel>
<module name="multimedia" target="8" />
</bytecodeTargetLevel>
</component>
</project>
-5
View File
@@ -26,11 +26,6 @@
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="bintray" />
<option name="url" value="https://jcenter.bintray.com" />
</remote-repository>
<remote-repository>
<option name="id" value="mvnrepository" />
<option name="name" value="mvnrepository" />
+5 -5
View File
@@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="JavadocGenerationManager">
<option name="OUTPUT_DIRECTORY" value="$PROJECT_DIR$/../../../../../../../Temp/test" />
<option name="OUTPUT_DIRECTORY" value="$PROJECT_DIR$/../../../../../../../Temp/Javadoc" />
<option name="OPTION_DOCUMENT_TAG_USE" value="true" />
<option name="OPTION_DOCUMENT_TAG_AUTHOR" value="true" />
<option name="OPTION_DOCUMENT_TAG_VERSION" value="true" />
</component>
<component name="MavenProjectsManager">
<option name="originalFiles">
@@ -11,7 +13,5 @@
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="11" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="11" project-jdk-type="JavaSDK" />
</project>
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/multimedia.iml" filepath="$PROJECT_DIR$/multimedia.iml" />
</modules>
</component>
</project>
+45
View File
@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: org.zkoss.zk:zkbind:9.5.0.1" level="project" />
<orderEntry type="library" name="Maven: org.javassist:javassist:3.18.2-GA" level="project" />
<orderEntry type="library" name="Maven: org.zkoss.zk:zul:9.5.0.1" level="project" />
<orderEntry type="library" name="Maven: org.zkoss.zk:zk:9.5.0.1" level="project" />
<orderEntry type="library" name="Maven: org.zkoss.common:zweb:9.5.0.1" level="project" />
<orderEntry type="library" name="Maven: org.zkoss.common:zcommon:9.5.0.1" level="project" />
<orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.4" level="project" />
<orderEntry type="library" name="Maven: org.zkoss.common:zel:9.5.0.1" level="project" />
<orderEntry type="library" name="Maven: org.apache-extras.beanshell:bsh:2.0b6" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" />
<orderEntry type="library" name="Maven: org.zkoss.zk:zkwebfragment:9.5.0.1" level="project" />
<orderEntry type="library" name="Maven: org.zkoss.zk:zkplus:9.5.0.1" level="project" />
<orderEntry type="library" name="Maven: org.zkoss.zk:zhtml:9.5.0.1" level="project" />
<orderEntry type="library" name="Maven: org.zkoss:zsoup:1.8.2.5" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.servlet:javax.servlet-api:3.1.0" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.17" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: com.google.protobuf:protobuf-java:3.6.1" level="project" />
<orderEntry type="library" name="Maven: org.zkoss.theme:breeze:9.5.0.1" level="project" />
<orderEntry type="library" name="Maven: org.zkoss.theme:atlantic:9.5.0.1" level="project" />
<orderEntry type="library" name="Maven: org.zkoss.theme:sapphire:9.5.0.1" level="project" />
<orderEntry type="library" name="Maven: org.zkoss.theme:silvertail:9.5.0.1" level="project" />
<orderEntry type="library" name="Maven: com.omertron:themoviedbapi:4.3" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.7.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.7.1" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.7.1" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.16" level="project" />
<orderEntry type="library" name="Maven: org.yamj:api-common:2.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.3" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.4" level="project" />
</component>
</module>
@@ -497,6 +497,16 @@ class serieData
m_model = model;
}
public boolean isActive()
{
if(m_seriesStatus == "Ended")
return false;
if(m_seriesStatus == "Canceled")
return false;
return true;
}
public void recalcState()
{
m_stateInit = 0;
@@ -792,6 +802,8 @@ class serieData
{
if(strDate == null)
return new Date(1900, 1, 1);
else if(strDate.isEmpty())
return new Date(1900, 1, 1);
else
return Date.valueOf(strDate);
}
@@ -881,6 +893,7 @@ class serieData
eData.setEpisodeVoteAverage(episode.getVoteAverage());
eData.setEpisodeVoteCount(episode.getVoteCount());
eData.setEpisodeCrew(crewListToString(episode.getCrew()));
eData.setEpisodeState(1);
sData.setEpisode(eData.getEpisodeNumber(), eData);
}
}
@@ -889,4 +902,36 @@ class serieData
return true;
}
void copyFrom(serieData serie)
{
setSeriesDownload(serie.getSeriesDownload());
setSeriesLocalPath(serie.getSeriesLocalPath());
setSeriesResolution(serie.getSeriesResolution());
setSeriesCliffhanger(serie.getSeriesCliffhanger());
for(int season : getSeasons().keySet())
{
seasonData sDataOriginal = serie.getSeasons().get(season);
if(sDataOriginal != null)
{
seasonData sData = getSeasons().get(season);
for(int episode : sData.getEpisodes().keySet())
{
episodeData eDataOriginal = sDataOriginal.getEpisodes().get(episode);
if(eDataOriginal != null)
{
episodeData eData = sData.getEpisodes().get(episode);
eData.setEpisodeState(eDataOriginal.getEpisodeState());
}
}
}
}
recalcState();
}
}
@@ -67,34 +67,8 @@ public class serieDetailsSelectorComposer extends SelectorComposer<Component>
{
serieNew = new serieData();
serieNew.fromTMDB(serie.getSeriesID());
serieNew.setSeriesDownload(serie.getSeriesDownload());
serieNew.setSeriesLocalPath(serie.getSeriesLocalPath());
serieNew.setSeriesResolution(serie.getSeriesResolution());
serieNew.setSeriesCliffhanger(serie.getSeriesCliffhanger());
serieNew.copyFrom(serie);
for(int season : serieNew.getSeasons().keySet())
{
seasonData sDataOriginal = serie.getSeasons().get(season);
if(sDataOriginal != null)
{
seasonData sData = serieNew.getSeasons().get(season);
for(int episode : sData.getEpisodes().keySet())
{
episodeData eDataOriginal = sDataOriginal.getEpisodes().get(episode);
if(eDataOriginal != null)
{
episodeData eData = sData.getEpisodes().get(episode);
eData.setEpisodeState(eDataOriginal.getEpisodeState());
}
}
}
}
serieNew.recalcState();
serieNew.save();
Listitem item = (Listitem) detailsSerie.getAttribute("item");
@@ -13,336 +13,13 @@ import java.util.*;
public class serieListForwardComposer extends GenericForwardComposer
{
protected Listbox seriesList; // autowired
private ListModelList seriesListModel; // the model of the listbox
private serieRenderer renderer;
private Integer stateWidth = 4;
private Integer stateHeight = 20;
private final serieDataSource ds = serieDataSource.INSTANCE;
@Override
public void doAfterCompose(Component comp) throws Exception
{
super.doAfterCompose(comp);
List<serieData> serieList = new ArrayList<>();
int minSeason = 0;
int maxSeason = 0;
SortedMap<Integer, Integer> maxEpisode = new TreeMap<>();
SortedMap<Integer, Listheader> listHeader = new TreeMap<>();
try
{
Statement stmt = ds.getStatement();
ResultSet rs = stmt.executeQuery(
"SELECT MIN(seasonNumber) minSeason," +
" MAX(seasonNumber) maxSeason" +
" FROM season;"
);
while(rs.next())
{
minSeason = rs.getInt("minSeason");
maxSeason = rs.getInt("maxSeason");
}
}
catch(SQLException e)
{
e.printStackTrace();
}
seriesListModel = new ListModelList();
seriesList.setModel(seriesListModel);
seriesList.setAttribute("listModelList", seriesListModel);
Listhead head = seriesList.getListhead();
Listheader seriesName = new Listheader("Series Name");
Listheader firstAired = new Listheader("First Aired");
Listheader resolution = new Listheader("Resolution");
seriesName.setHflex("min");
firstAired.setHflex("min");
resolution.setHflex("min");
head.appendChild(seriesName);
head.appendChild(firstAired);
head.appendChild(resolution);
if(minSeason < 1)
minSeason = 1;
for(int i = minSeason; i <= maxSeason; i++)
{
Listheader seasonHeader = new Listheader("Season " + i);
head.appendChild(seasonHeader);
maxEpisode.put(i, 0);
listHeader.put(i, seasonHeader);
}
renderer = new serieRenderer();
seriesList.setItemRenderer(renderer);
try
{
Statement stmt = ds.getStatement();
ResultSet rs = stmt.executeQuery(
"SELECT serie.seriesID seriesID," +
" serie.seriesName seriesName," +
" serie.originalName seriesOriginalName," +
" serie.backdropPath seriesBackdrop," +
" serie.createdBy seriesCreatedBy," +
" serie.homepage seriesHomepage," +
" serie.lastAired seriesLastAired," +
" serie.languages seriesLanguages," +
" serie.networks seriesNetworks," +
" serie.nrEpisodes seriesNrEpisodes," +
" serie.nrSeasons seriesNrSeasons," +
" serie.originCountries seriesOriginCountries," +
" serie.originalLanguage seriesOriginalLanguage," +
" serie.popularity seriesPopularity," +
" serie.posterPath seriesPoster," +
" serie.productionCompanies seriesProductionCompanies," +
" serie.type seriesType," +
" serie.voteAverage seriesVoteAverage," +
" serie.voteCount seriesVoteCount," +
" serie.overview seriesOverview," +
" serie.firstAired seriesFirstAired," +
" serie.cast seriesCast," +
" serie.crew seriesCrew," +
" serie.genre seriesGenre," +
" serie.imdbid seriesIMDBID," +
" serie.freebasemid seriesFreebaseMID," +
" serie.freebaseid seriesFreebaseID," +
" serie.tvdbid seriesTVDBID," +
" serie.tvrageid seriesTVRageID," +
" serie.status seriesStatus," +
" serie.download seriesDownload," +
" serie.localPath seriesLocalPath," +
" serie.resolution seriesResolution," +
" serie.cliffhanger seriesCliffhanger," +
" season._id season_ID," +
" IF(IFNULL(season.airDate, '1900-01-01') = '','1900-01-01', IFNULL(season.airDate, '1900-01-01')) seasonAirDate," +
" season.name seasonName," +
" season.overview seasonOverview," +
" season.id seasonID," +
" season.posterPath seasonPosterPath," +
" season.seasonNumber seasonNumber," +
" episode.id episodeID," +
" episode.name episodeName," +
" episode.episodeNumber episodeNumber," +
" IF(IFNULL(episode.airDate, '1900-01-01') = '','1900-01-01', IFNULL(episode.airDate, '1900-01-01')) episodeAirDate," +
" episode.guestStars episodeGuestStars," +
" episode.overview episodeOverview," +
" episode.productioncode episodeProductionCode," +
" episode.stillPath episodeStillPath," +
" episode.voteAverage episodeVoteAverage," +
" episode.voteCount episodeVoteCount," +
" episode.crew episodeCrew," +
" episode.state episodeState" +
" 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;"
);
// fetch all events from database
serieData serie = new serieData();
seasonData season = new seasonData();
episodeData episode = new episodeData();
int oldSerieID = -1;
int oldSeasonID = -1;
int oldEpisodeID = -1;
serie.setSeriesID(-1);
while(rs.next())
{
int serieID = rs.getInt("seriesID");
int seasonID = rs.getInt("seasonID");
int episodeID = rs.getInt("episodeID");
if(serieID != oldSerieID)
{
oldSerieID = serieID;
serie = newSerie(rs);
serieList.add(serie);
oldSeasonID = seasonID;
season = newSeason(rs);
oldEpisodeID = episodeID;
episode = newEpisode(rs);
switch(rs.getInt("episodeState"))
{
case 1:
serie.addStateInit();
break;
case 2:
serie.addStateProd();
break;
case 3:
serie.addStateDone();
break;
}
}
else if(seasonID != oldSeasonID)
{
oldSeasonID = seasonID;
season = newSeason(rs);
oldEpisodeID = episodeID;
episode = newEpisode(rs);
switch(rs.getInt("episodeState"))
{
case 1:
serie.addStateInit();
break;
case 2:
serie.addStateProd();
break;
case 3:
serie.addStateDone();
break;
}
}
else if(episodeID != oldEpisodeID)
{
oldEpisodeID = episodeID;
episode = newEpisode(rs);
switch(rs.getInt("episodeState"))
{
case 1:
serie.addStateInit();
break;
case 2:
serie.addStateProd();
break;
case 3:
serie.addStateDone();
break;
}
if(season.getSeasonNumber() != 0)
{
if(maxEpisode.get(season.getSeasonNumber()) < episode.getEpisodeNumber())
maxEpisode.put(season.getSeasonNumber(), episode.getEpisodeNumber());
}
}
season.setSerie(serie);
episode.setSerie(serie);
episode.setSeason(season);
serie.setSeason(season.getSeasonNumber(), season);
season.setEpisode(episode.getEpisodeNumber(), episode);
}
}
catch(SQLException e)
{
e.printStackTrace();
}
finally
{
ds.close();
}
for(serieData serie : serieList)
{
seriesListModel.add(serie);
serie.setModel(seriesListModel);
}
for(int i = minSeason; i <= maxSeason; i++)
{
int size = maxEpisode.get(i) * stateWidth;
Listheader header = listHeader.get(i);
header.setWidth(size + 40 + "px");
}
}
protected episodeData newEpisode(ResultSet rs) throws SQLException
{
episodeData episode = new episodeData();
episode.setEpisodeID(rs.getInt("episodeID"));
episode.setEpisodeName(rs.getString("episodeName"));
episode.setEpisodeNumber(rs.getInt("episodeNumber"));
episode.setEpisodeAirDate(rs.getDate("episodeAirDate"));
episode.setEpisodeGuestStars(rs.getString("episodeGuestStars"));
episode.setEpisodeOverview(rs.getString("episodeOverview"));
episode.setEpisodeProductionCode(rs.getString("episodeProductionCode"));
episode.setEpisodeStillPath(rs.getString("episodeStillPath"));
episode.setEpisodeVoteAverage(rs.getDouble("episodeVoteAverage"));
episode.setEpisodeVoteCount(rs.getInt("episodeVoteCount"));
episode.setEpisodeCrew(rs.getString("episodeCrew"));
episode.setEpisodeState(rs.getInt("episodeState"));
return episode;
}
protected seasonData newSeason(ResultSet rs) throws SQLException
{
seasonData season = new seasonData();
season.setSeason_ID(rs.getString("season_ID"));
season.setSeasonAirDate(rs.getDate("seasonAirDate"));
season.setSeasonName(rs.getString("seasonName"));
season.setSeasonOverview(rs.getString("seasonOverview"));
season.setSeasonID(rs.getInt("seasonID"));
season.setSeasonPosterPath(rs.getString("seasonPosterPath"));
season.setSeasonNumber(rs.getInt("seasonNumber"));
return season;
}
protected serieData newSerie(ResultSet rs) throws SQLException
{
serieData serie = new serieData();
serie.setSeriesID(rs.getInt("seriesID"));
serie.setSeriesName(rs.getString("seriesName"));
serie.setSeriesOriginalName(rs.getString("seriesOriginalName"));
serie.setSeriesBackdrop(rs.getString("seriesBackdrop"));
serie.setSeriesCreatedBy(rs.getString("seriesCreatedBy"));
serie.setSeriesHomepage(rs.getString("seriesHomepage"));
serie.setSeriesLastAired(rs.getDate("seriesLastAired"));
serie.setSeriesLanguages(rs.getString("seriesLanguages"));
serie.setSeriesNetworks(rs.getString("seriesNetworks"));
serie.setSeriesNrEpisodes(rs.getInt("seriesNrEpisodes"));
serie.setSeriesNrSeasons(rs.getInt("seriesNrSeasons"));
serie.setSeriesOriginCountries(rs.getString("seriesOriginCountries"));
serie.setSeriesOriginalLanguage(rs.getString("seriesOriginalLanguage"));
serie.setSeriesPopularity(rs.getDouble("seriesPopularity"));
serie.setSeriesPoster(rs.getString("seriesPoster"));
serie.setSeriesProductionCompanies(rs.getString("seriesProductionCompanies"));
serie.setSeriesType(rs.getString("seriesType"));
serie.setSeriesVoteAverage(rs.getDouble("seriesVoteAverage"));
serie.setSeriesVoteCount(rs.getInt("seriesVoteCount"));
serie.setSeriesOverview(rs.getString("seriesOverview"));
serie.setSeriesFirstAired(rs.getDate("seriesFirstAired"));
serie.setSeriesCast(rs.getString("seriesCast"));
serie.setSeriesCrew(rs.getString("seriesCrew"));
serie.setSeriesGenre(rs.getString("seriesGenre"));
serie.setSeriesIMDBID(rs.getString("seriesIMDBID"));
serie.setSeriesFreebaseMID(rs.getString("seriesFreebaseMID"));
serie.setSeriesFreebaseID(rs.getString("seriesFreebaseID"));
serie.setSeriesTVDBID(rs.getString("seriesTVDBID"));
serie.setSeriesTVRageID(rs.getString("seriesTVRageID"));
serie.setSeriesStatus(rs.getString("seriesStatus"));
serie.setSeriesDownload(rs.getString("seriesDownload"));
serie.setSeriesLocalPath(rs.getString("seriesLocalPath"));
serie.setSeriesResolution(rs.getString("seriesResolution"));
serie.setSeriesCliffhanger(rs.getBoolean("seriesCliffhanger"));
return serie;
serieDataSource ds = serieDataSource.INSTANCE;
serieUtils.loadSeries(ds, seriesList);
}
}
@@ -17,7 +17,7 @@ public class serieListSelectorComposer extends SelectorComposer<Component>
private Listbox seriesList;
@Listen("onDoubleClick = #seriesList")
public void onClick()
public void onClickSeriesList()
{
Listitem item = seriesList.getSelectedItem();
@@ -36,4 +36,29 @@ public class serieListSelectorComposer extends SelectorComposer<Component>
window.doModal();
}
@Listen("onClick = #updateAll")
public void onClickUpdateAll()
{
update(true);
}
@Listen("onClick = #updateOpen")
public void onClickUpdateOpen()
{
update(false);
}
private void update(boolean all)
{
Map<String, Object> arguments = new HashMap<String, Object>();
arguments.put("seriesList", seriesList);
arguments.put("all", all);
String template = "/serie/updateSerie.zul";
Window window = (Window) Executions.createComponents(template, null, arguments);
window.doModal();
}
}
@@ -61,9 +61,10 @@ public class serieRenderer implements ListitemRenderer
Color colBlue = new Color(0, 0, 192);
Color colGreen = new Color(0, 192, 0);
Color colBlack = new Color(0, 0, 0);
Color colWhite = new Color(255, 255, 255);
Color col = colBlack;
g2d.setColor(colBlack);
g2d.setColor(colWhite);
g2d.fillRect(0, 0, stateWidth * episodes.lastKey(), stateHeight);
for(Integer key : episodes.keySet())
@@ -84,6 +85,8 @@ public class serieRenderer implements ListitemRenderer
break;
}
g2d.setColor(colBlack);
g2d.fillRect((key - 1) * stateWidth, 0, stateWidth, stateHeight);
g2d.setColor(col);
g2d.fillRect((key - 1) * stateWidth, 0, stateWidth - 1, stateHeight);
}
@@ -0,0 +1,32 @@
package at.windesign.application.serie;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.*;
public class serieUpdateForwardComposer extends GenericForwardComposer<Component>
{
private static final long serialVersionUID = 1L;
private int opacity = 80;
private Listbox m_seriesList;
private boolean m_all;
@Wire
private Window updateSerie;
@Wire
protected Label serieLabel;
@Wire
protected Progressmeter serieProgress;
@Wire
protected Label serieProgressLabel;
@Override
public void doAfterCompose(Component comp) throws Exception
{
super.doAfterCompose(comp);
}
}
@@ -0,0 +1,271 @@
package at.windesign.application.serie;
import com.omertron.themoviedbapi.MovieDbException;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Execution;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventQueue;
import org.zkoss.zk.ui.event.EventQueues;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zul.*;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.TimeUnit;
//a33271b9e54cdcb9a80680eaf5522f1b
public class serieUpdateSelectorComposer extends SelectorComposer<Component>
{
private static final long serialVersionUID = 1L;
private int opacity = 80;
private Listbox m_seriesList;
private boolean m_all;
@Wire
private Window updateSerie;
@Wire
protected Label serieLabel;
@Wire
protected Progressmeter serieProgress;
@Wire
protected Label serieProgressLabel;
@Wire
private Timer timer;
private static final String QUEUE = "queue";
private static final String START = "start";
private static final int ONE_HUNDRED = 100;
private boolean isFinish;
private int progress;
private String serieName;
@Override
public void doAfterCompose(Component comp) throws Exception
{
super.doAfterCompose(comp);
final Execution execution = Executions.getCurrent();
if(execution.getArg().containsKey("seriesList"))
m_seriesList = (Listbox) execution.getArg().get("seriesList");
else
updateSerie.detach();
if(execution.getArg().containsKey("all"))
m_all = (boolean) execution.getArg().get("all");
else
updateSerie.detach();
try
{
Events.echoEvent("onAddNameEvent", timer, null);
}
catch(Exception e)
{
e.printStackTrace();
}
}
@Listen("onAddNameEvent = #timer")
public void processingSeries()
{
try
{
timer.start();
if(itsNotProcessing())
{
EventQueue queue = lookupQueue();
setUp(queue);
start(queue);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
private boolean itsNotProcessing()
{
return !EventQueues.exists(QUEUE);
}
private EventQueue lookupQueue()
{
return EventQueues.lookup(QUEUE);
}
private void setUp(final EventQueue queue)
{
progress = 0;
queue.subscribe((Event event) ->
{
doLongOperation();
}
,
(Event event) ->
{
removeQueue();
});
}
private void removeQueue()
{
EventQueues.remove(QUEUE);
}
private void start(EventQueue queue)
{
queue.publish(new Event(START));
timer.start();
}
private void doLongOperation() throws IOException
{
doProcess();
}
public void doProcess() throws IOException, IllegalStateException
{
int total = 0;
int current = 0;
ListModelList list = (ListModelList) m_seriesList.getModel();
List<serieData> dataList = list.getInnerList();
for(serieData data : dataList)
{
if(m_all == true)
total++;
else
{
if(data.isActive())
total++;
}
}
try
{
for(serieData data : dataList)
{
if(m_all == true || data.isActive() == true)
{
progress = current * 100 / total;
serieName = data.getSeriesName();
updateSerie(data);
current++;
}
}
isFinish = true;
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
}
}
@Listen("onTimer = #timer")
public void fetchingSimulatorTimer() throws FileNotFoundException, IllegalStateException
{
try
{
updateProgressmeter();
updateLabel();
}
catch(Exception e)
{
}
}
private void updateProgressmeter()
{
try
{
serieProgress.setValue(progress);
serieProgressLabel.setValue(progress + "%");
serieLabel.setValue(serieName);
}
catch(Exception e)
{
}
}
private void updateLabel() throws FileNotFoundException, IllegalStateException
{
try
{
if(isFinish)
{
serieProgressLabel.setValue("Finish!");
updateSerie.detach();
Executions.sendRedirect("");
}
}
catch(Exception e)
{
}
}
private boolean isTheProgressmeterFull()
{
return serieProgress.getValue() == ONE_HUNDRED;
}
private void stop()
{
timer.stop();
}
@Listen("onClick = #btnCancel")
public void doCancel()
{
try
{
// isBreak = true;
removeQueue();
timer.stop();
}
catch(Exception e)
{
}
}
private void updateSerie(serieData serie)
{
serieData serieNew;
try
{
serieNew = new serieData();
serieNew.fromTMDB(serie.getSeriesID());
serieNew.copyFrom(serie);
serieNew.save();
}
catch(MovieDbException e)
{
e.printStackTrace();
}
}
}
@@ -0,0 +1,343 @@
package at.windesign.application.serie;
import org.zkoss.zul.*;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;
public class serieUtils
{
static private Integer stateWidth = 4;
static private Integer stateHeight = 20;
static public void loadSeries(serieDataSource ds, Listbox seriesList)
{
List<serieData> serieList = new ArrayList<>();
int minSeason = 0;
int maxSeason = 0;
SortedMap<Integer, Integer> maxEpisode = new TreeMap<>();
SortedMap<Integer, Listheader> listHeader = new TreeMap<>();
try
{
Statement stmt = ds.getStatement();
ResultSet rs = stmt.executeQuery(
"SELECT MIN(seasonNumber) minSeason," +
" MAX(seasonNumber) maxSeason" +
" FROM season;"
);
while(rs.next())
{
minSeason = rs.getInt("minSeason");
maxSeason = rs.getInt("maxSeason");
}
}
catch(SQLException e)
{
Messagebox.show(e.getMessage());
Messagebox.show(e.getSQLState());
e.printStackTrace();
}
ListModelList seriesListModel = new ListModelList();
seriesList.setModel(seriesListModel);
seriesList.setAttribute("listModelList", seriesListModel);
seriesList.getListhead().getChildren().clear();
Listhead head = seriesList.getListhead();
Listheader seriesName = new Listheader("Series Name");
Listheader firstAired = new Listheader("First Aired");
Listheader resolution = new Listheader("Resolution");
seriesName.setHflex("min");
firstAired.setHflex("min");
resolution.setHflex("min");
head.appendChild(seriesName);
head.appendChild(firstAired);
head.appendChild(resolution);
if(minSeason < 1)
minSeason = 1;
for(int i = minSeason; i <= maxSeason; i++)
{
Listheader seasonHeader = new Listheader("Season " + i);
head.appendChild(seasonHeader);
maxEpisode.put(i, 0);
listHeader.put(i, seasonHeader);
}
serieRenderer renderer = new serieRenderer();
seriesList.setItemRenderer(renderer);
try
{
Statement stmt = ds.getStatement();
ResultSet rs = stmt.executeQuery(
"SELECT serie.seriesID seriesID," +
" serie.seriesName seriesName," +
" serie.originalName seriesOriginalName," +
" serie.backdropPath seriesBackdrop," +
" serie.createdBy seriesCreatedBy," +
" serie.homepage seriesHomepage," +
" serie.lastAired seriesLastAired," +
" serie.languages seriesLanguages," +
" serie.networks seriesNetworks," +
" serie.nrEpisodes seriesNrEpisodes," +
" serie.nrSeasons seriesNrSeasons," +
" serie.originCountries seriesOriginCountries," +
" serie.originalLanguage seriesOriginalLanguage," +
" serie.popularity seriesPopularity," +
" serie.posterPath seriesPoster," +
" serie.productionCompanies seriesProductionCompanies," +
" serie.type seriesType," +
" serie.voteAverage seriesVoteAverage," +
" serie.voteCount seriesVoteCount," +
" serie.overview seriesOverview," +
" serie.firstAired seriesFirstAired," +
" serie.cast seriesCast," +
" serie.crew seriesCrew," +
" serie.genre seriesGenre," +
" serie.imdbid seriesIMDBID," +
" serie.freebasemid seriesFreebaseMID," +
" serie.freebaseid seriesFreebaseID," +
" serie.tvdbid seriesTVDBID," +
" serie.tvrageid seriesTVRageID," +
" serie.status seriesStatus," +
" serie.download seriesDownload," +
" serie.localPath seriesLocalPath," +
" serie.resolution seriesResolution," +
" serie.cliffhanger seriesCliffhanger," +
" season._id season_ID," +
" IF(IFNULL(season.airDate, '1900-01-01') = '','1900-01-01', IFNULL(season.airDate, '1900-01-01')) seasonAirDate," +
" season.name seasonName," +
" season.overview seasonOverview," +
" season.id seasonID," +
" season.posterPath seasonPosterPath," +
" season.seasonNumber seasonNumber," +
" episode.id episodeID," +
" episode.name episodeName," +
" episode.episodeNumber episodeNumber," +
" IF(IFNULL(episode.airDate, '1900-01-01') = '','1900-01-01', IFNULL(episode.airDate, '1900-01-01')) episodeAirDate," +
" episode.guestStars episodeGuestStars," +
" episode.overview episodeOverview," +
" episode.productioncode episodeProductionCode," +
" episode.stillPath episodeStillPath," +
" episode.voteAverage episodeVoteAverage," +
" episode.voteCount episodeVoteCount," +
" episode.crew episodeCrew," +
" episode.state episodeState" +
" 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 AND episode.episodeNumber IS NOT NULL) OR" +
" serie.seriesID >= 1000000" +
" ORDER BY serie.seriesName," +
" serie.firstAired," +
" season.seasonNumber," +
" episode.episodeNumber;"
);
// fetch all events from database
serieData serie = new serieData();
seasonData season = new seasonData();
episodeData episode = new episodeData();
int oldSerieID = -1;
int oldSeasonID = -1;
int oldEpisodeID = -1;
serie.setSeriesID(-1);
while(rs.next())
{
int serieID = rs.getInt("seriesID");
int seasonID = rs.getInt("seasonID");
int episodeID = rs.getInt("episodeID");
if(serieID != oldSerieID)
{
oldSerieID = serieID;
serie = newSerie(rs);
serieList.add(serie);
oldSeasonID = seasonID;
season = newSeason(rs);
oldEpisodeID = episodeID;
episode = newEpisode(rs);
switch(rs.getInt("episodeState"))
{
case 1:
serie.addStateInit();
break;
case 2:
serie.addStateProd();
break;
case 3:
serie.addStateDone();
break;
}
}
else if(seasonID != oldSeasonID)
{
oldSeasonID = seasonID;
season = newSeason(rs);
oldEpisodeID = episodeID;
episode = newEpisode(rs);
switch(rs.getInt("episodeState"))
{
case 1:
serie.addStateInit();
break;
case 2:
serie.addStateProd();
break;
case 3:
serie.addStateDone();
break;
}
}
else if(episodeID != oldEpisodeID)
{
oldEpisodeID = episodeID;
episode = newEpisode(rs);
switch(rs.getInt("episodeState"))
{
case 1:
serie.addStateInit();
break;
case 2:
serie.addStateProd();
break;
case 3:
serie.addStateDone();
break;
}
if(season.getSeasonNumber() != 0)
{
if(maxEpisode.get(season.getSeasonNumber()) < episode.getEpisodeNumber())
maxEpisode.put(season.getSeasonNumber(), episode.getEpisodeNumber());
}
}
season.setSerie(serie);
episode.setSerie(serie);
episode.setSeason(season);
serie.setSeason(season.getSeasonNumber(), season);
season.setEpisode(episode.getEpisodeNumber(), episode);
}
}
catch(SQLException e)
{
e.printStackTrace();
}
finally
{
ds.close();
}
for(serieData serie : serieList)
{
seriesListModel.add(serie);
serie.setModel(seriesListModel);
}
for(int i = minSeason; i <= maxSeason; i++)
{
int size = maxEpisode.get(i) * stateWidth;
Listheader header = listHeader.get(i);
header.setWidth(size + 40 + "px");
}
}
static protected episodeData newEpisode(ResultSet rs) throws SQLException
{
episodeData episode = new episodeData();
episode.setEpisodeID(rs.getInt("episodeID"));
episode.setEpisodeName(rs.getString("episodeName"));
episode.setEpisodeNumber(rs.getInt("episodeNumber"));
episode.setEpisodeAirDate(rs.getDate("episodeAirDate"));
episode.setEpisodeGuestStars(rs.getString("episodeGuestStars"));
episode.setEpisodeOverview(rs.getString("episodeOverview"));
episode.setEpisodeProductionCode(rs.getString("episodeProductionCode"));
episode.setEpisodeStillPath(rs.getString("episodeStillPath"));
episode.setEpisodeVoteAverage(rs.getDouble("episodeVoteAverage"));
episode.setEpisodeVoteCount(rs.getInt("episodeVoteCount"));
episode.setEpisodeCrew(rs.getString("episodeCrew"));
episode.setEpisodeState(rs.getInt("episodeState"));
return episode;
}
static protected seasonData newSeason(ResultSet rs) throws SQLException
{
seasonData season = new seasonData();
season.setSeason_ID(rs.getString("season_ID"));
season.setSeasonAirDate(rs.getDate("seasonAirDate"));
season.setSeasonName(rs.getString("seasonName"));
season.setSeasonOverview(rs.getString("seasonOverview"));
season.setSeasonID(rs.getInt("seasonID"));
season.setSeasonPosterPath(rs.getString("seasonPosterPath"));
season.setSeasonNumber(rs.getInt("seasonNumber"));
return season;
}
static protected serieData newSerie(ResultSet rs) throws SQLException
{
serieData serie = new serieData();
serie.setSeriesID(rs.getInt("seriesID"));
serie.setSeriesName(rs.getString("seriesName"));
serie.setSeriesOriginalName(rs.getString("seriesOriginalName"));
serie.setSeriesBackdrop(rs.getString("seriesBackdrop"));
serie.setSeriesCreatedBy(rs.getString("seriesCreatedBy"));
serie.setSeriesHomepage(rs.getString("seriesHomepage"));
serie.setSeriesLastAired(rs.getDate("seriesLastAired"));
serie.setSeriesLanguages(rs.getString("seriesLanguages"));
serie.setSeriesNetworks(rs.getString("seriesNetworks"));
serie.setSeriesNrEpisodes(rs.getInt("seriesNrEpisodes"));
serie.setSeriesNrSeasons(rs.getInt("seriesNrSeasons"));
serie.setSeriesOriginCountries(rs.getString("seriesOriginCountries"));
serie.setSeriesOriginalLanguage(rs.getString("seriesOriginalLanguage"));
serie.setSeriesPopularity(rs.getDouble("seriesPopularity"));
serie.setSeriesPoster(rs.getString("seriesPoster"));
serie.setSeriesProductionCompanies(rs.getString("seriesProductionCompanies"));
serie.setSeriesType(rs.getString("seriesType"));
serie.setSeriesVoteAverage(rs.getDouble("seriesVoteAverage"));
serie.setSeriesVoteCount(rs.getInt("seriesVoteCount"));
serie.setSeriesOverview(rs.getString("seriesOverview"));
serie.setSeriesFirstAired(rs.getDate("seriesFirstAired"));
serie.setSeriesCast(rs.getString("seriesCast"));
serie.setSeriesCrew(rs.getString("seriesCrew"));
serie.setSeriesGenre(rs.getString("seriesGenre"));
serie.setSeriesIMDBID(rs.getString("seriesIMDBID"));
serie.setSeriesFreebaseMID(rs.getString("seriesFreebaseMID"));
serie.setSeriesFreebaseID(rs.getString("seriesFreebaseID"));
serie.setSeriesTVDBID(rs.getString("seriesTVDBID"));
serie.setSeriesTVRageID(rs.getString("seriesTVRageID"));
serie.setSeriesStatus(rs.getString("seriesStatus"));
serie.setSeriesDownload(rs.getString("seriesDownload"));
serie.setSeriesLocalPath(rs.getString("seriesLocalPath"));
serie.setSeriesResolution(rs.getString("seriesResolution"));
serie.setSeriesCliffhanger(rs.getBoolean("seriesCliffhanger"));
return serie;
}
}
+12
View File
@@ -2,6 +2,18 @@
vflex="true"
apply="at.windesign.application.serie.serieListForwardComposer, at.windesign.application.serie.serieListSelectorComposer"
>
<hbox width="100%" widths="50%,50%" pack="stretch">
<button width="100%"
id="updateAll"
label="update all"
>
</button>
<button width="100%"
id="updateOpen"
label="update open"
>
</button>
</hbox>
<listbox id="seriesList"
multiple="true"
autopaging="true"
+26
View File
@@ -0,0 +1,26 @@
<window id="updateSerie"
title="update TV Shows"
contentStyle="overflow:auto"
border="normal"
apply="at.windesign.application.serie.serieUpdateSelectorComposer"
width="500px"
height="150px">
<div class="panel"
align="center">
<timer id="timer"
repeats="true"
delay="1000"
onCreate="self.stop()"/>
<hbox align="center">
<progressmeter id="serieProgress"
value="0"
width="400px"/>
<label id="serieProgressLabel"
value="0%">
</label>
</hbox>
<label id="serieLabel"
value="please wait...">
</label>
</div>
</window>
+1 -1
View File
@@ -1,5 +1,5 @@
#Generated by Maven
#Wed Nov 25 09:49:24 CET 2020
#Sat Feb 20 21:57:16 CET 2021
groupId=at.windesign.application
artifactId=multimedia
version=1.0-SNAPSHOT
@@ -1,10 +1,13 @@
at\windesign\application\serie\serieDataSource.class
at\windesign\application\serie\serieListForwardComposer.class
at\windesign\application\testing\testForwardComposer.class
at\windesign\application\serie\seasonData.class
at\windesign\application\serie\serieRenderer.class
at\windesign\application\serie\serieData.class
at\windesign\application\serie\serieUtils.class
at\windesign\application\serie\serieDetailsForwardComposer$1.class
at\windesign\application\serie\serieDetailsForwardComposer.class
at\windesign\application\serie\serieListSelectorComposer.class
at\windesign\application\serie\serieDetailsSelectorComposer$1.class
at\windesign\application\serie\serieDataSource.class
at\windesign\application\serie\serieListForwardComposer.class
at\windesign\application\serie\serieDetailsSelectorComposer.class
at\windesign\application\testing\testForwardComposer.class
at\windesign\application\serie\episodeData.class
at\windesign\application\main\indexForwardComposer.class
@@ -1,11 +1,14 @@
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieDataSource.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieData.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\testing\testForwardComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieDetailsSelectorComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieUpdateSelectorComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieUpdateForwardComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\episodeData.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieRenderer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieDataSource.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\testing\testForwardComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieListSelectorComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieListForwardComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieDetailsForwardComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\seasonData.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\episodeData.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieUtils.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\main\indexForwardComposer.java
C:\Users\birkeh\ownCloud\dev\IntelliJ\zk\multimedia\src\main\java\at\windesign\application\serie\serieRenderer.java
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+12
View File
@@ -2,6 +2,18 @@
vflex="true"
apply="at.windesign.application.serie.serieListForwardComposer, at.windesign.application.serie.serieListSelectorComposer"
>
<hbox width="100%" widths="50%,50%" pack="stretch">
<button width="100%"
id="updateAll"
label="update all"
>
</button>
<button width="100%"
id="updateOpen"
label="update open"
>
</button>
</hbox>
<listbox id="seriesList"
multiple="true"
autopaging="true"
+1 -1
View File
@@ -54,7 +54,7 @@
pack="center">
<button id="saveButton" label="Save"/>
<button id="cancelButton" label="Cancel"/>
<button id="updateButton" label="Update"/>
<button id="updateButton" label="Update from TMDB"/>
<button id="deleteButton" label="Delete"/>
</hbox>
</window>
+14
View File
@@ -0,0 +1,14 @@
<window id="detailsSerie"
title=""
contentStyle="overflow:auto"
border="normal"
apply="at.windesign.application.serie.serieUpdateForwardComposer, at.windesign.application.serie.serieUpdateSelectorComposer"
width="500px"
height="500px"
>
<label id="serieLabel"
value=""/>
</window>