Skip to content
This repository was archived by the owner on Jun 22, 2023. It is now read-only.

Commit 3d64b41

Browse files
authored
Merge pull request #57 from d-Rickyy-b/new-website
Fixes for the new website
2 parents e49a1aa + b1ad85c commit 3d64b41

File tree

15 files changed

+108
-101
lines changed

15 files changed

+108
-101
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,4 +110,5 @@ Desktop.ini
110110
$RECYCLE.BIN/
111111

112112
# Mac crap
113-
.DS_Store
113+
.DS_Store
114+
app/release/

app/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ android {
1313
applicationId "de.aurora.mggvertretungsplan"
1414
minSdkVersion 15
1515
targetSdkVersion 26
16-
versionCode 17
17-
versionName "3.0.2"
16+
versionCode 19
17+
versionName "3.1.1"
1818
multiDexEnabled true
1919
}
2020

@@ -41,7 +41,7 @@ dependencies {
4141
implementation 'com.android.support:cardview-v7:26.1.0'
4242
implementation 'com.android.support:preference-v7:26.1.0'
4343
implementation 'com.android.support:customtabs:26.1.0'
44-
implementation 'org.jsoup:jsoup:1.9.2'
44+
implementation 'org.jsoup:jsoup:1.10.2'
4545
implementation 'com.github.paolorotolo:appintro:4.1.0'
4646
implementation 'com.thebluealliance:spectrum:0.7.1'
4747
}

app/src/main/java/de/aurora/mggvertretungsplan/BackgroundService.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import de.aurora.mggvertretungsplan.parsing.WebsiteParser;
2525

2626

