server

Clone or download

Modified Files

package com.stream_pi.server.connection;
package com.stream_pi.server.connection;
import com.stream_pi.action_api.normalaction.NormalAction;
import com.stream_pi.action_api.normalaction.NormalAction;
import com.stream_pi.util.exception.SevereException;
public interface ServerListener {
public interface ServerListener {
boolean onNormalActionClicked(NormalAction action);
boolean onNormalActionClicked(NormalAction action);
void clearTemp();
void clearTemp();
void init();
void init();
void othInit();
void othInit();
void initLogger() throws SevereException;
}
}
/*
/*
Config.java
Config.java
Contributor(s) : Debayan Sutradhar (@rnayabed)
Contributor(s) : Debayan Sutradhar (@rnayabed)
handler for config.xml
handler for config.xml
*/
*/
package com.stream_pi.server.io;
package com.stream_pi.server.io;
import java.io.File;
import java.io.File;
import java.util.logging.Logger;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Result;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamResult;
import com.stream_pi.server.info.ServerInfo;
import com.stream_pi.server.info.ServerInfo;
import com.stream_pi.util.exception.SevereException;
import com.stream_pi.util.exception.SevereException;
import com.stream_pi.util.xmlconfighelper.XMLConfigHelper;
import com.stream_pi.util.xmlconfighelper.XMLConfigHelper;
import org.w3c.dom.Document;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Element;
public class Config {
public class Config
{
private static Config instance = null;
private static Config instance = null;
private final File configFile;
private final File configFile;
private Document document;
private Document document;
private Config() throws SevereException {
private Config() throws SevereException {
try {
try {
configFile = new File(ServerInfo.getInstance().getPrePath()+"config.xml");
configFile = new File(ServerInfo.getInstance().getPrePath()+"config.xml");
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
document = docBuilder.parse(configFile);
document = docBuilder.parse(configFile);
} catch (Exception e) {
} catch (Exception e) {
e.printStackTrace();
e.printStackTrace();
throw new SevereException("Config", "unable to read config.xml");
throw new SevereException("Config", "unable to read config.xml");
}
}
}
}
public static synchronized Config getInstance() throws SevereException
public static synchronized Config getInstance() throws SevereException
{
{
if(instance == null)
if(instance == null)
instance = new Config();
instance = new Config();
return instance;
return instance;
}
}
Logger logger = Logger.getLogger(Config.class.getName());
Logger logger = Logger.getLogger(Config.class.getName());
public void save() throws SevereException {
public void save() throws SevereException {
try {
try {
logger.info("Saving config ...");
logger.info("Saving config ...");
Transformer transformer = TransformerFactory.newInstance().newTransformer();
Transformer transformer = TransformerFactory.newInstance().newTransformer();
Result output = new StreamResult(configFile);
Result output = new StreamResult(configFile);
Source input = new DOMSource(document);
Source input = new DOMSource(document);
transformer.transform(input, output);
transformer.transform(input, output);
logger.info("... Done!");
logger.info("... Done!");
} catch (Exception e) {
} catch (Exception e) {
throw new SevereException("Config", "unable to save config.xml");
throw new SevereException("Config", "unable to save config.xml");
}
}
}
}
//Getters
//Getters
//comms
//comms
private Element getCommsElement()
private Element getCommsElement()
{
{
return (Element) document.getElementsByTagName("comms").item(0);
return (Element) document.getElementsByTagName("comms").item(0);
}
}
public String getServerName()
public String getServerName()
{
{
return XMLConfigHelper.getStringProperty(getCommsElement(), "name",
return XMLConfigHelper.getStringProperty(getCommsElement(), "name",
getDefaultServerName(), false, true, document, configFile);
getDefaultServerName(), false, true, document, configFile);
}
}
public int getPort()
public int getPort()
{
{
return XMLConfigHelper.getIntProperty(getCommsElement(), "port",
return XMLConfigHelper.getIntProperty(getCommsElement(), "port",
getDefaultPort(), false, true, document, configFile);
getDefaultPort(), false, true, document, configFile);
}
}
//default getters
//default getters
public String getDefaultServerName()
public String getDefaultServerName()
{
{
return "StreamPi Server";
return "Stream-Pi Server";
}
}
public int getDefaultPort()
public int getDefaultPort()
{
{
return 2004;
return 2004;
}
}
private Element getServerElement()
private Element getServerElement()
{
{
return (Element) document.getElementsByTagName("server").item(0);
return (Element) document.getElementsByTagName("server").item(0);
}
}
//server
//server
private Element getActionGridElement()
private Element getActionGridElement()
{
{
return (Element) getServerElement().getElementsByTagName("action-grid").item(0);
return (Element) getServerElement().getElementsByTagName("action-grid").item(0);
}
}
public int getActionGridActionGap()
public int getActionGridActionGap()
{
{
return XMLConfigHelper.getIntProperty(getActionGridElement(), "gap",
return XMLConfigHelper.getIntProperty(getActionGridElement(), "gap",
getDefaultActionGridActionGap(), false, true, document, configFile);
getDefaultActionGridActionGap(), false, true, document, configFile);
}
}
public int getActionGridActionSize()
public int getActionGridActionSize()
{
{
return XMLConfigHelper.getIntProperty(getActionGridElement(), "size",
return XMLConfigHelper.getIntProperty(getActionGridElement(), "size",
getDefaultActionGridSize(), false, true, document, configFile);
getDefaultActionGridSize(), false, true, document, configFile);
}
}
public String getCurrentThemeFullName()
public String getCurrentThemeFullName()
{
{
return XMLConfigHelper.getStringProperty(getServerElement(), "current-theme-full-name",
return XMLConfigHelper.getStringProperty(getServerElement(), "current-theme-full-name",
getDefaultCurrentThemeFullName(), false, true, document, configFile);
getDefaultCurrentThemeFullName(), false, true, document, configFile);
}
}
public String getThemesPath()
public String getThemesPath()
{
{
return XMLConfigHelper.getStringProperty(getServerElement(), "themes-path",
return XMLConfigHelper.getStringProperty(getServerElement(), "themes-path",
getDefaultThemesPath(), false, true, document, configFile);
getDefaultThemesPath(), false, true, document, configFile);
}
}
public String getPluginsPath()
public String getPluginsPath()
{
{
return XMLConfigHelper.getStringProperty(getServerElement(), "plugins-path",
return XMLConfigHelper.getStringProperty(getServerElement(), "plugins-path",
getDefaultPluginsPath(), false, true, document, configFile);
getDefaultPluginsPath(), false, true, document, configFile);
}
}
//default getters
//default getters
public String getDefaultCurrentThemeFullName()
public String getDefaultCurrentThemeFullName()
{
{
return "com.StreamPi.DefaultLight";
return "com.stream_pi.defaultlight";
}
}
public String getDefaultThemesPath()
public String getDefaultThemesPath()
{
{
return "Themes/";
return "Themes/";
}
}
public String getDefaultPluginsPath()
public String getDefaultPluginsPath()
{
{
return "Plugins/";
return "Plugins/";
}
}
//server > startup-window-size
//server > startup-window-size
private Element getStartupWindowSizeElement()
private Element getStartupWindowSizeElement()
{
{
return (Element) getServerElement().getElementsByTagName("startup-window-size").item(0);
return (Element) getServerElement().getElementsByTagName("startup-window-size").item(0);
}
}
public double getStartupWindowWidth()
public double getStartupWindowWidth()
{
{
return XMLConfigHelper.getDoubleProperty(getStartupWindowSizeElement(), "width",
return XMLConfigHelper.getDoubleProperty(getStartupWindowSizeElement(), "width",
getDefaultStartupWindowWidth(), false, true, document, configFile);
getDefaultStartupWindowWidth(), false, true, document, configFile);
}
}
public double getStartupWindowHeight()
public double getStartupWindowHeight()
{
{
return XMLConfigHelper.getDoubleProperty(getStartupWindowSizeElement(), "height",
return XMLConfigHelper.getDoubleProperty(getStartupWindowSizeElement(), "height",
getDefaultStartupWindowHeight(), false, true, document, configFile);
getDefaultStartupWindowHeight(), false, true, document, configFile);
}
}
//default getters
//default getters
public int getDefaultStartupWindowWidth()
public int getDefaultStartupWindowWidth()
{
{
return 1024;
return 1024;
}
}
public int getDefaultStartupWindowHeight()
public int getDefaultStartupWindowHeight()
{
{
return 768;
return 768;
}
}
//others
//others
private Element getOthersElement()
private Element getOthersElement()
{
{
return (Element) document.getElementsByTagName("others").item(0);
return (Element) document.getElementsByTagName("others").item(0);
}
}
public boolean getStartOnBoot()
public boolean getStartOnBoot()
{
{
return XMLConfigHelper.getBooleanProperty(getOthersElement(), "start-on-boot",
return XMLConfigHelper.getBooleanProperty(getOthersElement(), "start-on-boot",
getDefaultStartOnBoot(), false, true, document, configFile);
getDefaultStartOnBoot(), false, true, document, configFile);
}
}
public boolean getCloseOnX()
public boolean getCloseOnX()
{
{
return XMLConfigHelper.getBooleanProperty(getOthersElement(), "close-on-x",
return XMLConfigHelper.getBooleanProperty(getOthersElement(), "close-on-x",
getDefaultCloseOnX(), false, true, document, configFile);
getDefaultCloseOnX(), false, true, document, configFile);
}
}
public boolean isFirstTimeUse()
public boolean isFirstTimeUse()
{
{
return XMLConfigHelper.getBooleanProperty(getOthersElement(), "first-time-use", true, false, true, document, configFile);
return XMLConfigHelper.getBooleanProperty(getOthersElement(), "first-time-use", true, false, true, document, configFile);
}
}
public boolean isAllowDonatePopup()
public boolean isAllowDonatePopup()
{
{
return XMLConfigHelper.getBooleanProperty(getOthersElement(), "allow-donate-popup", true, false, true, document, configFile);
return XMLConfigHelper.getBooleanProperty(getOthersElement(), "allow-donate-popup", true, false, true, document, configFile);
}
}
//default getters
//default getters
public boolean getDefaultStartOnBoot()
public boolean getDefaultStartOnBoot()
{
{
return false;
return false;
}
}
public boolean getDefaultCloseOnX()
public boolean getDefaultCloseOnX()
{
{
return false;
return false;
}
}
//Setters
//Setters
//comms
//comms
public void setServerName(String name)
public void setServerName(String name)
{
{
getCommsElement().getElementsByTagName("name").item(0).setTextContent(name);
getCommsElement().getElementsByTagName("name").item(0).setTextContent(name);
}
}
public void setServerPort(int port)
public void setServerPort(int port)
{
{
getCommsElement().getElementsByTagName("port").item(0).setTextContent(port+"");
getCommsElement().getElementsByTagName("port").item(0).setTextContent(port+"");
}
}
//server
//server
public int getDefaultActionGridActionGap()
public int getDefaultActionGridActionGap()
{
{
return 5;
return 5;
}
}
public int getDefaultActionGridSize()
public int getDefaultActionGridSize()
{
{
return 100;
return 100;
}
}
public void setActionGridSize(int size)
public void setActionGridSize(int size)
{
{
getActionGridElement().getElementsByTagName("size").item(0).setTextContent(size+"");
getActionGridElement().getElementsByTagName("size").item(0).setTextContent(size+"");
}
}
public void setActionGridGap(int size)
public void setActionGridGap(int size)
{
{
getActionGridElement().getElementsByTagName("gap").item(0).setTextContent(size+"");
getActionGridElement().getElementsByTagName("gap").item(0).setTextContent(size+"");
}
}
public void setPluginsPath(String path)
public void setPluginsPath(String path)
{
{
getServerElement().getElementsByTagName("plugins-path").item(0).setTextContent(path);
getServerElement().getElementsByTagName("plugins-path").item(0).setTextContent(path);
}
}
public void setThemesPath(String path)
public void setThemesPath(String path)
{
{
getServerElement().getElementsByTagName("themes-path").item(0).setTextContent(path);
getServerElement().getElementsByTagName("themes-path").item(0).setTextContent(path);
}
}
public void setCurrentThemeFullName(String themeName)
public void setCurrentThemeFullName(String themeName)
{
{
getServerElement().getElementsByTagName("current-theme-full-name").item(0).setTextContent(themeName);
getServerElement().getElementsByTagName("current-theme-full-name").item(0).setTextContent(themeName);
}
}
//server > startup-window-size
//server > startup-window-size
public void setStartupWindowSize(double width, double height)
public void setStartupWindowSize(double width, double height)
{
{
setStartupWindowWidth(width);
setStartupWindowWidth(width);
setStartupWindowHeight(height);
setStartupWindowHeight(height);
}
}
public void setStartupWindowWidth(double width)
public void setStartupWindowWidth(double width)
{
{
getStartupWindowSizeElement().getElementsByTagName("width").item(0).setTextContent(width+"");
getStartupWindowSizeElement().getElementsByTagName("width").item(0).setTextContent(width+"");
}
}
public void setStartupWindowHeight(double height)
public void setStartupWindowHeight(double height)
{
{
getStartupWindowSizeElement().getElementsByTagName("height").item(0).setTextContent(height+"");
getStartupWindowSizeElement().getElementsByTagName("height").item(0).setTextContent(height+"");
}
}
//others
//others
public void setStartupOnBoot(boolean value)
public void setStartupOnBoot(boolean value)
{
{
getOthersElement().getElementsByTagName("start-on-boot").item(0).setTextContent(value+"");
getOthersElement().getElementsByTagName("start-on-boot").item(0).setTextContent(value+"");
}
}
public void setCloseOnX(boolean value)
public void setCloseOnX(boolean value)
{
{
getOthersElement().getElementsByTagName("close-on-x").item(0).setTextContent(value+"");
getOthersElement().getElementsByTagName("close-on-x").item(0).setTextContent(value+"");
}
}
public void setFirstTimeUse(boolean value)
public void setFirstTimeUse(boolean value)
{
{
getOthersElement().getElementsByTagName("first-time-use").item(0).setTextContent(value+"");
getOthersElement().getElementsByTagName("first-time-use").item(0).setTextContent(value+"");
}
}
public void setAllowDonatePopup(boolean value)
public void setAllowDonatePopup(boolean value)
{
{
getOthersElement().getElementsByTagName("allow-donate-popup").item(0).setTextContent(value+"");
getOthersElement().getElementsByTagName("allow-donate-popup").item(0).setTextContent(value+"");
}
}
}
}
package com.stream_pi.server.window;
package com.stream_pi.server.window;
import com.stream_pi.server.connection.ServerListener;
import com.stream_pi.server.connection.ServerListener;
import com.stream_pi.server.io.Config;
import com.stream_pi.server.io.Config;
import com.stream_pi.server.info.ServerInfo;
import com.stream_pi.server.info.ServerInfo;
import com.stream_pi.server.Main;
import com.stream_pi.server.Main;
import com.stream_pi.server.window.dashboard.DashboardBase;
import com.stream_pi.server.window.dashboard.DashboardBase;
import com.stream_pi.server.window.settings.SettingsBase;
import com.stream_pi.server.window.settings.SettingsBase;
import com.stream_pi.theme_api.Theme;
import com.stream_pi.theme_api.Theme;
import com.stream_pi.theme_api.Themes;
import com.stream_pi.theme_api.Themes;
import com.stream_pi.util.alert.StreamPiAlert;
import com.stream_pi.util.alert.StreamPiAlert;
import com.stream_pi.util.exception.MinorException;
import com.stream_pi.util.exception.MinorException;
import com.stream_pi.util.exception.SevereException;
import com.stream_pi.util.exception.SevereException;
import com.stream_pi.util.iohelper.IOHelper;
import com.stream_pi.util.iohelper.IOHelper;
import com.stream_pi.util.loggerhelper.StreamPiLogFallbackHandler;
import com.stream_pi.util.loggerhelper.StreamPiLogFileHandler;
import com.stream_pi.util.loggerhelper.StreamPiLogFileHandler;
import com.stream_pi.util.platform.Platform;
import javafx.application.HostServices;
import javafx.application.HostServices;
import javafx.scene.image.Image;
import javafx.scene.image.Image;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Font;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import javafx.stage.Stage;
import java.io.File;
import java.io.File;
import java.util.logging.Logger;
import java.util.logging.Logger;
public abstract class Base extends StackPane implements ExceptionAndAlertHandler, ServerListener {
public abstract class Base extends StackPane implements ExceptionAndAlertHandler, ServerListener {
private Config config;
private Config config;
private ServerInfo serverInfo;
private ServerInfo serverInfo;
private Stage stage;
private Stage stage;
private HostServices hostServices;
private HostServices hostServices;
public Logger getLogger(){
public Logger getLogger(){
return logger;
return logger;
}
}
private SettingsBase settingsBase;
private SettingsBase settingsBase;
private DashboardBase dashboardBase;
private DashboardBase dashboardBase;
private StackPane alertStackPane;
private StackPane alertStackPane;
public void setHostServices(HostServices hostServices)
public void setHostServices(HostServices hostServices)
{
{
this.hostServices = hostServices;
this.hostServices = hostServices;
}
}
public HostServices getHostServices()
public HostServices getHostServices()
{
{
return hostServices;
return hostServices;
}
}
private Logger logger = null;
private Logger logger = null;
private StreamPiLogFileHandler logFileHandler = null;
private StreamPiLogFileHandler logFileHandler = null;
private StreamPiLogFallbackHandler logFallbackHandler = null;
@Override
public void initLogger() throws SevereException
public void initLogger() throws SevereException
{
{
try
try
{
{
if(logger != null)
if(logger != null || logFileHandler != null)
return;
return;
closeLogger();
logger = Logger.getLogger("");
logger = Logger.getLogger("");
logFileHandler = new StreamPiLogFileHandler(ServerInfo.getInstance().getPrePath()+"../streampi.log");
logger.addHandler(logFileHandler);
if(new File(ServerInfo.getInstance().getPrePath()).getAbsoluteFile().getParentFile().canWrite())
{
String path = ServerInfo.getInstance().getPrePath()+"../streampi.log";
if(ServerInfo.getInstance().getPlatformType() == Platform.ANDROID)
path = ServerInfo.getInstance().getPrePath()+"streampi.log";
logFileHandler = new StreamPiLogFileHandler(path);
logger.addHandler(logFileHandler);
}
else
{
logFallbackHandler = new StreamPiLogFallbackHandler();
logger.addHandler(logFallbackHandler);
}
}
}
catch(Exception e)
catch(Exception e)
{
{
e.printStackTrace();
e.printStackTrace();
throw new SevereException("Cant get logger started!");
logFallbackHandler = new StreamPiLogFallbackHandler();
logger.addHandler(logFallbackHandler);
}
}
}
}
public void closeLogger()
public void closeLogger()
{
{
if(logFileHandler != null)
if(logFileHandler != null)
logFileHandler.close();
logFileHandler.close();
else if(logFallbackHandler != null)
logFallbackHandler.close();
}
}
public void initBase() throws SevereException
public void initBase() throws SevereException
{
{
initLogger();
getChildren().clear();
stage = (Stage) getScene().getWindow();
stage = (Stage) getScene().getWindow();
getStage().getIcons().add(new Image(Main.class.getResourceAsStream("app_icon.png")));
getStage().getIcons().add(new Image(Main.class.getResourceAsStream("app_icon.png")));
getStage().setMinWidth(500);
getStage().setMinWidth(500);
getStage().setMinHeight(500);
getStage().setMinHeight(500);
checkPrePathDirectory();
config = Config.getInstance();
stage.setWidth(config.getStartupWindowWidth());
stage.setHeight(config.getStartupWindowHeight());
stage.centerOnScreen();
serverInfo = ServerInfo.getInstance();
serverInfo = ServerInfo.getInstance();
initThemes();
settingsBase = new SettingsBase(getHostServices(), this, this);
settingsBase = new SettingsBase(getHostServices(), this, this);
settingsBase.prefWidthProperty().bind(widthProperty());
settingsBase.prefWidthProperty().bind(widthProperty());
settingsBase.prefHeightProperty().bind(heightProperty());
settingsBase.prefHeightProperty().bind(heightProperty());
dashboardBase = new DashboardBase(this, getHostServices());
dashboardBase = new DashboardBase(this, getHostServices());
dashboardBase.prefWidthProperty().bind(widthProperty());
dashboardBase.prefWidthProperty().bind(widthProperty());
dashboardBase.prefHeightProperty().bind(heightProperty());
dashboardBase.prefHeightProperty().bind(heightProperty());
alertStackPane = new StackPane();
alertStackPane = new StackPane();
alertStackPane.setVisible(false);
alertStackPane.setVisible(false);
StreamPiAlert.setParent(alertStackPane);
StreamPiAlert.setParent(alertStackPane);
getChildren().addAll(settingsBase, dashboardBase, alertStackPane);
getChildren().clear();
getChildren().addAll(alertStackPane);
initLogger();
checkPrePathDirectory();
getChildren().addAll(settingsBase, dashboardBase);
config = Config.getInstance();
initThemes();
stage.setWidth(config.getStartupWindowWidth());
stage.setHeight(config.getStartupWindowHeight());
stage.centerOnScreen();
dashboardBase.toFront();
dashboardBase.toFront();
}
}
private void checkPrePathDirectory() throws SevereException
private void checkPrePathDirectory() throws SevereException
{
{
try {
try
{
File filex = new File(ServerInfo.getInstance().getPrePath());
File filex = new File(ServerInfo.getInstance().getPrePath());
if(!filex.exists())
if(filex.getAbsoluteFile().getParentFile().canWrite())
{
if(!filex.exists())
{
filex.mkdirs();
IOHelper.unzip(Main.class.getResourceAsStream("Default.obj"), ServerInfo.getInstance().getPrePath());
}
}
else
{
{
filex.mkdirs();
setPrefSize(300,300);
IOHelper.unzip(Main.class.getResourceAsStream("Default.obj"), ServerInfo.getInstance().getPrePath());
clearStylesheets();
applyDefaultStylesheet();
applyDefaultIconsStylesheet();
getStage().show();
throw new SevereException("No storage permission. Give it!");
}
}
}
}
catch (Exception e)
catch (Exception e)
{
{
e.printStackTrace();
e.printStackTrace();
getStage().show();
throw new SevereException(e.getMessage());
throw new SevereException(e.getMessage());
}
}
}
}
public void initThemes() throws SevereException {
public void initThemes() throws SevereException {
clearStylesheets();
clearStylesheets();
registerThemes();
registerThemes();
applyDefaultStylesheet();
applyDefaultStylesheet();
applyDefaultTheme();
applyDefaultTheme();
applyDefaultIconsStylesheet();
applyDefaultIconsStylesheet();
}
}
public Stage getStage()
public Stage getStage()
{
{
return stage;
return stage;
}
}
public void applyDefaultStylesheet()
public void applyDefaultStylesheet()
{
{
logger.info("Applying default stylesheet ...");
logger.info("Applying default stylesheet ...");
Font.loadFont(Main.class.getResourceAsStream("Roboto.ttf"), 13);
Font.loadFont(Main.class.getResourceAsStream("Roboto.ttf"), 13);
getStylesheets().add(Main.class.getResource("style.css").toExternalForm());
getStylesheets().add(Main.class.getResource("style.css").toExternalForm());
logger.info("... Done!");
logger.info("... Done!");
}
}
public void applyDefaultIconsStylesheet()
public void applyDefaultIconsStylesheet()
{
{
Font.loadFont(Main.class.getResourceAsStream("Roboto.ttf"), 13);
Font.loadFont(Main.class.getResourceAsStream("Roboto.ttf"), 13);
getStylesheets().add(Main.class.getResource("default_icons.css").toExternalForm());
getStylesheets().add(Main.class.getResource("default_icons.css").toExternalForm());
}
}
public DashboardBase getDashboardPane()
public DashboardBase getDashboardPane()
{
{
return dashboardBase;
return dashboardBase;
}
}
public SettingsBase getSettingsPane()
public SettingsBase getSettingsPane()
{
{
return settingsBase;
return settingsBase;
}
}
public Config getConfig()
public Config getConfig()
{
{
return config;
return config;
}
}
public ServerInfo getServerInfo()
public ServerInfo getServerInfo()
{
{
return serverInfo;
return serverInfo;
}
}
private Theme currentTheme;
private Theme currentTheme;
public Theme getCurrentTheme()
public Theme getCurrentTheme()
{
{
return currentTheme;
return currentTheme;
}
}
public void applyTheme(Theme t)
public void applyTheme(Theme t)
{
{
logger.info("Applying theme '"+t.getFullName()+"' ...");
logger.info("Applying theme '"+t.getFullName()+"' ...");
if(t.getFonts() != null)
if(t.getFonts() != null)
{
{
for(String fontFile : t.getFonts())
for(String fontFile : t.getFonts())
{
{
Font.loadFont(fontFile.replace("%20",""), 13);
Font.loadFont(fontFile.replace("%20",""), 13);
}
}
}
}
currentTheme = t;
currentTheme = t;
getStylesheets().addAll(t.getStylesheets());
getStylesheets().addAll(t.getStylesheets());
logger.info("... Done!");
logger.info("... Done!");
}
}
public void clearStylesheets()
public void clearStylesheets()
{
{
getStylesheets().clear();
getStylesheets().clear();
}
}
Themes themes;
Themes themes;
public void registerThemes() throws SevereException
public void registerThemes() throws SevereException
{
{
logger.info("Loading themes ...");
logger.info("Loading themes ...");
themes = new Themes(getConfig().getThemesPath(), getConfig().getCurrentThemeFullName(), serverInfo.getMinThemeSupportVersion());
themes = new Themes(getConfig().getThemesPath(), getConfig().getCurrentThemeFullName(), serverInfo.getMinThemeSupportVersion());
if(themes.getErrors().size()>0)
if(themes.getErrors().size()>0)
{
{
StringBuilder themeErrors = new StringBuilder();
StringBuilder themeErrors = new StringBuilder();
for(MinorException eachException : themes.getErrors())
for(MinorException eachException : themes.getErrors())
{
{
themeErrors.append("\n * ").append(eachException.getShortMessage());
themeErrors.append("\n * ").append(eachException.getShortMessage());
}
}
if(themes.getIsBadThemeTheCurrentOne())
if(themes.getIsBadThemeTheCurrentOne())
{
{
themeErrors.append("\n\nReverted to default theme! (").append(getConfig().getDefaultCurrentThemeFullName()).append(")");
themeErrors.append("\n\nReverted to default theme! (").append(getConfig().getDefaultCurrentThemeFullName()).append(")");
getConfig().setCurrentThemeFullName(getConfig().getDefaultCurrentThemeFullName());
getConfig().setCurrentThemeFullName(getConfig().getDefaultCurrentThemeFullName());
getConfig().save();
getConfig().save();
}
}
handleMinorException(new MinorException("Theme Loading issues", themeErrors.toString()));
handleMinorException(new MinorException("Theme Loading issues", themeErrors.toString()));
}
}
logger.info("... Done!");
logger.info("... Done!");
}
}
public Themes getThemes()
public Themes getThemes()
{
{
return themes;
return themes;
}
}
public void applyDefaultTheme()
public void applyDefaultTheme()
{
{
logger.info("Applying default theme ...");
logger.info("Applying default theme ...");
boolean foundTheme = false;
boolean foundTheme = false;
for(Theme t: themes.getThemeList())
for(Theme t: themes.getThemeList())
{
{
if(t.getFullName().equals(config.getCurrentThemeFullName()))
if(t.getFullName().equals(config.getCurrentThemeFullName()))
{
{
foundTheme = true;
foundTheme = true;
applyTheme(t);
applyTheme(t);
break;
break;
}
}
}
}
if(foundTheme)
if(foundTheme)
logger.info("... Done!");
logger.info("... Done!");
else
else
{
{
logger.info("Theme not found. reverting to light theme ...");
logger.info("Theme not found. reverting to light theme ...");
try {
try {
Config.getInstance().setCurrentThemeFullName("com.streampi.DefaultLight");
Config.getInstance().setCurrentThemeFullName("com.streampi.DefaultLight");
Config.getInstance().save();
Config.getInstance().save();
applyDefaultTheme();
applyDefaultTheme();
}
}
catch (SevereException e)
catch (SevereException e)
{
{
handleSevereException(e);
handleSevereException(e);
}
}
}
}
}
}
}
}
package com.stream_pi.server.window.firsttimeuse;
package com.stream_pi.server.window.firsttimeuse;
import com.stream_pi.server.connection.ServerListener;
import com.stream_pi.server.connection.ServerListener;
import com.stream_pi.server.io.Config;
import com.stream_pi.server.io.Config;
import com.stream_pi.server.window.ExceptionAndAlertHandler;
import com.stream_pi.server.window.ExceptionAndAlertHandler;
import com.stream_pi.util.exception.SevereException;
import com.stream_pi.util.exception.SevereException;
import com.stream_pi.util.uihelper.HBoxInputBox;
import com.stream_pi.util.uihelper.HBoxInputBox;
import com.stream_pi.util.uihelper.SpaceFiller;
import com.stream_pi.util.uihelper.SpaceFiller;
import javafx.geometry.Pos;
import javafx.geometry.Pos;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.control.TextField;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.layout.HBox;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Region;
import javafx.scene.layout.Region;
import javafx.scene.layout.VBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.stage.Stage;
public class FinalConfigPane extends VBox
public class FinalConfigPane extends VBox
{
{
private TextField serverNicknameTextField;
private TextField serverNicknameTextField;
private TextField serverPortTextField;
private TextField serverPortTextField;
private Button nextButton;
private Button nextButton;
private ExceptionAndAlertHandler exceptionAndAlertHandler;
private ExceptionAndAlertHandler exceptionAndAlertHandler;
private ServerListener serverListener;
private ServerListener serverListener;
public FinalConfigPane(ExceptionAndAlertHandler exceptionAndAlertHandler, ServerListener serverListener,
public FinalConfigPane(ExceptionAndAlertHandler exceptionAndAlertHandler, ServerListener serverListener,
Button nextButton)
Button nextButton)
{
{
this.exceptionAndAlertHandler = exceptionAndAlertHandler;
this.exceptionAndAlertHandler = exceptionAndAlertHandler;
this.serverListener = serverListener;
this.serverListener = serverListener;
this.nextButton = nextButton;
this.nextButton = nextButton;
getStyleClass().add("first_time_use_pane_final_config");
getStyleClass().add("first_time_use_pane_final_config");
Label label = new Label("Thats it. Now just name your Stream-Pi Server, and the port where the server will run on!\n" +
Label label = new Label("Thats it. Now just name your Stream-Pi Server, and the port where the server will run on!\n" +
"You can leave the default value of the port as it is.");
"You can leave the default value of the port as it is.");
label.setWrapText(true);
label.setWrapText(true);
label.getStyleClass().add("first_time_use_pane_final_config_label");
label.getStyleClass().add("first_time_use_pane_final_config_label");
serverNicknameTextField = new TextField();
serverNicknameTextField = new TextField();
serverPortTextField = new TextField("2004");
serverPortTextField = new TextField("2004");
HBoxInputBox serverNickNameInputBox = new HBoxInputBox("Server Nickname", serverNicknameTextField, 200);
HBoxInputBox serverNickNameInputBox = new HBoxInputBox("Server Nickname", serverNicknameTextField, 200);
HBoxInputBox serverPortInputBox = new HBoxInputBox("Server Port", serverPortTextField);
HBoxInputBox serverPortInputBox = new HBoxInputBox("Server Port", serverPortTextField);
getChildren().addAll(label, serverNickNameInputBox, serverPortInputBox);
getChildren().addAll(label, serverNickNameInputBox, serverPortInputBox);
setSpacing(10.0);
setSpacing(10.0);
setVisible(false);
setVisible(false);
}
}
public void makeChangesToNextButton()
public void makeChangesToNextButton()
{
{
nextButton.setText("Confirm");
nextButton.setText("Confirm");
nextButton.setOnAction(event -> onConfirmButtonClicked());
nextButton.setOnAction(event -> onConfirmButtonClicked());
}
}
private void onConfirmButtonClicked()
private void onConfirmButtonClicked()
{
{
StringBuilder errors = new StringBuilder();
StringBuilder errors = new StringBuilder();
String serverNameStr = serverNicknameTextField.getText();
String serverNameStr = serverNicknameTextField.getText();
String serverPortStr = serverPortTextField.getText();
String serverPortStr = serverPortTextField.getText();
if(serverNameStr.isBlank() || serverNameStr.isEmpty())
if(serverNameStr.isBlank() || serverNameStr.isEmpty())
{
{
errors.append("* Server Name cannot be blank.\n");
errors.append("* Server Name cannot be blank.\n");
}
}
int serverPort=-1;
int serverPort=-1;
try {
try {
serverPort = Integer.parseInt(serverPortStr);
serverPort = Integer.parseInt(serverPortStr);
if (serverPort < 1024)
if (serverPort < 1024)
errors.append("* Server Port must be more than 1024");
errors.append("* Server Port must be more than 1024");
}
}
catch (NumberFormatException e)
catch (NumberFormatException e)
{
{
errors.append("* Server Port must be integer.\n");
errors.append("* Server Port must be integer.\n");
}
}
if(errors.toString().isEmpty())
if(errors.toString().isEmpty())
{
{
try
try
{
{
Config.getInstance().setServerName(serverNameStr);
Config.getInstance().setServerName(serverNameStr);
Config.getInstance().setServerPort(serverPort);
Config.getInstance().setServerPort(serverPort);
Config.getInstance().setFirstTimeUse(false);
Config.getInstance().setFirstTimeUse(false);
Config.getInstance().save();
Config.getInstance().save();
serverListener.othInit();
serverListener.othInit();
serverListener.initLogger();
((Stage) getScene().getWindow()).close();
((Stage) getScene().getWindow()).close();
}
}
catch(SevereException e)
catch(SevereException e)
{
{
exceptionAndAlertHandler.handleSevereException(e);
exceptionAndAlertHandler.handleSevereException(e);
}
}
}
}
else
else
{
{
Alert alert = new Alert(AlertType.ERROR);
Alert alert = new Alert(AlertType.ERROR);
alert.setResizable(false);
alert.setResizable(false);
alert.getDialogPane().setPrefHeight(250);
alert.getDialogPane().setPrefHeight(250);
alert.setContentText("Please rectify the following errors and try again:\n"+errors.toString());
alert.setContentText("Please rectify the following errors and try again:\n"+errors.toString());
alert.show();
alert.show();
}
}
}
}
}
}
PK(R
PK(R
config.xmlUT \_a`7`ux uRn +, NG\z0 Mԯ}0a렊Op^/7,@צۗW+ n26偯Xmt+;*
config.xmlUT \_a`7`ux uRn +, NG\z0 Mԯ}0a렊Op^/7,@צۗW+ n26偯Xmt+;*
GX)89MtVXV f|ژ*vR{bEy#P\^β<0R}Nu¤sx*FNXɻ2sI6*ERg,qhETMv}wV!^ ђԍ.jw<aO;F'<E㇃ۅ3Q_ Ø[<L.7r"DVy)f0~_Q
GX)89MtVXV f|ژ*vR{bEy#P\^β<0R}Nu¤sx*FNXɻ2sI6*ERg,qhETMv}wV!^ ђԍ.jw<aO;F'<E㇃ۅ3Q_ Ø[<L.7r"DVy)f0~_Q
5Fgϑ'7PKW3VPK霟Q Plugins/UT _7`7`ux PK霟Qm Plugins/config.xmlUT _u`7`ux Q(K-*ϳU23PRHKOKU
5Fgϑ'7PKW3VPK霟Q Plugins/UT _7`7`ux PK霟Qm Plugins/config.xmlUT _u`7`ux Q(K-*ϳU23PRHKOKU
qӵPR(.IKIKUWIKL/-J,jRPIL1la,.}4ePKTXmPK,DR Themes/UT ,`7`7`ux PKDR Themes/com.StreamPi.DefaultDark/UT k`7`7`ux PKDR$ Themes/com.StreamPi.DefaultDark/res/UT 2`7`7`ux PKDR - Themes/com.StreamPi.DefaultDark/res/style.cssUT 2`7`7`ux Vێ0}G,*[u/,9BF$r<|eV
qӵPR(.IKIKUWIKL/-J,jRPIL1la,.}4ePKTXmPK,DR Themes/UT ,`7`7`ux PKDR Themes/com.StreamPi.DefaultDark/UT k`7`7`ux PKDR$ Themes/com.StreamPi.DefaultDark/res/UT 2`7`7`ux PKDR - Themes/com.StreamPi.DefaultDark/res/style.cssUT 2`7`7`ux Vێ0}G,*[u/,9BF$r<|eV
Z` ao~ٿ>'ݏZjnjN9E :j0*wxΩzD,v@/./!,mkkkO" NQEJB)t3( taiN%쒋]Cy{Mi[\Xxgh_76~n>MPelZvp:UHiz8K<i*@6r'\d 6]S M\(aYwZe!^4L԰ᒣANآn:k{.H۬ 9 E Ñ!rz7Ͱ=JpK 6|Et~gXm9K,m~`F:P= F%y)j`1wi4 8߰NXn󙅎EE{3SV^E%w)ta g>Տ L-aVῷ.PKЛE$ PKDR) Themes/com.StreamPi.DefaultDark/theme.xmlUT k`7`7`ux uP MNi ]89>/VZݽ˽cK FpnL; )ÑU|cr&+|a1
Z` ao~ٿ>'ݏZjnjN9E :j0*wxΩzD,v@/./!,mkkkO" NQEJB)t3( taiN%쒋]Cy{Mi[\Xxgh_76~n>MPelZvp:UHiz8K<i*@6r'\d 6]S M\(aYwZe!^4L԰ᒣANآn:k{.H۬ 9 E Ñ!rz7Ͱ=JpK 6|Et~gXm9K,m~`F:P= F%y)j`1wi4 8߰NXn󙅎EE{3SV^E%w)ta g>Տ L-aVῷ.PKЛE$ PKDR) Themes/com.StreamPi.DefaultDark/theme.xmlUT k`7`7`ux uP MNi ]89>/VZݽ˽cK FpnL; )ÑU|cr&+|a1
/U$aaDd]o'Z(5H1MD.&pn ZF#H6)MO2yxtY9F&^Ot]PK}PKDR! Themes/com.StreamPi.DefaultLight/UT k`7`7`ux PKDR* Themes/com.StreamPi.DefaultLight/theme.xmlUT k`7`7`ux uPA0{)L0)ă/@hM{(3kSFIf ]FLη+-Ñ ~k[MV{1Hli0+8~oҭ ȲXZ Ni@rQ]ELz\X-gyDMu ΢WP8ztǖ5,b"+-PK|PK#DR% Themes/com.StreamPi.DefaultLight/res/UT ;1`7`7`ux PK#DR . Themes/com.StreamPi.DefaultLight/res/style.cssUT ;1`7`7`ux VM G@꭪^{NAK &bmժ}#IxTh@R|jYZ_~AmDm;Yx"AeIaVXpaoG()PQPg?ﺊ/W<-\.( ڞg%N57XcB"WJ6ImC7qkzBU%-xz$_C tS3&ZaxRBi'geJ472,Ǹ0a%I]Hk.H+mN(GLm5p]3LW3bYOlܲ.wOqMj8p/ưi:kG.ZrLlp٘94#>A6ê1R] l,IVbsXYhmnpK
/U$aaDd]o'Z(5H1MD.&pn ZF#H6)MO2yxtY9F&^Ot]PK}PKDR! Themes/com.StreamPi.DefaultLight/UT k`7`7`ux PKDR* Themes/com.StreamPi.DefaultLight/theme.xmlUT k`7`7`ux uPA0{)L0)ă/@hM{(3kSFIf ]FLη+-Ñ ~k[MV{1Hli0+8~oҭ ȲXZ Ni@rQ]ELz\X-gyDMu ΢WP8ztǖ5,b"+-PK|PK#DR% Themes/com.StreamPi.DefaultLight/res/UT ;1`7`7`ux PK#DR . Themes/com.StreamPi.DefaultLight/res/style.cssUT ;1`7`7`ux VM G@꭪^{NAK &bmժ}#IxTh@R|jYZ_~AmDm;Yx"AeIaVXpaoG()PQPg?ﺊ/W<-\.( ڞg%N57XcB"WJ6ImC7qkzBU%-xz$_C tS3&ZaxRBi'geJ472,Ǹ0a%I]Hk.H+mN(GLm5p]3LW3bYOlܲ.wOqMj8p/ưi:kG.ZrLlp٘94#>A6ê1R] l,IVbsXYhmnpK
&᪂mS^
&᪂mS^
ްNoHBǢ,ܽNˌ{%)Qxewza7.Í T;a]鿷>PKF; PKͺDR( Themes/com.StreamPi.DefaultHighContrast/UT Z4`7`7`ux PKѸDR, Themes/com.StreamPi.DefaultHighContrast/res/UT 0`7`7`ux PKѸDR" 5 Themes/com.StreamPi.DefaultHighContrast/res/style.cssUT 0`7`7`ux UK0 .`ƹB 8BѐIA^ſHYN,D톅N;=B͖L5/ '/^σnDIvv3=&`k6E="%GT];xUP
ްNoHBǢ,ܽNˌ{%)Qxewza7.Í T;a]鿷>PKF; PKͺDR( Themes/com.StreamPi.DefaultHighContrast/UT Z4`7`7`ux PKѸDR, Themes/com.StreamPi.DefaultHighContrast/res/UT 0`7`7`ux PKѸDR" 5 Themes/com.StreamPi.DefaultHighContrast/res/style.cssUT 0`7`7`ux UK0 .`ƹB 8BѐIA^ſHYN,D톅N;=B͖L5/ '/^σnDIvv3=&`k6E="%GT];xUP
RPEHL\{윞2^3NΚt/9A7dnlWF8Xfƞ*5V.aZ",(B2V(tFχy|Qg(QLZAN;+z%*'MHk a*5<w'Z!nO걘k( k~":yڡԏ<ވ"6 \`:lB޼н/އuDLNy-+RMmBq;mM< KlYA\A0`b<RGnl.K#wb?p__]vDaeΙ/C[ ؅hPK" PKͺDR1 Themes/com.StreamPi.DefaultHighContrast/theme.xmlUT Z4`7`7`ux uP10 ܑC 40 x)n&(qR|w>O]n輶,chJ{֦.Ŋ3V,t;  #x4S+IFm*Pm%u6֐OlwJs)x RD |" >9H}H>(ЋK0:ҟPKGzKPK(RW3V
RPEHL\{윞2^3NΚt/9A7dnlWF8Xfƞ*5V.aZ",(B2V(tFχy|Qg(QLZAN;+z%*'MHk a*5<w'Z!nO걘k( k~":yڡԏ<ވ"6 \`:lB޼н/އuDLNy-+RMmBq;mM< KlYA\A0`b<RGnl.K#wb?p__]vDaeΙ/C[ ؅hPK" PKͺDR1 Themes/com.StreamPi.DefaultHighContrast/theme.xmlUT Z4`7`7`ux uP10 ܑC 40 x)n&(qR|w>O]n輶,chJ{֦.Ŋ3V,t;  #x4S+IFm*Pm%u6֐OlwJs)x RD |" >9H}H>(ЋK0:ҟPKGzKPK(RW3V
config.xmlUT \_a`7`ux PK霟Q APlugins/UT _7`7`ux PK霟QTXm Plugins/config.xmlUT _u`7`ux PK,DR AThemes/UT ,`7`7`ux PKDR AThemes/com.StreamPi.DefaultDark/UT k`7`7`ux PKDR$ AOThemes/com.StreamPi.DefaultDark/res/UT 2`7`7`ux PKDRЛE$ - Themes/com.StreamPi.DefaultDark/res/style.cssUT 2`7`7`ux PKDR}) PThemes/com.StreamPi.DefaultDark/theme.xmlUT k`7`7`ux PKDR! AThemes/com.StreamPi.DefaultLight/UT k`7`7`ux PKDR|* Themes/com.StreamPi.DefaultLight/theme.xmlUT k`7`7`ux PK#DR% A" Themes/com.StreamPi.DefaultLight/res/UT ;1`7`7`ux PK#DRF; . Themes/com.StreamPi.DefaultLight/res/style.cssUT ;1`7`7`ux PKͺDR( A Themes/com.StreamPi.DefaultHighContrast/UT Z4`7`7`ux PKѸDR, A Themes/com.StreamPi.DefaultHighContrast/res/UT 0`7`7`ux PKѸDR" 5 Themes/com.StreamPi.DefaultHighContrast/res/style.cssUT 0`7`7`ux PKͺDRGzK1 aThemes/com.StreamPi.DefaultHighContrast/theme.xmlUT Z4`7`7`ux PK
config.xmlUT \_a`7`ux PK霟Q APlugins/UT _7`7`ux PK霟QTXm Plugins/config.xmlUT _u`7`ux PK,DR AThemes/UT ,`7`7`ux PKDR AThemes/com.StreamPi.DefaultDark/UT k`7`7`ux PKDR$ AOThemes/com.StreamPi.DefaultDark/res/UT 2`7`7`ux PKDRЛE$ - Themes/com.StreamPi.DefaultDark/res/style.cssUT 2`7`7`ux PKDR}) PThemes/com.StreamPi.DefaultDark/theme.xmlUT k`7`7`ux PKDR! AThemes/com.StreamPi.DefaultLight/UT k`7`7`ux PKDR|* Themes/com.StreamPi.DefaultLight/theme.xmlUT k`7`7`ux PK#DR% A" Themes/com.StreamPi.DefaultLight/res/UT ;1`7`7`ux PK#DRF; . Themes/com.StreamPi.DefaultLight/res/style.cssUT ;1`7`7`ux PKͺDR( A Themes/com.StreamPi.DefaultHighContrast/UT Z4`7`7`ux PKѸDR, A Themes/com.StreamPi.DefaultHighContrast/res/UT 0`7`7`ux PKѸDR" 5 Themes/com.StreamPi.DefaultHighContrast/res/style.cssUT 0`7`7`ux PKͺDRGzK1 aThemes/com.StreamPi.DefaultHighContrast/theme.xmlUT Z4`7`7`ux PK