diff --git a/src/main/java/xyz/thastertyn/Login/LocalCredentials.java b/src/main/java/xyz/thastertyn/Login/LocalCredentials.java index f6cb625..9178b16 100644 --- a/src/main/java/xyz/thastertyn/Login/LocalCredentials.java +++ b/src/main/java/xyz/thastertyn/Login/LocalCredentials.java @@ -49,6 +49,7 @@ public class LocalCredentials { public String[] getCredentialsFile() { + // TODO Use hashmap instead of array String[] result = new String[2]; if(credentialsFile == null) { diff --git a/src/main/java/xyz/thastertyn/Login/LoginController.java b/src/main/java/xyz/thastertyn/Login/LoginController.java index cd12f9f..c1bdc87 100644 --- a/src/main/java/xyz/thastertyn/Login/LoginController.java +++ b/src/main/java/xyz/thastertyn/Login/LoginController.java @@ -1,9 +1,7 @@ package xyz.thastertyn.Login; -import java.io.FileWriter; import java.io.IOException; import java.net.UnknownHostException; -import java.util.Properties; import java.util.concurrent.TimeoutException; import javax.security.auth.login.CredentialException; diff --git a/src/main/java/xyz/thastertyn/Scrape/Rozvrh.java b/src/main/java/xyz/thastertyn/Scrape/Rozvrh.java index 57bca1e..1054233 100644 --- a/src/main/java/xyz/thastertyn/Scrape/Rozvrh.java +++ b/src/main/java/xyz/thastertyn/Scrape/Rozvrh.java @@ -11,14 +11,14 @@ import org.jsoup.select.Elements; import xyz.thastertyn.Types.Choice; import xyz.thastertyn.Types.Options; +import xyz.thastertyn.Types.Timetable; /** * Jeden radek v rozvrhu */ public class Rozvrh extends JecnaScrape { - private String[][] rozvrh = new String[5][10]; - + private Timetable timetable; /** * Stahne rozvrh z www.spsejecna.cz a dale ho zpracuje do formy * se kterou da pracovat @@ -29,6 +29,7 @@ public class Rozvrh extends JecnaScrape { @Override public void download() throws IOException { + timetable = new Timetable(); Document rozvrhDokumentHTML = Downloader.download("https://www.spsejecna.cz/timetable/class").get(); Elements[] radkyRozvrhuHTML = rozvrhDokumentHTML @@ -38,42 +39,34 @@ public class Rozvrh extends JecnaScrape { .map(Element::children) .toArray(Elements[]::new); - for(int i = 1; i < 6; i++) + for(int i = 0; i < 5; i++) { - for(int j = 1; j < 11; j++) + for(int j = 0; j < 10; j++) { - String predmet = radkyRozvrhuHTML[i].get(j).select("span.subject").text(); + String predmet = radkyRozvrhuHTML[i+1].get(j+1).select("span.subject").text(); // Predmety jako CEL jsou trikrat, staci ale jen jednou String[] split = predmet.split(" "); HashSet set = new HashSet<>(Arrays.asList(split)); String pr = String.join("/", set); - rozvrh[i-1][j-1] = pr; + timetable.get(i).set(j, pr); } } } - public String[][] getRozvrh() + public Timetable getRozvrh() { - return rozvrh; + return timetable; } @Override public String toString() { - String s = ""; - for(String[] st : rozvrh) - { - s += ("| "); - for(String str : st) - { - s += String.format("%-5s", str) + " | "; - } - s += "\n"; - } - - return s; + return (timetable == null) ? + "Nothing downloaded yet" + : + "All up and ready"; } @Override diff --git a/src/main/java/xyz/thastertyn/Scrape/Znamky.java b/src/main/java/xyz/thastertyn/Scrape/Znamky.java index d6f7e67..de45d14 100644 --- a/src/main/java/xyz/thastertyn/Scrape/Znamky.java +++ b/src/main/java/xyz/thastertyn/Scrape/Znamky.java @@ -1,8 +1,6 @@ package xyz.thastertyn.Scrape; import java.io.IOException; -import java.net.SocketTimeoutException; -import java.net.UnknownHostException; import java.util.ArrayList; import java.util.regex.Pattern; @@ -21,13 +19,13 @@ public class Znamky extends JecnaScrape { private boolean wasDownloaded; // schoolYear, schoolYearId - private ArrayList predmety = new ArrayList<>(); + private ArrayList predmety; // int znaci id roku, boolean jestli je jen prvni nebo i druhe pololeti private Options schoolYearOptions = new Options("Skolni R."); private Options schoolHalfYearOptions = new Options("Pololeti"); - public void download() throws UnknownHostException, IOException + public void download() throws IOException { download("https://www.spsejecna.cz/score/student"); } @@ -41,9 +39,9 @@ public class Znamky extends JecnaScrape { choice.getChoices().get(1))); } - private void download(String url) throws UnknownHostException, IOException + private void download(String url) throws IOException { - //String url = + predmety = new ArrayList<>(); Document znamkyDokumentHTML = Downloader.download(url).get(); // Predmety ulozene v diff --git a/src/main/java/xyz/thastertyn/Types/DayOfTimetable.java b/src/main/java/xyz/thastertyn/Types/DayOfTimetable.java new file mode 100644 index 0000000..60ac174 --- /dev/null +++ b/src/main/java/xyz/thastertyn/Types/DayOfTimetable.java @@ -0,0 +1,16 @@ +package xyz.thastertyn.Types; + +public class DayOfTimetable { + + private String[] subjects = new String[10]; + + public String get(int index) + { + return subjects[index]; + } + + public void set(int index, String subject) + { + subjects[index] = subject; + } +} diff --git a/src/main/java/xyz/thastertyn/Types/Timetable.java b/src/main/java/xyz/thastertyn/Types/Timetable.java new file mode 100644 index 0000000..371c42d --- /dev/null +++ b/src/main/java/xyz/thastertyn/Types/Timetable.java @@ -0,0 +1,19 @@ +package xyz.thastertyn.Types; + +public class Timetable { + + private DayOfTimetable[] timetable = new DayOfTimetable[5]; + + public Timetable() + { + for(int i = 0; i < timetable.length; i++) + { + timetable[i] = new DayOfTimetable(); + } + } + + public DayOfTimetable get(int day) + { + return timetable[day]; + } +} diff --git a/src/main/java/xyz/thastertyn/UserInterface/Content/JecnaContent.java b/src/main/java/xyz/thastertyn/UserInterface/Content/JecnaContent.java index 067be58..906fee5 100644 --- a/src/main/java/xyz/thastertyn/UserInterface/Content/JecnaContent.java +++ b/src/main/java/xyz/thastertyn/UserInterface/Content/JecnaContent.java @@ -21,35 +21,58 @@ public abstract class JecnaContent { protected boolean hasStarted = false; protected Label borderLabel; protected UpdateListener listener; - - protected abstract void setGUI(); - protected abstract void download(Choice choice) throws IOException; - public abstract void downloadDefault() throws IOException; protected JecnaScrape scraper; - public void showOptions(WindowBasedTextGUI textGUI) throws IOException { - OptionsDialog d = new OptionsDialog(scraper.getOptions()); + protected abstract void setGUI(); - Choice c = d.showDialog(textGUI); - - if(c != null) + public JecnaContent(UpdateListener listener) + { + this.listener = listener; + } + + protected void download(Choice choice) throws IOException + { + if(choice != null) { - download(c); + scraper.download(choice); + setGUI(); + listener.updatePanel(); + }else{ + scraper.download(); + setGUI(); + } + + hasStarted = true; + } + + public void downloadDefault() throws IOException + { + download(null); + } + + public void showOptions(WindowBasedTextGUI textGUI) throws IOException { + OptionsDialog dialog = new OptionsDialog(scraper.getOptions()); + + Choice choice = dialog.showDialog(textGUI); + + if(choice != null) + { + download(choice); } } public Panel getPanel() { - return mainPanel; + return this.mainPanel; } public boolean hasStarted() { - return hasStarted; + return this.hasStarted; } public Label getLabel() { - return borderLabel; + return this.borderLabel; } } diff --git a/src/main/java/xyz/thastertyn/UserInterface/Content/OmluvnyList.java b/src/main/java/xyz/thastertyn/UserInterface/Content/OmluvnyList.java index add0ac4..303a908 100644 --- a/src/main/java/xyz/thastertyn/UserInterface/Content/OmluvnyList.java +++ b/src/main/java/xyz/thastertyn/UserInterface/Content/OmluvnyList.java @@ -21,7 +21,7 @@ public class OmluvnyList extends JecnaContent{ public OmluvnyList(UpdateListener listener) { - this.listener = listener; + super(listener); } @Override diff --git a/src/main/java/xyz/thastertyn/UserInterface/Content/Rozvrh.java b/src/main/java/xyz/thastertyn/UserInterface/Content/Rozvrh.java index 05848ff..7b33a34 100644 --- a/src/main/java/xyz/thastertyn/UserInterface/Content/Rozvrh.java +++ b/src/main/java/xyz/thastertyn/UserInterface/Content/Rozvrh.java @@ -1,14 +1,15 @@ package xyz.thastertyn.UserInterface.Content; import java.io.IOException; -import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.List; 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; import xyz.thastertyn.Types.Choice; +import xyz.thastertyn.Types.Timetable; import xyz.thastertyn.UserInterface.UpdateListener; public class Rozvrh extends JecnaContent { @@ -17,84 +18,60 @@ public class Rozvrh extends JecnaContent { private Label borderLabel = new Label("Rozvrh"); private xyz.thastertyn.Scrape.Rozvrh rozvrh = new xyz.thastertyn.Scrape.Rozvrh(); - private boolean hasStarted = false; - 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."}; String[] daysLabels = {"PO", "UT", "ST", "CT", "PA"}; - Table t = new Table<>(labels); + Table table = new Table<>(labels); public Rozvrh(UpdateListener listener) { - this.listener = listener; + super(listener); + super.mainPanel = this.mainPanel; + super.borderLabel = this.borderLabel; + super.scraper = this.rozvrh; } @Override - public void downloadDefault() + protected void download(Choice choice) throws IOException { - download(null); - } - - @Override - protected void download(Choice choice) - { - try{ - rozvrh.download(); + if(choice != null) + { + scraper.download(choice); + setGUI(); + listener.updatePanel(); + }else{ + scraper.download(); setGUI(); - - hasStarted = true; - }catch(UnknownHostException e) - { - rozvrhPanel.addComponent(new Label("A connection error occurred")); - }catch(IOException e) - { - rozvrhPanel.addComponent(new Label("An error occurred")); } + + hasStarted = true; } @Override protected void setGUI() { - String[][] rozvrhArray = rozvrh.getRozvrh(); + Timetable timetable = rozvrh.getRozvrh(); - String[] den = new String[11]; - - for(int i = 0; i < rozvrhArray.length; i++) + for(int day = 0; day < 5; day++) { - den[0] = daysLabels[i]; - for(int j = 1; j < rozvrhArray[i].length + 1; j++) + List currentRow = new ArrayList<>(); + + // Set the day (Po, Ut, St,...) + currentRow.add(daysLabels[day]); + + // Add the classes + for(int hour = 0; hour < 10; hour++) { - den[j] = (rozvrhArray[i][j - 1].isBlank()) ? " - " : rozvrhArray[i][j - 1]; + currentRow.add((timetable.get(day).get(hour).isBlank()) ? + " - " // Empty class, nothing taught at that moment + : + timetable.get(day).get(hour)); // Get class } - t.getTableModel().addRow(den); + table.getTableModel().addRow(currentRow); } - rozvrhPanel.addComponent(t); - } - - @Override - public boolean hasStarted() - { - return hasStarted; - } - - @Override - public Panel getPanel() - { - return rozvrhPanel; - } - - @Override - public Label getLabel() - { - return borderLabel; - } - - @Override - public void showOptions(WindowBasedTextGUI textGUI) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'getOptions'"); + rozvrhPanel.addComponent(table); } } diff --git a/src/main/java/xyz/thastertyn/UserInterface/Content/Sdeleni.java b/src/main/java/xyz/thastertyn/UserInterface/Content/Sdeleni.java index 4077a73..a5c4876 100644 --- a/src/main/java/xyz/thastertyn/UserInterface/Content/Sdeleni.java +++ b/src/main/java/xyz/thastertyn/UserInterface/Content/Sdeleni.java @@ -2,7 +2,6 @@ package xyz.thastertyn.UserInterface.Content; import java.io.IOException; -import java.net.UnknownHostException; import java.util.ArrayList; import com.googlecode.lanterna.gui2.GridLayout; @@ -21,10 +20,10 @@ public class Sdeleni extends JecnaContent { public Sdeleni(UpdateListener listener) { + super(listener); super.mainPanel = this.mainPanel; super.borderLabel = this.borderLabel; super.scraper = this.sdeleni; - this.listener = listener; } @Override diff --git a/src/main/java/xyz/thastertyn/UserInterface/Content/Znamky.java b/src/main/java/xyz/thastertyn/UserInterface/Content/Znamky.java index ed7f47d..58eb873 100644 --- a/src/main/java/xyz/thastertyn/UserInterface/Content/Znamky.java +++ b/src/main/java/xyz/thastertyn/UserInterface/Content/Znamky.java @@ -1,6 +1,5 @@ package xyz.thastertyn.UserInterface.Content; -import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; @@ -14,7 +13,6 @@ import com.googlecode.lanterna.gui2.LayoutData; import com.googlecode.lanterna.gui2.LinearLayout; import com.googlecode.lanterna.gui2.Panel; -import xyz.thastertyn.Types.Choice; import xyz.thastertyn.Types.Predmet; import xyz.thastertyn.Types.Znamka; import xyz.thastertyn.UserInterface.UpdateListener; @@ -41,41 +39,18 @@ public class Znamky extends JecnaContent { false); private Panel mainPanel = new Panel() - .setLayoutManager(new GridLayout(3)); - private Label borderLabel = new Label("Znamky"); - private xyz.thastertyn.Scrape.Znamky znamky; + .setLayoutManager(new GridLayout(3)); - private UpdateListener listener; + private Label borderLabel = new Label("Znamky"); + + private xyz.thastertyn.Scrape.Znamky znamky = new xyz.thastertyn.Scrape.Znamky(); public Znamky(UpdateListener listener) { + super(listener); super.mainPanel = this.mainPanel; super.borderLabel = this.borderLabel; super.scraper = this.znamky; - this.listener = listener; - } - - @Override - public void downloadDefault() throws IOException - { - download(null); - } - - @Override - protected void download(Choice choice) throws IOException - { - znamky = new xyz.thastertyn.Scrape.Znamky(); - if(choice != null) - { - znamky.download(choice); - setGUI(); - listener.updatePanel(); - }else{ - znamky.download(); - setGUI(); - } - - super.hasStarted = true; } @Override diff --git a/src/main/java/xyz/thastertyn/UserInterface/WindowSwitchListener.java b/src/main/java/xyz/thastertyn/UserInterface/WindowSwitchListener.java index d753373..e8cba70 100644 --- a/src/main/java/xyz/thastertyn/UserInterface/WindowSwitchListener.java +++ b/src/main/java/xyz/thastertyn/UserInterface/WindowSwitchListener.java @@ -29,8 +29,8 @@ public class WindowSwitchListener implements WindowListener, UpdateListener { private WindowBasedTextGUI textGUI; private JecnaContent[] contents = { - new Rozvrh(this), new Znamky(this), + new Rozvrh(this), new Sdeleni(this), new OmluvnyList(this) }; @@ -106,9 +106,16 @@ public class WindowSwitchListener implements WindowListener, UpdateListener { private void setPanelPreferedSize() { - int tabColumns = tabsPanel.getSize().getColumns(); + int tabColumns = tabsPanel + .getSize() + .getColumns(); + + int currentSize = contents[current] + .getPanel() + .getSize() + .getColumns(); - if(contents[current].getPanel().getSize().getColumns() < tabColumns) + if(currentSize < tabColumns) { holderPanel.addComponent( contents[current].getPanel().setPreferredSize(new TerminalSize(tabColumns,