diff --git a/src/holdfast/samobot/ControlFrame.java b/src/holdfast/samobot/ControlFrame.java index ef8545a..dba6cd2 100644 --- a/src/holdfast/samobot/ControlFrame.java +++ b/src/holdfast/samobot/ControlFrame.java @@ -11,17 +11,51 @@ import javax.swing.*; * @author aNNiMON */ public final class ControlFrame extends JFrame { - + private static final String TITLE = "Лена-бот"; public static void main(String[] args) throws Exception { - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - EventQueue.invokeLater(() -> new ControlFrame().setVisible(true)); + boolean noGUI = false; + for (int i = 0; i < args.length; i++) { + switch (args[i]) { + case "-nogui": + case "-cli": + noGUI = true; + break; + case "-prefix": + if (i + 1 >= args.length) break; + i++; + Config.ANSWER_PREFIX = args[i]; + break; + case "-name": + case "-names": + if (i + 1 >= args.length) break; + i++; + Config.BOT_NAMES = args[i]; + break; + case "-token": + if (i + 1 >= args.length) break; + i++; + Config.access_token = args[i]; + break; + case "-gettoken": + + return; + } + } + + if (noGUI) { + StatisticsProcessor.init(); + new Thread(new MainThread(true)).start(); + } else { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + EventQueue.invokeLater(() -> new ControlFrame().setVisible(true)); + } } - + public ControlFrame() { super(TITLE); - + final JMenuBar menu = new JMenuBar(); final JMenu botMenu = new JMenu("Бот"); final JMenuItem launchMenuItem = new JMenuItem("Запустить"); @@ -34,17 +68,17 @@ public final class ControlFrame extends JFrame { helpMenu.add(commandsMenuItem); menu.add(helpMenu); setJMenuBar(menu); - + setLocationByPlatform(true); setDefaultCloseOperation(EXIT_ON_CLOSE); setPreferredSize(new Dimension(450, 320)); - + final JTabbedPane tabbedPane = new JTabbedPane(); final JPanel settingsPanel = new JPanel(); settingsPanel.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4)); settingsPanel.setLayout(new BoxLayout(settingsPanel, BoxLayout.PAGE_AXIS)); final JTextField accessTokenField = createTextFieldLine(settingsPanel, - "Access token:", String.valueOf(Config.access_token)); + "Access token:", Config.access_token); final JTextField botNamesTokenField = createTextFieldLine(settingsPanel, "Обращение:", String.valueOf(Config.BOT_NAMES)); final JTextField answerPrefixField = createTextFieldLine(settingsPanel, @@ -71,16 +105,16 @@ public final class ControlFrame extends JFrame { final JTextPane queryLog = new JTextPane(); queryLog.setFont(chatLog.getFont()); tabbedPane.addTab("Лог запросов", new JScrollPane(queryLog)); - + final JTextPane errorsLog = new JTextPane(); errorsLog.setFont(new Font("Monospaced", Font.PLAIN, 10)); tabbedPane.addTab("Лог ошибок", new JScrollPane(errorsLog)); add(tabbedPane); pack(); - + Log.init(chatLog, queryLog, errorsLog); - + // Actions launchMenuItem.addActionListener((e) -> { if (!MainThread.run) { @@ -104,7 +138,7 @@ public final class ControlFrame extends JFrame { Log.error(ex); } }); - + savePreferencesButton.addActionListener((e) -> { Config.access_token = accessTokenField.getText(); Config.BOT_NAMES = botNamesTokenField.getText(); @@ -119,7 +153,7 @@ public final class ControlFrame extends JFrame { }).start(); }); } - + private static JTextField createTextFieldLine(JPanel panel, String label, String initialText) { panel.add(new JLabel(label)); final JTextField textField = new JTextField(initialText); @@ -127,5 +161,5 @@ public final class ControlFrame extends JFrame { panel.add(textField); return textField; } - + } diff --git a/src/holdfast/samobot/Log.java b/src/holdfast/samobot/Log.java index b744c1a..7505d5d 100644 --- a/src/holdfast/samobot/Log.java +++ b/src/holdfast/samobot/Log.java @@ -77,6 +77,7 @@ public final class Log { } public static void insertTo(StyledDocument doc, String text, String style) { + if (doc == null) return; try { doc.insertString(doc.getLength(), text, doc.getStyle(style)); } catch (BadLocationException ex) { }