From: Debayan Sutradhar Date: Mon, 07 Jun 2021 21:11:53 +0530 Subject: Refactored, Added factory reset --- Refactored, Added factory reset --- --- 'a/src/main/java/com/stream_pi/server/connection/ClientConnection.java' +++ b/src/main/java/com/stream_pi/server/connection/ClientConnection.java @@ -8,17 +8,15 @@ import com.stream_pi.action_api.actionpr import com.stream_pi.action_api.actionproperty.property.Property; import com.stream_pi.action_api.actionproperty.property.Type; import com.stream_pi.action_api.externalplugin.ExternalPlugin; -import com.stream_pi.action_api.externalplugin.NormalAction; -import com.stream_pi.action_api.externalplugin.ToggleAction; import com.stream_pi.action_api.otheractions.CombineAction; import com.stream_pi.action_api.otheractions.FolderAction; import com.stream_pi.server.action.ExternalPlugins; import com.stream_pi.server.client.Client; import com.stream_pi.server.client.ClientProfile; import com.stream_pi.server.client.ClientTheme; +import com.stream_pi.server.controller.ServerListener; import com.stream_pi.server.info.ServerInfo; import com.stream_pi.server.window.ExceptionAndAlertHandler; -import com.stream_pi.server.window.dashboard.actiongridpane.ActionBox; import com.stream_pi.util.alert.StreamPiAlert; import com.stream_pi.util.alert.StreamPiAlertType; import com.stream_pi.util.comms.Message; @@ -29,7 +27,6 @@ import com.stream_pi.util.platform.Platf import com.stream_pi.util.platform.ReleaseStatus; import com.stream_pi.util.version.Version; import javafx.concurrent.Task; -import javafx.scene.control.Toggle; import java.io.*; import java.net.Socket; --- 'a/src/main/java/com/stream_pi/server/connection/MainServer.java' +++ b/src/main/java/com/stream_pi/server/connection/MainServer.java @@ -1,5 +1,6 @@ package com.stream_pi.server.connection; +import com.stream_pi.server.controller.ServerListener; import com.stream_pi.server.window.ExceptionAndAlertHandler; import com.stream_pi.util.exception.MinorException; import com.stream_pi.util.exception.SevereException; --- 'a/src/main/java/com/stream_pi/server/connection/ServerListener.java' +++ /dev/null @@ -1,32 +0,0 @@ -package com.stream_pi.server.connection; - -import com.stream_pi.action_api.externalplugin.NormalAction; -import com.stream_pi.action_api.externalplugin.ToggleAction; -import com.stream_pi.server.client.Client; -import com.stream_pi.server.window.dashboard.ClientAndProfileSelectorPane; -import com.stream_pi.server.window.dashboard.DashboardBase; -import com.stream_pi.server.window.settings.SettingsBase; -import com.stream_pi.util.exception.SevereException; -import javafx.stage.Stage; - -import java.net.SocketAddress; - -public interface ServerListener -{ - void onActionClicked(Client client, String profileID, String actionID, boolean toggle); - - void clearTemp(); - - void init(); - - void restart(); - - void othInit(); - - Stage getStage(); - - DashboardBase getDashboardBase(); - SettingsBase getSettingsBase(); - - void initLogger() throws SevereException; -} --- 'a/src/main/java/com/stream_pi/server/controller/Controller.java' +++ b/src/main/java/com/stream_pi/server/controller/Controller.java @@ -27,6 +27,7 @@ import com.stream_pi.util.alert.StreamPi import com.stream_pi.util.alert.StreamPiAlertListener; import com.stream_pi.util.alert.StreamPiAlertType; import com.stream_pi.util.exception.*; +import com.stream_pi.util.iohelper.IOHelper; import javafx.animation.Animation; import javafx.animation.Interpolator; import javafx.animation.KeyFrame; @@ -59,7 +60,7 @@ import java.util.logging.Level; public class Controller extends Base implements PropertySaver, ServerConnection, ToggleExtras { - private ExecutorService executor = Executors.newCachedThreadPool(); + private final ExecutorService executor = Executors.newCachedThreadPool(); private MainServer mainServer; private Animation openSettingsAnimation; private Animation closeSettingsAnimation; @@ -86,7 +87,6 @@ public class Controller extends Base imp { try { - initBase(); setupDashWindow(); @@ -206,6 +206,26 @@ public class Controller extends Base imp }); } + @Override + public void factoryReset() + { + getLogger().info("Reset to factory ..."); + + onQuitApp(); + + boolean result = IOHelper.deleteFile(getServerInfo().getPrePath()); + + if(result) + { + getStage().close(); + init(); + } + else + { + handleSevereException(new SevereException("Unable to delete all files successfully. Installation corrupt. Re-install.")); + } + } + private void setupSettingsWindowsAnimations() { Node settingsNode = getSettingsBase(); @@ -228,8 +248,7 @@ public class Controller extends Base imp } onQuitApp(); - ExternalPlugins.getInstance().shutDownActions(); - Platform.exit(); + exit(); } catch (SevereException e) { @@ -243,6 +262,8 @@ public class Controller extends Base imp public void onQuitApp() { + getLogger().info("Shutting down ..."); + try { if(getConfig() != null) @@ -260,8 +281,14 @@ public class Controller extends Base imp stopServerAndAllConnections(); executor.shutdown(); - getLogger().info("Shutting down ..."); + ExternalPlugins.getInstance().shutDownActions(); closeLogger(); + Config.nullify(); + } + + public void exit() + { + Platform.exit(); } private void stopServerAndAllConnections() @@ -314,7 +341,7 @@ public class Controller extends Base imp exitItem.addActionListener(l->{ systemTray.remove(getTrayIcon()); onQuitApp(); - Platform.exit(); + exit(); }); popup.add(exitItem); @@ -367,7 +394,7 @@ public class Controller extends Base imp public void onClick(String txt) { onQuitApp(); - Platform.exit(); + exit(); } }); --- /dev/null +++ b/src/main/java/com/stream_pi/server/controller/ServerListener.java @@ -0,0 +1,34 @@ +package com.stream_pi.server.controller; + +import com.stream_pi.action_api.externalplugin.NormalAction; +import com.stream_pi.action_api.externalplugin.ToggleAction; +import com.stream_pi.server.client.Client; +import com.stream_pi.server.window.dashboard.ClientAndProfileSelectorPane; +import com.stream_pi.server.window.dashboard.DashboardBase; +import com.stream_pi.server.window.settings.SettingsBase; +import com.stream_pi.util.exception.SevereException; +import javafx.stage.Stage; + +import java.net.SocketAddress; + +public interface ServerListener +{ + void onActionClicked(Client client, String profileID, String actionID, boolean toggle); + + void clearTemp(); + + void init(); + + void restart(); + + void othInit(); + + Stage getStage(); + + DashboardBase getDashboardBase(); + SettingsBase getSettingsBase(); + + void initLogger() throws SevereException; + + void factoryReset(); +} --- 'a/src/main/java/com/stream_pi/server/io/Config.java' +++ b/src/main/java/com/stream_pi/server/io/Config.java @@ -61,6 +61,11 @@ public class Config return instance; } + public static void nullify() + { + instance = null; + } + Logger logger = Logger.getLogger(Config.class.getName()); public void save() throws SevereException { --- 'a/src/main/java/com/stream_pi/server/window/Base.java' +++ b/src/main/java/com/stream_pi/server/window/Base.java @@ -1,6 +1,6 @@ package com.stream_pi.server.window; -import com.stream_pi.server.connection.ServerListener; +import com.stream_pi.server.controller.ServerListener; import com.stream_pi.server.io.Config; import com.stream_pi.server.info.ServerInfo; import com.stream_pi.server.Main; @@ -11,25 +11,22 @@ import com.stream_pi.theme_api.Themes; import com.stream_pi.util.alert.StreamPiAlert; import com.stream_pi.util.exception.MinorException; import com.stream_pi.util.exception.SevereException; -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.platform.Platform; import javafx.application.HostServices; -import javafx.beans.value.ChangeListener; -import javafx.beans.value.ObservableValue; import javafx.scene.image.Image; import javafx.scene.layout.StackPane; import javafx.scene.text.Font; import javafx.stage.Stage; -import java.awt.*; import java.io.File; import java.util.Objects; 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 ServerInfo serverInfo; --- 'a/src/main/java/com/stream_pi/server/window/firsttimeuse/FinalConfigPane.java' +++ b/src/main/java/com/stream_pi/server/window/firsttimeuse/FinalConfigPane.java @@ -1,20 +1,16 @@ package com.stream_pi.server.window.firsttimeuse; -import com.stream_pi.server.connection.ServerListener; +import com.stream_pi.server.controller.ServerListener; import com.stream_pi.server.io.Config; import com.stream_pi.server.window.ExceptionAndAlertHandler; import com.stream_pi.util.exception.SevereException; import com.stream_pi.util.uihelper.HBoxInputBox; -import com.stream_pi.util.uihelper.SpaceFiller; -import javafx.geometry.Pos; import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.control.Alert.AlertType; -import javafx.scene.layout.HBox; -import javafx.scene.layout.Region; import javafx.scene.layout.VBox; import javafx.stage.Stage; --- 'a/src/main/java/com/stream_pi/server/window/firsttimeuse/FirstTimeUse.java' +++ b/src/main/java/com/stream_pi/server/window/firsttimeuse/FirstTimeUse.java @@ -1,7 +1,7 @@ package com.stream_pi.server.window.firsttimeuse; import com.stream_pi.server.Main; -import com.stream_pi.server.connection.ServerListener; +import com.stream_pi.server.controller.ServerListener; import com.stream_pi.server.window.ExceptionAndAlertHandler; import com.stream_pi.util.uihelper.SpaceFiller; --- 'a/src/main/java/com/stream_pi/server/window/settings/ClientsSettings.java' +++ b/src/main/java/com/stream_pi/server/window/settings/ClientsSettings.java @@ -5,7 +5,7 @@ import com.stream_pi.server.client.Clien import com.stream_pi.server.client.ClientTheme; import com.stream_pi.server.connection.ClientConnection; import com.stream_pi.server.connection.ClientConnections; -import com.stream_pi.server.connection.ServerListener; +import com.stream_pi.server.controller.ServerListener; import com.stream_pi.server.window.ExceptionAndAlertHandler; import com.stream_pi.util.exception.MinorException; import com.stream_pi.util.exception.SevereException; --- 'a/src/main/java/com/stream_pi/server/window/settings/GeneralSettings.java' +++ b/src/main/java/com/stream_pi/server/window/settings/GeneralSettings.java @@ -1,12 +1,11 @@ package com.stream_pi.server.window.settings; -import com.stream_pi.server.connection.ServerListener; +import com.stream_pi.server.controller.ServerListener; import com.stream_pi.server.info.StartupFlags; import com.stream_pi.server.io.Config; import com.stream_pi.server.window.ExceptionAndAlertHandler; import com.stream_pi.server.info.ServerInfo; -import com.stream_pi.theme_api.Themes; import com.stream_pi.util.alert.StreamPiAlert; import com.stream_pi.util.alert.StreamPiAlertListener; import com.stream_pi.util.alert.StreamPiAlertType; @@ -17,17 +16,14 @@ import com.stream_pi.util.exception.Seve import com.stream_pi.util.platform.PlatformType; import com.stream_pi.util.startatboot.StartAtBoot; import com.stream_pi.util.uihelper.HBoxWithSpaceBetween; -import com.stream_pi.util.version.Version; import javafx.application.HostServices; import javafx.application.Platform; import javafx.concurrent.Task; import javafx.event.ActionEvent; import javafx.geometry.Insets; import javafx.geometry.Pos; -import javafx.scene.control.*; import javafx.scene.control.Button; import javafx.scene.control.Label; -import javafx.scene.control.ScrollPane; import javafx.scene.control.TextField; import javafx.scene.layout.*; import javafx.stage.DirectoryChooser; @@ -35,10 +31,7 @@ import org.controlsfx.control.ToggleSwit import org.kordamp.ikonli.javafx.FontIcon; import java.awt.SystemTray; -import java.io.BufferedReader; import java.io.File; -import java.io.InputStreamReader; -import java.net.URL; import java.util.logging.Logger; public class GeneralSettings extends VBox { @@ -57,6 +50,7 @@ public class GeneralSettings extends VBo private final HBoxWithSpaceBetween showAlertsPopupHBox; private final Button saveButton; private final Button checkForUpdatesButton; + private final Button factoryResetButton; private Logger logger; @@ -101,6 +95,9 @@ public class GeneralSettings extends VBo checkForUpdatesButton = new Button("Check for updates"); checkForUpdatesButton.setOnAction(event->checkForUpdates()); + factoryResetButton = new Button("Factory Reset"); + factoryResetButton.setOnAction(actionEvent -> onFactoryResetButtonClicked()); + getStyleClass().add("general_settings"); prefWidthProperty().bind(widthProperty()); @@ -124,7 +121,7 @@ public class GeneralSettings extends VBo saveButton = new Button("Save"); saveButton.setOnAction(event->save()); - getChildren().addAll(checkForUpdatesButton, saveButton); + getChildren().addAll(factoryResetButton, checkForUpdatesButton, saveButton); setPadding(new Insets(10)); @@ -431,4 +428,27 @@ public class GeneralSettings extends VBo } }).start(); } + + private void onFactoryResetButtonClicked() + { + StreamPiAlert confirmation = new StreamPiAlert("Warning","Are you sure?\n" + + "This will erase everything.",StreamPiAlertType.WARNING); + + String yesButton = "Yes"; + String noButton = "No"; + + confirmation.setButtons(yesButton, noButton); + + confirmation.setOnClicked(new StreamPiAlertListener() { + @Override + public void onClick(String s) { + if(s.equals(yesButton)) + { + serverListener.factoryReset(); + } + } + }); + + confirmation.show(); + } } --- 'a/src/main/java/com/stream_pi/server/window/settings/PluginsSettings.java' +++ b/src/main/java/com/stream_pi/server/window/settings/PluginsSettings.java @@ -5,9 +5,8 @@ import com.stream_pi.server.uipropertybo import com.stream_pi.action_api.actionproperty.property.ControlType; import com.stream_pi.action_api.actionproperty.property.Property; import com.stream_pi.action_api.actionproperty.property.Type; -import com.stream_pi.action_api.externalplugin.NormalAction; import com.stream_pi.server.action.ExternalPlugins; -import com.stream_pi.server.connection.ServerListener; +import com.stream_pi.server.controller.ServerListener; import com.stream_pi.server.window.ExceptionAndAlertHandler; import com.stream_pi.util.exception.MinorException; import com.stream_pi.util.uihelper.SpaceFiller; --- 'a/src/main/java/com/stream_pi/server/window/settings/SettingsBase.java' +++ b/src/main/java/com/stream_pi/server/window/settings/SettingsBase.java @@ -1,6 +1,6 @@ package com.stream_pi.server.window.settings; -import com.stream_pi.server.connection.ServerListener; +import com.stream_pi.server.controller.ServerListener; import com.stream_pi.server.window.ExceptionAndAlertHandler; import com.stream_pi.server.window.settings.About.About; import javafx.application.HostServices;