/** * This file is part of TuCan Mobile. * * TuCan Mobile is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * TuCan Mobile is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with TuCan Mobile. If not, see <http://www.gnu.org/licenses/>. */ package com.dalthed.tucan.scraper; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Iterator; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.util.Log; import android.widget.ListAdapter; import com.dalthed.tucan.R; import com.dalthed.tucan.TucanMobile; import com.dalthed.tucan.Connection.AnswerObject; import com.dalthed.tucan.Connection.CookieManager; import com.dalthed.tucan.adapters.OneLineTwoColsAdapter; import com.dalthed.tucan.exceptions.LostSessionException; import com.dalthed.tucan.exceptions.TucanDownException; public class MainMenuScraper extends BasicScraper { /** * Set true if User has selected English */ public static boolean isEnglish = false; public String SessionArgument; public boolean noeventstoday = false; /** * Array an Links zu den Seiten der heutigen Veranstaltungen */ public String[] today_event_links; /** * Der Name des Users */ public String UserName; /** * URL zum Vorlesungsverzeichnis */ public String menu_link_vv; /** * URL zu den Prüfungen */ public String menu_link_ex; /** * URL zu den Nachrichten */ public String menu_link_msg; /** * Stores link of Event location overview */ public String load_link_ev_loc; /** * Last called URl */ public URL lcURL; /** * URL zu Stundenplan */ public String menu_link_month; /** * Gibt an, ob die Tucan-Webseite eine Bewerbungsseite darstellt. */ public boolean isApplication = false; public MainMenuScraper(Context context, AnswerObject result) { super(context, result); } /** * Getter and Setter */ public boolean getIsEnglish() { return isEnglish; } public void setIsEnglish(boolean isEnglish) { MainMenuScraper.isEnglish = isEnglish; } @Override public ListAdapter scrapeAdapter(int mode) throws LostSessionException, TucanDownException { if (checkForLostSeesion()) { if(TucanMobile.CRASH) { //Crash with HTML ArrayList<String> crashList = new ArrayList<String>(); crashList.add("fail"); crashList.get(16); } getSessionArgument(); scrapeMenuLinks(); return getTodaysEvents(); } return null; } /** * Checks if Tucan is set to german. Otherwise, the App wont work * * @param context * Activity context * @since 2012-07-17 * @author Daniel Thiem */ public void checkForRightTucanLanguage(final Activity context) { // if (doc.select("li#link000326").select("a").attr("href").equals("")) { // Dialog wronglanguageDialog = new AlertDialog.Builder(context).setTitle("") // .setMessage(R.string.general_not_supported_lang) // .setPositiveButton("Okay", new DialogInterface.OnClickListener() { // // public void onClick(DialogInterface dialog, int which) { // context.finish(); // } // }).create(); // wronglanguageDialog.show(); // // } if (doc.select("li#link000326").select("a").attr("href").equals("")) { setIsEnglish(true); scrapeMenuLinks(); } } public void bufferLinks(Activity context, CookieManager localCookieManager) { try { FileOutputStream fos = context.openFileOutput(TucanMobile.LINK_FILE_NAME, Context.MODE_PRIVATE); StringBuilder cacheString = new StringBuilder(); cacheString.append(menu_link_vv).append(">>").append(menu_link_month).append(">>") .append(menu_link_ex).append(">>").append(menu_link_ex).append(">>") .append(menu_link_msg).append("<<") .append(localCookieManager.getCookieHTTPString(TucanMobile.TUCAN_HOST)) .append("<<").append(SessionArgument); fos.write(cacheString.toString().getBytes()); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * @return */ private ListAdapter getTodaysEvents() { // Tabelle mit den Terminen finden und Durchlaufen Element EventTable = doc.select("table.nb").first(); String[] Events; String[] Times; if (EventTable == null) { // Falls keine Events gefunden werden, wird das angezeigt Events = new String[1]; Times = new String[1]; // Events[0] = "Keine Heutigen Veranstaltungen"; Events[0] = context.getString(R.string.no_events_today); Times[0] = ""; noeventstoday = true; } else { if (EventTable.select("tr.tbdata").first().select("td").size() == 5) { // Wen die Anzahl der Spalten der entsprechenden Tabelle 5 // ist, ist das ein Anzeichen dafür, dass heute keine // Veranstaltungen sind Events = new String[1]; Times = new String[1]; // Events[0] = "Keine Heutigen Veranstaltungen"; Events[0] = context.getString(R.string.no_events_today); Times[0] = ""; noeventstoday = true; } else { // Nehme die einzelnen Event-Zeilen heraus und gehe diese durch Elements EventRows = EventTable.select("tr.tbdata"); Iterator<Element> RowIt = EventRows.iterator(); Events = new String[EventRows.size()]; Times = new String[EventRows.size()]; today_event_links = new String[EventRows.size()]; int i = 0; while (RowIt.hasNext()) { Element currentElement = (Element) RowIt.next(); // Informationen aus HTML parsen String EventString = currentElement.select("td[headers=Name]").select("a") .first().text(); today_event_links[i] = currentElement.select("td[headers=Name]").select("a") .first().attr("href"); // Zeit zusammenfügen String EventTimeString = currentElement.select("td").get(2).select("a").first() .text(); String EventTimeEndString = currentElement.select("td").get(3).select("a") .first().text(); Times[i] = EventTimeString + "-" + EventTimeEndString; Events[i] = EventString; i++; } } } ListAdapter returnAdapter = new OneLineTwoColsAdapter(context, Events, Times); return returnAdapter; } /** * */ private void scrapeMenuLinks() { UserName = doc.select("span#loginDataName").text().split(":")[1]; lcURL = null; try { lcURL = new URL(lastCalledUrl); } catch (MalformedURLException e) { Log.e(LOG_TAG, "Malformed URL"); } Elements linkstoOuterWorld = doc.select("div.tb"); if(linkstoOuterWorld.size() > 1) { // Element ArchivLink = linkstoOuterWorld.get(1).select("a").first(); // menu_link_month = lcURL.getProtocol() + "://" + lcURL.getHost() // + doc.select("li#link000271").select("a").attr("href"); // menu_link_vv = lcURL.getProtocol() + "://" + lcURL.getHost() // + doc.select("li#link000326").select("a").attr("href"); // menu_link_ex = lcURL.getProtocol() + "://" + lcURL.getHost() // + doc.select("li#link000280").select("a").attr("href"); // menu_link_msg = lcURL.getProtocol() + "://" + lcURL.getHost() + ArchivLink.attr("href"); // // Load special Location Information // load_link_ev_loc = TucanMobile.TUCAN_PROT + TucanMobile.TUCAN_HOST // + doc.select("li#link000269").select("a").attr("href"); if (!getIsEnglish()) { Element ArchivLink = linkstoOuterWorld.get(1).select("a").first(); menu_link_month = lcURL.getProtocol() + "://" + lcURL.getHost() + doc.select("li#link000271").select("a").attr("href"); menu_link_vv = lcURL.getProtocol() + "://" + lcURL.getHost() + doc.select("li#link000326").select("a").attr("href"); menu_link_ex = lcURL.getProtocol() + "://" + lcURL.getHost() + doc.select("li#link000280").select("a").attr("href"); menu_link_msg = lcURL.getProtocol() + "://" + lcURL.getHost() + ArchivLink.attr("href"); // Load special Location Information load_link_ev_loc = TucanMobile.TUCAN_PROT + TucanMobile.TUCAN_HOST + doc.select("li#link000269").select("a").attr("href"); } else { Element ArchivLink = linkstoOuterWorld.get(1).select("a").first(); menu_link_month = lcURL.getProtocol() + "://" + lcURL.getHost() + doc.select("li#link000057").select("a").attr("href"); menu_link_vv = lcURL.getProtocol() + "://" + lcURL.getHost() + doc.select("li#link000352").select("a").attr("href"); menu_link_ex = lcURL.getProtocol() + "://" + lcURL.getHost() + doc.select("li#link000360").select("a").attr("href"); menu_link_msg = lcURL.getProtocol() + "://" + lcURL.getHost() + ArchivLink.attr("href"); // Load special Location Information load_link_ev_loc = TucanMobile.TUCAN_PROT + TucanMobile.TUCAN_HOST + doc.select("li#link000055").select("a").attr("href"); } } else { //Bewerbungsmodus isApplication = true; } } /** * */ private void getSessionArgument() { // Die Session ID aus URL gewinnen if (!TucanMobile.TESTING) { try { lcURL = new URL(lastCalledUrl); SessionArgument = lcURL.getQuery().split("ARGUMENTS=")[1].split(",")[0]; } catch (MalformedURLException e) { e.printStackTrace(); } } } }