From ae9c652761a2c211aa941cfcaea2534170a69753 Mon Sep 17 00:00:00 2001 From: Thastertyn Date: Tue, 28 Mar 2023 15:45:33 +0200 Subject: [PATCH] Renamed a bunch of stuff and hopefully made login a bit more easy to understand --- src/main/java/xyz/thastertyn/App.java | 2 +- .../ContentDisplay/Content/JecnaContent.java | 17 ++ .../ContentDisplay/Content/Jidelna.java | 5 + .../Content/Rozvrh.java | 17 +- .../ContentDisplay/Content/Sdeleni.java | 90 +++++++++ .../Content/Znamky.java | 20 +- .../CredentialsInput.java} | 41 +--- .../ContentDisplay/LoginController.java | 190 ++++++++++++++++++ .../MainWindow.java | 13 +- .../WindowSwitchListener.java | 15 +- .../java/xyz/thastertyn/Jecna/Jidelna.java | 5 - .../{Jecna => JecnaParse}/Dochazka.java | 2 +- .../{Jecna => JecnaParse}/Downloader.java | 2 +- .../xyz/thastertyn/JecnaParse/Jidelna.java | 5 + .../{Jecna => JecnaParse}/Login.java | 53 +---- .../{Jecna => JecnaParse}/Rozvrh.java | 2 +- .../xyz/thastertyn/JecnaParse/Sdeleni.java | 48 +++++ .../{Jecna => JecnaParse}/Znamky.java | 34 +++- .../Window/Content/JecnaContent.java | 39 ---- .../thastertyn/Window/Content/Jidelna.java | 5 - target/classes/xyz/thastertyn/App.class | Bin 678 -> 694 bytes .../ContentDisplay/Content/JecnaContent.class | Bin 0 -> 611 bytes .../ContentDisplay/Content/Jidelna.class | Bin 0 -> 322 bytes .../ContentDisplay/Content/Rozvrh.class | Bin 0 -> 3343 bytes .../ContentDisplay/Content/Sdeleni.class | Bin 0 -> 3352 bytes .../Content/Znamky.class | Bin 5275 -> 5757 bytes .../ContentDisplay/CredentialsInput.class | Bin 0 -> 5744 bytes .../ContentDisplay/LoginController.class | Bin 0 -> 5096 bytes .../MainWindow.class | Bin 4078 -> 4165 bytes .../ContentDisplay/WindowSwitchListener.class | Bin 0 -> 6046 bytes .../xyz/thastertyn/Jecna/Jidelna.class | Bin 288 -> 0 bytes .../classes/xyz/thastertyn/Jecna/Login.class | Bin 4699 -> 0 bytes .../classes/xyz/thastertyn/Jecna/Znamky.class | Bin 6198 -> 0 bytes .../{Jecna => JecnaParse}/Dochazka.class | Bin 1287 -> 1297 bytes .../{Jecna => JecnaParse}/Downloader.class | Bin 745 -> 755 bytes .../xyz/thastertyn/JecnaParse/Jidelna.class | Bin 0 -> 298 bytes .../xyz/thastertyn/JecnaParse/Login.class | Bin 0 -> 2900 bytes .../{Jecna => JecnaParse}/Rozvrh.class | Bin 3670 -> 3685 bytes .../xyz/thastertyn/JecnaParse/Sdeleni.class | Bin 0 -> 2338 bytes .../xyz/thastertyn/JecnaParse/Znamky.class | Bin 0 -> 6498 bytes .../Window/Content/JecnaContent.class | Bin 912 -> 0 bytes .../thastertyn/Window/Content/Jidelna.class | Bin 306 -> 0 bytes .../thastertyn/Window/Content/Rozvrh.class | Bin 2865 -> 0 bytes .../classes/xyz/thastertyn/Window/Login.class | Bin 6428 -> 0 bytes .../Window/WindowSwitchListener.class | Bin 5932 -> 0 bytes 45 files changed, 446 insertions(+), 159 deletions(-) create mode 100644 src/main/java/xyz/thastertyn/ContentDisplay/Content/JecnaContent.java create mode 100644 src/main/java/xyz/thastertyn/ContentDisplay/Content/Jidelna.java rename src/main/java/xyz/thastertyn/{Window => ContentDisplay}/Content/Rozvrh.java (74%) create mode 100644 src/main/java/xyz/thastertyn/ContentDisplay/Content/Sdeleni.java rename src/main/java/xyz/thastertyn/{Window => ContentDisplay}/Content/Znamky.java (86%) rename src/main/java/xyz/thastertyn/{Window/Login.java => ContentDisplay/CredentialsInput.java} (74%) create mode 100644 src/main/java/xyz/thastertyn/ContentDisplay/LoginController.java rename src/main/java/xyz/thastertyn/{Window => ContentDisplay}/MainWindow.java (86%) rename src/main/java/xyz/thastertyn/{Window => ContentDisplay}/WindowSwitchListener.java (86%) delete mode 100644 src/main/java/xyz/thastertyn/Jecna/Jidelna.java rename src/main/java/xyz/thastertyn/{Jecna => JecnaParse}/Dochazka.java (94%) rename src/main/java/xyz/thastertyn/{Jecna => JecnaParse}/Downloader.java (89%) create mode 100644 src/main/java/xyz/thastertyn/JecnaParse/Jidelna.java rename src/main/java/xyz/thastertyn/{Jecna => JecnaParse}/Login.java (75%) rename src/main/java/xyz/thastertyn/{Jecna => JecnaParse}/Rozvrh.java (98%) create mode 100644 src/main/java/xyz/thastertyn/JecnaParse/Sdeleni.java rename src/main/java/xyz/thastertyn/{Jecna => JecnaParse}/Znamky.java (80%) delete mode 100644 src/main/java/xyz/thastertyn/Window/Content/JecnaContent.java delete mode 100644 src/main/java/xyz/thastertyn/Window/Content/Jidelna.java create mode 100644 target/classes/xyz/thastertyn/ContentDisplay/Content/JecnaContent.class create mode 100644 target/classes/xyz/thastertyn/ContentDisplay/Content/Jidelna.class create mode 100644 target/classes/xyz/thastertyn/ContentDisplay/Content/Rozvrh.class create mode 100644 target/classes/xyz/thastertyn/ContentDisplay/Content/Sdeleni.class rename target/classes/xyz/thastertyn/{Window => ContentDisplay}/Content/Znamky.class (73%) create mode 100644 target/classes/xyz/thastertyn/ContentDisplay/CredentialsInput.class create mode 100644 target/classes/xyz/thastertyn/ContentDisplay/LoginController.class rename target/classes/xyz/thastertyn/{Window => ContentDisplay}/MainWindow.class (55%) create mode 100644 target/classes/xyz/thastertyn/ContentDisplay/WindowSwitchListener.class delete mode 100644 target/classes/xyz/thastertyn/Jecna/Jidelna.class delete mode 100644 target/classes/xyz/thastertyn/Jecna/Login.class delete mode 100644 target/classes/xyz/thastertyn/Jecna/Znamky.class rename target/classes/xyz/thastertyn/{Jecna => JecnaParse}/Dochazka.class (65%) rename target/classes/xyz/thastertyn/{Jecna => JecnaParse}/Downloader.class (64%) create mode 100644 target/classes/xyz/thastertyn/JecnaParse/Jidelna.class create mode 100644 target/classes/xyz/thastertyn/JecnaParse/Login.class rename target/classes/xyz/thastertyn/{Jecna => JecnaParse}/Rozvrh.class (89%) create mode 100644 target/classes/xyz/thastertyn/JecnaParse/Sdeleni.class create mode 100644 target/classes/xyz/thastertyn/JecnaParse/Znamky.class delete mode 100644 target/classes/xyz/thastertyn/Window/Content/JecnaContent.class delete mode 100644 target/classes/xyz/thastertyn/Window/Content/Jidelna.class delete mode 100644 target/classes/xyz/thastertyn/Window/Content/Rozvrh.class delete mode 100644 target/classes/xyz/thastertyn/Window/Login.class delete mode 100644 target/classes/xyz/thastertyn/Window/WindowSwitchListener.class diff --git a/src/main/java/xyz/thastertyn/App.java b/src/main/java/xyz/thastertyn/App.java index 29eec7c..3dd77f6 100644 --- a/src/main/java/xyz/thastertyn/App.java +++ b/src/main/java/xyz/thastertyn/App.java @@ -1,6 +1,6 @@ package xyz.thastertyn; -import xyz.thastertyn.Window.MainWindow; +import xyz.thastertyn.ContentDisplay.MainWindow; /** * Hello world! diff --git a/src/main/java/xyz/thastertyn/ContentDisplay/Content/JecnaContent.java b/src/main/java/xyz/thastertyn/ContentDisplay/Content/JecnaContent.java new file mode 100644 index 0000000..b650424 --- /dev/null +++ b/src/main/java/xyz/thastertyn/ContentDisplay/Content/JecnaContent.java @@ -0,0 +1,17 @@ +package xyz.thastertyn.ContentDisplay.Content; + +import com.googlecode.lanterna.gui2.Panel; +import com.googlecode.lanterna.gui2.WindowBasedTextGUI; + +/** + * Wrapper to include all classes that deal with content in some way + */ +public abstract class JecnaContent { + + public abstract Panel getPanel(); + public abstract void download(String s); + public abstract boolean hasStarted(); + public abstract String getLabel(); + public abstract void specify(int y, int hy); + public abstract void getOptions(WindowBasedTextGUI textGUI); +} diff --git a/src/main/java/xyz/thastertyn/ContentDisplay/Content/Jidelna.java b/src/main/java/xyz/thastertyn/ContentDisplay/Content/Jidelna.java new file mode 100644 index 0000000..7368bb9 --- /dev/null +++ b/src/main/java/xyz/thastertyn/ContentDisplay/Content/Jidelna.java @@ -0,0 +1,5 @@ +package xyz.thastertyn.ContentDisplay.Content; + +public class Jidelna { + +} diff --git a/src/main/java/xyz/thastertyn/Window/Content/Rozvrh.java b/src/main/java/xyz/thastertyn/ContentDisplay/Content/Rozvrh.java similarity index 74% rename from src/main/java/xyz/thastertyn/Window/Content/Rozvrh.java rename to src/main/java/xyz/thastertyn/ContentDisplay/Content/Rozvrh.java index d530078..1419745 100644 --- a/src/main/java/xyz/thastertyn/Window/Content/Rozvrh.java +++ b/src/main/java/xyz/thastertyn/ContentDisplay/Content/Rozvrh.java @@ -1,10 +1,11 @@ -package xyz.thastertyn.Window.Content; +package xyz.thastertyn.ContentDisplay.Content; import java.io.IOException; import java.net.UnknownHostException; import com.googlecode.lanterna.gui2.Label; import com.googlecode.lanterna.gui2.Panel; +import com.googlecode.lanterna.gui2.WindowBasedTextGUI; import com.googlecode.lanterna.gui2.table.Table; public class Rozvrh extends JecnaContent { @@ -13,7 +14,7 @@ public class Rozvrh extends JecnaContent { private boolean hasStarted = false; - private xyz.thastertyn.Jecna.Rozvrh rozvrh = new xyz.thastertyn.Jecna.Rozvrh(); + private xyz.thastertyn.JecnaParse.Rozvrh rozvrh = new xyz.thastertyn.JecnaParse.Rozvrh(); private String[] labels = {"Den", "7:30-8:15", "8:25-9:10", "9:20-10:05", "10:20-11:05", "11:15-12:00", "12:10-12:55", "13:05-13:50", "14:00-14:45", "14:55-15:40", "15:50-16:35"}; //private String[] labels = {"Den", "1.", "2.", "3.", "4.", "5.", "6.", "7.", "8.", "9.", "10."}; @@ -70,4 +71,16 @@ public class Rozvrh extends JecnaContent { { return "Rozvrh"; } + + @Override + public void specify(int y, int hy) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'specify'"); + } + + @Override + public void getOptions(WindowBasedTextGUI textGUI) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'getOptions'"); + } } diff --git a/src/main/java/xyz/thastertyn/ContentDisplay/Content/Sdeleni.java b/src/main/java/xyz/thastertyn/ContentDisplay/Content/Sdeleni.java new file mode 100644 index 0000000..4e06603 --- /dev/null +++ b/src/main/java/xyz/thastertyn/ContentDisplay/Content/Sdeleni.java @@ -0,0 +1,90 @@ +package xyz.thastertyn.ContentDisplay.Content; + + +import java.io.IOException; +import java.net.UnknownHostException; +import java.util.ArrayList; + +import com.googlecode.lanterna.gui2.GridLayout; +import com.googlecode.lanterna.gui2.Label; +import com.googlecode.lanterna.gui2.Panel; +import com.googlecode.lanterna.gui2.WindowBasedTextGUI; + +import xyz.thastertyn.Tuple.Pair; + +public class Sdeleni extends JecnaContent { + + private Panel sdeleniPanel = new Panel(); + + private boolean hasStarted = false; + + private xyz.thastertyn.JecnaParse.Sdeleni sdeleni = new xyz.thastertyn.JecnaParse.Sdeleni(); + + @Override + public void download(String JsessionId) + { + if(!hasStarted) + { + try{ + + sdeleniPanel.setLayoutManager(new GridLayout(1) + .setLeftMarginSize(1) + .setRightMarginSize(1)); + + sdeleni.downloadSdeleni(JsessionId); + + ArrayList> sdeleniList = sdeleni.getSdeleni(); + + for(Pair p : sdeleniList) + { + String label = ""; + + if(p.getValue1()) + { + label += "✅"; + }else{ + label += "❌"; + } + + label += " " + p.getValue0(); + + sdeleniPanel.addComponent(new Label(label)); + } + hasStarted = true; + }catch(UnknownHostException e) + { + + }catch(IOException e) + { + + } + } + } + + @Override + public String getLabel() { + return "Sdeleni"; + } + + @Override + public Panel getPanel() { + return sdeleniPanel; + } + + @Override + public boolean hasStarted() { + return hasStarted; + } + + @Override + public void specify(int y, int hy) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'specify'"); + } + + @Override + public void getOptions(WindowBasedTextGUI textGUI) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'getOptions'"); + } +} diff --git a/src/main/java/xyz/thastertyn/Window/Content/Znamky.java b/src/main/java/xyz/thastertyn/ContentDisplay/Content/Znamky.java similarity index 86% rename from src/main/java/xyz/thastertyn/Window/Content/Znamky.java rename to src/main/java/xyz/thastertyn/ContentDisplay/Content/Znamky.java index 9c8ee5c..25ab6ea 100644 --- a/src/main/java/xyz/thastertyn/Window/Content/Znamky.java +++ b/src/main/java/xyz/thastertyn/ContentDisplay/Content/Znamky.java @@ -1,22 +1,24 @@ -package xyz.thastertyn.Window.Content; +package xyz.thastertyn.ContentDisplay.Content; import java.io.IOException; import java.util.ArrayList; -import com.googlecode.lanterna.SGR; import com.googlecode.lanterna.TextColor; import com.googlecode.lanterna.graphics.SimpleTheme; import com.googlecode.lanterna.gui2.Direction; import com.googlecode.lanterna.gui2.Label; import com.googlecode.lanterna.gui2.LinearLayout; import com.googlecode.lanterna.gui2.Panel; +import com.googlecode.lanterna.gui2.WindowBasedTextGUI; +import com.googlecode.lanterna.gui2.dialogs.ActionListDialogBuilder; + import xyz.thastertyn.Tuple.Pair; public class Znamky extends JecnaContent { private Panel znamkyPanel = new Panel().setLayoutManager(new LinearLayout(Direction.HORIZONTAL)); - private xyz.thastertyn.Jecna.Znamky znamky = new xyz.thastertyn.Jecna.Znamky(); + private xyz.thastertyn.JecnaParse.Znamky znamky = new xyz.thastertyn.JecnaParse.Znamky(); private boolean hasStarted = false; @@ -130,4 +132,16 @@ public class Znamky extends JecnaContent { { return "Znamky"; } + + @Override + public void specify(int y, int hy) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'specify'"); + } + + @Override + public void getOptions(WindowBasedTextGUI textGUI) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'getOptions'"); + } } diff --git a/src/main/java/xyz/thastertyn/Window/Login.java b/src/main/java/xyz/thastertyn/ContentDisplay/CredentialsInput.java similarity index 74% rename from src/main/java/xyz/thastertyn/Window/Login.java rename to src/main/java/xyz/thastertyn/ContentDisplay/CredentialsInput.java index ed3dd78..7793052 100644 --- a/src/main/java/xyz/thastertyn/Window/Login.java +++ b/src/main/java/xyz/thastertyn/ContentDisplay/CredentialsInput.java @@ -1,11 +1,7 @@ -package xyz.thastertyn.Window; +package xyz.thastertyn.ContentDisplay; -import java.io.IOException; -import java.net.UnknownHostException; import java.util.Arrays; -import javax.security.auth.login.CredentialException; - import com.googlecode.lanterna.TerminalSize; import com.googlecode.lanterna.gui2.Button; import com.googlecode.lanterna.gui2.EmptySpace; @@ -21,16 +17,18 @@ import com.googlecode.lanterna.gui2.dialogs.DialogWindow; import com.googlecode.lanterna.gui2.dialogs.MessageDialog; import com.googlecode.lanterna.gui2.dialogs.MessageDialogButton; -public class Login extends DialogWindow { +import xyz.thastertyn.Tuple.Pair; + +public class CredentialsInput extends DialogWindow { private TextBox username; private TextBox password; private String user; private String pass; - private xyz.thastertyn.Jecna.Login login = new xyz.thastertyn.Jecna.Login(); + //private xyz.thastertyn.JecnaParse.Login login = new xyz.thastertyn.JecnaParse.Login(); - Login() + CredentialsInput() { super("Login"); this.user = null; @@ -126,39 +124,16 @@ public class Login extends DialogWindow { return; } - try - { - login.loginJecna(user, pass); - } catch (UnknownHostException e) { - MessageDialog.showMessageDialog(getTextGUI(), "No Internet connection", - "There seems to be no internet connection, reverting to cached data", MessageDialogButton.OK); - return; - } catch (CredentialException e) - { - MessageDialog.showMessageDialog(getTextGUI(), "Incorrect username or password", - "The username or password you entered is incorrect", MessageDialogButton.OK); - return; - } catch (IOException e) - { - MessageDialog.showMessageDialog(getTextGUI(), "There was an error", "Maybe try again and it will go away", - MessageDialogButton.OK); - return; - } - close(); } - public String getJessionId() { - return login.getJSESSIONID(); - } - public void onCancel() { close(); } @Override - public String[] showDialog(WindowBasedTextGUI textGUI) { + public Pair showDialog(WindowBasedTextGUI textGUI) { super.showDialog(textGUI); - return new String[] { user, pass }; + return new Pair(user, pass); } } diff --git a/src/main/java/xyz/thastertyn/ContentDisplay/LoginController.java b/src/main/java/xyz/thastertyn/ContentDisplay/LoginController.java new file mode 100644 index 0000000..35f7a6c --- /dev/null +++ b/src/main/java/xyz/thastertyn/ContentDisplay/LoginController.java @@ -0,0 +1,190 @@ +package xyz.thastertyn.ContentDisplay; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.net.UnknownHostException; + +import javax.security.auth.login.CredentialException; + +import com.googlecode.lanterna.gui2.WindowBasedTextGUI; +import com.googlecode.lanterna.gui2.dialogs.MessageDialog; +import com.googlecode.lanterna.gui2.dialogs.MessageDialogButton; + +import xyz.thastertyn.Tuple.Pair; + +public class LoginController { + + private xyz.thastertyn.JecnaParse.Login login = new xyz.thastertyn.JecnaParse.Login(); + private xyz.thastertyn.ContentDisplay.CredentialsInput dialog = new CredentialsInput(); + + private WindowBasedTextGUI textGUI = null; + + public LoginController(WindowBasedTextGUI textGUI) + { + this.textGUI = textGUI; + } + + public void login() + { + if(checkForCredentials()) // Credentials exist + if(loginUsingCredentials()) // They are accessible and can read them + return; + + + try + { + Pair data = dialog.showDialog(textGUI); // Failed to get credentials to log in, get them from user + login.loginJecna(data.getValue0(), data.getValue1()); + } catch (UnknownHostException e) { + MessageDialog.showMessageDialog(textGUI, "No Internet connection", + "There seems to be no internet connection, reverting to cached data", + MessageDialogButton.OK); + return; + } catch (CredentialException e) + { + MessageDialog.showMessageDialog(textGUI, "Incorrect username or password", + "The username or password you entered is incorrect", + MessageDialogButton.OK); + return; + } catch (IOException e) + { + MessageDialog.showMessageDialog(textGUI, "There was an error", + "Maybe try again and it will go away", + MessageDialogButton.OK); + return; + } + + } + + /** + * Zkontroluje zda jiz neexistuji ulozene udaje na systemu + * @return
    + *
  • {@code true} soubor existuje a neni prazdny
  • + *
  • {@code false} neexistuje, nebo je prazdny
  • + *
+ */ + private boolean checkForCredentials() + { + return false; + //File credentials = null; + + //if(System.getProperty("os.name").equals("Linux")) + //{ + // credentials = new File("~/.local/share/jecnak/credentials.json"); + + //}else if(System.getProperty("os.name").contains("Windows")) + //{ + // credentials = new File(System.getenv("APPDATA\\jecnak\\")); + //} + + //if(!credentials.exists() || credentials.length() == 0) + //{ + // return false; + //} + //return true; + } + + public boolean saveCredentials(String user, String pass) + { + File credentials; + + if(System.getProperty("os.name").equals("Linux")) + { + credentials = new File("~/.local/share/jecnak/credentials.json"); + + }else if(System.getProperty("os.name").contains("Windows")) + { + credentials = new File(System.getenv("APPDATA\\jecnak\\")); + }else{ + return false; + } + + try { + BufferedWriter writer = new BufferedWriter(new FileWriter(credentials)); + writer.append("username=" + user); + writer.append("password=" + pass); + + writer.close(); + } catch (IOException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + private boolean loginUsingCredentials() + { + File credentials; + + if(System.getProperty("os.name").equals("Linux")) + { + credentials = new File("~/.local/share/jecnak/credentials.json"); + + }else if(System.getProperty("os.name").contains("Windows")) + { + credentials = new File(System.getenv("APPDATA\\jecnak\\")); + }else{ + return false; + } + + if(!credentials.exists() || credentials.length() == 0) + { + return false; + } + + String user = ""; + String pass = ""; + + try { + BufferedReader reader = new BufferedReader(new FileReader(credentials)); + + String line = ""; + while((line = reader.readLine()) != null) + { + if(line.matches("^[a-z]\\=.*$")) + { + String key = line.split("=")[0]; + String value = line.split("=")[1]; + + switch(key) + { + case "username": + user = value; + break; + case "password": + pass = value; + break; + default: + continue; + } + }else{ + continue; + } + } + + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + return false; + } + + try { + login.loginJecna(user, pass); + } catch (CredentialException | IOException e) { + e.printStackTrace(); + return false; + } + + return true; + } + + public String getJSessesionId() + { + return login.getJSESSIONID(); + } +} diff --git a/src/main/java/xyz/thastertyn/Window/MainWindow.java b/src/main/java/xyz/thastertyn/ContentDisplay/MainWindow.java similarity index 86% rename from src/main/java/xyz/thastertyn/Window/MainWindow.java rename to src/main/java/xyz/thastertyn/ContentDisplay/MainWindow.java index 25347be..0fc95cc 100644 --- a/src/main/java/xyz/thastertyn/Window/MainWindow.java +++ b/src/main/java/xyz/thastertyn/ContentDisplay/MainWindow.java @@ -1,4 +1,4 @@ -package xyz.thastertyn.Window; +package xyz.thastertyn.ContentDisplay; import java.io.IOException; import java.util.Arrays; @@ -54,19 +54,20 @@ public class MainWindow { Panel tabs = new Panel() .setLayoutManager(new LinearLayout(Direction.HORIZONTAL)) .addComponent(new Label("Rozvrh").withBorder(Borders.singleLine())) - .addComponent(new Label("Znamky").withBorder(Borders.singleLine())); + .addComponent(new Label("Znamky").withBorder(Borders.singleLine())) + .addComponent(new Label("Sdeleni R.").withBorder(Borders.singleLine())); mainPanel.addComponent(tabs); - String title = "Jecnak"; + String title = "Jecnak"; Panel content = new Panel(); mainPanel.addComponent(content.withBorder(Borders.singleLine(title))); - Login login = new Login(); - login.showDialog(textGUI); + LoginController controller = new LoginController(textGUI); + controller.login(); - window.addWindowListener(new WindowSwitchListener(content, login.getJessionId(), tabs, title)); + window.addWindowListener(new WindowSwitchListener(content, controller.getJSessesionId(), tabs, title)); textGUI.addWindowAndWait(window); diff --git a/src/main/java/xyz/thastertyn/Window/WindowSwitchListener.java b/src/main/java/xyz/thastertyn/ContentDisplay/WindowSwitchListener.java similarity index 86% rename from src/main/java/xyz/thastertyn/Window/WindowSwitchListener.java rename to src/main/java/xyz/thastertyn/ContentDisplay/WindowSwitchListener.java index 8b618a4..d4873a9 100644 --- a/src/main/java/xyz/thastertyn/Window/WindowSwitchListener.java +++ b/src/main/java/xyz/thastertyn/ContentDisplay/WindowSwitchListener.java @@ -1,4 +1,4 @@ -package xyz.thastertyn.Window; +package xyz.thastertyn.ContentDisplay; import java.util.concurrent.atomic.AtomicBoolean; @@ -11,20 +11,21 @@ import com.googlecode.lanterna.gui2.WindowListener; import com.googlecode.lanterna.input.KeyStroke; import com.googlecode.lanterna.input.KeyType; -import xyz.thastertyn.Window.Content.JecnaContent; -import xyz.thastertyn.Window.Content.Rozvrh; -import xyz.thastertyn.Window.Content.Znamky; +import xyz.thastertyn.ContentDisplay.Content.JecnaContent; +import xyz.thastertyn.ContentDisplay.Content.Rozvrh; +import xyz.thastertyn.ContentDisplay.Content.Sdeleni; +import xyz.thastertyn.ContentDisplay.Content.Znamky; public class WindowSwitchListener implements WindowListener { WindowBasedTextGUI gui; - private JecnaContent[] contents = {new Rozvrh(), new Znamky()}; + private JecnaContent[] contents = {new Rozvrh(), new Znamky(), new Sdeleni()}; private String JsessionId; - Panel content; - Panel tabs; + private Panel content; + private Panel tabs; String title; diff --git a/src/main/java/xyz/thastertyn/Jecna/Jidelna.java b/src/main/java/xyz/thastertyn/Jecna/Jidelna.java deleted file mode 100644 index 48b4871..0000000 --- a/src/main/java/xyz/thastertyn/Jecna/Jidelna.java +++ /dev/null @@ -1,5 +0,0 @@ -package xyz.thastertyn.Jecna; - -public class Jidelna { - -} diff --git a/src/main/java/xyz/thastertyn/Jecna/Dochazka.java b/src/main/java/xyz/thastertyn/JecnaParse/Dochazka.java similarity index 94% rename from src/main/java/xyz/thastertyn/Jecna/Dochazka.java rename to src/main/java/xyz/thastertyn/JecnaParse/Dochazka.java index ab34da4..bd053e4 100644 --- a/src/main/java/xyz/thastertyn/Jecna/Dochazka.java +++ b/src/main/java/xyz/thastertyn/JecnaParse/Dochazka.java @@ -1,4 +1,4 @@ -package xyz.thastertyn.Jecna; +package xyz.thastertyn.JecnaParse; import java.io.IOException; import java.util.HashMap; diff --git a/src/main/java/xyz/thastertyn/Jecna/Downloader.java b/src/main/java/xyz/thastertyn/JecnaParse/Downloader.java similarity index 89% rename from src/main/java/xyz/thastertyn/Jecna/Downloader.java rename to src/main/java/xyz/thastertyn/JecnaParse/Downloader.java index dc3f1ae..87d8817 100644 --- a/src/main/java/xyz/thastertyn/Jecna/Downloader.java +++ b/src/main/java/xyz/thastertyn/JecnaParse/Downloader.java @@ -1,4 +1,4 @@ -package xyz.thastertyn.Jecna; +package xyz.thastertyn.JecnaParse; import org.jsoup.Connection; import org.jsoup.Jsoup; diff --git a/src/main/java/xyz/thastertyn/JecnaParse/Jidelna.java b/src/main/java/xyz/thastertyn/JecnaParse/Jidelna.java new file mode 100644 index 0000000..2600d8d --- /dev/null +++ b/src/main/java/xyz/thastertyn/JecnaParse/Jidelna.java @@ -0,0 +1,5 @@ +package xyz.thastertyn.JecnaParse; + +public class Jidelna { + +} diff --git a/src/main/java/xyz/thastertyn/Jecna/Login.java b/src/main/java/xyz/thastertyn/JecnaParse/Login.java similarity index 75% rename from src/main/java/xyz/thastertyn/Jecna/Login.java rename to src/main/java/xyz/thastertyn/JecnaParse/Login.java index 385301e..6f53880 100644 --- a/src/main/java/xyz/thastertyn/Jecna/Login.java +++ b/src/main/java/xyz/thastertyn/JecnaParse/Login.java @@ -1,6 +1,5 @@ -package xyz.thastertyn.Jecna; +package xyz.thastertyn.JecnaParse; -import java.io.File; import java.io.IOException; import java.net.UnknownHostException; @@ -19,51 +18,6 @@ public class Login { private long start; private long lastCheck; - /** - * Zkontroluje zda jiz neexistuji ulozene udaje na systemu - * @return
    - *
  • {@code true} soubor existuje a neni prazdny
  • - *
  • {@code false} neexistuje, nebo jsou prazdne
  • - *
- */ - public boolean checkForCredentials() - { - File credentials = null; - - if(System.getProperty("os.name").equals("Linux")) - { - credentials = new File("~/.local/share/jecnak/credentials.json"); - - }else if(System.getProperty("os.name").contains("Windows")) - { - credentials = new File(System.getenv("APPDATA\\jecnak\\")); - } - - if(!credentials.exists() || credentials.length() == 0) - { - return false; - } - return true; - } - - public void saveCredentials(String user, String pass) - { - File credentials = null; - - if(System.getProperty("os.name").equals("Linux")) - { - credentials = new File("~/.local/share/jecnak/credentials.json"); - - }else if(System.getProperty("os.name").contains("Windows")) - { - credentials = new File(System.getenv("APPDATA\\jecnak\\")); - } - - if(!credentials.exists()) - { - - } - } public String getJSESSIONID() { @@ -94,7 +48,6 @@ public class Login { Jsoup.connect("https://www.spsejecna.cz/user/login") .method(Connection.Method.POST) .header("Content-Type", "application/x-www-form-urlencoded") - //.header("Content-Length", "71") Adds 10 seconds to total request time .header("Origin", "https://www.spsejecna.cz") .header("Connection", "keep-alive") .cookie("JSESSIONID", Jsessionid) @@ -122,7 +75,7 @@ public class Login { lastCheck = start; } - public void loginJidelna() throws UnknownHostException, IOException + /*public void loginJidelna() throws UnknownHostException, IOException { //#region JSESSIONID Connection.Response jidelna = Jsoup.connect("https://objednavky.jidelnasokolska.cz/") @@ -165,5 +118,5 @@ public class Login { .method(Method.POST) .execute(); //#endregion - } + }*/ } diff --git a/src/main/java/xyz/thastertyn/Jecna/Rozvrh.java b/src/main/java/xyz/thastertyn/JecnaParse/Rozvrh.java similarity index 98% rename from src/main/java/xyz/thastertyn/Jecna/Rozvrh.java rename to src/main/java/xyz/thastertyn/JecnaParse/Rozvrh.java index 7f49c21..a5c53f6 100644 --- a/src/main/java/xyz/thastertyn/Jecna/Rozvrh.java +++ b/src/main/java/xyz/thastertyn/JecnaParse/Rozvrh.java @@ -1,4 +1,4 @@ -package xyz.thastertyn.Jecna; +package xyz.thastertyn.JecnaParse; import java.io.IOException; import java.net.UnknownHostException; diff --git a/src/main/java/xyz/thastertyn/JecnaParse/Sdeleni.java b/src/main/java/xyz/thastertyn/JecnaParse/Sdeleni.java new file mode 100644 index 0000000..1d3a0e6 --- /dev/null +++ b/src/main/java/xyz/thastertyn/JecnaParse/Sdeleni.java @@ -0,0 +1,48 @@ +package xyz.thastertyn.JecnaParse; + +import java.io.IOException; +import java.net.UnknownHostException; +import java.util.ArrayList; + +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; + +import xyz.thastertyn.Tuple.Pair; + +public class Sdeleni { + + ArrayList> sdeleniList = new ArrayList<>(); + + public void downloadSdeleni(final String JsessionId) throws UnknownHostException, IOException + { + Document sdeleniDoc = Downloader.download("https://www.spsejecna.cz/user-student/record-list", JsessionId).get(); + + Elements sdeleni = sdeleniDoc.select("ul.list li"); + + for(Element e : sdeleni) + { + boolean isPositive = false; + String label = ""; + + Elements spans = e.select("li").select("a.item").select("span"); + + isPositive = spans.get(0).hasClass("sprite-icon-tick-16"); + label = spans.get(1).text(); + + //if(!label.startsWith(" ")) + //{ + // label = " " + label; + //} + + //label = label.replaceAll("\\s+$", ""); + + sdeleniList.add(new Pair(label, isPositive)); + } + } + + public ArrayList> getSdeleni() + { + return sdeleniList; + } +} diff --git a/src/main/java/xyz/thastertyn/Jecna/Znamky.java b/src/main/java/xyz/thastertyn/JecnaParse/Znamky.java similarity index 80% rename from src/main/java/xyz/thastertyn/Jecna/Znamky.java rename to src/main/java/xyz/thastertyn/JecnaParse/Znamky.java index 3358bc3..1bfcc38 100644 --- a/src/main/java/xyz/thastertyn/Jecna/Znamky.java +++ b/src/main/java/xyz/thastertyn/JecnaParse/Znamky.java @@ -1,4 +1,4 @@ -package xyz.thastertyn.Jecna; +package xyz.thastertyn.JecnaParse; import java.io.IOException; import java.net.UnknownHostException; @@ -18,14 +18,17 @@ public class Znamky { private ArrayList>,Double>>> grades = new ArrayList<>(); - public void addGrade(int index, String subject, int grade, double weight) + // Integer znaci id roku, boolean jestli je jen prvni nebo i druhe pololeti + private ArrayList> options = new ArrayList<>(); + + private void addGrade(int index, String subject, int grade, double weight) { Pair znamka = new Pair<>(grade, weight); grades.get(index).getValue1().getValue0().add(znamka); } - public void addSubject(String subject) + private void addSubject(String subject) { Pair>, Double> p = new Pair<>(new ArrayList>(), 0.0); @@ -61,7 +64,7 @@ public class Znamky { { wasDownloaded = true; //String url = String.format("https://www.spsejecna.cz/score/student?schoolYearId=%d&schoolYearHalfId=%d", schoolYearId, schoolYearHalfId); - Document znamkyDoc = Downloader.download("https://www.spsejecna.cz/score/student?schoolYearId=14&schoolYearHalfId=21", Jsessionid).get(); + Document znamkyDoc = Downloader.download("https://www.spsejecna.cz/score/student", Jsessionid).get(); Elements rows = znamkyDoc.select("table.score").select("tr"); @@ -111,6 +114,23 @@ public class Znamky { grades.get(subj).getValue1().setValue1(getAverage(grades.get(subj).getValue1().getValue0())); subj++; } +/* + Elements roky = znamkyDoc.select("select[name=schoolYearId]"); + Elements pololetiSelect = znamkyDoc.select("select[name=schoolYearHalfId]"); + + for(Element e : roky) + { + boolean jeCelyRok = false; + + if(pololetiSelect.size() == 2) + { + jeCelyRok = true; + } + + int rok = Integer.parseInt(e.attr("value")); + + options.add(new Pair(rok, jeCelyRok)); + }*/ } public ArrayList>,Double>>> getGrades() @@ -118,6 +138,11 @@ public class Znamky { return grades; } + public ArrayList> getOptions() + { + return options; + } + @Override public String toString() { @@ -133,6 +158,5 @@ public class Znamky { }else{ return "Nothing was downloaded"; } - } } \ No newline at end of file diff --git a/src/main/java/xyz/thastertyn/Window/Content/JecnaContent.java b/src/main/java/xyz/thastertyn/Window/Content/JecnaContent.java deleted file mode 100644 index 7994830..0000000 --- a/src/main/java/xyz/thastertyn/Window/Content/JecnaContent.java +++ /dev/null @@ -1,39 +0,0 @@ -package xyz.thastertyn.Window.Content; - -import com.googlecode.lanterna.gui2.Panel; - -/** - * Wrapper to include all classes that deal with content in some way - */ -public class JecnaContent { - - public Panel getPanel() - { - return null; - } - - public void download(String s) - { - - } - - public boolean hasStarted() - { - return false; - } - - public String getLabel() - { - return ""; - } - - public void specify(int y, int hy) - { - - } - - public void getOptions() - { - - } -} diff --git a/src/main/java/xyz/thastertyn/Window/Content/Jidelna.java b/src/main/java/xyz/thastertyn/Window/Content/Jidelna.java deleted file mode 100644 index 62fb593..0000000 --- a/src/main/java/xyz/thastertyn/Window/Content/Jidelna.java +++ /dev/null @@ -1,5 +0,0 @@ -package xyz.thastertyn.Window.Content; - -public class Jidelna { - -} diff --git a/target/classes/xyz/thastertyn/App.class b/target/classes/xyz/thastertyn/App.class index 8fc5f3f79614baaf8f20bb1295a3cec31d6aca30..7c1dfc3fa6d8caf367fbda9abbfbe31cda2e57df 100644 GIT binary patch delta 78 zcmZ3+x{Y;1IHR0KMP-$KNk(FENor9^WuCrseqKpxUWrR)aY0UE<>XvO4|y#g{A$iH G-U0xE0v>Gu delta 62 ycmdnSx{P&0IHQ~eP)ZvgQsNsVr8gAK)$B#x=4gWj9spzw#t_@CW## z#L2dzAP8RO&17aW@6Eh_yuJabVbw#9Vf(TF#O;kptxRlR^L?YO)b>E7-B|R$LVhem zErvM{d4}m*aW8l*bi|wOTNzr0(H*6g-DMc@H!c|R`=%qy7(rK(fs0IILR%a+i(w+(}V}^BqBM8kMkBo_884?@Emvm~u zqn_I4S)J?Ym(W38V`Rq%1%wlDN1nt~hSQkIu!7kP=TOaX R9t#;RVu`vLmdWO@@(IV|nfw3% literal 0 HcmV?d00001 diff --git a/target/classes/xyz/thastertyn/ContentDisplay/Content/Jidelna.class b/target/classes/xyz/thastertyn/ContentDisplay/Content/Jidelna.class new file mode 100644 index 0000000000000000000000000000000000000000..b396fa76adb8a42e286dcb0adb71d1f66d48c73d GIT binary patch literal 322 zcmb7$WopM5jh(VL&&uWtZX7^R2^7a!fH@(bO1ZhYs|q;{U2zccNd)!jd;2Qz2ubc&cT zTIzSLtadNzsa$g93H=-6jK3xHPS0k9cv8)caDcDG+LTbxEa=yXAS{e~D W$uNd|IFih_??mdc5Mdx0VfY71mrP9n literal 0 HcmV?d00001 diff --git a/target/classes/xyz/thastertyn/ContentDisplay/Content/Rozvrh.class b/target/classes/xyz/thastertyn/ContentDisplay/Content/Rozvrh.class new file mode 100644 index 0000000000000000000000000000000000000000..55943eb046a908203496b7d5e5842ae1e32451ce GIT binary patch literal 3343 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 Ug2)A;PT?h9?^uh|BELcI57H9t@c;k- delta 489 zcmZvXO-Phc6o#L3@6)QfXD=Qe`oB4MS}%so$Gqymrch>nNuhahJY*u_D{{<4!#$CF0z@dGfJ->k zlAp_lxAn_nPEcy=9QB;1lQOy~=P?yLx4|W<$Wp^Hb$sV4f2fyA8pY+BbZ}j6b5q8+ zB`KO@k!CTp$a`Al15x=woBX6*{t;6_>Qscgs*o;KL$_+@zKRo9(@}cWEBe)22Gl18 z)o+H>E)R4G30=vEj`2wMP_73V)k(&*$GA?D(zAGaj;H!HlerrOJ0dg2b(&<>(lK*R kMdQ4E5l$kOn#=ZnP^=&D3maBX**?uzzO@#yV0DYoK6`k3FaQ7m diff --git a/target/classes/xyz/thastertyn/ContentDisplay/CredentialsInput.class b/target/classes/xyz/thastertyn/ContentDisplay/CredentialsInput.class new file mode 100644 index 0000000000000000000000000000000000000000..7fcd5d098066753a3dc655e6e617c65711325db0 GIT binary patch literal 5744 zcmbVQdw3Mp76092lS$%GLMV@br2!&jH^}l5F+qfE5)#=YGzp0T6eqhwGGTXS-JJyz zd|H5C;6+A`eGFYC@jGOR4916z|6GVfqpHng=jDp3$aK**{em8dfRS+xm5vghG64} zwUT$Gic7GB=n36!(Gq(EuFTXTjqIJ8d8L$9Dijnd@Chu+s^eD8)FUPEVxEFa1(s$- z-W)f=L2b}V+9g;9zqH8;`lG7Z+a&?3RIJ7tnwp9>8x` z(=cAFRdG4i36zqbdu)qlYJD>@# z*o-FTOFU@`G*$)AuN2T;>7Z^;nx@tp(J90gxLUfL@_RD_G!LyRa}D}fobER@5S^-rH zhsSpWT5}vXjykmzlbN$i#q}}|3Im!M(j#RoR*lk0Ar)a+JZ4CZ_1&z5an|+@=8xRn zt)frvmT|Y;=b|Jt#|?UW^#x3U0{KO*-{>)G%2Jsf~&RY^G*gYeTk%nMpzqMX^_=9@{Nb?_5=9 z0*#w`gDQq(4tW}zgF)%&ZrO3Vi*U0*$+lGEuBnha2UXmPce1H61UjwUzIUtUc|_S9 z94x}Sc<$Cz^RKCp)#2SL?vNtpH?-C(cn^Emx%6{}5O?gTY%)x{7>9AEiud9DEQ@ZD zXkdl(ozp;*8PKpF#9azL#M3z;8%f}sD!v7k#V-`G63m@x9kv$Q)1t*vX;WmGZogt=Nqe}y%3UPSVhHc#)ay*f zBD#O8X2f~rDemC#quI$gg|N@x%2}ANpNa=IFl6%ayozV=eSwAx5gF!x$}bbnBb_J%bgYP)$E zwBl^Rzs9SqpV2hP$)GbRUFJ<3M=U`0FM4$Smdt`Rn z%sWAfb3lu5q_Oqd>4o@3DO73K*HnBK>huEqj(`;GPb$9S!2U=8+g!70>hVB?9YAL* zDjuKr6}*}22IhK`^Neh)3jWDzJS8(K__x4~obTuhY(x z9}%1F2PojMoUBlS! z;#}wAXbujc-6@ump~q#|OQt%R)_BT2qv-D`8yG=EqRQ7O&#^|3oJ3kkQj#3U{`8>- zPQzPM;Cl@7CxCD4E-!G{-sG~C2;^4IQ*Y_!%hHM1r!hxv9m*8+oTn9*7dotO8)vP$3Y+g*ND7-0!Sf^z_v9bPdpl0z1H<^RPr~mz=J@gmeYPB1xL!yPE}};l zqZE~x&kr-pu@q}j#V-*)UckL*N zS`L?&;~uQTy<9&)*b&s=5#E8Gzy>_c=KehD@FKasgnIml9)1~{@KbEWE8KsTSNPY^ zjMs5B{!H24KoEaH6W%2JU%XG}p-mKHtC)^bSom_5U*Fa z6Lu$};x1U?A;iSPxB(xdwbsb^7f11Ne1dOlg^f?*Q_O`UVj3Re%0n%l!Kb+@;5j?+ z8LkSs&kEsY3?5{@2+}tB+<^I<%orIi!{BljS2Krk^nOg^Y8F@b;bPw~9_8<`vJtxU zap}@gy7Z~;V+4Lf`ZJ$)29`ManWQiGVm9{EdqcGT0a|v5R=<%}zlD}O=;$G(p$sWK zzRfi=-#3>~)~%GJtND~z1!KqLImeW+GysQ4a9akef)pzun+!3&OPoABCyNAHC38M! z`>IFqJtn{lJyK1n;0S*3sDmjLa5>*WgB^A_&vvO&oJr4+c^RT~lkC+gA(s$G@-FmM z597yaUef6Fl*32v=QGTtL_fpN`IMZ0L)dTed;Gy!z0Qz(gW(3uBfNzn|JRM>l;dys NJI(qJ2H<~C{(rqKpmqQN literal 0 HcmV?d00001 diff --git a/target/classes/xyz/thastertyn/ContentDisplay/LoginController.class b/target/classes/xyz/thastertyn/ContentDisplay/LoginController.class new file mode 100644 index 0000000000000000000000000000000000000000..b521cd9a26538b60cc42c89740e972e4e3395322 GIT binary patch literal 5096 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 lYM57mLbP8Z1d zEXxTB1Y=RdbTLSN)?Cq%Tot(D-Ld2rBis{<3L51p%TjsLX_XzW!v1~11L33LKu_3= z23ixnh8eB3b4^g0n}1>M)})c>><$`g8#B_IRT|d0!A*f4jU<{P@wgE)cXSB~SFZY> z-^CEObv)b=h}ger+%n|$%C+tdwtG7Fc_5Ftn{AJD9`i(gaUXJ~cy8yJpg`t(3i5PD z!L2FoTF5@g zHq$%|rEmnR(mWkSC^4TXCPf}z^)L40Q+5T5s6a*+ukK&ZEVX=PBXewGo_fBqneR04 zldZzTHsPa5l+Y~7XrVxXw`0$4Kp{(17Gs1Lyi`K7wDC$s7R9uS*St}Z^EC2S)ilKz vV3c=Q6_>^s;|lQ}{5Y}v62*2>nnI=(qlF13mG`QsnJF^$KGsmj2b_NaO;E|4 diff --git a/target/classes/xyz/thastertyn/ContentDisplay/WindowSwitchListener.class b/target/classes/xyz/thastertyn/ContentDisplay/WindowSwitchListener.class new file mode 100644 index 0000000000000000000000000000000000000000..5e06dfcce38dc7d375603442f8e08d2a036e30f9 GIT binary patch literal 6046 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 VxSu1>9&X1w$AeO3ENUU8{|CHv$cX>| literal 0 HcmV?d00001 diff --git a/target/classes/xyz/thastertyn/Jecna/Jidelna.class b/target/classes/xyz/thastertyn/Jecna/Jidelna.class deleted file mode 100644 index b7f18699fdecc733d1084a02b69bea741370bfd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 288 zcmaJ+u};HK3_Pbv10kgqGeTl(8TuABDi$P$Dk=l0yOUb; zxGMh3a7W0Vn@wBEqYaz#W43XKg==UCeFw@Ejw`0B%s~Um%{NZI)QFHNhBkEIOff&y NiE>XB;ao97e-BA#K6d~B diff --git a/target/classes/xyz/thastertyn/Jecna/Login.class b/target/classes/xyz/thastertyn/Jecna/Login.class deleted file mode 100644 index 572fe36a60ac3b1e9dc54413698a52330c270ed3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4699 zcma)9d3+pY8Ga_4WGCsgDFaqQTi6!b=Gu%{3igDOrnVtXLX)<%P{L$)l1z4YW;-*R zqbPC+D7VUC%UQVv6e>*{PPHJ4f*0U{;DIRKis)bb(C7PRlifgCZGXR=Z|1w6?|Gj0 z{oXwP-eXSzI0^rbqC~+l!y`M5px^WZ%L_&vqs2-%rqSy5*-jLt3T6(NgQk%-oj#+z zXTVAX3MyNC%lB>9v6Bk)*1~|!z_Xpcjm=ne9Nr&znAu|~b zb8)PKX?<4E;kj8sm4byeA3S^Q2S2HZkrAFJH(ZJNI3bGTC+{Fx)35*w$&j@pC((VV zc=3?=<+a zu3*yodEsg|t1!sN7TZa>L%u+JqK1!Ru>v*WI)Q0B+d zF;TS9pW}kAZ!hZTP!Ja#!-j7qa-JQG7-lZ$H{@nU;d~QQRBTjmbbkWCJVv3!o5Nc{H6-c5t3g(L0 zQ|)!a1}o@ylN$O!XO*sNUQI>kPPtTm=yHL6Ktl>?V$8_t3YOFycFrM)5=%K6Tx7|# zHB3bV0-Z-gO^J1*QEM{$*c>cVdC8?WIS!BVLi1fGiP6dZqej%4f!pM74#7o?3k+B>^c+`z2N zAYf_>;$0(I@_iGdSAxkmo+?q2blwU-E`U=+Gr(hk3=)qRo84QCbkgLnN`;|OL+j|z0z8Eb=` zPTPJN3myK8yd_GDCpAQ&iq_K_Dxeaemya?9$Ni5mB;kSO)A+{}4V-LU-b7k>5!gv9 z?NFR=718FhcuG3vU}~gsAnfe3 zVfrQ$+K|s41SqsHs*`4o6StC8J=_SKghIifslq%mUr1-oOx}_6{ROlzFzR)(UqSoM$PB-Tz zEKvgTMSg4)>T=+EUgKU9V~S-u6GM3Ik&5v<1@jmK5fK+C5!E(ZB_cHBlYzl!IY+P} z=dZ@M73^2|tgPFQ>2=CJR6Qcc9>L!ka-|t4#Y_g(4Cwr(g`;sKj^Z0@P0Y%#^Z>_| z@LP-0s(<(Zs`cYWF>e=UK8{6O_1gWYZ@m|D!=A=bd}O@mqysovbk>hz=`Lt|tf;tt zH_9RpmOjYUA`nRCOXSCK{duUu@u+4+UCW~KWYp0P4OoXpiEdViAdjwu-%rD8;yayd zOhf6r;%|UO)m8lK1x;8p0X#zJq(W(%8hG2`fVag7e2XA0gnBIL1{M>@5<)$NP?r+w zazb6j-_s?`x^TZdOd$f@PBfxLcXMtDmPzOl3B3X(dFUMUah@vF&frr_Dyw@GRS&aK zBFPF@T3aMn*@Rr{dFm3haI8waXJ7*pEp1RTGc=1bQ$O-8Ju z%K8`eGsDLCUPWu@yY*Y-V)|{>rDM1w0{zbV@Of85_`F-cS2oyve;(f!{h>o(npjVQ zTUJ(GHj1z6d!-AfKaTdT`lI_X`gGj^>^};RW%l8TI-ci=eR!&%>y5M=&`O>*FcjKo z`*zIc`y8B!8f-!wo2l^@+U+cAxRu;)LkGWaUL^uu znK|w!w(@>rEA-PGyo0ZE%?R;4#r?|Zz&BBkZ{i?NB*J3`l=tv%6hRd8qrB-AJj0L) zy&@bbyh5iaFL4c#R$kYiEoOU?Q(EiuM%hrWKPMg2rhlh+wEkQ?)OQEvoG{II3#N%z zmoj_o2Gx0CtN#7{_~Fy~k0z}!VWjshrN6WnuY?}?`Cj}YY`w1kDs22l|83a#9RUbm zy`}$AHpUGqoxZHBp!>y$@w69`rHjbX#nk;0>V6@0zm$%+jEUz8M*EeF+^ZN{SJM&K z&=J?t4cFmp_HAb|*^3*f(si#5=WB7~A8IAPMU)hRq&x`Oksqt$Z@pq03H9i{3 qe+Z;33fdw6kRy6(Hnc3`Y241@ zc5RmyOKC<=Y{S;=dfXD2)UTPX>3$=X))IO`Kx`HW_GI~D3e>jS3vyO66nw87y0*_9_v!Z>RDI0T{lpZ@zOJ-L%{I(IDRyJw$w7ep7sR6H2c$;DA zJ$kmqqpvlc+nUl_R`NG7btN|!T#+=A)=Gi0`i3q6|LSx?52FlKDk`8Vm@H5;fm_0; zMpZckrl?R55~ylV8v6QN-&Q@lQKMRcNP9Z2rMk3iQog%Hztx+ht7naOf;V`yDx@V6 z=g6=KOs{YASnv9Y!o=P-Xqw-p*I{ZrJ+lDbb*S6 zXksjSbb__E)F_uz%3h>mF_sXS}F@+Ul<8&Q$VLx7PG!XvwBtZpqD7krgH`X?`PhwQ?Q+-sK~b} zo3wiSbSoJ@dv{#VSjn_OU=Y2bL~>U$p&Qhu$VXGUA(+YL`gA@BYMbMM-UMQZ@$QLY z_?iTYZLQPN;yXIDj9X@di@Hf>sCJPMfdPSsDQ zV{IG8KFETa<~S9$Ie?gFVuWwWi~Y zzhSk6@J^!Dl3lLJ-gp={;wA;}V)HuQA{Fn(dx#-ZPuYV>Y=S*_RXTjJvs1cMX;SC= z1bkLDjQvv82iOUVs>U%(o)4+`u*^5VncTzvz8?z|+#)coxX9U*t00U)d{o89@Ns%N z-kVG%vO05NR*4(NscDgmZdGv`Zl@m0&dt)MuD5uLn_~y-hg?KS2k|8ZcTHfb%cA1TvN-v-v2RN5dsO5xY&S>Z?wFSD zIwZ`rx>v>7SQEk_8mSdvG>DsItU5yYDs$M(XhxGgvPj~sVI0BN6+BonoH!Cyd_xAI z!b-QN`}OQ<&D2A9h?UBai@vSmVcGhF+_9E2LwJN=agD#hF~H0em~s4sWq`8je%d$F z!!sVu6fK!9H8ZIs{czI7C*&1LnOht(==DriPq2%u$)!?EOHbJ^MH2(9i@d*AaXZ05a=6TUrfRLweyPFN;dAuZt_ciiqRAq7qCX1HI=yGy6 zLGd|OeM?A`aYCuPqK>na2&niMZVw4Xk}fCdc~LIKhsQ}hu5Iq7D3!~~>aMg!1VW;U zL)rQ?k5)!c9Z$G*h2Cf%aS4y%R}7%X^w-e=l{wg%&Sm5J8oTaSIO9x{tn>^iUBEix z@&w-$h>JDkNB+p;KJxpZiY`Ue6^ZCiP zp>>X+F+=Ct=5cJK>T_s{Z_E^jveph13q0>mfX3+|9e7Ro=xA@+`c8nl?1Mler9hC=c@8+-zNqSPoWeGh9%%h>F(qHwAOd}ewfWH{GwulFp zdT2O}2a2U!wG90{Nz2%+wec`8=8^&Iu<_`Fg%sl?ak>+IcEn~dmeNf@N~wZDT99&l zNF&3mjN(+@=@!b^Nedl*8P6=K9q^A5u0bMPL3LRf6`v1`Vpfr)V5UoKED{TRv*B}= z%JoT#Hwh7GCaA!N98FaEUqFyTrrSoJB8z`na7d`+3N9%tFnyv~ ziF|SdcSMyuKGz(IhVnQt2sIk==W+KC0#T*8yfIpy$B4a-R4F`iUmjn{xRNj8eBhw*b}Tpmx* zFZ+U`HW>9kaNEnz7R$mOCbKLA0fJ&OAu?K2$3|HQ=DhsW_}(#mOdFaCnRavpq;`}iAaDy=SKNoyev zpT%7FNkab-RF2XW4)l*GxKY7=1%GFit~p8*U&2BKBp+PG+bC_~zc7h$52N#TkhDTJ z)SQS(!JwT-M=_U60!L9PqNB9*Rmd$z_yo%F0+!RO|KR=#74e^Tql%Hr?I0i#bdV1| zyDG^_4%VAuR|>cx5^}2GS6NOKy3J3%0WKaG#Lmcb?NSWO>iQvUT39Hm9f$CIH`Dn) z!#KLY#^sSbUak>7Uin_^S$V-^sHKKx~yqMHZp>`77G5=tVsFVgfWpphZryIA~r=#rZXf8xNekQ@jL!? V0{J2~%D~VC(osT0c=d^z{{c7sUU~ok diff --git a/target/classes/xyz/thastertyn/Jecna/Dochazka.class b/target/classes/xyz/thastertyn/JecnaParse/Dochazka.class similarity index 65% rename from target/classes/xyz/thastertyn/Jecna/Dochazka.class rename to target/classes/xyz/thastertyn/JecnaParse/Dochazka.class index 42f6c0eb8800c1502c487945f0bd3bef004a57c2..1be59ec6f9202bed32133887f25676e6771fddee 100644 GIT binary patch delta 51 zcmZqYn#d(^>ff$?3=9k=46f`9OpFXl69q(A0}_jhQ#Y#UFfyu44rCOC@HeM1E@TD( DW%muX delta 39 ucmbQp)y^ew>ff$?3=9k=46f`9OpFY&69q&zYU(gD$@>6Vn+q5hG6Mk9ND0FL diff --git a/target/classes/xyz/thastertyn/Jecna/Downloader.class b/target/classes/xyz/thastertyn/JecnaParse/Downloader.class similarity index 64% rename from target/classes/xyz/thastertyn/Jecna/Downloader.class rename to target/classes/xyz/thastertyn/JecnaParse/Downloader.class index b6a040f778a1f5a8b1dfdb456d1d373ea3901f2b..1135a57d223f98f345a601e8c3f169ff4d3f5d82 100644 GIT binary patch delta 49 ycmaFK`k7VW)W2Q(7#J8#73yUCJKnK1|$|0r%qHUWK#2ib2qNGV*&tjKn`XA delta 37 scmey&`jS=P)W2Q(7#J8#73!4Cklv6)GTCD^Z_z9Zna|q0NmLMYXATM diff --git a/target/classes/xyz/thastertyn/JecnaParse/Jidelna.class b/target/classes/xyz/thastertyn/JecnaParse/Jidelna.class new file mode 100644 index 0000000000000000000000000000000000000000..365e7f2db917609d63eab7faf9f70d37f0c2680c GIT binary patch literal 298 zcmaivu};H442FNFNdqC!iZ`fOfPq`sKrBcMRRl<&?oMjatHMRPToL81n2;EFfIbw$ zS9NFkfB&{@ect?j{{XneI7dR5ystk@Sa2W2hqW_PX&gVY@5M~*Tw2FDQo?x2Z){q2 zFXo|MN)rgfYwK*dAq-B>W`y*%n@fQK_Df_K5=NDEa=&`5#Xoc13gNiw8g6IoZOpr7 z8Wy%EoK*jUToH<=Zsi-fv+-QH1H6cAm_SMNF{o1{P|Y=&Z3eRQFYJA4BSE1W$IyiX Q)pA>B>W7*LN2&=%e{=mpcK`qY literal 0 HcmV?d00001 diff --git a/target/classes/xyz/thastertyn/JecnaParse/Login.class b/target/classes/xyz/thastertyn/JecnaParse/Login.class new file mode 100644 index 0000000000000000000000000000000000000000..83f6c19397e9d72a65e84f767263cdb9a20de230 GIT binary patch literal 2900 zcmai0S#TWH6+Le>Qn$t}%QTK-;cWy6OCygv#yDWhD}%t2WlPZr8w`ZBW}Y=|^>mNB z-)M36g^-Oc3zV~y1&WVU5ef?gDN-pXKm7BXpH!;yoysRg<-DFjOEEI@G4J*3`|dmU z-1F}3_dj~)JplLMRRbx3JqwFh9aV8-B_p*MIHR%@xD##^OJ^*c@d5*Bfi0KaIoI*s zV8$7rzAQ^hATt`vIQGK8D+}0Ts|H0CdBMz(Kzpp*h?Zhhpws68g^DcA3UnOx0#6+m zXzL$1FOV*TWtl-6He1MGQzv+wg?4lZbdPy~JXfzy%V^4-_N6{3EV=%9H}dpzb1|(d zUM$c%_9>wdQ`d}Cqs8H3ab*15$O8gf`v+P<&-gm@gbIPZ{hu`XjIwRw2UhEOb>lX`7EKBvsQ;UvUR~09L z-yhdv$xH?A{?gS9?m(Y`JIQDm%{Z6iuwHXU z^}mI?uvfq+g+Y*{HP<58fw9$Hg@z$R95OM$kXIK>4Dxwa%39v_y*arFc{m34ljT)zVed zbV#E=Y~cu~nvQC+UEomvP4{d-ly-H@!f~7+({h0sRg`isrPmVcq>O7+kR-vU^gUaV z>n0R1Y(PW5=|&3=;vu3gh2gBnlkRH4Yzx_&7!hzb(vVY+W#mMmFHh*dW3j4h5$f2^ z=mQVv*;xzcFwUFJYbLOBU4#LzdF(t8mg-gRV{l*Kb@qZvobjNL}fWVc>Cro(=6S zd{NVxc9n`ud`aMrn{$+0QZ2}73#CMF6XV4x6U>Cg+oFgeKebqsCT6Gtw^sALlBOkzN!8p0XU$O92 ze2t~!Qt12P{G=><5ou?^?diYRTEb-b8x6PWZPhd>h*YOcgfThl!^I z_Dw`#wieDt?%$sY=We_l-1t*Amf6}rt`VkgSlM!zjTd8eUWXI3+(1)2?`tmbY$jLI48 z#&fz|JumQ?wZ59oZ{U0eKgLfD{A4{GVwF`3Kf{Xxx3I8B)WVckm1jNQ*DZ`4akQPy znZLIG=uY@^3kFO*`=y0Wn2aK7mIt=(PpKbFwvsWkf7=?v^;b!^#G-ObvuE8}vzum$ zVLd9z2R+?yGs!o=e%*_x-Vrv5s6gu3`l+8rQ6;30D;9bQv`vFYN_TM1QW}3U5`FT9 zPO*u07N3stz2KP1y@jrvxQ^~WC$_ine{FFy zwddYM_v@Ubpq+Fii`&<1ZeQ8_S!}0O53NidbsKgvsRWhU(ts|u*x9#nyWMZ+ma(r5 zZ{Y4_+?T>KjtZR1-?u(#xo|!Hx$TV|`y^oVOQ~315G?iSL5_^$jqs z_)EYYY42%Y!Z+>jEaAJ?(Dg2MKWhKzEj;_z+}n6zD_*Kz$F&^expp1D(5Y!lSbY(F zobM)2dzhvylhBJDeBR0LjDGB81?p#~9l$B%*ck?K2Kz9<^+~q;3pju$aW^U~kXQH> zdKHK86s@1dy?6=t;Ws#pSJ`%7#}Jk%kiXyr{)UrypWZ&e{rD%F;J>)`Zw%wVcnBY2 zR2VoTx-phy`M8#y*wW0ho~eckIGf`vMU?-;ukdTeGKu#PaxG17gFN}SjOb-Xwi)6h ld}yFx;Aw;9DTUv0HHF{f4;*dI4l>3+p6nr(JYMPO{6Bag?Na~% literal 0 HcmV?d00001 diff --git a/target/classes/xyz/thastertyn/Jecna/Rozvrh.class b/target/classes/xyz/thastertyn/JecnaParse/Rozvrh.class similarity index 89% rename from target/classes/xyz/thastertyn/Jecna/Rozvrh.class rename to target/classes/xyz/thastertyn/JecnaParse/Rozvrh.class index 2baaecf74b7771a252135f4416a6b2bfc1dbbdb2..ea187f97ea98f1b32c676902acf773590d154684 100644 GIT binary patch delta 68 zcmca6^HfIQ)W2Q(7#J8#7nhWgAyK&)ibtqCn@Ywd9yV&65K2t#n39O%dF!Rc&d^n3gx%&=0-N2A<_C6=RYy z*R`eT6ff~7kQ}ufE4U=k-ajxWkQjF>GL3e0>F7jSL$^S0iwM)$kFHJ#WOQ^ODbQWA z96426Ta?~ibJ1qhnUY&J?K#u4)IJg>f@RAWINKcj-t;lH?uxtN*sfWLGRkcA$ACo8 zRM_dOn`K!IEZ6Zh91}PZhV00|xaX`ov~t7sgB=|WC$>>pt}!{ibCAL*f#KyKsQLxN z*x1;}`&D1EY>t^PKQU^)^m2Yst4Jp>JXv&8r~2%*Hn`jtceJV^mLrV zn*ynAbONI-V6^~Ra=j&E#dm8}W88HdvWb9;`*0ou8u|qewmR1_h#{7DNs?{H`v+o1 z9M;-5CfssujfjdV)+^j2k(+ZJ{hmLZL|Oq_t?-g zuG&(0^owb{hxav%2xNC%G%4x$03R}47CX%hTu*NBfyqX&xQKs+cn8jUU=6o5qO`jdplKBft zc}~ZDd`ibb3usY~Xjov1o5;C4Fw*!8pKEw1a3IWF7-%#nbbNtF0@}K1*W~nLmHmY{ zp6zjx#yl3)&?pO>kJF$r_u>;Mk_^nLDI#?|#u5o?Rw_*}xAhiOWi1^mSY;s0$yA7x z6N{+QH+|{*Y=lXEp4rsAjiD|9zBR7e*d^^;^ZMX(A0=bq9_Sf-27T}) z_Rl{<&u=*JOQ_w;=l;-67ZT{^uL}n$(?h#G=))oI*qJy&+gYxYd>_SeWm^>Kxs$T* zGbe|hC2;#f=0Y9$sazcw3mres{B*YU|nGMh>?_I2DVXoJ7vz)Q@}XSKfMb3AwkvyRGrWqDcPhgUx; zFzrxa@*(J60_fxZF!~wv5Cb+C@)%Cy4o=|_rRzL<${C@+-eJ-RA_A*cHr5DQM-2{K z0`BFziZAJ-A5-w)Gg(8pg@77K+P+SEYb?MR|DtSAFNIB7JdU{R?~#Taf?& literal 0 HcmV?d00001 diff --git a/target/classes/xyz/thastertyn/JecnaParse/Znamky.class b/target/classes/xyz/thastertyn/JecnaParse/Znamky.class new file mode 100644 index 0000000000000000000000000000000000000000..e8a058bbd3fcdb8cf6689adc0fd5c6d6c75f2e39 GIT binary patch literal 6498 zcmd5=3v?9a75@IsW@ob*0&EDdJS3=K5=b_R#gZTjL@_i0G=K)NI_!?g!e(}znI#0J z4~vh|hqbLmv{Y@?wDtkExQS9Ntu40JTHD(9v9&K-YoGRA!SwrQX0y9tLC?|CBb+lk z|DF5ad;fdC`}p(t%MU#Q;7l=1flr`z+rajy-K$x)ZrTGzbfq3Mv^AP(>Cp{_*0*Iq zfnQ+4W^Jn$O=?C@boHjqddwCW*RNS^seU7w(&BntKx_~Q^q5>&0yQ1ZhK!v^MwgnV zHqeo<>{fw_u0)Ta*%?z8c(N4F;*K%)tj(m8dUTDJFc-W0juBn9nJ{`~6`9^a}ZGy3W)d8oSf`T{LECx%dm1_kv+2zG-hMa&~o z>)Hx8dVvmM78<2Ln*>g)D-i6WzYqi-rGCA1aI=cjaRx)vqccTnijDF(rR+0Rya@}L z59C`f&v3fHq`E>w3Yg!lVo?!uvsBfpVlmF9DtcO~I@ZW~W@LH7i0j*!o$d6NmGN>n zT)^xFgse{T5?}p#qNkVUi#9H{%Oao&OdlKdd}1=(lZ){(kj`Od+3~j(=5sDy1$K?5 zoIr?2?8@0*bW+cFnFk^*aN{d#`#%)~+RVr<-Kv{fkCOuK!HTuF*3-coy}%WJdR;12 zeVfF|g(@yW7c(-!3a{BIQznatG)HN>M{ljfI$W%Pz6|H^Z9_%=xk*aBer7690wJ zi_HoW0#*5}@6_yG63k6k(X0aKl@LRWcbAIc>k=q7(=J!TRL02p*6*}N3B@O)T5T2kxmQYTI^KtE`d|WRO^D$KROGTDz3xz(&ye8 z1Qr)or(EyOhb@=I9VxRXy4gx)($VE9!{C^~c1l>@h+PWa%?erSyR5kH5tuLbwSxEBFAr)A2T`_#i$+kXU-snRlWk&QPe*<%^z| z)TK&`I&Ts1*=7j4rK(%m>hh|_FiW1>RNO8T%5NpMv!Cxqvx1KaOv!I@59KKcVK44f zaTh*LPse%_$+)S@WGHgO7&WbO)7>iW!M)UDJIPnvb-YLf@kvVESXbB7P`|N0g!}Lr z1)rud`MO|oMB2u=%x3j4RD2enV`{}xed&ap9~w(K>o~h<)_vHo;(mOdGWs+-)+@7e zL7|N0y_(sjUzO2~nBH1gy<9t3Amk=WI)JQ#2TGXgv8Wi5)yID&8>8fYP{l(y=yX5g z?wFqKIV8lqd00g|RtE7U8mZ-Av==waSX~&zqfAmOtr<etQXnxzNvO_m}&fiy^_aaW&~Ov=#zNX3uw6K-bdU7pk|4s#{D>4v~L&pO4J)mY$XDrVv& z`Sz@ePOOsi%P&>@3cu$3V&&(TB2lAL5sg@B>6XPzPSEca&O9-|%oLb*{DftI%v3+^ zn_j>(7R?kbnJ%}|$prl{6U4}Nk zrt_7U42!QrK|AI8Ac!LZyxP2+Oa6kJ;<5}2q|RD=Sb&4S5bS-00?;FHr0-+c0xOKOGl9^#sJ-O;t`yz{Lc>9XyN5980o3GQr`+!ditrhRpU?4pR`WR-)A*c5it38Mbj)ygSvEcK_tGeZ zwC01D)je|#}OBPvzDg{JsM zO>rq5r1)g7;nR)ZY8fSQElmtk-au7*)gu4AEY`FrgXoAT4`QtVeb*9@exv_R&Z66Q zCjx_Lsw*JfAm8cax-2f+5^JC8FIdMG`K2J<7H%8aUpLjCS`?TXm;`;xFnV_JH?^;` zYM!ysN@QqQI=!+M2iw09LA?2N*4QCf{|brU)TdR z67**=Jc#m$(o)e7sTjf+oqeQA;o(QJIF!YgTPg?9AF1>Jv$rJ_2|XrZ(iaJZzv8fb zwMC7nS$r-0cot9Gh6(QC+g$8Hg>T`wK_=%Y?=Zfza2%K4&*F!BP~A{d9;v7qHwix- z!ZU-Y^48mtV}6h3!mc zFxAVM+!LABGYPu6Oyc4gUmi5wG2A36S;JNl@-WH}>%ce*l+pAie^R zViTT09M3}MWOpTA#AY1feY*mELgg)c3cAH?m|`6)aS7Il7_N6R$Yn_JwHkTKtVPl~$MW?B}pczsSGpxo;BsPoQdqu5fXF zSiwySb}RTh3w`wwns^kA3P?V%ls_Z1Np*l;z(~Z)?|kO6q54Ej3idjAbOdv_rThr0 zL}Y}Pz6!Y&2%SJV{>{=M=$C)eqi#j~m-IXf4Q~egEtd$|&ljIll>!cNmlGnlE0ud8 z5)_pe@}FabOc^WWrjkN9xlo0y$qIch+u;B$*s%v!gJAEZGU=Xq`>VwyX|P+1 zPhyaOTlm~fr|;oC<#xh&59{P!*2O!VgSf3IS9e3$A|^Y4oyCMHZbc4-!1p;-l>0_d Z1HT(27Y#3At&A>RAVVMsW%^%4{s++mt7iZJ literal 0 HcmV?d00001 diff --git a/target/classes/xyz/thastertyn/Window/Content/JecnaContent.class b/target/classes/xyz/thastertyn/Window/Content/JecnaContent.class deleted file mode 100644 index 0bf3b830cc9f0dc5ad25520bbca47d556dad9b08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 912 zcma)3OK;Oa5dOwanqUHL4GoX-XgE}9DXfIxR0M}gNI@1w3Mx`>8)tF0a@Uo!0m5(M z04F34`~ZFwV%9OiBt3AMo!Oo5F|$8^eg6UAG43_s5q3XLKM6aMW2_qX9T~yb3~{eWJ49e$AuQ^SRt%N z+Nf8P(}Bw0$U&+IVU)!(J(9V0b$MB{BRwYUMgQ+;pU_N{eJzbj3ESPBD9%nrl4VJ% zVs_zt@?1uWWTGF5qR(M?LX&24NZ9B`e+TN@T$^Oy4MFTATz(=1ysEyHxmAqjfsbbv zA~|ptuCj$Cz9w!EKxmB5RIJ}k3H5HTSEz7KJ%TslB;ZL7&#cZ2YX|*olE>6S7eo_@0$EUiLcO*}WFxaHIh%xVE2>BoIRJ-3 z%tko?&HwXfG@~~^zu!9mBlJ^5gv*c3r}8ts@Z9>1Rjvgr7tENDJ-cOF@x2Kr^8@5f;KK!kMjnJX1q#trlGz=hIeRodXxoEDGiT?`c+sGG$1>uBoq{ze73YnKQb$EZxb$UVgIr^vXvTZwN_2Im zFlZU>xMK?Jdv4&~rw!RBE!|tN3hq7uU!6#> zutq}wLAhJ2L4m4ZJ(&vxD};4rGE#&z zOGXogV_Z{|XpxL&3dguMQ(||Sk)lK@-AswJWTYq@OSGh$Qqudq8WurQ!N69XIIiMl z(%v2w`$;pT2T0pV56Sa3i8!KRF*F6o1R@It{IOyP;V3#}qB;d?BJ-45L!VTAT*DG9 z6^R^;ONM(asMcZJLgdwi@wD z_oRveZt7$8GA4NqCf*cSOpTsXovdp1eInBE-2LJ~T0?0J*o0X2+(7Y2=d zzT3VaaNvpT93L1qb8hSZH)a(q4K~IEG-__QN5^c7V^N?hvan;bqR+atJo^+l&+2<` ze5v5wYuf5_wq?V!TMxc4FoZ##R+yvC1BGO(H*r<< z6xV8f7uS%!Co_fCs9M(XqSWz{)X^q&v`ZZaDR7t<9?eF7M(aJiGKH?Yp2;V;ZuDFX z!B3Z#atN-ZJL~C29$|dQH|smP{wn1(xavir*{YxjfA-eQ zA4GReBNv;-VEW+DxHWT|+}iTVXn)ktxK1M4DVg_iE~}UBVSE~+{gVj)%e+uw z-et;w4{!|=9=(CfOuvlCA*K>o%ebs(EH8}%+XM$Oyn~(8 z6UTKVa05x)%(ef@jf;A(SRmg zUGdK6qvDtZNfPt<1k((+nOhJ#?`dD!UW{cxfd^Qib k_NO`Ewt2yy0i!;9)1k!o4xmI?}Bgs0gbh#+5i9m diff --git a/target/classes/xyz/thastertyn/Window/Login.class b/target/classes/xyz/thastertyn/Window/Login.class deleted file mode 100644 index b20da039539f4a95b94c0259c41373ec3356c725..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6428 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 Ml!$4fj3HV6e}&gzE&u=k diff --git a/target/classes/xyz/thastertyn/Window/WindowSwitchListener.class b/target/classes/xyz/thastertyn/Window/WindowSwitchListener.class deleted file mode 100644 index c739a700dcb935bb66948e96b2165aca1bb9629b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5932 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 oiod}d4ZVrWqX;VtkH*5t@C-cE