diff --git a/src/main/java/envoy/client/Startup.java b/src/main/java/envoy/client/Startup.java index 3e9180c..50ae4af 100644 --- a/src/main/java/envoy/client/Startup.java +++ b/src/main/java/envoy/client/Startup.java @@ -1,26 +1,14 @@ package envoy.client; import java.awt.EventQueue; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.Properties; -import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JFrame; -import javax.swing.JOptionPane; -import javax.swing.SwingUtilities; -import envoy.client.data.*; -import envoy.client.net.Client; -import envoy.client.net.WriteProxy; +import envoy.client.data.Settings; import envoy.client.ui.StatusTrayIcon; import envoy.client.ui.container.ChatWindow; -import envoy.client.ui.container.LoginDialog; import envoy.data.Config; -import envoy.data.Message; -import envoy.data.User.UserStatus; import envoy.exception.EnvoyException; import envoy.util.EnvoyLog; @@ -38,10 +26,9 @@ import envoy.util.EnvoyLog; */ public class Startup { - private static ChatWindow chatWindow; - private static final Logger logger = EnvoyLog.getLogger(Startup.class); + // TODO: Update Javadoc /** * Loads the application by first loading the configuration, then acquiring a * user name and connecting to the server. If the server cannot be reached, @@ -54,86 +41,6 @@ public class Startup { * @since Envoy Client v0.1-alpha */ public static void main(String[] args) { - ClientConfig config = ClientConfig.getInstance(); - SwingUtilities.invokeLater(() -> chatWindow = new ChatWindow()); - - try { - // Load the configuration from client.properties first - Properties properties = new Properties(); - properties.load(Startup.class.getClassLoader().getResourceAsStream("client.properties")); - config.load(properties); - - // Override configuration values with command line arguments - if (args.length > 0) config.load(args); - - // Check if all mandatory configuration values have been initialized - if (!config.isInitialized()) throw new EnvoyException("Configuration is not fully initialized"); - } catch (Exception e) { - JOptionPane.showMessageDialog(null, "Error loading configuration values:\n" + e, "Configuration error", JOptionPane.ERROR_MESSAGE); - e.printStackTrace(); - System.exit(1); - } - - // Setup logger for the envoy package - EnvoyLog.initialize(config); - EnvoyLog.attach("envoy"); - EnvoyLog.setFileLevelBarrier(config.getFileLevelBarrier()); - EnvoyLog.setConsoleLevelBarrier(config.getConsoleLevelBarrier()); - - // Initialize the local database - LocalDB localDB; - if (config.isIgnoreLocalDB()) { - localDB = new TransientLocalDB(); - JOptionPane.showMessageDialog(null, - "Ignoring local database.\nMessages will not be saved!", - "Local database warning", - JOptionPane.WARNING_MESSAGE); - } else try { - localDB = new PersistentLocalDB(new File(config.getHomeDirectory(), config.getLocalDB().getPath())); - } catch (IOException e3) { - logger.log(Level.SEVERE, "Could not initialize local database", e3); - JOptionPane.showMessageDialog(null, "Could not initialize local database!\n" + e3, "Local database error", JOptionPane.ERROR_MESSAGE); - System.exit(1); - return; - } - - // Initialize client and unread message cache - Client client = new Client(); - Cache cache = new Cache<>(); - - // Try to connect to the server - new LoginDialog(client, localDB, cache); - SwingUtilities.invokeLater(() -> chatWindow.setVisible(true)); - - // Set client user in local database - localDB.setUser(client.getSender()); - - // Initialize chats in local database - try { - localDB.initializeUserStorage(); - localDB.loadUserData(); - } catch (FileNotFoundException e) { - // The local database file has not yet been created, probably first login - } catch (Exception e) { - e.printStackTrace(); - JOptionPane.showMessageDialog(null, - "Error while loading local database: " + e + "\nChats will not be stored locally.", - "Local DB error", - JOptionPane.WARNING_MESSAGE); - } - - // Initialize write proxy - final WriteProxy writeProxy = client.createWriteProxy(localDB); - - if (client.isOnline()) { - - // Save all users to the local database and flush cache - localDB.setUsers(client.getUsers()); - writeProxy.flushCache(); - } else - // Set all contacts to offline mode - localDB.getUsers().values().stream().filter(u -> u != localDB.getUser()).forEach(u -> u.setStatus(UserStatus.OFFLINE)); - // Display ChatWindow and StatusTrayIcon EventQueue.invokeLater(() -> { try { @@ -160,18 +67,5 @@ public class Startup { } }); - // Save Settings and PersistentLocalDB on shutdown - Runtime.getRuntime().addShutdownHook(new Thread(() -> { - try { - logger.info("Closing connection..."); - client.close(); - - logger.info("Saving local database and settings..."); - localDB.save(); - Settings.getInstance().save(); - } catch (Exception e) { - logger.log(Level.SEVERE, "Unable to save local files", e); - } - })); } } diff --git a/src/main/java/envoy/client/ui/ChatScene.fxml b/src/main/java/envoy/client/ui/ChatScene.fxml index f98aab5..bbf5504 100644 --- a/src/main/java/envoy/client/ui/ChatScene.fxml +++ b/src/main/java/envoy/client/ui/ChatScene.fxml @@ -3,6 +3,7 @@ + @@ -18,10 +19,11 @@ - +