27-
public class BackgroundService extends Service implements AsyncTaskCompleteListener<String> {
27+
public class BackgroundService extends Service implements AsyncTaskCompleteListener<ArrayList<String>> {
2828

2929
private final static String CHANNEL_NAME = "default";
3030
private WebsiteParser websiteParser;
@@ -75,6 +75,9 @@ private void notification(String ticker, String titel, String text) {
7575

7676
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
7777

78+
if (notificationManager == null)
79+
return;
80+
7881
if (Build.VERSION.SDK_INT >= 26) {
7982
NotificationChannel channel = new NotificationChannel(CHANNEL_NAME, "Default Channel", NotificationManager.IMPORTANCE_DEFAULT);
8083
channel.setDescription("Notifications about changes of the timetable");
@@ -109,23 +112,23 @@ private boolean isConnectionActive() {
109112
}
110113

111114

112-
public void onTaskComplete(String website_html) {
113-
if (website_html.equals("")) {
115+
public void onTaskComplete(ArrayList<String> websites) {
116+
if (websites.isEmpty()) {
114117
return;
115118
}
116119

117120
Log.d("BackgroundService", "Checking for changes");
121+
sp = PreferenceManager.getDefaultSharedPreferences(this);
118122
String class_name = sp.getString("KlasseGesamt", "5a");
119123

120-
sp = PreferenceManager.getDefaultSharedPreferences(this);
121124
ArrayList<ArrayList<String>> table;
122125

123-
TimeTable timeTable = websiteParser.parse(website_html, class_name);
126+
TimeTable timeTable = websiteParser.parse(websites, class_name);
124127

125128
if (timeTable == null)
126129
return;
127130

128-
TimeTable timeTable_saved = new TimeTable();
131+
TimeTable timeTable_saved = new TimeTable(class_name);
129132
int count = sp.getInt("TT_Changes_Count", timeTable.getDaysCount());
130133

131134
for (int i = 0; i < count; i++) {
@@ -144,13 +147,10 @@ public void onTaskComplete(String website_html) {
144147

145148
String ticker = getResources().getString(R.string.notification_cancellations_ticker);
146149
String title = getResources().getString(R.string.notification_cancellations_title);
147-
String infoOne = getResources().getString(R.string.notification_cancellations_infoOne);
148-
String infoMany = getResources().getString(R.string.notification_cancellations_infoMany);
150+
String info = getResources().getQuantityString(R.plurals.notification_cancellations_info, totalDiffs);
149151

150-
if (totalDiffs > 1) {
151-
notification(ticker, title, String.format(infoMany, totalDiffs));
152-
} else if (totalDiffs == 1) {
153-
notification(ticker, title, infoOne);
152+
if (totalDiffs >= 1) {
153+
notification(ticker, title, String.format(info, totalDiffs));
154154
}
155155

156156
saveData(timeTable);

app/src/main/java/de/aurora/mggvertretungsplan/DownloadWebPageTask.java

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,38 @@
11
package de.aurora.mggvertretungsplan;
22

33
import android.os.AsyncTask;
4+
import android.util.Log;
45

56
import java.io.BufferedReader;
67
import java.io.IOException;
78
import java.io.InputStream;
89
import java.io.InputStreamReader;
910
import java.net.HttpURLConnection;
1011
import java.net.URL;
12+
import java.util.ArrayList;
1113

1214

13-
public class DownloadWebPageTask extends AsyncTask<String, String, String> {
15+
public class DownloadWebPageTask extends AsyncTask<String, Void, ArrayList<String>> {
1416

15-
private final AsyncTaskCompleteListener<String> callback;
17+
private final AsyncTaskCompleteListener<ArrayList<String>> callback;
1618

17-
public DownloadWebPageTask(AsyncTaskCompleteListener<String> callback) {
19+
public DownloadWebPageTask(AsyncTaskCompleteListener<ArrayList<String>> callback) {
1820
this.callback = callback;
1921
}
2022

21-
protected String doInBackground(String... urls) {
22-
try {
23-
return downloadURL(urls[0]);
24-
} catch (IOException e) {
25-
return "";
23+
@Override
24+
protected ArrayList<String> doInBackground(String... urls) {
25+
ArrayList<String> websites = new ArrayList<>();
26+
27+
for (String url : urls) {
28+
try {
29+
websites.add(downloadURL(url));
30+
} catch (IOException e) {
31+
Log.e("DownloadWebPageTask", e.getMessage());
32+
}
2633
}
34+
35+
return websites;
2736
}
2837

2938
private String downloadURL(String urlString) throws IOException {
@@ -50,8 +59,8 @@ private String downloadURL(String urlString) throws IOException {
5059
}
5160

5261
@Override
53-
protected void onPostExecute(String html) {
54-
callback.onTaskComplete(html);
62+
protected void onPostExecute(ArrayList<String> websites) {
63+
callback.onTaskComplete(websites);
5564
}
5665

5766
private String readStream(InputStream is) throws IOException {

app/src/main/java/de/aurora/mggvertretungsplan/MainActivity.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
import de.aurora.mggvertretungsplan.ui.intro.IntroActivity;
4646
import de.aurora.mggvertretungsplan.ui.theming.ThemeManager;
4747

48-
public class MainActivity extends AppCompatActivity implements AsyncTaskCompleteListener<String>, SwipeRefreshLayout.OnRefreshListener {
48+
public class MainActivity extends AppCompatActivity implements AsyncTaskCompleteListener<ArrayList<String>>, SwipeRefreshLayout.OnRefreshListener {
4949
private SharedPreferences sp;
5050
private Toolbar toolbar;
5151
private String class_name;
@@ -196,7 +196,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
196196
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.AlertDialogTheme);
197197
builder
198198
.setIcon(R.drawable.ic_info_outline_black)
199-
.setTitle("MGG Vertretungsplan v" + getString(R.string.version))
199+
.setTitle("MGG Vertretungsplan v" + BuildConfig.VERSION_NAME)
200200
.setMessage(informationText)
201201
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
202202
public void onClick(DialogInterface dialog, int which) {
@@ -322,16 +322,17 @@ private void saveData(TimeTable timeTable) {
322322
}
323323

324324
// Gets called, when website was downloaded
325-
public void onTaskComplete(String website_html) {
325+
public void onTaskComplete(ArrayList<String> websites) {
326326
Log.d("MainActivity", "Async DownloadTask complete!");
327327
mSwipeLayout.setRefreshing(false);
328328

329-
if (website_html.equals("")) {
329+
if (websites.isEmpty()) {
330+
recyclerView.setAdapter(new EmptyAdapter(getString(R.string.no_data_to_display)));
330331
Toast.makeText(getApplicationContext(), R.string.downloadException, Toast.LENGTH_SHORT).show();
331332
return;
332333
}
333334

334-
TimeTable timeTable = websiteParser.parse(website_html, class_name);
335+
TimeTable timeTable = websiteParser.parse(websites, class_name);
335336
if (timeTable == null)
336337
return;
337338

app/src/main/java/de/aurora/mggvertretungsplan/datamodel/TimeTable.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,6 @@ public class TimeTable {
1313
private final ArrayList<TimeTableDay> timeTableDays = new ArrayList<>();
1414
private final String className;
1515

16-
@Deprecated
17-
public TimeTable() {
18-
className = "5a";
19-
}
20-
2116
public TimeTable(String className) {
2217
this.className = className;
2318
}

app/src/main/java/de/aurora/mggvertretungsplan/datamodel/TimeTableDay.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,6 @@ public String getFullDateString() {
6666
return fullDateFormat.format(date);
6767
}
6868

69-
@Deprecated
70-
public ArrayList<TimeTableElement> getElements() {
71-
return timeTableElements;
72-
}
73-
7469
public ArrayList<TimeTableElement> getElements(String className) {
7570
ArrayList<TimeTableElement> elementsOfClass = new ArrayList<>();
7671

app/src/main/java/de/aurora/mggvertretungsplan/datamodel/TimeTableElement.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public TimeTableElement() {
4444
this.room = room;
4545
this.newRoom = newRoom;
4646
this.type = calcType();
47-
this.info = info;
47+
this.info = info.trim();
4848
}
4949

5050
// Returns the full name of a subject abbreviation
@@ -191,7 +191,7 @@ public int getColor() {
191191

192192
public String getInfoForDisplay() {
193193
String info_e;
194-
if (!info.isEmpty()) {
194+
if (!info.isEmpty() && !" ".equals(info)) {
195195
info_e = info.substring(0, 1).toUpperCase() + info.substring(1);
196196

197197
if (!subject.equals(newSubject) && !newSubject.equals("---") && !newSubject.equals("")) {

app/src/main/java/de/aurora/mggvertretungsplan/parsing/LimaCityParser.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import android.os.AsyncTask;
44

5+
import java.util.ArrayList;
6+
57
import de.aurora.mggvertretungsplan.AsyncTaskCompleteListener;
68
import de.aurora.mggvertretungsplan.DownloadWebPageTask;
79
import de.aurora.mggvertretungsplan.datamodel.TimeTable;
@@ -15,14 +17,14 @@ public class LimaCityParser implements WebsiteParser {
1517

1618
private static final String timeTable_url = "http://rickyy.lima-city.de/html/vertretungsplan.html";
1719

18-
public void startDownload(AsyncTaskCompleteListener<String> callback) {
20+
public void startDownload(AsyncTaskCompleteListener<ArrayList<String>> callback) {
1921
new DownloadWebPageTask(callback).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, timeTable_url);
2022
}
2123

2224
@Override
23-
public TimeTable parse(String website_html, String className) {
24-
WebsiteParser mggParser = new MGGParser();
25-
return mggParser.parse(website_html, className);
25+
public TimeTable parse(ArrayList<String> websites, String className) {
26+
//TODO Fix this any time in the future
27+
return null;
2628
}
2729

2830
@Override

app/src/main/java/de/aurora/mggvertretungsplan/parsing/MGGParser.java

Lines changed: 41 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.jsoup.select.Elements;
1010

1111
import java.util.ArrayList;
12+
import java.util.Collections;
1213
import java.util.Iterator;
1314
import java.util.LinkedHashSet;
1415
import java.util.Set;
@@ -24,7 +25,8 @@
2425

2526
public class MGGParser implements WebsiteParser {
2627

27-
private static final String timeTable_url = "http://www.mgg.karlsruhe.de/index.php/vertretungsplan";
28+
private static final String timeTable_url = "https://www.mgg.karlsruhe.de/stupla/stupla.php";
29+
private static final String timeTable_url_2 = "https://www.mgg.karlsruhe.de/stupla/stuplamorgen.php";
2830

2931
public MGGParser() {
3032

@@ -39,7 +41,7 @@ private static ArrayList<ArrayList<String>> prepareData(ArrayList<ArrayList<Stri
3941

4042
// Extracts the two tables from the html code
4143
private static ArrayList<ArrayList<String>> extractTable(Document doc, int index) {
42-
Element table = doc.select("table").get(index);
44+
Element table = doc.select("table.mon_list").get(index);
4345
Iterator<Element> rowIterator = table.select("tr").iterator();
4446

4547
//TODO check if these selectors are present. Otherwise stop parsing and throw error!
@@ -53,28 +55,14 @@ private static ArrayList<ArrayList<String>> extractTable(Document doc, int index
5355
tableRow.add(colIterator.next().text());
5456
}
5557

56-
if (!tableRow.isEmpty())
58+
if (!tableRow.isEmpty()) {
59+
Collections.swap(tableRow, 2, 4);
60+
Collections.swap(tableRow, 3, 5);
5761
tableArrayList.add(tableRow);
58-
}
59-
60-
return tableArrayList;
61-
}
62-
63-
// Remove all lines which don't contain the right class
64-
private static ArrayList<ArrayList<String>> getRightClass(ArrayList<ArrayList<String>> inputList, String className) {
65-
ArrayList<ArrayList<String>> classList = new ArrayList<>();
66-
67-
for (ArrayList<String> element : inputList) {
68-
try {
69-
if (element.get(1).contains(className)) {
70-
classList.add(element);
71-
}
72-
} catch (IndexOutOfBoundsException e) {
73-
Log.e("Vertretungsplan_parser", e.getMessage());
7462
}
7563
}
7664

77-
return classList;
65+
return tableArrayList;
7866
}
7967

8068
// Remove double lines
@@ -90,42 +78,52 @@ public String getTimeTable_url() {
9078
return timeTable_url;
9179
}
9280

93-
public void startDownload(AsyncTaskCompleteListener<String> callback) {
94-
new DownloadWebPageTask(callback).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, timeTable_url);
81+
public void startDownload(AsyncTaskCompleteListener<ArrayList<String>> callback) {
82+
new DownloadWebPageTask(callback).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, timeTable_url, timeTable_url_2);
9583
}
9684

97-
@Override
98-
public TimeTable parse(String website_html, String className) {
85+
private TimeTableDay parseDay(String website, int index) {
9986
ArrayList<String> datesList = new ArrayList<>();
100-
TimeTable timeTable = new TimeTable(className);
10187

10288
// TODO this takes a shitload of time to finish. Maybe remove - there doesn't seem to be a lot of escaped umlauts?
103-
website_html = website_html.replace("&auml;", "ä").replace("&ouml;", "ö").replace("&uuml;", "ü");
104-
Document doc = Jsoup.parse(website_html);
89+
website = website.replace("&auml;", "ä").replace("&ouml;", "ö").replace("&uuml;", ").replace(" ", "");
90+
Document doc = Jsoup.parse(website);
10591

106-
Elements dates = doc.select("h2.tabber_title");
92+
Elements dates = doc.select("div.mon_title");
10793

10894
for (Element date : dates) {
10995
datesList.add(date.text()); // The parse the dates on the website
11096
}
11197

112-
// For each date extract the timetable
113-
for (int i = 0; i < dates.size(); i++) {
114-
try {
115-
ArrayList<ArrayList<String>> table = extractTable(doc, i);
116-
table = prepareData(table);
117-
118-
if (table != null) {
119-
TimeTableDay day = new TimeTableDay(datesList.get(i), table);
120-
timeTable.addDay(day);
121-
}
122-
} catch (IndexOutOfBoundsException e) {
123-
Log.e("MGGparser", "parse(): There is probably no content to extract!");
124-
Log.e("MGGparser", e.getMessage());
125-
}
98+
TimeTableDay day;
99+
try {
100+
ArrayList<ArrayList<String>> table = extractTable(doc, 0);
101+
table = prepareData(table);
102+
103+
if (table != null) {
104+
day = new TimeTableDay(datesList.get(index), table);
105+
} else
106+
day = new TimeTableDay(datesList.get(index), new ArrayList<ArrayList<String>>());
107+
} catch (IndexOutOfBoundsException e) {
108+
Log.e("MGGparser", "parseDay(): There is probably no content to extract!");
109+
Log.e("MGGparser", e.getMessage());
110+
day = new TimeTableDay(datesList.get(index), new ArrayList<ArrayList<String>>());
126111
}
127112

128-
return timeTable;
113+
return day;
129114
}
130115

116+
@Override
117+
public TimeTable parse(ArrayList<String> websites, String className) {
118+
TimeTable timeTable = new TimeTable(className);
119+
int index = 0;
120+
121+
for (String website : websites) {
122+
TimeTableDay day = parseDay(website, index);
123+
timeTable.addDay(day);
124+
index++;
125+
}
126+
127+
return timeTable;
128+
}
131129
}

0 commit comments

Comments
 (0)